<?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>JavaScript Archives | Clever Cloud</title>
	<atom:link href="https://www.clever.cloud/blog/tag/javascript/feed/" rel="self" type="application/rss+xml" />
	<link>https://www.clever.cloud/blog/tag/javascript/</link>
	<description>From Code to Product</description>
	<lastBuildDate>Fri, 03 Oct 2025 07:12:42 +0000</lastBuildDate>
	<language>en-GB</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	

<image>
	<url>https://cdn.clever-cloud.com/uploads/2023/03/cropped-cropped-favicon-32x32.png</url>
	<title>JavaScript Archives | Clever Cloud</title>
	<link>https://www.clever.cloud/blog/tag/javascript/</link>
	<width>32</width>
	<height>32</height>
</image> 
	<item>
		<title>En transparence, l&#8217;IA helvète rend accessibles sans JS les leaks du milieu</title>
		<link>https://www.clever.cloud/podcast/en-transparence-lia-helvete-rend-accessibles-sans-js-les-leaks-du-milieu/</link>
					<comments>https://www.clever.cloud/podcast/en-transparence-lia-helvete-rend-accessibles-sans-js-les-leaks-du-milieu/#respond</comments>
		
		<dc:creator><![CDATA[Horacio Gonzalez]]></dc:creator>
		<pubDate>Fri, 03 Oct 2025 07:12:41 +0000</pubDate>
				<category><![CDATA[IA]]></category>
		<category><![CDATA[JavaScript]]></category>
		<category><![CDATA[Open Source]]></category>
		<guid isPermaLink="false">https://www.clever-cloud.com/?post_type=podcast&#038;p=20314</guid>

					<description><![CDATA[<p><img width="1920" height="1080" src="https://cdn.clever-cloud.com/uploads/2025/09/143.jpg" class="attachment-post-thumbnail size-post-thumbnail wp-post-image" alt="143" decoding="async" fetchpriority="high" srcset="https://cdn.clever-cloud.com/uploads/2025/09/143.jpg 1920w, https://cdn.clever-cloud.com/uploads/2025/09/143-300x169.jpg 300w, https://cdn.clever-cloud.com/uploads/2025/09/143-1024x576.jpg 1024w, https://cdn.clever-cloud.com/uploads/2025/09/143-768x432.jpg 768w, https://cdn.clever-cloud.com/uploads/2025/09/143-1536x864.jpg 1536w, https://cdn.clever-cloud.com/uploads/2025/09/143-1368x770.jpg 1368w" sizes="(max-width: 1920px) 100vw, 1920px" /></p><!-- wp:buttons -->
<div class="wp-block-buttons"><!-- wp:button -->
<div class="wp-block-button"><a class="wp-block-button__link wp-element-button" href="https://youtu.be/kcYSJF23FyE">Voir sur Youtube</a></div>
<!-- /wp:button --></div>
<!-- /wp:buttons -->

<!-- wp:paragraph -->
<p></p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>Animé par : Horacio GONZALEZ<br>Avec la participation de : <br>- Matthieu VINCENT<br>- Yannick GUERN<br>- Yohann VINEZ</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>Episode enregistré le 15 septembre 2025</p>
<!-- /wp:paragraph -->

<!-- wp:heading -->
<h2 class="wp-block-heading">Chapitrage et Liens</h2>
<!-- /wp:heading -->

<!-- wp:paragraph -->
<p>00:00:16 - Présentation des invités<br><br>00:03:05 - IA opensource suisse <br><a href="https://www.swiss-ai.org/apertus">https://www.swiss-ai.org/apertus</a> <br><br>00:08:30 -Connaissez-vous le vishing ? <br><a href="https://www.darkreading.com/cyberattacks-data-breaches/cisco-user-data-stolen-vishing-attack">https://www.darkreading.com/cyberattacks-data-breaches/cisco-user-data-stolen-vishing-attack</a> <br><a href="https://www.lemondeinformatique.fr/actualites/lire-cisco-et-google-pris-dans-la-nasse-du-vishing-97602.html">https://www.lemondeinformatique.fr/actualites/lire-cisco-et-google-pris-dans-la-nasse-du-vishing-97602.html</a> <br><a href="https://cloud.google.com/blog/topics/threat-intelligence/voice-phishing-data-extortion?rev=7194ef805fa2d04b0f7e8c9521f97343&amp;hl=en">https://cloud.google.com/blog/topics/threat-intelligence/voice-phishing-data-extortion?rev=7194ef805fa2d04b0f7e8c9521f97343&amp;hl=en</a><br><br>00:13:20 - Une autre attaque supply-chain sur NPM… again and again<br><a href="https://www.aikido.dev/blog/npm-debug-and-chalk-packages-compromised">https://www.aikido.dev/blog/npm-debug-and-chalk-packages-compromised</a> <br><a href="https://www.bleepingcomputer.com/news/security/hackers-hijack-npm-packages-with-2-billion-weekly-downloads-in-supply-chain-attack/">https://www.bleepingcomputer.com/news/security/hackers-hijack-npm-packages-with-2-billion-weekly-downloads-in-supply-chain-attack/</a> <br><br>00:20:40 - You no longer need JavaScript  <br><a href="https://lyra.horse/blog/2025/08/you-dont-need-js/">https://lyra.horse/blog/2025/08/you-dont-need-js/</a><br><br>00:24:20 - Liquid Glass in the Browser: Refraction with CSS and SVG <br><a href="https://kube.io/blog/liquid-glass-css-svg/">https://kube.io/blog/liquid-glass-css-svg/</a> <br><a href="https://www.bouletcorp.com/rogatons/2023/01/12">https://www.bouletcorp.com/rogatons/2023/01/12</a> <br><br>00:29:25 - Les lecteurs d’écran ne restituent pas le (vrai) gras et italique (strong, em, b, i) des textes <br><a href="https://www.lalutineduweb.fr/lecteurs-ecran-restitution-gras-italique/">https://www.lalutineduweb.fr/lecteurs-ecran-restitution-gras-italique/</a> <br><br>00:34:55 - Leak du grand firewall chinois<br><a href="https://korben.info/great-firewall-chinois-vient-prendre-500.html">https://korben.info/great-firewall-chinois-vient-prendre-500.html</a><br><a href="https://gfw.report/blog/gfw_unconditional_rst_20250820/en/">Analysis of the GFW's Unconditional Port 443 Block on August 20, 2025</a>   <br><br>00:39:20 -Liens utiles<br><a href="https://free-for.dev/#/">https://free-for.dev/#/</a> : tous les outils gratuits (ou partiellement) pour les devs<br><a href="https://it-tools.tech/">https://it-tools.tech/</a> : des outils gratuits online (validation de token, convertisseurs, …)<br><br>00:41:24 - Mission de contrôle sénatorial sur l’IA, orientée autour de la création <br><a href="https://www.senat.fr/notice-rapport/2024/r24-842-notice.html">https://www.senat.fr/notice-rapport/2024/r24-842-notice.html</a><br><br>00:43:55 - Storybook 10 is ESM-only <br><a href="https://bsky.app/profile/storybook.js.org/post/3lyg2yggxrk2b">https://bsky.app/profile/storybook.js.org/post/3lyg2yggxrk2b</a> <br><br>00:46:45<br> - Mes p’tit side projects du moment (Mat) : <br><a href="https://github.com/yodamad/heimdall">https://github.com/yodamad/heimdall</a> <br><a href="https://gitlab.com/fun_with/fun-with-gitlab/global-monitoring">https://gitlab.com/fun_with/fun-with-gitlab/global-monitoring</a> <br><br>00:50:20 - Jujutsu <a href="https://github.com/jj-vcs/jj"> </a><br><a href="https://github.com/jj-vcs/jj">https://github.com/jj-vcs/jj</a><br><br>00:55:37 - Musique de fin – OST Hollow Knight: Silksong<br><a href="https://www.youtube.com/watch?v=Q6is6K8jbho">https://www.youtube.com/watch?v=Q6is6K8jbho</a></p>
<!-- /wp:paragraph -->]]></description>
										<content:encoded><![CDATA[<p><img width="1920" height="1080" src="https://cdn.clever-cloud.com/uploads/2025/09/143.jpg" class="attachment-post-thumbnail size-post-thumbnail wp-post-image" alt="143" decoding="async" srcset="https://cdn.clever-cloud.com/uploads/2025/09/143.jpg 1920w, https://cdn.clever-cloud.com/uploads/2025/09/143-300x169.jpg 300w, https://cdn.clever-cloud.com/uploads/2025/09/143-1024x576.jpg 1024w, https://cdn.clever-cloud.com/uploads/2025/09/143-768x432.jpg 768w, https://cdn.clever-cloud.com/uploads/2025/09/143-1536x864.jpg 1536w, https://cdn.clever-cloud.com/uploads/2025/09/143-1368x770.jpg 1368w" sizes="(max-width: 1920px) 100vw, 1920px" /></p><!-- wp:buttons -->
<div class="wp-block-buttons"><!-- wp:button -->
<div class="wp-block-button"><a class="wp-block-button__link wp-element-button" href="https://youtu.be/kcYSJF23FyE">Voir sur Youtube</a></div>
<!-- /wp:button --></div>
<!-- /wp:buttons -->

<!-- wp:paragraph -->
<p></p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>Animé par : Horacio GONZALEZ<br>Avec la participation de : <br>- Matthieu VINCENT<br>- Yannick GUERN<br>- Yohann VINEZ</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>Episode enregistré le 15 septembre 2025</p>
<!-- /wp:paragraph -->

<!-- wp:heading -->
<h2 class="wp-block-heading">Chapitrage et Liens</h2>
<!-- /wp:heading -->

<!-- wp:paragraph -->
<p>00:00:16 - Présentation des invités<br><br>00:03:05 - IA opensource suisse <br><a href="https://www.swiss-ai.org/apertus">https://www.swiss-ai.org/apertus</a> <br><br>00:08:30 -Connaissez-vous le vishing ? <br><a href="https://www.darkreading.com/cyberattacks-data-breaches/cisco-user-data-stolen-vishing-attack">https://www.darkreading.com/cyberattacks-data-breaches/cisco-user-data-stolen-vishing-attack</a> <br><a href="https://www.lemondeinformatique.fr/actualites/lire-cisco-et-google-pris-dans-la-nasse-du-vishing-97602.html">https://www.lemondeinformatique.fr/actualites/lire-cisco-et-google-pris-dans-la-nasse-du-vishing-97602.html</a> <br><a href="https://cloud.google.com/blog/topics/threat-intelligence/voice-phishing-data-extortion?rev=7194ef805fa2d04b0f7e8c9521f97343&amp;hl=en">https://cloud.google.com/blog/topics/threat-intelligence/voice-phishing-data-extortion?rev=7194ef805fa2d04b0f7e8c9521f97343&amp;hl=en</a><br><br>00:13:20 - Une autre attaque supply-chain sur NPM… again and again<br><a href="https://www.aikido.dev/blog/npm-debug-and-chalk-packages-compromised">https://www.aikido.dev/blog/npm-debug-and-chalk-packages-compromised</a> <br><a href="https://www.bleepingcomputer.com/news/security/hackers-hijack-npm-packages-with-2-billion-weekly-downloads-in-supply-chain-attack/">https://www.bleepingcomputer.com/news/security/hackers-hijack-npm-packages-with-2-billion-weekly-downloads-in-supply-chain-attack/</a> <br><br>00:20:40 - You no longer need JavaScript  <br><a href="https://lyra.horse/blog/2025/08/you-dont-need-js/">https://lyra.horse/blog/2025/08/you-dont-need-js/</a><br><br>00:24:20 - Liquid Glass in the Browser: Refraction with CSS and SVG <br><a href="https://kube.io/blog/liquid-glass-css-svg/">https://kube.io/blog/liquid-glass-css-svg/</a> <br><a href="https://www.bouletcorp.com/rogatons/2023/01/12">https://www.bouletcorp.com/rogatons/2023/01/12</a> <br><br>00:29:25 - Les lecteurs d’écran ne restituent pas le (vrai) gras et italique (strong, em, b, i) des textes <br><a href="https://www.lalutineduweb.fr/lecteurs-ecran-restitution-gras-italique/">https://www.lalutineduweb.fr/lecteurs-ecran-restitution-gras-italique/</a> <br><br>00:34:55 - Leak du grand firewall chinois<br><a href="https://korben.info/great-firewall-chinois-vient-prendre-500.html">https://korben.info/great-firewall-chinois-vient-prendre-500.html</a><br><a href="https://gfw.report/blog/gfw_unconditional_rst_20250820/en/">Analysis of the GFW's Unconditional Port 443 Block on August 20, 2025</a>   <br><br>00:39:20 -Liens utiles<br><a href="https://free-for.dev/#/">https://free-for.dev/#/</a> : tous les outils gratuits (ou partiellement) pour les devs<br><a href="https://it-tools.tech/">https://it-tools.tech/</a> : des outils gratuits online (validation de token, convertisseurs, …)<br><br>00:41:24 - Mission de contrôle sénatorial sur l’IA, orientée autour de la création <br><a href="https://www.senat.fr/notice-rapport/2024/r24-842-notice.html">https://www.senat.fr/notice-rapport/2024/r24-842-notice.html</a><br><br>00:43:55 - Storybook 10 is ESM-only <br><a href="https://bsky.app/profile/storybook.js.org/post/3lyg2yggxrk2b">https://bsky.app/profile/storybook.js.org/post/3lyg2yggxrk2b</a> <br><br>00:46:45<br> - Mes p’tit side projects du moment (Mat) : <br><a href="https://github.com/yodamad/heimdall">https://github.com/yodamad/heimdall</a> <br><a href="https://gitlab.com/fun_with/fun-with-gitlab/global-monitoring">https://gitlab.com/fun_with/fun-with-gitlab/global-monitoring</a> <br><br>00:50:20 - Jujutsu <a href="https://github.com/jj-vcs/jj"> </a><br><a href="https://github.com/jj-vcs/jj">https://github.com/jj-vcs/jj</a><br><br>00:55:37 - Musique de fin – OST Hollow Knight: Silksong<br><a href="https://www.youtube.com/watch?v=Q6is6K8jbho">https://www.youtube.com/watch?v=Q6is6K8jbho</a></p>
<!-- /wp:paragraph -->]]></content:encoded>
					
					<wfw:commentRss>https://www.clever.cloud/podcast/en-transparence-lia-helvete-rend-accessibles-sans-js-les-leaks-du-milieu/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>How to deploy a Deno application</title>
		<link>https://www.clever.cloud/blog/engineering/2020/05/19/deploy-deno/</link>
		
		<dc:creator><![CDATA[Laurent Doguin]]></dc:creator>
		<pubDate>Tue, 19 May 2020 14:00:00 +0000</pubDate>
				<category><![CDATA[Engineering]]></category>
		<category><![CDATA[deno]]></category>
		<category><![CDATA[JavaScript]]></category>
		<category><![CDATA[typescript]]></category>
		<guid isPermaLink="false">https://www2.cleverapps.io/wp/blog/technology/2020/05/19/deploy-deno/</guid>

					<description><![CDATA[<p><img width="1400" height="540" src="https://cdn.clever-cloud.com/uploads/2021/08/denobanner1-1.png" class="attachment-post-thumbnail size-post-thumbnail wp-post-image" alt="denobanner1 1" decoding="async" srcset="https://cdn.clever-cloud.com/uploads/2021/08/denobanner1-1.png 1400w, https://cdn.clever-cloud.com/uploads/2021/08/denobanner1-1-300x116.png 300w, https://cdn.clever-cloud.com/uploads/2021/08/denobanner1-1-1024x395.png 1024w, https://cdn.clever-cloud.com/uploads/2021/08/denobanner1-1-768x296.png 768w, https://cdn.clever-cloud.com/uploads/2021/08/denobanner1-1-1368x528.png 1368w" sizes="(max-width: 1400px) 100vw, 1400px" /></p><div style="background: #ffffff; padding: 1.5rem; border: 1px solid #deddee; border-radius: 4px; margin: auto auto 2rem auto; max-width: var(--wp--style--global--content-size, 710px);">
<div style="display: flex; align-items: center; gap: 1rem; margin-bottom: 1rem;"><span style="font-size: 2rem;">⚡</span>
<h4 style="margin: 0; color: #333; font-weight: bold;">Update Available</h4>
</div>
<strong>The process has been simplified!</strong> You can now download and use any Deno version with Mise package manager from any Clever Cloud runtime.
<div class="push-documentation__content"><a class="push-documentation__link button --white-border" href="https://www.clever.cloud/developers/doc/applications/nodejs/#supported-package-managers">🚀 How to deploy JavaScript on CleverCloud</a></div>
</div>
Rejoice! The long-awaited <a href="https://deno.land/v1">Deno 1.0</a> release is among us. What is Deno you ask?
<blockquote>Deno is a simple, modern and secure runtime for JavaScript and TypeScript that uses V8 and is built in Rust.</blockquote>
More Rust code is often something that makes us happy at Clever Cloud. So purely based on this, and because we like new, shiny toys, here's how to deploy a Deno application on Clever Cloud.

Clever Cloud being a PaaS, there are a bunch of things that can happen automatically, some that can be configured through environment variables. But Deno is not fully integrated to all our tooling yet, so instead we are going to use a NodeJS application with a twist.

I am going to assume you already have our CLI <a href="https://github.com/CleverCloud/clever-tools/">Clever-tools</a> installed, npm and git as well.

First thing first, create a git repo and a node package:
<pre><code class="language-bash">git init
npm init
</code></pre>
Then we install Deno. And if there is something I do not like, it's executing arbitrary shell script from the internet. So I am not going to use their installer. Deno is available as a downloadable binary from their Github Repo. It will do just fine in our case. Create a new folder for your application. From now on every file should be created in that folder.

Here's a shell script that will manage the download and extraction of a specific Deno version:
<pre><code class="language-bash">wget https://github.com/denoland/deno/releases/download/$DENO_VERSION/deno-x86_64-unknown-linux-gnu.zip
unzip deno-x86_64-unknown-linux-gnu.zip
</code></pre>
Notice the use of <code>$DENO_VERSION</code> that will define which one will be downloaded. Let's call this file <code>installdeno.sh</code> and make it executable:
<pre><code class="language-bash">chmod +x installdeno.sh
</code></pre>
And now we can create the Clever Cloud application:
<pre><code class="language-bash">clever create --type node myDenoApplication
</code></pre>
As I wrote earlier, we can specify custom behavior with environment variable. So let's add one that will automate the installation of Deno with our script and one to specify the version we want:
<pre><code class="language-bash">clever env set CC_PRE_BUILD_HOOK ./installdeno.sh
clever env set DENO_VERSION v1.0.0 
</code></pre>
You can execute arbitrary scripts during the deployment of the application; here we want to execute <code>installdeno.sh</code> before the build phase. You'll find the list of hooks in our <a href="https://www.clever.cloud/developers/clever-cloud-overview/hooks/">dedicated documentation</a>.

For the application itself, I took a look at the available Deno module and because I am super lazy I chose the first web framework of the list, <a href="https://github.com/zhmushan/abc">abc</a>. There is an Hello World example in the Readme, that's perfect for this test. So go ahead and create <code>abc.js</code> with the following content:
<pre><code class="language-javascript">import { Application } from "https://deno.land/x/abc/mod.ts";

const app = new Application();

app
  .get("/", (c) =&gt; {
    return "Hello, Abc!";
  })
  .start({ port: 8080 });
</code></pre>
The remaining question is, how do we launch this application? Remember that on Clever Cloud, the run process looks at your <code>package.json</code> the <code>main</code> file or <code>start</code> script to know what to execute. Let's use this to our advantage and simply add a start script that uses the Deno binary downloaded by the script.
<pre><code class="language-json">{
  "name": "abc-test",
  "version": "1.0.0",
  "description": "",
  "scripts": {
    "start":"./deno run --allow-net abc.js",
    "test": "echo \"Error: no test specified\" &amp;&amp; exit 1"
  },
  "author": "",
  "license": "ISC"
}
</code></pre>
The only thing left to do is to commit your code and deploy it:
<pre><code class="language-bash">git add abc.js installdeno.sh package.json
clever deploy
</code></pre>
From there you should see logs of your deployment showing up. The final message should be <code>Deployment successful</code>. Now type <code>clever open</code> and it will automatically open the website in your default browser.

Granted, this is a little raw and it could feel like cheating but it works and your app benefits from all the Clever Cloud good stuffs, just like any another application:
<ul>
 	<li>environment variables injection</li>
 	<li>monitoring &amp; alerting (auto restart)</li>
 	<li>zero downtime deployments</li>
 	<li>metrics (data &amp; charts)</li>
 	<li>live logs</li>
 	<li>automatic scalability</li>
</ul>
If we see a growing interest in Deno in our community we will make sure it's available with a proper, dedicated and simpler support. Let us know what you think about it and if you intend to use it!]]></description>
										<content:encoded><![CDATA[<p><img width="1400" height="540" src="https://cdn.clever-cloud.com/uploads/2021/08/denobanner1-1.png" class="attachment-post-thumbnail size-post-thumbnail wp-post-image" alt="denobanner1 1" decoding="async" loading="lazy" srcset="https://cdn.clever-cloud.com/uploads/2021/08/denobanner1-1.png 1400w, https://cdn.clever-cloud.com/uploads/2021/08/denobanner1-1-300x116.png 300w, https://cdn.clever-cloud.com/uploads/2021/08/denobanner1-1-1024x395.png 1024w, https://cdn.clever-cloud.com/uploads/2021/08/denobanner1-1-768x296.png 768w, https://cdn.clever-cloud.com/uploads/2021/08/denobanner1-1-1368x528.png 1368w" sizes="auto, (max-width: 1400px) 100vw, 1400px" /></p><div style="background: #ffffff; padding: 1.5rem; border: 1px solid #deddee; border-radius: 4px; margin: auto auto 2rem auto; max-width: var(--wp--style--global--content-size, 710px);">
<div style="display: flex; align-items: center; gap: 1rem; margin-bottom: 1rem;"><span style="font-size: 2rem;">⚡</span>
<h4 style="margin: 0; color: #333; font-weight: bold;">Update Available</h4>
</div>
<strong>The process has been simplified!</strong> You can now download and use any Deno version with Mise package manager from any Clever Cloud runtime.
<div class="push-documentation__content"><a class="push-documentation__link button --white-border" href="https://www.clever.cloud/developers/doc/applications/nodejs/#supported-package-managers">🚀 How to deploy JavaScript on CleverCloud</a></div>
</div>
Rejoice! The long-awaited <a href="https://deno.land/v1">Deno 1.0</a> release is among us. What is Deno you ask?
<blockquote>Deno is a simple, modern and secure runtime for JavaScript and TypeScript that uses V8 and is built in Rust.</blockquote>
More Rust code is often something that makes us happy at Clever Cloud. So purely based on this, and because we like new, shiny toys, here's how to deploy a Deno application on Clever Cloud.

Clever Cloud being a PaaS, there are a bunch of things that can happen automatically, some that can be configured through environment variables. But Deno is not fully integrated to all our tooling yet, so instead we are going to use a NodeJS application with a twist.

I am going to assume you already have our CLI <a href="https://github.com/CleverCloud/clever-tools/">Clever-tools</a> installed, npm and git as well.

First thing first, create a git repo and a node package:
<pre><code class="language-bash">git init
npm init
</code></pre>
Then we install Deno. And if there is something I do not like, it's executing arbitrary shell script from the internet. So I am not going to use their installer. Deno is available as a downloadable binary from their Github Repo. It will do just fine in our case. Create a new folder for your application. From now on every file should be created in that folder.

Here's a shell script that will manage the download and extraction of a specific Deno version:
<pre><code class="language-bash">wget https://github.com/denoland/deno/releases/download/$DENO_VERSION/deno-x86_64-unknown-linux-gnu.zip
unzip deno-x86_64-unknown-linux-gnu.zip
</code></pre>
Notice the use of <code>$DENO_VERSION</code> that will define which one will be downloaded. Let's call this file <code>installdeno.sh</code> and make it executable:
<pre><code class="language-bash">chmod +x installdeno.sh
</code></pre>
And now we can create the Clever Cloud application:
<pre><code class="language-bash">clever create --type node myDenoApplication
</code></pre>
As I wrote earlier, we can specify custom behavior with environment variable. So let's add one that will automate the installation of Deno with our script and one to specify the version we want:
<pre><code class="language-bash">clever env set CC_PRE_BUILD_HOOK ./installdeno.sh
clever env set DENO_VERSION v1.0.0 
</code></pre>
You can execute arbitrary scripts during the deployment of the application; here we want to execute <code>installdeno.sh</code> before the build phase. You'll find the list of hooks in our <a href="https://www.clever.cloud/developers/clever-cloud-overview/hooks/">dedicated documentation</a>.

For the application itself, I took a look at the available Deno module and because I am super lazy I chose the first web framework of the list, <a href="https://github.com/zhmushan/abc">abc</a>. There is an Hello World example in the Readme, that's perfect for this test. So go ahead and create <code>abc.js</code> with the following content:
<pre><code class="language-javascript">import { Application } from "https://deno.land/x/abc/mod.ts";

const app = new Application();

app
  .get("/", (c) =&gt; {
    return "Hello, Abc!";
  })
  .start({ port: 8080 });
</code></pre>
The remaining question is, how do we launch this application? Remember that on Clever Cloud, the run process looks at your <code>package.json</code> the <code>main</code> file or <code>start</code> script to know what to execute. Let's use this to our advantage and simply add a start script that uses the Deno binary downloaded by the script.
<pre><code class="language-json">{
  "name": "abc-test",
  "version": "1.0.0",
  "description": "",
  "scripts": {
    "start":"./deno run --allow-net abc.js",
    "test": "echo \"Error: no test specified\" &amp;&amp; exit 1"
  },
  "author": "",
  "license": "ISC"
}
</code></pre>
The only thing left to do is to commit your code and deploy it:
<pre><code class="language-bash">git add abc.js installdeno.sh package.json
clever deploy
</code></pre>
From there you should see logs of your deployment showing up. The final message should be <code>Deployment successful</code>. Now type <code>clever open</code> and it will automatically open the website in your default browser.

Granted, this is a little raw and it could feel like cheating but it works and your app benefits from all the Clever Cloud good stuffs, just like any another application:
<ul>
 	<li>environment variables injection</li>
 	<li>monitoring &amp; alerting (auto restart)</li>
 	<li>zero downtime deployments</li>
 	<li>metrics (data &amp; charts)</li>
 	<li>live logs</li>
 	<li>automatic scalability</li>
</ul>
If we see a growing interest in Deno in our community we will make sure it's available with a proper, dedicated and simpler support. Let us know what you think about it and if you intend to use it!]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>Speeding the Console Up With the Service Worker API</title>
		<link>https://www.clever.cloud/blog/engineering/2015/12/15/speeding-up-the-console-with-service-worker/</link>
		
		<dc:creator><![CDATA[Arnaud Lefebvre]]></dc:creator>
		<pubDate>Tue, 15 Dec 2015 15:52:00 +0000</pubDate>
				<category><![CDATA[Engineering]]></category>
		<category><![CDATA[ES6]]></category>
		<category><![CDATA[JavaScript]]></category>
		<category><![CDATA[service workers]]></category>
		<guid isPermaLink="false">https://www2.cleverapps.io/wp/blog/technology/2015/12/15/speeding-up-the-console-with-service-worker/</guid>

					<description><![CDATA[<p><img width="1400" height="540" src="https://cdn.clever-cloud.com/uploads/2021/08/service-workers-1.jpg" class="attachment-post-thumbnail size-post-thumbnail wp-post-image" alt="service workers 1" decoding="async" loading="lazy" srcset="https://cdn.clever-cloud.com/uploads/2021/08/service-workers-1.jpg 1400w, https://cdn.clever-cloud.com/uploads/2021/08/service-workers-1-300x116.jpg 300w, https://cdn.clever-cloud.com/uploads/2021/08/service-workers-1-1024x395.jpg 1024w, https://cdn.clever-cloud.com/uploads/2021/08/service-workers-1-768x296.jpg 768w, https://cdn.clever-cloud.com/uploads/2021/08/service-workers-1-1368x528.jpg 1368w" sizes="auto, (max-width: 1400px) 100vw, 1400px" /></p><p>You may have noticed major updates on the Clever Cloud Console these last weeks. Along with the quick search feature, keyboard shortcuts and a new UI, we introduced the use of service workers to reduce the load time of the Console.</p>
<span id="more-2804"></span>

<h2 id="service-workers-you-said-surely-you-mean-web-workers-right">Service workers you said? Surely you mean Web Workers, right?</h2>
<p>No! Service workers are scripts which are run by your browser, in the background. They are completely separated from the web pages of your site and have multiple uses. You can use them for HTTPS proxying, push notifications, or even background syncing.</p>
<p>Today, we will cover HTTPS proxying.</p>
<h2 id="the-console-should-load-faster">The Console should load faster</h2>
<p>When you load the <a href="https://console.clever-cloud.com">Clever Cloud Console</a>, we need to fetch data (the user, its organisations / apps / addons…) to bootstrap the whole application. If you have a lot of applications / belong to a lot of organisations, this may take a while, up to several seconds (&quot;a lot&quot; can mean ~200 apps for some of our<a href="https://twitter.com/FGRibreau">users</a>). This data isn&#39;t updated a lot. Most of our customers are using the Console to look at the logs or configure their applications. So it needs to be fast for them to access / set the information they want.</p>
<p>Here come the service workers. They can cache the response of any HTTPS request that is emitted from your application (which can be used to build offline apps). What we did is that any huge XHR request done when the Console is loading is now served from the cache if it exists.</p>
<h2 id="how-does-it-work">How does it work?</h2>
<ul>
<li>These new APIs (Service Workers, Cache API, Fetch API) are heavily using <a href="https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Global_Objects/Promise">ES6 Promises</a>, you should be familiar with them</li>
<li>Incidentally, you can use ES6 because browsers that support service-workers are also implementing mainstream ES6 features</li>
<li>You need to use a recent browser: Chrome 42+, Firefox 44+</li>
<li>Service Workers are HTTPS only, they won&#39;t work on HTTP requests. Chrome will allow <a href="http://localhost">http://localhost</a> as a secure origin though.</li>
</ul>
<h2 id="how-to-debug">How to debug</h2>
<ul>
<li>You can check &quot;Enable Service Workers over HTTP (when toolbox is open)&quot; on Firefox Devtools to use service workers on any HTTP request.</li>
<li>Chrome will only allow localhost or HTTPS urls. Good thing that HTTPS is available on *.cleverapps.io.</li>
<li>Firefox and Chrome have an endpoint to list service workers: Firefox: <code>about:serviceworkers</code>, Chrome: <code>chrome://inspect/#service-workers</code></li>
<li>You can use regular <code>console.log()</code> to log from the service worker.</li>
<li>You won&#39;t be able to see intercepted requests in the Network panel of Firefox (as of Firefox 45.0a1).</li>
</ul>
<h2 id="the-code">The code</h2>
<p>First, we need to setup our service worker and ask the browser to register it (in your existing javascript application):</p>
<pre><code class="language-javascript">  navigator
    .serviceWorker
    .register(&#39;/service-worker.js&#39;)
    .then(navigator.serviceWorker.ready)
    .then(registration =&gt; {
      console.log(&#39;Server worker has been registered&#39;);
    });
</code></pre>
<p>You don&#39;t have to worry about multiple registrations: if a service worker has already been registered, the browser will simply ignore it.</p>
<p>Once this is done, we have to create a service-worker.js file. Service Workers are event based. Two events will be useful in our case: <code>install</code> and <code>fetch</code>. <code>install</code> will allow us to initialize our service worker (like pre-caching assets we haven&#39;t already loaded). <code>fetch</code> will be triggered each time a request is intercepted for the current scope.</p>
<p>We will use the <a href="https://developer.mozilla.org/en-US/docs/Web/API/Cache">Cache API</a> to cache requests / responses.</p>
<pre><code class="language-javascript">&#39;use strict&#39;;

const CACHE_URLS = [
  &quot;/img/img1.png&quot;,
  &quot;/img/img2.png&quot;,
  &quot;/users/me&quot;
];

const CACHE_NAME = &quot;cc-cache-test&quot;;

self.addEventListener(&#39;install&#39;, event =&gt; {
  event.waitUntil(
    caches
      .open(CACHE_NAME)
      .then(cache =&gt;{
        cache.addAll(CACHE_URLS);
      })
      .catch(e =&gt; console.error(&quot;Couldn&#39;t install the service worker, reason:&quot;, e));
  );
});

self.addEventListener(&quot;fetch&quot;, event =&gt; {});
</code></pre>
<p>Here, during the installation step, the service worker will download and cache the CACHE_URLS urls even before the user requests them. Now, we need to tell our SW to use the cache whenever we have a cached version of the request or to fetch it if we don&#39;t. We can use the great HTML5 <a href="https://developer.mozilla.org/en/docs/Web/API/Fetch_API">Fetch API</a>:</p>
<pre><code class="language-javascript">self.addEventListener(&quot;fetch&quot;, event =&gt; {
  event.respondWith(
    caches.open(CACHE_NAME)
      .then(cache =&gt; cache.match(event.request))
      .then(response =&gt; {
        if(response){
          return Promise.resolve(response);
        } else{
          return fetch(event.request).then(res =&gt; {
            if(res &amp;&amp; res.status === 200){
              caches.open(CACHE_NAME)
                .then(cache =&gt; {
                  cache.put(event.request, res);
                });
            }
            return res.clone();
          });
        }
      })
  );
});
</code></pre>
<p>What we are doing is to open the cache and then try to match the current request. If we have a match, we return the response associated to the request. If we don&#39;t, we fetch the request, check its response code and save it into the cache if it succeeded. Next time, it will load faster!</p>
<p>Note that we have to use <code>res.clone();</code>. This is because the response is a stream which can be read only once. Here, we want to store its data into the cache AND return the same data to the browser. This won&#39;t work unless we <code>.clone()</code> it first.</p>
<p>Now, our service worker is ready to be used.</p>
<h2 id="sounds-perfect-but">Sounds perfect but…</h2>
<p>A major drawback is that you need a quite recent browser and these API may differ between browsers. At the time of writing, this won&#39;t work on Safari (any version), Firefox stable (aurora/dev has some support), Opera, Internet Explorer (Edge does support some features). You will have to handle these incompatibilities yourself.</p>
<p>But, even if service workers are not yet supported by all browsers, your application will still be able to run in a normal way. Only proxying and cache features will be affected, requests will be done as they were before. This is completely backwards compatible.</p>
<h2 id="how-do-we-use-it-at-clever-cloud">How do we use it at Clever Cloud</h2>
<p>We can&#39;t store all of the data or cache invalidation will be a mess to handle. Instead, we only store a few defined requests. When we load the Console, we use the cache, then wipe and update it in the background. The user can use the Console with quite fresh data and the UI will be updated as soon as we have the new one.</p>
<p>This feature allowed us to speed up the initial load of the Console, going well under 1 second if the cache exists. In a near future, we could also use service workers with the Notifications API to display application deployments&#39;s state even when the Console is not open in your browser.</p>
<h2 id="more-reading">More reading</h2>
<p>To learn about service workers, I used a few links:</p>
<ul>
<li><a href="https://developer.mozilla.org/en-US/docs/Web/API/Service_Worker_API">Service Workers</a></li>
<li><a href="https://developer.mozilla.org/en-US/docs/Web/API/Cache">Cache API</a></li>
<li><a href="https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Global_Objects/Promise">ES6 Promises</a></li>
<li><a href="http://www.html5rocks.com/en/tutorials/service-worker/introduction/">HTML5 rocks</a> (may be a little out of date but still accurate and well explained)</li>
<li></li>
</ul>
]]></description>
										<content:encoded><![CDATA[<p><img width="1400" height="540" src="https://cdn.clever-cloud.com/uploads/2021/08/service-workers-1.jpg" class="attachment-post-thumbnail size-post-thumbnail wp-post-image" alt="service workers 1" decoding="async" loading="lazy" srcset="https://cdn.clever-cloud.com/uploads/2021/08/service-workers-1.jpg 1400w, https://cdn.clever-cloud.com/uploads/2021/08/service-workers-1-300x116.jpg 300w, https://cdn.clever-cloud.com/uploads/2021/08/service-workers-1-1024x395.jpg 1024w, https://cdn.clever-cloud.com/uploads/2021/08/service-workers-1-768x296.jpg 768w, https://cdn.clever-cloud.com/uploads/2021/08/service-workers-1-1368x528.jpg 1368w" sizes="auto, (max-width: 1400px) 100vw, 1400px" /></p><p>You may have noticed major updates on the Clever Cloud Console these last weeks. Along with the quick search feature, keyboard shortcuts and a new UI, we introduced the use of service workers to reduce the load time of the Console.</p>
<span id="more-2804"></span>

<h2 id="service-workers-you-said-surely-you-mean-web-workers-right">Service workers you said? Surely you mean Web Workers, right?</h2>
<p>No! Service workers are scripts which are run by your browser, in the background. They are completely separated from the web pages of your site and have multiple uses. You can use them for HTTPS proxying, push notifications, or even background syncing.</p>
<p>Today, we will cover HTTPS proxying.</p>
<h2 id="the-console-should-load-faster">The Console should load faster</h2>
<p>When you load the <a href="https://console.clever-cloud.com">Clever Cloud Console</a>, we need to fetch data (the user, its organisations / apps / addons…) to bootstrap the whole application. If you have a lot of applications / belong to a lot of organisations, this may take a while, up to several seconds (&quot;a lot&quot; can mean ~200 apps for some of our<a href="https://twitter.com/FGRibreau">users</a>). This data isn&#39;t updated a lot. Most of our customers are using the Console to look at the logs or configure their applications. So it needs to be fast for them to access / set the information they want.</p>
<p>Here come the service workers. They can cache the response of any HTTPS request that is emitted from your application (which can be used to build offline apps). What we did is that any huge XHR request done when the Console is loading is now served from the cache if it exists.</p>
<h2 id="how-does-it-work">How does it work?</h2>
<ul>
<li>These new APIs (Service Workers, Cache API, Fetch API) are heavily using <a href="https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Global_Objects/Promise">ES6 Promises</a>, you should be familiar with them</li>
<li>Incidentally, you can use ES6 because browsers that support service-workers are also implementing mainstream ES6 features</li>
<li>You need to use a recent browser: Chrome 42+, Firefox 44+</li>
<li>Service Workers are HTTPS only, they won&#39;t work on HTTP requests. Chrome will allow <a href="http://localhost">http://localhost</a> as a secure origin though.</li>
</ul>
<h2 id="how-to-debug">How to debug</h2>
<ul>
<li>You can check &quot;Enable Service Workers over HTTP (when toolbox is open)&quot; on Firefox Devtools to use service workers on any HTTP request.</li>
<li>Chrome will only allow localhost or HTTPS urls. Good thing that HTTPS is available on *.cleverapps.io.</li>
<li>Firefox and Chrome have an endpoint to list service workers: Firefox: <code>about:serviceworkers</code>, Chrome: <code>chrome://inspect/#service-workers</code></li>
<li>You can use regular <code>console.log()</code> to log from the service worker.</li>
<li>You won&#39;t be able to see intercepted requests in the Network panel of Firefox (as of Firefox 45.0a1).</li>
</ul>
<h2 id="the-code">The code</h2>
<p>First, we need to setup our service worker and ask the browser to register it (in your existing javascript application):</p>
<pre><code class="language-javascript">  navigator
    .serviceWorker
    .register(&#39;/service-worker.js&#39;)
    .then(navigator.serviceWorker.ready)
    .then(registration =&gt; {
      console.log(&#39;Server worker has been registered&#39;);
    });
</code></pre>
<p>You don&#39;t have to worry about multiple registrations: if a service worker has already been registered, the browser will simply ignore it.</p>
<p>Once this is done, we have to create a service-worker.js file. Service Workers are event based. Two events will be useful in our case: <code>install</code> and <code>fetch</code>. <code>install</code> will allow us to initialize our service worker (like pre-caching assets we haven&#39;t already loaded). <code>fetch</code> will be triggered each time a request is intercepted for the current scope.</p>
<p>We will use the <a href="https://developer.mozilla.org/en-US/docs/Web/API/Cache">Cache API</a> to cache requests / responses.</p>
<pre><code class="language-javascript">&#39;use strict&#39;;

const CACHE_URLS = [
  &quot;/img/img1.png&quot;,
  &quot;/img/img2.png&quot;,
  &quot;/users/me&quot;
];

const CACHE_NAME = &quot;cc-cache-test&quot;;

self.addEventListener(&#39;install&#39;, event =&gt; {
  event.waitUntil(
    caches
      .open(CACHE_NAME)
      .then(cache =&gt;{
        cache.addAll(CACHE_URLS);
      })
      .catch(e =&gt; console.error(&quot;Couldn&#39;t install the service worker, reason:&quot;, e));
  );
});

self.addEventListener(&quot;fetch&quot;, event =&gt; {});
</code></pre>
<p>Here, during the installation step, the service worker will download and cache the CACHE_URLS urls even before the user requests them. Now, we need to tell our SW to use the cache whenever we have a cached version of the request or to fetch it if we don&#39;t. We can use the great HTML5 <a href="https://developer.mozilla.org/en/docs/Web/API/Fetch_API">Fetch API</a>:</p>
<pre><code class="language-javascript">self.addEventListener(&quot;fetch&quot;, event =&gt; {
  event.respondWith(
    caches.open(CACHE_NAME)
      .then(cache =&gt; cache.match(event.request))
      .then(response =&gt; {
        if(response){
          return Promise.resolve(response);
        } else{
          return fetch(event.request).then(res =&gt; {
            if(res &amp;&amp; res.status === 200){
              caches.open(CACHE_NAME)
                .then(cache =&gt; {
                  cache.put(event.request, res);
                });
            }
            return res.clone();
          });
        }
      })
  );
});
</code></pre>
<p>What we are doing is to open the cache and then try to match the current request. If we have a match, we return the response associated to the request. If we don&#39;t, we fetch the request, check its response code and save it into the cache if it succeeded. Next time, it will load faster!</p>
<p>Note that we have to use <code>res.clone();</code>. This is because the response is a stream which can be read only once. Here, we want to store its data into the cache AND return the same data to the browser. This won&#39;t work unless we <code>.clone()</code> it first.</p>
<p>Now, our service worker is ready to be used.</p>
<h2 id="sounds-perfect-but">Sounds perfect but…</h2>
<p>A major drawback is that you need a quite recent browser and these API may differ between browsers. At the time of writing, this won&#39;t work on Safari (any version), Firefox stable (aurora/dev has some support), Opera, Internet Explorer (Edge does support some features). You will have to handle these incompatibilities yourself.</p>
<p>But, even if service workers are not yet supported by all browsers, your application will still be able to run in a normal way. Only proxying and cache features will be affected, requests will be done as they were before. This is completely backwards compatible.</p>
<h2 id="how-do-we-use-it-at-clever-cloud">How do we use it at Clever Cloud</h2>
<p>We can&#39;t store all of the data or cache invalidation will be a mess to handle. Instead, we only store a few defined requests. When we load the Console, we use the cache, then wipe and update it in the background. The user can use the Console with quite fresh data and the UI will be updated as soon as we have the new one.</p>
<p>This feature allowed us to speed up the initial load of the Console, going well under 1 second if the cache exists. In a near future, we could also use service workers with the Notifications API to display application deployments&#39;s state even when the Console is not open in your browser.</p>
<h2 id="more-reading">More reading</h2>
<p>To learn about service workers, I used a few links:</p>
<ul>
<li><a href="https://developer.mozilla.org/en-US/docs/Web/API/Service_Worker_API">Service Workers</a></li>
<li><a href="https://developer.mozilla.org/en-US/docs/Web/API/Cache">Cache API</a></li>
<li><a href="https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Global_Objects/Promise">ES6 Promises</a></li>
<li><a href="http://www.html5rocks.com/en/tutorials/service-worker/introduction/">HTML5 rocks</a> (may be a little out of date but still accurate and well explained)</li>
<li></li>
</ul>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>Meteor JS on Clever Cloud</title>
		<link>https://www.clever.cloud/blog/engineering/2015/04/22/meteor-js-on-clever-cloud/</link>
		
		<dc:creator><![CDATA[Arnaud Lefebvre]]></dc:creator>
		<pubDate>Wed, 22 Apr 2015 15:52:00 +0000</pubDate>
				<category><![CDATA[Engineering]]></category>
		<category><![CDATA[JavaScript]]></category>
		<category><![CDATA[meteor]]></category>
		<category><![CDATA[Nodejs]]></category>
		<guid isPermaLink="false">https://www2.cleverapps.io/wp/blog/technology/2015/04/22/meteor-js-on-clever-cloud/</guid>

					<description><![CDATA[<p><img width="1400" height="540" src="https://cdn.clever-cloud.com/uploads/2021/08/meteor-banner-wide-1.jpg" class="attachment-post-thumbnail size-post-thumbnail wp-post-image" alt="meteor banner wide 1" decoding="async" loading="lazy" srcset="https://cdn.clever-cloud.com/uploads/2021/08/meteor-banner-wide-1.jpg 1400w, https://cdn.clever-cloud.com/uploads/2021/08/meteor-banner-wide-1-300x116.jpg 300w, https://cdn.clever-cloud.com/uploads/2021/08/meteor-banner-wide-1-1024x395.jpg 1024w, https://cdn.clever-cloud.com/uploads/2021/08/meteor-banner-wide-1-768x296.jpg 768w, https://cdn.clever-cloud.com/uploads/2021/08/meteor-banner-wide-1-1368x528.jpg 1368w" sizes="auto, (max-width: 1400px) 100vw, 1400px" /></p><p>Lately, a lot of developpers asked us about Meteorjs support on Clever Cloud. This is indeed a growing technology out there, so I decided to test it myself.</p>
<span id="more-2797"></span>

<h3 id="what-is-meteorjs-">What is Meteorjs ?</h3>
<p>Meteor.js is based on Nodejs and is a real-time cross-platform web application framework (Web, Android and iOS). One of its main features is to automatically propagate data changes to clients in real-time or even query the database from the client (well, the client has a cache of the database which will update the remote one). It is an easy framework to build reactive applications</p>
<h3 id="how-to-deploy-on-clever-cloud">How to deploy on Clever Cloud</h3>
<p>As an example of a large Meteor application, I will use <a href="https://github.com/TelescopeJS/Telescope">TelescopeJS</a>. It&#39;s a social news application you can configure the way you want. I&#39;ll use the version v0.14.2 since it does not require MongoDB 3.0. This is a version we will provide in a near future.</p>
<h4 id="1--clone">1- Clone</h4>
<p>So first, <code>git clone https://github.com/TelescopeJS/Telescope &amp;&amp; cd Telescope &amp;&amp; git checkout v0.14.2</code> and run it: <code>meteor run</code>. Then open <a href="http://localhost:3000">http://localhost:3000</a>, you should see the default page with some examples.</p>
<h4 id="2--install-and-build">2- Install and build</h4>
<p>To make it run on Clever Cloud, we have to make our own install script. This script will run when you deploy your application and build what&#39;s needed. Create an <code>install.sh</code> file and paste the following lines (or download it from <a href="https://raw.githubusercontent.com/CleverCloud/demo-meteorjs/master/install.sh">Github</a>):</p>
<pre><code class="language-bash">#! /bin/bash

# Current path
currentPath=$(realpath ./)

# Install Meteorjs
curl https://install.meteor.com/ | sh
export PATH=/home/bas/.meteor:$PATH

# Install demeteorizer
cd ~/ &amp;&amp; npm install demeteorizer

# Go back to our project
cd &quot;$currentPath&quot;

# Note: When using &quot;meteorhacks:npm&quot;
# to prevent the error: &quot;unknown package: npm-container&quot;
# (described in https://github.com/meteorhacks/npm/issues/49)
# uncomment the two following lines:
#meteor remove npm-container
#meteor run

# demeteorize the app
~/node_modules/.bin/demeteorizer -a &quot;my_app&quot; -o my_app/

# Go inside our demeteorized app to install modules
cd my_app/

# Install modules
npm install
</code></pre>
<p>This script will install Meteorjs on our platform, <a href="https://github.com/onmodulus/demeteorizer">demeteorize</a> the app (i.e. convert it as a regular node.js application) and install its modules. If you are using the package <a href="https://github.com/meteorhacks/npm">npm-container</a> from <code>meteorhacks</code>, you HAVE to uncomment lines 20 and 21 (this is not our case here). Do not forget to do a <code>chmod +x install.sh</code> to give it execution rights.</p>
<p>Now we have to create our package.json (which is the file which describe your application for NPM): <code>npm init</code>. Open it and create a <code>scripts</code> section:</p>
<pre><code class="language-javascript">&quot;scripts&quot;:{
  &quot;install&quot;: &quot;./install.sh&quot;,
  &quot;start&quot;: &quot;node my_app/main.js&quot;
}
</code></pre>
<p>(<code>my_app/main.js</code> is a file generated by demeteorizer, do not modify this line)</p>
<p>Then, you can commit your changes: <code>git add package.json install.sh &amp;&amp; git commit -m &quot;Clever Cloud setup&quot;</code></p>
<h3 id="configuration">Configuration</h3>
<p>Once done, we need to create a Node.js application and a MongoDB addon  and configure it. Open the <a href="https://console.clever-cloud.com">dashboard</a> and:</p>
<h4 id="addon">Addon</h4>
<ul>
<li>Add an addon</li>
<li>Select MongoDB, choose your plan and name it.</li>
<li>Click it in the blue pane on your left, go into its configuration tab and copy somewhere the <code>Connection URI</code> field</li>
</ul>
<h4 id="application">Application</h4>
<ul>
<li>Add an application</li>
<li>Choose node.js for the language</li>
<li>Choose the scalers you want (the default configuration is enough most of the time)</li>
<li>Name it</li>
<li>We don&#39;t need an addon since we&#39;ve just created it</li>
<li>Environment variables: You have to create 2 of them: ROOT_URL (url of you application) and MONGO_URL (the <code>Connection URI</code> field you saved)</li>
<li>Follow instructions to add the remote repository, <code>git push</code> and it will deploy.</li>
</ul>
<p>Your application should now be deployed, feel free to contact our support if you have any troubles!</p>
]]></description>
										<content:encoded><![CDATA[<p><img width="1400" height="540" src="https://cdn.clever-cloud.com/uploads/2021/08/meteor-banner-wide-1.jpg" class="attachment-post-thumbnail size-post-thumbnail wp-post-image" alt="meteor banner wide 1" decoding="async" loading="lazy" srcset="https://cdn.clever-cloud.com/uploads/2021/08/meteor-banner-wide-1.jpg 1400w, https://cdn.clever-cloud.com/uploads/2021/08/meteor-banner-wide-1-300x116.jpg 300w, https://cdn.clever-cloud.com/uploads/2021/08/meteor-banner-wide-1-1024x395.jpg 1024w, https://cdn.clever-cloud.com/uploads/2021/08/meteor-banner-wide-1-768x296.jpg 768w, https://cdn.clever-cloud.com/uploads/2021/08/meteor-banner-wide-1-1368x528.jpg 1368w" sizes="auto, (max-width: 1400px) 100vw, 1400px" /></p><p>Lately, a lot of developpers asked us about Meteorjs support on Clever Cloud. This is indeed a growing technology out there, so I decided to test it myself.</p>
<span id="more-2797"></span>

<h3 id="what-is-meteorjs-">What is Meteorjs ?</h3>
<p>Meteor.js is based on Nodejs and is a real-time cross-platform web application framework (Web, Android and iOS). One of its main features is to automatically propagate data changes to clients in real-time or even query the database from the client (well, the client has a cache of the database which will update the remote one). It is an easy framework to build reactive applications</p>
<h3 id="how-to-deploy-on-clever-cloud">How to deploy on Clever Cloud</h3>
<p>As an example of a large Meteor application, I will use <a href="https://github.com/TelescopeJS/Telescope">TelescopeJS</a>. It&#39;s a social news application you can configure the way you want. I&#39;ll use the version v0.14.2 since it does not require MongoDB 3.0. This is a version we will provide in a near future.</p>
<h4 id="1--clone">1- Clone</h4>
<p>So first, <code>git clone https://github.com/TelescopeJS/Telescope &amp;&amp; cd Telescope &amp;&amp; git checkout v0.14.2</code> and run it: <code>meteor run</code>. Then open <a href="http://localhost:3000">http://localhost:3000</a>, you should see the default page with some examples.</p>
<h4 id="2--install-and-build">2- Install and build</h4>
<p>To make it run on Clever Cloud, we have to make our own install script. This script will run when you deploy your application and build what&#39;s needed. Create an <code>install.sh</code> file and paste the following lines (or download it from <a href="https://raw.githubusercontent.com/CleverCloud/demo-meteorjs/master/install.sh">Github</a>):</p>
<pre><code class="language-bash">#! /bin/bash

# Current path
currentPath=$(realpath ./)

# Install Meteorjs
curl https://install.meteor.com/ | sh
export PATH=/home/bas/.meteor:$PATH

# Install demeteorizer
cd ~/ &amp;&amp; npm install demeteorizer

# Go back to our project
cd &quot;$currentPath&quot;

# Note: When using &quot;meteorhacks:npm&quot;
# to prevent the error: &quot;unknown package: npm-container&quot;
# (described in https://github.com/meteorhacks/npm/issues/49)
# uncomment the two following lines:
#meteor remove npm-container
#meteor run

# demeteorize the app
~/node_modules/.bin/demeteorizer -a &quot;my_app&quot; -o my_app/

# Go inside our demeteorized app to install modules
cd my_app/

# Install modules
npm install
</code></pre>
<p>This script will install Meteorjs on our platform, <a href="https://github.com/onmodulus/demeteorizer">demeteorize</a> the app (i.e. convert it as a regular node.js application) and install its modules. If you are using the package <a href="https://github.com/meteorhacks/npm">npm-container</a> from <code>meteorhacks</code>, you HAVE to uncomment lines 20 and 21 (this is not our case here). Do not forget to do a <code>chmod +x install.sh</code> to give it execution rights.</p>
<p>Now we have to create our package.json (which is the file which describe your application for NPM): <code>npm init</code>. Open it and create a <code>scripts</code> section:</p>
<pre><code class="language-javascript">&quot;scripts&quot;:{
  &quot;install&quot;: &quot;./install.sh&quot;,
  &quot;start&quot;: &quot;node my_app/main.js&quot;
}
</code></pre>
<p>(<code>my_app/main.js</code> is a file generated by demeteorizer, do not modify this line)</p>
<p>Then, you can commit your changes: <code>git add package.json install.sh &amp;&amp; git commit -m &quot;Clever Cloud setup&quot;</code></p>
<h3 id="configuration">Configuration</h3>
<p>Once done, we need to create a Node.js application and a MongoDB addon  and configure it. Open the <a href="https://console.clever-cloud.com">dashboard</a> and:</p>
<h4 id="addon">Addon</h4>
<ul>
<li>Add an addon</li>
<li>Select MongoDB, choose your plan and name it.</li>
<li>Click it in the blue pane on your left, go into its configuration tab and copy somewhere the <code>Connection URI</code> field</li>
</ul>
<h4 id="application">Application</h4>
<ul>
<li>Add an application</li>
<li>Choose node.js for the language</li>
<li>Choose the scalers you want (the default configuration is enough most of the time)</li>
<li>Name it</li>
<li>We don&#39;t need an addon since we&#39;ve just created it</li>
<li>Environment variables: You have to create 2 of them: ROOT_URL (url of you application) and MONGO_URL (the <code>Connection URI</code> field you saved)</li>
<li>Follow instructions to add the remote repository, <code>git push</code> and it will deploy.</li>
</ul>
<p>Your application should now be deployed, feel free to contact our support if you have any troubles!</p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>Clever Cloud @QCON LONDON</title>
		<link>https://www.clever.cloud/blog/company/2013/03/04/qcon-london-2013/</link>
		
		<dc:creator><![CDATA[Adrien Cretté]]></dc:creator>
		<pubDate>Mon, 04 Mar 2013 00:00:00 +0000</pubDate>
				<category><![CDATA[Company]]></category>
		<category><![CDATA[Conference]]></category>
		<category><![CDATA[Developers]]></category>
		<category><![CDATA[HTML5]]></category>
		<category><![CDATA[JavaScript]]></category>
		<category><![CDATA[Project management]]></category>
		<category><![CDATA[QCON London]]></category>
		<guid isPermaLink="false">https://www2.cleverapps.io/wp/blog/technology/2013/03/04/qcon-london-2013/</guid>

					<description><![CDATA[French version belowQuentin ADAM, CEO of Clever Cloud, will talk about JavaScript as Data Processing Language &#38; HTML5 Integration at the QCON London next thursday, 7 march. As a reminder, QCON London 2013 will be the 7th edition of this conference designed for developers, team leads, architects and project management. It has already started by [&#8230;]]]></description>
										<content:encoded><![CDATA[<p><em>French version below</em><br />Quentin ADAM, CEO of Clever Cloud, will <a href="http://qconlondon.com/london-2013/presentation/JavaScript%20as%20Data%20Processing%20Language%20&amp;%20HTML5%20Integration">talk about JavaScript as Data Processing Language &amp; HTML5 Integration</a> at the <a href="http://qconlondon.com/london-2013/">QCON London</a> next thursday, 7 march. As a reminder, QCON London 2013 will be the 7th edition of this conference designed for developers, team leads, architects and project management.</p>
<p><span id="more-2711"></span></p>
<p>It has already started by trainings sessions today and tomorrow and the speakers will burst in on the scene next wednesday and thursday.</p>
<p>If you are looking at going to <a href="http://qconlondon.com/london-2013/">QCON London</a>, you can save £100 using the code “ADAM100”.</p>
<p>See ya!</p>
<hr>
<p><em>French version:</em></p>
<h3 id="clever-cloud-à-la-qcon-london">Clever Cloud à la QCON LONDON</h3>
<p>Quentin ADAM, CEO de Clever Cloud, sera à la <a href="http://qconlondon.com/london-2013/">QCON London</a> jeudi prochain, le 7 mars pour parler de <a href="http://qconlondon.com/london-2013/presentation/JavaScript%20as%20Data%20Processing%20Language%20&amp;%20HTML5%20Integration">JavaScript comme langage de traitement de données et d’intégration HTML5</a>. Pour rappel, la QCON London 2013 est la septième édition de cet évènement annuel dédié aux développeurs, à l’architecture logicielle et au management de projet.</p>
<p>L’event a déjà débuté par les séances de trainings aujourd’hui et demain alors que les conférences débuteront à partir de mercredi.</p>
<p>Si vous souhaitez vous y rendre, vous pouvez utiliser le coupon “ADAM100” pour économiser £100 sur le billet d’entrée.</p>
<p>See ya!</p>
]]></content:encoded>
					
		
		
			</item>
	</channel>
</rss>
