<?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>Guests Archives | Clever Cloud</title>
	<atom:link href="https://stagingv6.cleverapps.io/blog/category/guests/feed/" rel="self" type="application/rss+xml" />
	<link></link>
	<description>From Code to Product</description>
	<lastBuildDate>Mon, 20 Nov 2023 16:26:08 +0000</lastBuildDate>
	<language>en-GB</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	

<image>
	<url>https://staging-cc-assetsv6.cellar-c2.services.clever-cloud.com/uploads/2023/03/cropped-cropped-favicon-32x32.png</url>
	<title>Guests Archives | Clever Cloud</title>
	<link></link>
	<width>32</width>
	<height>32</height>
</image> 
	<item>
		<title>Reviewing BotPress on Clever Cloud</title>
		<link>https://stagingv6.cleverapps.io/blog/guests/2017/06/12/botpress-for-breizhcamp/</link>
		
		<dc:creator><![CDATA[Clément Nivolle]]></dc:creator>
		<pubDate>Mon, 12 Jun 2017 14:04:00 +0000</pubDate>
				<category><![CDATA[Guests]]></category>
		<category><![CDATA[bot]]></category>
		<guid isPermaLink="false">https://www2.cleverapps.io/wp/blog/technology/2017/06/12/botpress-for-breizhcamp/</guid>

					<description><![CDATA[<p><img width="1400" height="540" src="https://staging-cc-assetsv6.cellar-c2.services.clever-cloud.com/uploads/2021/08/chatbots-zenika-1.jpg" class="attachment-post-thumbnail size-post-thumbnail wp-post-image" alt="" decoding="async" fetchpriority="high" srcset="https://staging-cc-assetsv6.cellar-c2.services.clever-cloud.com/uploads/2021/08/chatbots-zenika-1.jpg 1400w, https://staging-cc-assetsv6.cellar-c2.services.clever-cloud.com/uploads/2021/08/chatbots-zenika-1-300x116.jpg 300w, https://staging-cc-assetsv6.cellar-c2.services.clever-cloud.com/uploads/2021/08/chatbots-zenika-1-1024x395.jpg 1024w, https://staging-cc-assetsv6.cellar-c2.services.clever-cloud.com/uploads/2021/08/chatbots-zenika-1-768x296.jpg 768w, https://staging-cc-assetsv6.cellar-c2.services.clever-cloud.com/uploads/2021/08/chatbots-zenika-1-1368x528.jpg 1368w" sizes="(max-width: 1400px) 100vw, 1400px" /></p>This week, Benjamin Plouzennec &amp; Antoine Cailly, Devs @ <a href="http://www.zenika.com/">Zenika</a> tell us about the chatbot they made for the BreizhCamp 2017, which is hosted on Clever Cloud.

<span id="more-2993"></span>

<strong>Can you introduce your bot?</strong>

<a href="https://breizhbot.github.io/">Breizhbot</a> is a chatbot that quickly delivers information about the next talks during the event. We don't always plan in advance which talks we'll attend to so we often have to make a quick choice before the next round of talks. What's great about chatbots is that they are efficient! Very simple interaction and very optimized content delivery.

<strong>Which framework did you use?</strong>

We had the choice! Many big companies launched their framework and many more startups and open source projects appeared last year. But we wanted two things: easily connecting to several platforms and customizing the bot. For the first, we used <a href="https://dev.botframework.com/">Microsoft Bot Framework API</a> to connect to Facebook Messenger, Skype, Slack and to publish a web UI. For the second we prefered using an open source framework called <a href="https://botpress.io/">botpress</a> that offers an evolutive architecture and has a nice community :-) As a proof of that, the connector between botpress and Microsoft Bot Framework didn't exist so we did it and published <a href="https://github.com/acailly/botpress-botfmk">it</a>.

<strong>How did you discover Clever Cloud?</strong>

We discovered it with Quentin Adam, a regular speaker in events we're attending to, and Benjamin already had a project hosted on Clever Cloud, <a href="http://myvirtualstorybook.com/">My Virtual Story Book</a>.

<strong>What do you like most on Clever Cloud?</strong>

Easy, the simplicity!

As for our bot, the workflow is very efficient. We just linked our github repository, quickly tweaked the scalability params, added some environment vars and that was it: we had a chatbot up and running!

<strong>What features are you expecting the most?</strong>

For the moment the platform perfectly fits our needs.

<strong>How would you describe Clever Cloud to someone who doesn't use it yet?</strong>

Nice service, nice doc, nice people.]]></description>
										<content:encoded><![CDATA[<p><img width="1400" height="540" src="https://staging-cc-assetsv6.cellar-c2.services.clever-cloud.com/uploads/2021/08/chatbots-zenika-1.jpg" class="attachment-post-thumbnail size-post-thumbnail wp-post-image" alt="" decoding="async" srcset="https://staging-cc-assetsv6.cellar-c2.services.clever-cloud.com/uploads/2021/08/chatbots-zenika-1.jpg 1400w, https://staging-cc-assetsv6.cellar-c2.services.clever-cloud.com/uploads/2021/08/chatbots-zenika-1-300x116.jpg 300w, https://staging-cc-assetsv6.cellar-c2.services.clever-cloud.com/uploads/2021/08/chatbots-zenika-1-1024x395.jpg 1024w, https://staging-cc-assetsv6.cellar-c2.services.clever-cloud.com/uploads/2021/08/chatbots-zenika-1-768x296.jpg 768w, https://staging-cc-assetsv6.cellar-c2.services.clever-cloud.com/uploads/2021/08/chatbots-zenika-1-1368x528.jpg 1368w" sizes="(max-width: 1400px) 100vw, 1400px" /></p>This week, Benjamin Plouzennec &amp; Antoine Cailly, Devs @ <a href="http://www.zenika.com/">Zenika</a> tell us about the chatbot they made for the BreizhCamp 2017, which is hosted on Clever Cloud.

<span id="more-2993"></span>

<strong>Can you introduce your bot?</strong>

<a href="https://breizhbot.github.io/">Breizhbot</a> is a chatbot that quickly delivers information about the next talks during the event. We don't always plan in advance which talks we'll attend to so we often have to make a quick choice before the next round of talks. What's great about chatbots is that they are efficient! Very simple interaction and very optimized content delivery.

<strong>Which framework did you use?</strong>

We had the choice! Many big companies launched their framework and many more startups and open source projects appeared last year. But we wanted two things: easily connecting to several platforms and customizing the bot. For the first, we used <a href="https://dev.botframework.com/">Microsoft Bot Framework API</a> to connect to Facebook Messenger, Skype, Slack and to publish a web UI. For the second we prefered using an open source framework called <a href="https://botpress.io/">botpress</a> that offers an evolutive architecture and has a nice community :-) As a proof of that, the connector between botpress and Microsoft Bot Framework didn't exist so we did it and published <a href="https://github.com/acailly/botpress-botfmk">it</a>.

<strong>How did you discover Clever Cloud?</strong>

We discovered it with Quentin Adam, a regular speaker in events we're attending to, and Benjamin already had a project hosted on Clever Cloud, <a href="http://myvirtualstorybook.com/">My Virtual Story Book</a>.

<strong>What do you like most on Clever Cloud?</strong>

Easy, the simplicity!

As for our bot, the workflow is very efficient. We just linked our github repository, quickly tweaked the scalability params, added some environment vars and that was it: we had a chatbot up and running!

<strong>What features are you expecting the most?</strong>

For the moment the platform perfectly fits our needs.

<strong>How would you describe Clever Cloud to someone who doesn't use it yet?</strong>

Nice service, nice doc, nice people.]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>The End of the Fortress Metaphor</title>
		<link>https://stagingv6.cleverapps.io/blog/guests/2015/06/16/the-end-of-the-fortress-metaphor/</link>
					<comments>https://stagingv6.cleverapps.io/blog/guests/2015/06/16/the-end-of-the-fortress-metaphor/#comments</comments>
		
		<dc:creator><![CDATA[Geoffroy Couprie]]></dc:creator>
		<pubDate>Tue, 16 Jun 2015 14:04:00 +0000</pubDate>
				<category><![CDATA[Guests]]></category>
		<category><![CDATA[firewall]]></category>
		<category><![CDATA[network]]></category>
		<category><![CDATA[Security]]></category>
		<guid isPermaLink="false">https://www2.cleverapps.io/wp/blog/technology/2015/06/16/the-end-of-the-fortress-metaphor/</guid>

					<description><![CDATA[<p><img width="1400" height="540" src="https://staging-cc-assetsv6.cellar-c2.services.clever-cloud.com/uploads/2021/08/fortress-1.jpg" class="attachment-post-thumbnail size-post-thumbnail wp-post-image" alt="" decoding="async" srcset="https://staging-cc-assetsv6.cellar-c2.services.clever-cloud.com/uploads/2021/08/fortress-1.jpg 1400w, https://staging-cc-assetsv6.cellar-c2.services.clever-cloud.com/uploads/2021/08/fortress-1-300x116.jpg 300w, https://staging-cc-assetsv6.cellar-c2.services.clever-cloud.com/uploads/2021/08/fortress-1-1024x395.jpg 1024w, https://staging-cc-assetsv6.cellar-c2.services.clever-cloud.com/uploads/2021/08/fortress-1-768x296.jpg 768w, https://staging-cc-assetsv6.cellar-c2.services.clever-cloud.com/uploads/2021/08/fortress-1-1368x528.jpg 1368w" sizes="(max-width: 1400px) 100vw, 1400px" /></p><em><a href="https://twitter.com/gcouprie">Geoffroy Couprie</a> is a consultant in software security and an independent developer. He teaches development teams how to write safe software.</em>

This is the most seducing approach in IT security. This is also the worst. For more than 20 years now, people have believed that their network was a fortress, protected from the outside world by firewalls, NAT and DMZ. This idea is obsolete, we must change now.

<span id="more-2992"></span>

20 years ago, it was still possible to see internal networks totally open, with every machine directly addressable from Internet. There were enough IPv4 addresses for everybody, the networks were small, life was good. But the security was atrocious: TCP stacks were remotely exploitable, worms were reproducing on corporate networks, internal file servers were publicly available, so people found the easiest way to secure everything on the cheap: isolate the network from the outside world. There's nothing wrong with that approach: it made sense at the time.

As usual when someone finds a small, temporary hack instead of fixing everything, people kept improving it, approaching the local optimum. This led to firewalls on every machine, every network. People discovered that NAT could hide IP addresses, instead of simply allowing IP reuse, and thought it was a security feature. All of the nonsense about DMZ and airgapped networks appeared. Companies were actually selling hardware which would get packets from one network, disconnect (physically) from it, connect to another network, then send the packets. <a href="http://www.infoworld.com/article/2655459/networking/hack-tales--air-gap-networking-for-the-price-of-a-pair-of-sneakers.html">Airgap, yup</a>.

It worked for a time, since a lot of exploits in the 90s focused on remote exploits in operating systems and servers. If you cannot exploit the public face of the network, everything is alright.
<blockquote>The attacker is only one wrong click on a lovingly crafted PDF file away from your network.</blockquote>
<figure><img id="img" class="gif" src="https://cdn.clever-cloud.com/uploads/2021/08/montypython-play.jpg" width="340" />
<figcaption>Sysadmin taunting hackers</figcaption></figure>
Unfortunately, we cannot think that way anymore. Web applications give too much entry points to your servers. Pivoting from a DMZ server to the internal network is easy, since internal users will also access those web applications. The attacker is only one wrong click on a lovingly crafted PDF file away from your network. Why would you concentrate on firewall rules when phishing is so effective?

Once the attacker is in your network, it is over. Listen to traffic, elevate your privilege, pivot to another machine, impersonate users, traverse the whole network...
<figure><img id="img" src="https://cdn.clever-cloud.com/uploads/2021/08/citadelle.jpg" width="340" />
<figcaption>Traditional IT infrastructure</figcaption></figure>
The fortress metaphor, where everything behind your firewall is safe and trusted, is dead. Your walls are useful, but not that much when the attacker can get insiders to help him, willingly or unknowingly.

<strong>The goal is not to keep the attacker out of your system. It is to detect the threat, isolate it, find the attacker's path and heal the system.</strong> The attacker may have been in your network for months. How would you be sure he is not there anymore?

There is a much better metaphor than the fortress, now. Think of your system as a city. The city can have walls, but to function properly, it should let people enter and get out. You cannot know precisely if everything in your city is legit. Chances are, someone uses his personal USB key. Someone else connected a WiFi router in his office. People are talking on Facebook, watching porn, using forbidden applications, like modern browsers. You will not be able to catch them, unless repression is your main tool, and this will not help them work. You want to reduce criminality in your city, but you will not eradicate it. You cannot prevent fires, but you can prevent them from spreading too far and too fast.

If you imagine the attacker as already present on your network, you go from plugging holes in one wall, to verifying dependencies and access control between systems. The trusted network approach is flawed, you have to think in terms of authorization from one user/app/machine to the other. The attacker will explore your network from one node to the next connected one, from one access level to the upper one, and try to combine them. <a href="http://blogs.technet.com/b/johnla/archive/2015/04/26/defenders-think-in-lists-attackers-think-in-graphs-as-long-as-this-is-true-attackers-win.aspx">Defenders think in lists, attackers think in graphs</a>. You must <a href="http://blogs.wsj.com/cio/2015/05/11/google-moves-its-corporate-applications-to-the-internet/">assume that the internal network is as dangerous as the Internet</a>.
<blockquote>Assuming that servers will be safer if they are on your own network leads to a false sense of security.</blockquote>
This is also why the nonsense around private cloud has to die. Assuming that servers will be safer on your own network leads to a false sense of security. A system built from scratch to handle the worst of internet has a better chance to survive. What matters is access control granularity around data, users and applications. The network is not a security boundary anymore.

<script type="text/javascript"><br />
  $(function(){<br />
    var image = new Image();<br />
    image.src ='https://cdn.clever-cloud.com/uploads/2021/08/montypython.gif';<br />
    var imageStoped = new Image();<br />
    imageStoped.src ='https://cdn.clever-cloud.com/uploads/2021/08/montypython-play.jpg';<br />
    $('#img.gif').click(function(){<br />
      if ($(this).hasClass('playing')) {<br />
        $(this).removeClass('playing');<br />
        $(this).attr('src',imageStoped.src);<br />
      }<br />
      else {<br />
        $(this).attr('src',image.src);<br />
        $(this).addClass('playing');<br />
      };<br />
    });<br />
});<br />
</script>]]></description>
										<content:encoded><![CDATA[<p><img width="1400" height="540" src="https://staging-cc-assetsv6.cellar-c2.services.clever-cloud.com/uploads/2021/08/fortress-1.jpg" class="attachment-post-thumbnail size-post-thumbnail wp-post-image" alt="" decoding="async" loading="lazy" srcset="https://staging-cc-assetsv6.cellar-c2.services.clever-cloud.com/uploads/2021/08/fortress-1.jpg 1400w, https://staging-cc-assetsv6.cellar-c2.services.clever-cloud.com/uploads/2021/08/fortress-1-300x116.jpg 300w, https://staging-cc-assetsv6.cellar-c2.services.clever-cloud.com/uploads/2021/08/fortress-1-1024x395.jpg 1024w, https://staging-cc-assetsv6.cellar-c2.services.clever-cloud.com/uploads/2021/08/fortress-1-768x296.jpg 768w, https://staging-cc-assetsv6.cellar-c2.services.clever-cloud.com/uploads/2021/08/fortress-1-1368x528.jpg 1368w" sizes="auto, (max-width: 1400px) 100vw, 1400px" /></p><em><a href="https://twitter.com/gcouprie">Geoffroy Couprie</a> is a consultant in software security and an independent developer. He teaches development teams how to write safe software.</em>

This is the most seducing approach in IT security. This is also the worst. For more than 20 years now, people have believed that their network was a fortress, protected from the outside world by firewalls, NAT and DMZ. This idea is obsolete, we must change now.

<span id="more-2992"></span>

20 years ago, it was still possible to see internal networks totally open, with every machine directly addressable from Internet. There were enough IPv4 addresses for everybody, the networks were small, life was good. But the security was atrocious: TCP stacks were remotely exploitable, worms were reproducing on corporate networks, internal file servers were publicly available, so people found the easiest way to secure everything on the cheap: isolate the network from the outside world. There's nothing wrong with that approach: it made sense at the time.

As usual when someone finds a small, temporary hack instead of fixing everything, people kept improving it, approaching the local optimum. This led to firewalls on every machine, every network. People discovered that NAT could hide IP addresses, instead of simply allowing IP reuse, and thought it was a security feature. All of the nonsense about DMZ and airgapped networks appeared. Companies were actually selling hardware which would get packets from one network, disconnect (physically) from it, connect to another network, then send the packets. <a href="http://www.infoworld.com/article/2655459/networking/hack-tales--air-gap-networking-for-the-price-of-a-pair-of-sneakers.html">Airgap, yup</a>.

It worked for a time, since a lot of exploits in the 90s focused on remote exploits in operating systems and servers. If you cannot exploit the public face of the network, everything is alright.
<blockquote>The attacker is only one wrong click on a lovingly crafted PDF file away from your network.</blockquote>
<figure><img id="img" class="gif" src="https://cdn.clever-cloud.com/uploads/2021/08/montypython-play.jpg" width="340" />
<figcaption>Sysadmin taunting hackers</figcaption></figure>
Unfortunately, we cannot think that way anymore. Web applications give too much entry points to your servers. Pivoting from a DMZ server to the internal network is easy, since internal users will also access those web applications. The attacker is only one wrong click on a lovingly crafted PDF file away from your network. Why would you concentrate on firewall rules when phishing is so effective?

Once the attacker is in your network, it is over. Listen to traffic, elevate your privilege, pivot to another machine, impersonate users, traverse the whole network...
<figure><img id="img" src="https://cdn.clever-cloud.com/uploads/2021/08/citadelle.jpg" width="340" />
<figcaption>Traditional IT infrastructure</figcaption></figure>
The fortress metaphor, where everything behind your firewall is safe and trusted, is dead. Your walls are useful, but not that much when the attacker can get insiders to help him, willingly or unknowingly.

<strong>The goal is not to keep the attacker out of your system. It is to detect the threat, isolate it, find the attacker's path and heal the system.</strong> The attacker may have been in your network for months. How would you be sure he is not there anymore?

There is a much better metaphor than the fortress, now. Think of your system as a city. The city can have walls, but to function properly, it should let people enter and get out. You cannot know precisely if everything in your city is legit. Chances are, someone uses his personal USB key. Someone else connected a WiFi router in his office. People are talking on Facebook, watching porn, using forbidden applications, like modern browsers. You will not be able to catch them, unless repression is your main tool, and this will not help them work. You want to reduce criminality in your city, but you will not eradicate it. You cannot prevent fires, but you can prevent them from spreading too far and too fast.

If you imagine the attacker as already present on your network, you go from plugging holes in one wall, to verifying dependencies and access control between systems. The trusted network approach is flawed, you have to think in terms of authorization from one user/app/machine to the other. The attacker will explore your network from one node to the next connected one, from one access level to the upper one, and try to combine them. <a href="http://blogs.technet.com/b/johnla/archive/2015/04/26/defenders-think-in-lists-attackers-think-in-graphs-as-long-as-this-is-true-attackers-win.aspx">Defenders think in lists, attackers think in graphs</a>. You must <a href="http://blogs.wsj.com/cio/2015/05/11/google-moves-its-corporate-applications-to-the-internet/">assume that the internal network is as dangerous as the Internet</a>.
<blockquote>Assuming that servers will be safer if they are on your own network leads to a false sense of security.</blockquote>
This is also why the nonsense around private cloud has to die. Assuming that servers will be safer on your own network leads to a false sense of security. A system built from scratch to handle the worst of internet has a better chance to survive. What matters is access control granularity around data, users and applications. The network is not a security boundary anymore.

<script type="text/javascript"><br />
  $(function(){<br />
    var image = new Image();<br />
    image.src ='https://cdn.clever-cloud.com/uploads/2021/08/montypython.gif';<br />
    var imageStoped = new Image();<br />
    imageStoped.src ='https://cdn.clever-cloud.com/uploads/2021/08/montypython-play.jpg';<br />
    $('#img.gif').click(function(){<br />
      if ($(this).hasClass('playing')) {<br />
        $(this).removeClass('playing');<br />
        $(this).attr('src',imageStoped.src);<br />
      }<br />
      else {<br />
        $(this).attr('src',image.src);<br />
        $(this).addClass('playing');<br />
      };<br />
    });<br />
});<br />
</script>]]></content:encoded>
					
					<wfw:commentRss>https://stagingv6.cleverapps.io/blog/guests/2015/06/16/the-end-of-the-fortress-metaphor/feed/</wfw:commentRss>
			<slash:comments>1</slash:comments>
		
		
			</item>
		<item>
		<title>Smalltalk in The Cloud</title>
		<link>https://stagingv6.cleverapps.io/blog/guests/2015/01/05/smalltalk-in-the-cloud/</link>
		
		<dc:creator><![CDATA[Geoffroy Couprie]]></dc:creator>
		<pubDate>Mon, 05 Jan 2015 14:04:00 +0000</pubDate>
				<category><![CDATA[Guests]]></category>
		<category><![CDATA[docker]]></category>
		<category><![CDATA[feature]]></category>
		<category><![CDATA[pharo]]></category>
		<category><![CDATA[seaside]]></category>
		<category><![CDATA[smalltalk]]></category>
		<guid isPermaLink="false">https://www2.cleverapps.io/wp/blog/technology/2015/01/05/smalltalk-in-the-cloud/</guid>

					<description><![CDATA[<p><img width="1402" height="544" src="https://staging-cc-assetsv6.cellar-c2.services.clever-cloud.com/uploads/2021/08/smalltalkalpha.png" class="attachment-post-thumbnail size-post-thumbnail wp-post-image" alt="" decoding="async" loading="lazy" srcset="https://staging-cc-assetsv6.cellar-c2.services.clever-cloud.com/uploads/2021/08/smalltalkalpha.png 1402w, https://staging-cc-assetsv6.cellar-c2.services.clever-cloud.com/uploads/2021/08/smalltalkalpha-300x116.png 300w, https://staging-cc-assetsv6.cellar-c2.services.clever-cloud.com/uploads/2021/08/smalltalkalpha-1024x397.png 1024w, https://staging-cc-assetsv6.cellar-c2.services.clever-cloud.com/uploads/2021/08/smalltalkalpha-768x298.png 768w, https://staging-cc-assetsv6.cellar-c2.services.clever-cloud.com/uploads/2021/08/smalltalkalpha-1368x531.png 1368w" sizes="auto, (max-width: 1402px) 100vw, 1402px" /></p><p><em><a href="https://twitter.com/gcouprie">Geoffroy Couprie</a> is a consultant in software security and a independant developer. After testing Clever Cloud for a while, he challenged himself trying to run Smalltalk on our PaaS. Here&#39;s the recap of his findings.</em></p>
<p>The Smalltalk world offers a radically different way to create and run software, and I have always loved to tinker with it. Thanks to the recent work around Docker at Clever Cloud, it is now possible to run Pharo Smalltalk apps, even Seaside ones, on this PaaS.</p>
<span id="more-2991"></span>

<h2 id="thinking-in-smalltalk">Thinking in Smalltalk</h2>
<p>One of the most interesting features of Smalltalk is the image, which is a file containing a list of serialized objects. When you start your virtual machine, you load the image. When you stop, you serialise everything: classes, methods, instances of classes, windows, even running web servers. And when you start, you get back your environment in the same state. Even writing code is different: you are not editing a file, you are editing the implementation of a method, serialised like everything else in the image. That way, you can modify code while it is running easily.</p>
<a class="image-popup-no-margins" href="https://www2.cleverapps.io/app/uploads/2021/08/explorer.png" alt="Feeling at home in the Pharo world">
  <img src="https://www2.cleverapps.io/app/uploads/2021/08/explorer.png">
</a>

<p>The traditional method for deploying a web server consists in preparing the image with the code, and uploading the whole image on the server. This is at odds with deployment process at Clever Cloud, based on a simple Git push. So it requires a few steps.</p>
<h2 id="docker">Docker</h2>
<p>Thanks to the recent developments around Docker support, it is now possible to run any language or platform on these servers. So I prepared two images, one to <a href="https://registry.hub.docker.com/u/geal/archlinux-pharo-smalltalk/">install Pharo Smalltalk on an archlinux Docker container</a>, and the other, based on the first, to <a href="https://registry.hub.docker.com/u/geal/archlinux-seaside/">install the Seaside web framework</a>.</p>
<p>There is nothing tricky in the first image, except needing to install <code>lib32-zlib</code>, <code>lib32-ncurses</code> and <code>lib32-bzip2</code> to run the 32 bits VM on a 64 bits CPU.</p>
<p>The second image runs <a href="https://github.com/Geal/archlinux-pharo-image/blob/master/seaside/install-seaside.st">a .st file</a> to download Seaside, remove default Seaside apps and deactivate the debug bar:</p>
<pre><code class="language-smalltalk">Gofer new
url:&#39;http://www.smalltalkhub.com/mc/Seaside/MetacelloConfigurations/main&#39;;
package: &#39;ConfigurationOfSeaside3&#39;;
load.
((Smalltalk at: #ConfigurationOfSeaside3) project version: #stable) load.

WAAdmin applicationDefaults removeParent: WADevelopmentConfiguration instance.
WADispatcher default handlers keys do:[:name | WAAdmin unregister:name].
Smalltalk snapshot: true andQuit: true.
</code></pre>
<p>Now, we have an image ready for  deployment, and usable for all the future Seaside projects.</p>
<h2 id="preparing-the-code-for-deployment">Preparing the code for deployment</h2>
<p>We could save the image in a git repository, and push the whole file to Clever Cloud, but that would be too easy. What if we could send just the required code through git? Here comes <a href="https://github.com/dalehenrich/filetree">FileTree</a>, a library pre-installed in Pharo, that you can use to export code from the image and add it to a Git repository.</p>
<p>First, let&#39;s get some code to deploy. I will spare you the details, just get the <a href="http://book.seaside.st/book/getting-started/pharo/first-component">WebCounter example from the Seaside book</a>, it is doable under 10 minutes.</p>
<p>Done? Alright. Choose a folder that will contain the code you will push to the server, and <code>git init</code> in that folder. Now open the Monticello browser, add a new repository, select &quot;filetree://&quot; then choose your git folder.</p>
<a class="image-popup-no-margins" href="https://www2.cleverapps.io/app/uploads/2021/08/filetree.png" alt="FileTree">
  <img src="https://www2.cleverapps.io/app/uploads/2021/08/filetree.png">
</a>

<p>Now select your WebCounter package in the Monticello browser, and save the code.</p>
<a class="image-popup-no-margins" href="https://www2.cleverapps.io/app/uploads/2021/08/monticello-save.png" alt="Monticello">
  <img src="https://www2.cleverapps.io/app/uploads/2021/08/monticello-save.png">
</a>

<p>It should now appear in file form in the git folder:</p>
<pre><code class="language-bash">$ tree .
.
└── WebCounter.package
    ├── WebCounter.class
    │   ├── README.md
    │   ├── instance
    │   │   ├── decrease.st
    │   │   ├── increase.st
    │   │   ├── initialize.st
    │   │   └── renderContentOn..st
    │   ├── methodProperties.json
    │   └── properties.json
    ├── monticello.meta
    │   ├── categories.st
    │   ├── initializers.st
    │   ├── package
    │   └── version
    └── properties.json
</code></pre>
<h2 id="loading-the-code">Loading the code</h2>
<p>Now that we have an export of the Seaside component, we will create a Docker image to load the code. First, we need a small script to give the virtual machine at startup, to load the code and run it:</p>
<pre><code class="language-smalltalk">&quot;this uses FileTree to load back the code from the /home/deploy folder&quot;
(MCFileTreeRepository new directory: &#39;/home/deploy&#39; asFileReference) packageDescriptionsFromReadableFileNames  do:
  [:name || version |
  version := (MCFileTreeRepository new directory: &#39;/home/deploy&#39; asFileReference) versionFromFileNamed: name first, &#39;.package&#39;.
  [version load ]
        on: MCMergeOrLoadWarning
        do: [ :ex | [ ex load  ] on: MCNoChangesException do: [] ] ].

FileStream stdout nextPutAll: &#39;WebCounter installed&#39;; lf.

&quot;the Clever Cloud platform expects the app to listen on the 8080 port&quot;
ZnZincServerAdaptor startOn: 8080.

&quot;Register the code we just loaded on the /webcounter address&quot;
WAAdmin register: WebCounter asApplicationAt: &#39;webcounter&#39;.
</code></pre>
<p>Save that code as seaside.st, then we will create the Dockerfile to make it work on the server:</p>
<pre><code class="language-apache"># -*- sh -*-
FROM geal/archlinux-seaside
MAINTAINER Geoffroy Couprie, contact@geoffroycouprie.com

ADD . /home/deploy

EXPOSE 8080

CMD ./pharo Pharo.image ./deploy/seaside.st
</code></pre>
<p>It reuses the archlinux-seaside image I prepared previously, copies the code from the repository in <code>/home/deploy</code>, then starts the image with the code loading script.</p>
<p>With this, you can build and run the image to test it:</p>
<pre><code class="language-bash">$ docker build -t &quot;geal/seaside-example&quot; .
$ docker run -t -i -p 8080:8080 geal/seaside-example /bin/bash
[root@8e726df1bf4e home]# ./pharo Pharo.image ./deploy/seaside.st

UndefinedObject&gt;&gt;DoIt (WebCounter is Undeclared)
WebCounter installed
</code></pre>
<p>If you are on Linux, the website will be available on <a href="http://localhost:8080/webcounter">http://localhost:8080/webcounter</a>. If you use OS X, run <code>boot2docker ip</code>, then access the server at <code>http://&lt;virtual machine IP&gt;:8080/webcounter</code>.</p>
<h1 id="creating-the-app-on-clever-cloud-and-deploying">Creating the app on Clever Cloud and deploying</h1>
<p>Go to <a href="https://console.clever-cloud.com">https://console.clever-cloud.com</a>, create a new application of type Docker, then get the git URL for your app, and do in your repository:</p>
<pre><code class="language-bash">$ git remote add clever git+ssh://git@push.par.clever-cloud.com/&lt;your app id&gt;.git
$ git push clever master
</code></pre>
<p>And that&#39;s it! You can now access the Seaside component at <code>http://&lt;your_app_id&gt;.cleverapps.io/webcounter</code>.</p>
<p>At each new version of the code, export it to Git then push again, and the platform will redeploy everything automatically, rebuilding the Docker containers and the Pharo images. Now, you just need to add a few components to store state, like a database or S3 component, and you are good to go!</p>
<p>All the code is available on Github if you need to play with it:</p>
<ul>
<li><a href="https://github.com/Geal/archlinux-pharo-image">Archlinux Docker images</a></li>
<li><a href="https://github.com/Geal/pharo-seaside-docker-example">WebCounter loaded with Docker</a>, also contains an example for a web application using the Zinc server directly</li>
<li>The example is currently running at <a href="http://pharo-seaside.cleverapps.io/webcounter">http://pharo-seaside.cleverapps.io/webcounter</a></li>
</ul>
<a class="image-popup-no-margins" href="https://www2.cleverapps.io/app/uploads/2021/08/pharo.png" alt="Welcome to Pharo!">
  <img src="https://www2.cleverapps.io/app/uploads/2021/08/pharo.png">
</a>
]]></description>
										<content:encoded><![CDATA[<p><img width="1402" height="544" src="https://staging-cc-assetsv6.cellar-c2.services.clever-cloud.com/uploads/2021/08/smalltalkalpha.png" class="attachment-post-thumbnail size-post-thumbnail wp-post-image" alt="" decoding="async" loading="lazy" srcset="https://staging-cc-assetsv6.cellar-c2.services.clever-cloud.com/uploads/2021/08/smalltalkalpha.png 1402w, https://staging-cc-assetsv6.cellar-c2.services.clever-cloud.com/uploads/2021/08/smalltalkalpha-300x116.png 300w, https://staging-cc-assetsv6.cellar-c2.services.clever-cloud.com/uploads/2021/08/smalltalkalpha-1024x397.png 1024w, https://staging-cc-assetsv6.cellar-c2.services.clever-cloud.com/uploads/2021/08/smalltalkalpha-768x298.png 768w, https://staging-cc-assetsv6.cellar-c2.services.clever-cloud.com/uploads/2021/08/smalltalkalpha-1368x531.png 1368w" sizes="auto, (max-width: 1402px) 100vw, 1402px" /></p><p><em><a href="https://twitter.com/gcouprie">Geoffroy Couprie</a> is a consultant in software security and a independant developer. After testing Clever Cloud for a while, he challenged himself trying to run Smalltalk on our PaaS. Here&#39;s the recap of his findings.</em></p>
<p>The Smalltalk world offers a radically different way to create and run software, and I have always loved to tinker with it. Thanks to the recent work around Docker at Clever Cloud, it is now possible to run Pharo Smalltalk apps, even Seaside ones, on this PaaS.</p>
<span id="more-2991"></span>

<h2 id="thinking-in-smalltalk">Thinking in Smalltalk</h2>
<p>One of the most interesting features of Smalltalk is the image, which is a file containing a list of serialized objects. When you start your virtual machine, you load the image. When you stop, you serialise everything: classes, methods, instances of classes, windows, even running web servers. And when you start, you get back your environment in the same state. Even writing code is different: you are not editing a file, you are editing the implementation of a method, serialised like everything else in the image. That way, you can modify code while it is running easily.</p>
<a class="image-popup-no-margins" href="https://www2.cleverapps.io/app/uploads/2021/08/explorer.png" alt="Feeling at home in the Pharo world">
  <img src="https://www2.cleverapps.io/app/uploads/2021/08/explorer.png">
</a>

<p>The traditional method for deploying a web server consists in preparing the image with the code, and uploading the whole image on the server. This is at odds with deployment process at Clever Cloud, based on a simple Git push. So it requires a few steps.</p>
<h2 id="docker">Docker</h2>
<p>Thanks to the recent developments around Docker support, it is now possible to run any language or platform on these servers. So I prepared two images, one to <a href="https://registry.hub.docker.com/u/geal/archlinux-pharo-smalltalk/">install Pharo Smalltalk on an archlinux Docker container</a>, and the other, based on the first, to <a href="https://registry.hub.docker.com/u/geal/archlinux-seaside/">install the Seaside web framework</a>.</p>
<p>There is nothing tricky in the first image, except needing to install <code>lib32-zlib</code>, <code>lib32-ncurses</code> and <code>lib32-bzip2</code> to run the 32 bits VM on a 64 bits CPU.</p>
<p>The second image runs <a href="https://github.com/Geal/archlinux-pharo-image/blob/master/seaside/install-seaside.st">a .st file</a> to download Seaside, remove default Seaside apps and deactivate the debug bar:</p>
<pre><code class="language-smalltalk">Gofer new
url:&#39;http://www.smalltalkhub.com/mc/Seaside/MetacelloConfigurations/main&#39;;
package: &#39;ConfigurationOfSeaside3&#39;;
load.
((Smalltalk at: #ConfigurationOfSeaside3) project version: #stable) load.

WAAdmin applicationDefaults removeParent: WADevelopmentConfiguration instance.
WADispatcher default handlers keys do:[:name | WAAdmin unregister:name].
Smalltalk snapshot: true andQuit: true.
</code></pre>
<p>Now, we have an image ready for  deployment, and usable for all the future Seaside projects.</p>
<h2 id="preparing-the-code-for-deployment">Preparing the code for deployment</h2>
<p>We could save the image in a git repository, and push the whole file to Clever Cloud, but that would be too easy. What if we could send just the required code through git? Here comes <a href="https://github.com/dalehenrich/filetree">FileTree</a>, a library pre-installed in Pharo, that you can use to export code from the image and add it to a Git repository.</p>
<p>First, let&#39;s get some code to deploy. I will spare you the details, just get the <a href="http://book.seaside.st/book/getting-started/pharo/first-component">WebCounter example from the Seaside book</a>, it is doable under 10 minutes.</p>
<p>Done? Alright. Choose a folder that will contain the code you will push to the server, and <code>git init</code> in that folder. Now open the Monticello browser, add a new repository, select &quot;filetree://&quot; then choose your git folder.</p>
<a class="image-popup-no-margins" href="https://www2.cleverapps.io/app/uploads/2021/08/filetree.png" alt="FileTree">
  <img src="https://www2.cleverapps.io/app/uploads/2021/08/filetree.png">
</a>

<p>Now select your WebCounter package in the Monticello browser, and save the code.</p>
<a class="image-popup-no-margins" href="https://www2.cleverapps.io/app/uploads/2021/08/monticello-save.png" alt="Monticello">
  <img src="https://www2.cleverapps.io/app/uploads/2021/08/monticello-save.png">
</a>

<p>It should now appear in file form in the git folder:</p>
<pre><code class="language-bash">$ tree .
.
└── WebCounter.package
    ├── WebCounter.class
    │   ├── README.md
    │   ├── instance
    │   │   ├── decrease.st
    │   │   ├── increase.st
    │   │   ├── initialize.st
    │   │   └── renderContentOn..st
    │   ├── methodProperties.json
    │   └── properties.json
    ├── monticello.meta
    │   ├── categories.st
    │   ├── initializers.st
    │   ├── package
    │   └── version
    └── properties.json
</code></pre>
<h2 id="loading-the-code">Loading the code</h2>
<p>Now that we have an export of the Seaside component, we will create a Docker image to load the code. First, we need a small script to give the virtual machine at startup, to load the code and run it:</p>
<pre><code class="language-smalltalk">&quot;this uses FileTree to load back the code from the /home/deploy folder&quot;
(MCFileTreeRepository new directory: &#39;/home/deploy&#39; asFileReference) packageDescriptionsFromReadableFileNames  do:
  [:name || version |
  version := (MCFileTreeRepository new directory: &#39;/home/deploy&#39; asFileReference) versionFromFileNamed: name first, &#39;.package&#39;.
  [version load ]
        on: MCMergeOrLoadWarning
        do: [ :ex | [ ex load  ] on: MCNoChangesException do: [] ] ].

FileStream stdout nextPutAll: &#39;WebCounter installed&#39;; lf.

&quot;the Clever Cloud platform expects the app to listen on the 8080 port&quot;
ZnZincServerAdaptor startOn: 8080.

&quot;Register the code we just loaded on the /webcounter address&quot;
WAAdmin register: WebCounter asApplicationAt: &#39;webcounter&#39;.
</code></pre>
<p>Save that code as seaside.st, then we will create the Dockerfile to make it work on the server:</p>
<pre><code class="language-apache"># -*- sh -*-
FROM geal/archlinux-seaside
MAINTAINER Geoffroy Couprie, contact@geoffroycouprie.com

ADD . /home/deploy

EXPOSE 8080

CMD ./pharo Pharo.image ./deploy/seaside.st
</code></pre>
<p>It reuses the archlinux-seaside image I prepared previously, copies the code from the repository in <code>/home/deploy</code>, then starts the image with the code loading script.</p>
<p>With this, you can build and run the image to test it:</p>
<pre><code class="language-bash">$ docker build -t &quot;geal/seaside-example&quot; .
$ docker run -t -i -p 8080:8080 geal/seaside-example /bin/bash
[root@8e726df1bf4e home]# ./pharo Pharo.image ./deploy/seaside.st

UndefinedObject&gt;&gt;DoIt (WebCounter is Undeclared)
WebCounter installed
</code></pre>
<p>If you are on Linux, the website will be available on <a href="http://localhost:8080/webcounter">http://localhost:8080/webcounter</a>. If you use OS X, run <code>boot2docker ip</code>, then access the server at <code>http://&lt;virtual machine IP&gt;:8080/webcounter</code>.</p>
<h1 id="creating-the-app-on-clever-cloud-and-deploying">Creating the app on Clever Cloud and deploying</h1>
<p>Go to <a href="https://console.clever-cloud.com">https://console.clever-cloud.com</a>, create a new application of type Docker, then get the git URL for your app, and do in your repository:</p>
<pre><code class="language-bash">$ git remote add clever git+ssh://git@push.par.clever-cloud.com/&lt;your app id&gt;.git
$ git push clever master
</code></pre>
<p>And that&#39;s it! You can now access the Seaside component at <code>http://&lt;your_app_id&gt;.cleverapps.io/webcounter</code>.</p>
<p>At each new version of the code, export it to Git then push again, and the platform will redeploy everything automatically, rebuilding the Docker containers and the Pharo images. Now, you just need to add a few components to store state, like a database or S3 component, and you are good to go!</p>
<p>All the code is available on Github if you need to play with it:</p>
<ul>
<li><a href="https://github.com/Geal/archlinux-pharo-image">Archlinux Docker images</a></li>
<li><a href="https://github.com/Geal/pharo-seaside-docker-example">WebCounter loaded with Docker</a>, also contains an example for a web application using the Zinc server directly</li>
<li>The example is currently running at <a href="http://pharo-seaside.cleverapps.io/webcounter">http://pharo-seaside.cleverapps.io/webcounter</a></li>
</ul>
<a class="image-popup-no-margins" href="https://www2.cleverapps.io/app/uploads/2021/08/pharo.png" alt="Welcome to Pharo!">
  <img src="https://www2.cleverapps.io/app/uploads/2021/08/pharo.png">
</a>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>Webelis agency tested Clever Cloud</title>
		<link>https://stagingv6.cleverapps.io/blog/guests/2012/11/27/webelis-tested-clever-cloud-with-joomla/</link>
		
		<dc:creator><![CDATA[Clément Nivolle]]></dc:creator>
		<pubDate>Tue, 27 Nov 2012 00:00:00 +0000</pubDate>
				<category><![CDATA[Guests]]></category>
		<category><![CDATA[CMS]]></category>
		<category><![CDATA[Community]]></category>
		<category><![CDATA[Feedback]]></category>
		<category><![CDATA[Guest blogging]]></category>
		<category><![CDATA[Joomla]]></category>
		<category><![CDATA[User Group]]></category>
		<guid isPermaLink="false">https://www2.cleverapps.io/wp/blog/technology/2012/11/27/webelis-tested-clever-cloud-with-joomla/</guid>

					<description><![CDATA[Webelis is a web agency company mainly focused on Open Source CMS, with strong Joomla! expertise. Founded in 2009, the company has realised 100+ customers Joomla based websites. As a Joomla expert, Philippe decided to test the very latest Joomla 3.0 beta on the Clever Cloud Platform, in order to benchmark its overall performance. &#8220;The [&#8230;]]]></description>
										<content:encoded><![CDATA[<div class="pull-right"><img decoding="async" class="span3" src="https://www2.cleverapps.io/app/uploads/2021/08/webelis.png" alt="Webelis logo" /></div>
<p><em><a href="http://www.webelis.fr/">Webelis</a> is a web agency company mainly focused on Open Source CMS, with strong Joomla! expertise. Founded in 2009, the company has realised 100+ customers Joomla based websites. As a Joomla expert, Philippe decided to test the very latest Joomla 3.0 beta on the Clever Cloud Platform, in order to benchmark its overall performance.</em></p>
<p><span id="more-2990"></span></p>
<p>&#8220;The fact is, I have been positively surprised in two ways:</p>
<ol>
<li>The Clever-Cloud setup/account creation process is very straight forward, without any hassle. I&#8217;ve been able to setup a full ready-to-go environment in less than 5 minutes. Deploying Joomla CMS is like a breeze, the FTP access and the database setup (pretty basic though) are standard compared to usual hosting providers (ftp/phpmyadmin), which is a good point.</li>
<li>It&#8217;s all about performance. Wow. The Joomla instance is fast as hell. The site runs smoothly and page loading is near instantly. Believe it or not, the hosted site is much faster than my own local install using EasyPhp (running on a 2,53 Ghz core 2 duo / 4GB).</li>
</ol>
<p>This first &#8220;hello cloud&#8221; test seems more than promising. Next step consists in deploying an existing Joomla-based website of mine, running on a popular hosting provider, in order to compare performance. I&#8217;m very curious and excited to see how the platform reacts under a heavy load.</p>
<h3 id="about-prices">About prices</h3>
<div class="pull-right"><img decoding="async" class="span1" src="https://www2.cleverapps.io/app/uploads/2021/08/webelis2.jpg" alt="Webelis logo" /></div>
<p>So far, though testing is completely free for the first steps, I intend to test the service in a deeper manner to see how much an average site can cost a month. This is where you may want to stay on a mutulalized hosting for small projects, and keep the Clever-Cloud high-end platform for projects that really need heavy load capabilities.&#8221;</p>
<p><a href="http://twitter.com/Webelis">Philippe Destré</a>, CEO @<a href="http://www.webelis.fr/">Webelis</a></p>
<p><em>Thanks to Phillipe, we&#8217;ve noted the importance of giving a clear view on our pricing. That&#8217;s why we&#8217;ve published this week the <a href="https://stagingv6.cleverapps.io/pricing/">Clever Cloud Pricing Sheet</a>. Tell us what you think <img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f609.png" alt="😉" class="wp-smiley" style="height: 1em; max-height: 1em;" /></em></p>
<p><em>Oh! You should also note that <a href="http://www.ouest-numerique.com/">Ouest Numérique</a>&#8216;s website is also a Joomla! site running on Clever Cloud!</em></p>
]]></content:encoded>
					
		
		
			</item>
	</channel>
</rss>
