<?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>thoughts Archives | Clever Cloud</title>
	<atom:link href="https://www.clever.cloud/blog/tag/thoughts/feed/" rel="self" type="application/rss+xml" />
	<link>https://www.clever.cloud/blog/tag/thoughts/</link>
	<description>From Code to Product</description>
	<lastBuildDate>Wed, 20 Dec 2023 15:10:10 +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>thoughts Archives | Clever Cloud</title>
	<link>https://www.clever.cloud/blog/tag/thoughts/</link>
	<width>32</width>
	<height>32</height>
</image> 
	<item>
		<title>Code Running on Ionized Particles, or WTF is Serverless</title>
		<link>https://www.clever.cloud/blog/company/2017/07/04/code-running-ionized-particles-wtf-serverless/</link>
		
		<dc:creator><![CDATA[Quentin Adam]]></dc:creator>
		<pubDate>Tue, 04 Jul 2017 11:22:00 +0000</pubDate>
				<category><![CDATA[Company]]></category>
		<category><![CDATA[thoughts]]></category>
		<guid isPermaLink="false">https://www2.cleverapps.io/wp/blog/technology/2017/07/04/code-running-ionized-particles-wtf-serverless/</guid>

					<description><![CDATA[<p><img width="2560" height="987" src="https://cdn.clever-cloud.com/uploads/2021/08/servermore-scaled-1.jpg" class="attachment-post-thumbnail size-post-thumbnail wp-post-image" alt="servermore scaled 1" decoding="async" fetchpriority="high" srcset="https://cdn.clever-cloud.com/uploads/2021/08/servermore-scaled-1.jpg 2560w, https://cdn.clever-cloud.com/uploads/2021/08/servermore-scaled-1-300x116.jpg 300w, https://cdn.clever-cloud.com/uploads/2021/08/servermore-scaled-1-1024x395.jpg 1024w, https://cdn.clever-cloud.com/uploads/2021/08/servermore-scaled-1-768x296.jpg 768w, https://cdn.clever-cloud.com/uploads/2021/08/servermore-scaled-1-1536x592.jpg 1536w, https://cdn.clever-cloud.com/uploads/2021/08/servermore-scaled-1-2048x790.jpg 2048w, https://cdn.clever-cloud.com/uploads/2021/08/servermore-scaled-1-1368x527.jpg 1368w" sizes="(max-width: 2560px) 100vw, 2560px" /></p><p>We often say that technology is a cycle of concepts. I don’t think so. It’s just that bad ideas are hard to kill, and are rebranded on a regular basis, hyped with marketing bullshit. Today, we will talk about <strong>Serverless(TM)</strong>.</p>
<span id="more-2756"></span>

<p>Serverless is quite interesting. In the case of a serverless application there is a server or probably many servers running code. So the « server » we are trying to suppress here is definitely not the hardware we use to power the application. Sorry for those who think we can run a node.js application live in the air, floating to the wind of electrons and running without CPU, RAM, disks… The question is: what is the thing we positively want to suppress on the serverless world if it’s not the server?</p>
<h2 id="serverless-as-a-major-performance-tradeoff">Serverless as a Major Performance Tradeoff</h2>
<p>What is Serverless then? it’s a function as a service hosting model, where we just upload a small piece of code and sometimes data on a service and get an instant ops-free ability to answer on a URL with the previously uploaded code. And there is the response. There is no server boot, installation, management, routing… Everything is automated. Developers just code, publish code and code is started to respond on a sandboxed environment, its lifecycle bound to the request life.</p>
<blockquote>
<p>Destroying context on each HTTP request is, on the vast majority of cases, a very bad performance and stability idea</p>
</blockquote>
<p>I do not get this fascination for the request-bound lifecycle of application environment. It’s not the first time it’s shown as a great achievement, there was a myth of short lived containers on a single request… Let me explain my thoughts: the vast majority of applications I see today are made to accept connections from Internet (using HTTP mainly but some others protocols too) and get some data from a database, compute then serve. So, the ability to reach the database quickly is the main performances focus. Latency is still a thing (tell that to DBaaS vendors that don&#39;t let you run your code next to the data...). Connecting to the database involves a vast quantity of TCP protocols. And there is the point: establishing a TCP connection is LONG, SLOW and in many cases the most time consuming part of the request.</p>
<p>So, we want to keep the database connection between several web request, and keep the TCP pool awake. We don’t want to destroy the pool on every web requests. And the database server will also work better on stable connections, be much easier to monitor and audit. It’s all built on this paradigm. And yes, I also keep my TCP connections open when I’m working on databases with HTTP based API. Take a look at what we did with <a href="https://github.com/CleverCloud/warp10.rs">warp10.rs</a>, the Rust client we wrote for warp10. Anyway, destroying context on each HTTP request is, in the vast majority of cases, a very bad performance and stability idea.</p>
<h2 id="better-server-management-already-happened-without-serverless">Better Server Management already happened without Serverless</h2>
<p>Some years ago, the consensus around the 12 factors applications made most applications able to launch themselves and able to take care of their lifecycle. The model was in reaction to « application servers ». Because this model is really difficult to scale and it makes business logic and configuration spliced in many environments, and not only in one place. With serverless you actually use an application server. A closed source application server with a strong locking model, all the code produced will lock you to the provider, and the inter-portability will be an illusion, something like JEE application server portability. Except that this one, you can’t install it on your server, even for a bigger price.</p>
<p>Making it easy to deploy and provide sustainability to your application is really important to help developers focus on their value, innovation and to provide a quick feedback loop. The serverless name is not about removing the hardware server, but the server management, the time consuming coordination of managing <em>how</em> a server works. I agree. This is why we created Clever Cloud. it’s to provide application sustainability; the ability to easily deploy and be sure that the future is managed: updates, monitoring, self healing, scalability, security, backups… </p>
<p>The whole server management has to be a commodity, it’s what we deliver at Clever Cloud. And I think it has to be compatible with most applications, new or legacy, and should not impact the application architecture or portability . IT automation is a great idea to help people just send the code and leave the management to software. It solves timing and synchronization constraints between people, gives them the ability to innovate, build, and adapt to the software market more easily than before. Because when someone says &quot;I like serverless&quot;, what they say is: I do not want to hear about servers and the all ops stuff, I have work to do.</p>
<h2 id="conclusion">Conclusion</h2>
<p>When you create code, just be sure you are not writing it on someone else&#39;s paper, it will hurt sooner or later.</p>
<p>The software industry is quite young, about 30 to 40 years old. Yet massive companies emerged quickly: billion dollar businesses bringing huge social changes. What does it mean to be a developer today, and how did that job evolve these last few years? I think we need to picture this as a global shift within the evolution of productivity. </p>
<p><small>Image Source: Disney</small></p>
]]></description>
										<content:encoded><![CDATA[<p><img width="2560" height="987" src="https://cdn.clever-cloud.com/uploads/2021/08/servermore-scaled-1.jpg" class="attachment-post-thumbnail size-post-thumbnail wp-post-image" alt="servermore scaled 1" decoding="async" srcset="https://cdn.clever-cloud.com/uploads/2021/08/servermore-scaled-1.jpg 2560w, https://cdn.clever-cloud.com/uploads/2021/08/servermore-scaled-1-300x116.jpg 300w, https://cdn.clever-cloud.com/uploads/2021/08/servermore-scaled-1-1024x395.jpg 1024w, https://cdn.clever-cloud.com/uploads/2021/08/servermore-scaled-1-768x296.jpg 768w, https://cdn.clever-cloud.com/uploads/2021/08/servermore-scaled-1-1536x592.jpg 1536w, https://cdn.clever-cloud.com/uploads/2021/08/servermore-scaled-1-2048x790.jpg 2048w, https://cdn.clever-cloud.com/uploads/2021/08/servermore-scaled-1-1368x527.jpg 1368w" sizes="(max-width: 2560px) 100vw, 2560px" /></p><p>We often say that technology is a cycle of concepts. I don’t think so. It’s just that bad ideas are hard to kill, and are rebranded on a regular basis, hyped with marketing bullshit. Today, we will talk about <strong>Serverless(TM)</strong>.</p>
<span id="more-2756"></span>

<p>Serverless is quite interesting. In the case of a serverless application there is a server or probably many servers running code. So the « server » we are trying to suppress here is definitely not the hardware we use to power the application. Sorry for those who think we can run a node.js application live in the air, floating to the wind of electrons and running without CPU, RAM, disks… The question is: what is the thing we positively want to suppress on the serverless world if it’s not the server?</p>
<h2 id="serverless-as-a-major-performance-tradeoff">Serverless as a Major Performance Tradeoff</h2>
<p>What is Serverless then? it’s a function as a service hosting model, where we just upload a small piece of code and sometimes data on a service and get an instant ops-free ability to answer on a URL with the previously uploaded code. And there is the response. There is no server boot, installation, management, routing… Everything is automated. Developers just code, publish code and code is started to respond on a sandboxed environment, its lifecycle bound to the request life.</p>
<blockquote>
<p>Destroying context on each HTTP request is, on the vast majority of cases, a very bad performance and stability idea</p>
</blockquote>
<p>I do not get this fascination for the request-bound lifecycle of application environment. It’s not the first time it’s shown as a great achievement, there was a myth of short lived containers on a single request… Let me explain my thoughts: the vast majority of applications I see today are made to accept connections from Internet (using HTTP mainly but some others protocols too) and get some data from a database, compute then serve. So, the ability to reach the database quickly is the main performances focus. Latency is still a thing (tell that to DBaaS vendors that don&#39;t let you run your code next to the data...). Connecting to the database involves a vast quantity of TCP protocols. And there is the point: establishing a TCP connection is LONG, SLOW and in many cases the most time consuming part of the request.</p>
<p>So, we want to keep the database connection between several web request, and keep the TCP pool awake. We don’t want to destroy the pool on every web requests. And the database server will also work better on stable connections, be much easier to monitor and audit. It’s all built on this paradigm. And yes, I also keep my TCP connections open when I’m working on databases with HTTP based API. Take a look at what we did with <a href="https://github.com/CleverCloud/warp10.rs">warp10.rs</a>, the Rust client we wrote for warp10. Anyway, destroying context on each HTTP request is, in the vast majority of cases, a very bad performance and stability idea.</p>
<h2 id="better-server-management-already-happened-without-serverless">Better Server Management already happened without Serverless</h2>
<p>Some years ago, the consensus around the 12 factors applications made most applications able to launch themselves and able to take care of their lifecycle. The model was in reaction to « application servers ». Because this model is really difficult to scale and it makes business logic and configuration spliced in many environments, and not only in one place. With serverless you actually use an application server. A closed source application server with a strong locking model, all the code produced will lock you to the provider, and the inter-portability will be an illusion, something like JEE application server portability. Except that this one, you can’t install it on your server, even for a bigger price.</p>
<p>Making it easy to deploy and provide sustainability to your application is really important to help developers focus on their value, innovation and to provide a quick feedback loop. The serverless name is not about removing the hardware server, but the server management, the time consuming coordination of managing <em>how</em> a server works. I agree. This is why we created Clever Cloud. it’s to provide application sustainability; the ability to easily deploy and be sure that the future is managed: updates, monitoring, self healing, scalability, security, backups… </p>
<p>The whole server management has to be a commodity, it’s what we deliver at Clever Cloud. And I think it has to be compatible with most applications, new or legacy, and should not impact the application architecture or portability . IT automation is a great idea to help people just send the code and leave the management to software. It solves timing and synchronization constraints between people, gives them the ability to innovate, build, and adapt to the software market more easily than before. Because when someone says &quot;I like serverless&quot;, what they say is: I do not want to hear about servers and the all ops stuff, I have work to do.</p>
<h2 id="conclusion">Conclusion</h2>
<p>When you create code, just be sure you are not writing it on someone else&#39;s paper, it will hurt sooner or later.</p>
<p>The software industry is quite young, about 30 to 40 years old. Yet massive companies emerged quickly: billion dollar businesses bringing huge social changes. What does it mean to be a developer today, and how did that job evolve these last few years? I think we need to picture this as a global shift within the evolution of productivity. </p>
<p><small>Image Source: Disney</small></p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>null is not the issue</title>
		<link>https://www.clever.cloud/blog/engineering/2016/07/21/null-is-not-the-issue/</link>
		
		<dc:creator><![CDATA[Clement Delafargue]]></dc:creator>
		<pubDate>Thu, 21 Jul 2016 14:56:00 +0000</pubDate>
				<category><![CDATA[Engineering]]></category>
		<category><![CDATA[code]]></category>
		<category><![CDATA[Java]]></category>
		<category><![CDATA[thoughts]]></category>
		<category><![CDATA[workflow]]></category>
		<guid isPermaLink="false">https://www2.cleverapps.io/wp/blog/technology/2016/07/21/null-is-not-the-issue/</guid>

					<description><![CDATA[<p><img width="1400" height="540" src="https://cdn.clever-cloud.com/uploads/2021/08/null-issue-1.jpg" class="attachment-post-thumbnail size-post-thumbnail wp-post-image" alt="null issue 1" decoding="async" srcset="https://cdn.clever-cloud.com/uploads/2021/08/null-issue-1.jpg 1400w, https://cdn.clever-cloud.com/uploads/2021/08/null-issue-1-300x116.jpg 300w, https://cdn.clever-cloud.com/uploads/2021/08/null-issue-1-1024x395.jpg 1024w, https://cdn.clever-cloud.com/uploads/2021/08/null-issue-1-768x296.jpg 768w, https://cdn.clever-cloud.com/uploads/2021/08/null-issue-1-1368x528.jpg 1368w" sizes="(max-width: 1400px) 100vw, 1400px" /></p><p>Nowadays, we know that <code>null</code> is to be avoided. It&#39;s been dubbed the <em>billion dollar mistake</em> by its own creator, and the dreaded <code>NullPointerException</code> everyone knows about. Yet, when it comes to getting rid of <code>null</code>s, nobody agrees.</p>
<span id="more-2806"></span>

<h2 id="null-is-bad-mkay"><code>null</code> is bad, m&#39;kay</h2>
<ul>
<li>NPEs</li>
<li>hard to read (is this value always defined?)</li>
<li>handling possibly undefined values is tedious</li>
</ul>
<p>The issue is that we focus on <code>null</code>, and not on the actual problems it causes. If your only goal is to get rid of NPEs at all costs, then you will pay those costs. Dearly.</p>
<p>The memory safety issues caused by <code>null</code> are solved on most platforms. In many languages, <code>null</code> is a pointer to a specific value with specific properties, so not literally a null pointer anymore, and on modern OSs, the memory protection system will prevent your code from directly accessing the address <code>0x00</code>.</p>
<p>So the big risk is having your program blow up (<code>NPE</code>, <code>segfault</code>, <code>panic</code>, …) because of an unexpected missing value. The core issue is that you were unable to express that the value was possibly missing; the crash is a consequence of this issue. Yet many people try to solve the issue by preventing the crash (null check, <a href="https://en.wikipedia.org/wiki/Null_Object_pattern">null object pattern</a>, …) instead of handling the core issue: a value could be missing and you weren&#39;t able to express it.</p>
<h2 id="stop-chasing-npes-and-fix-your-domain-model">Stop chasing NPEs and fix your domain model</h2>
<p>If you&#39;re trying to get rid of NPEs by removing the difference between &quot;there is a meaningful value&quot; and &quot;there is no value&quot;, then not only you&#39;re not solving your issue, but you&#39;re making it far, far worse.</p>
<p>Your domain model didn&#39;t let you express statically the possible absence of a value, but the presence of null at least gave you a stuctural difference at runtime. That&#39;s why putting default values or worse, following the null object pattern, is terrible. You had structural information, but couldn&#39;t use it in a rigorous way, so you&#39;re just throwing it all away because of an implementation detail.</p>
<p>If you&#39;re searching for a replacement to <code>null</code> to denote missing values, it has to be structurally different from a regular value (it cannot belong to the domain of the value you may have). So if you&#39;re in a typed system, then a value that may be not there has to have a different type from a value that&#39;s definitely there. In an untyped language, you can&#39;t have a static difference, so using <code>null</code> is kind of OK (though there are better solutions).</p>
<p>For example, in java you can do:</p>
<pre><code class="language-java">// Bad
String notThere = null;
String there = &quot;my string&quot;;
// Turbo-bad
String notThere = &quot;&quot;; // or &quot;N/A&quot;, etc
String there = &quot;my string&quot;;
// Good
Optional&lt;String&gt; notThere = Optional.empty();
Optional&lt;String&gt; there = Optional.of(&quot;my string&quot;);
</code></pre>
<p>With optional, not only you have a structural difference between defined and undefined strings (instead of having to check if the string is equal to <code>&quot;&quot;</code> or <code>&quot;N/A&quot;</code>, without any guarantee that it&#39;s not the actual value), but it&#39;s clearly documented in the type.</p>
<p><code>Optional</code> is available in Java 8 (and in Guava if you&#39;re not using java 8 yet). In scala, rust, ocaml and many other languages, it&#39;s called <code>Option</code>, in Haskell it&#39;s called <code>Maybe</code>.</p>
<h2 id="this-is-why-you-can-have-nice-things">This is why you <em>can</em> have nice things</h2>
<p>Ok so now you have a proper representation for your optional values. In a typed language it means that you&#39;re forced to check if the value is already there before using it.</p>
<p>For instance, in java:</p>
<pre><code class="language-java">Optional&lt;Integer&gt; parseOptionalString(Optional&lt;String&gt; myOptionalString) {
    if(myOptionalString.isPresent()) {
        Optional&lt;Integer&gt; result = parseInt(myOptionalString.get());
        return result;
    } else {
        return Optional.empty();
    }
}
</code></pre>
<p>This works perfectly well, but is still as verbose as using explicit <code>null</code> checks. So if you&#39;re only concerned about code terseness (you really shouldn&#39;t), it can feel like a marginal improvement (it&#39;s way better than that).</p>
<p>Thankfully that&#39;s not the idiomatic way of handling <code>Optional</code> values: now that we can denote the abstract concept of <em>being possibly not there</em> (in this case, <code>Optional&lt;_&gt;</code>), then we can do useful stuff about it:</p>
<ul>
<li>transforming it only if it&#39;s defined (with <code>map</code>)</li>
<li>eliminate the option by providing a default value when we don&#39;t need the
information anymore (with <code>orElseGet</code>)</li>
<li>sequencing several operations returning options (with <code>flatMap</code>)</li>
</ul>
<p>All of this comes for free because we were able to clearly define our domain model. Some languages like Kotlin provide approaching solutions with things like the Safe Call Operator for chaining operations (instead of using <code>map</code> and <code>flatMap</code>) and the Elvis Operator for providing default values. This, however, is less extensible and less composable than having proper options (<code>map</code> and <code>flatMap</code> are not specific to <code>Optional</code>).</p>
<pre><code class="language-java">Optional&lt;Integer&gt; parseOptionalString(Optional&lt;String&gt; myOptionalString) {
    return myOptionalString.flatMap(parseInt);
}
</code></pre>
<p>Once you have properly defined your domain model, then you can have cleaner code thanks to the information encoded in your types. Aiming at terser code without proper abstraction will lead you to perlish nightmares.</p>
<h2 id="to-sum-up">To sum up</h2>
<p>Using <code>null</code> causes problems. Resorting to solutions that erase information (setting a default value too early or worse, the null object pattern) will cause graver and subtler problems.</p>
<p>In order of decreasing importance, the problems with <code>null</code> are:</p>
<ol>
<li>it&#39;s not clear for people if a value can be missing</li>
<li>the program can blow up if somebody forgot to handle a missing value</li>
<li>it&#39;s tedious to sequence operations returning null</li>
</ol>
<p>Don&#39;t settle for solutions that only address #2 and #3.</p>
]]></description>
										<content:encoded><![CDATA[<p><img width="1400" height="540" src="https://cdn.clever-cloud.com/uploads/2021/08/null-issue-1.jpg" class="attachment-post-thumbnail size-post-thumbnail wp-post-image" alt="null issue 1" decoding="async" loading="lazy" srcset="https://cdn.clever-cloud.com/uploads/2021/08/null-issue-1.jpg 1400w, https://cdn.clever-cloud.com/uploads/2021/08/null-issue-1-300x116.jpg 300w, https://cdn.clever-cloud.com/uploads/2021/08/null-issue-1-1024x395.jpg 1024w, https://cdn.clever-cloud.com/uploads/2021/08/null-issue-1-768x296.jpg 768w, https://cdn.clever-cloud.com/uploads/2021/08/null-issue-1-1368x528.jpg 1368w" sizes="auto, (max-width: 1400px) 100vw, 1400px" /></p><p>Nowadays, we know that <code>null</code> is to be avoided. It&#39;s been dubbed the <em>billion dollar mistake</em> by its own creator, and the dreaded <code>NullPointerException</code> everyone knows about. Yet, when it comes to getting rid of <code>null</code>s, nobody agrees.</p>
<span id="more-2806"></span>

<h2 id="null-is-bad-mkay"><code>null</code> is bad, m&#39;kay</h2>
<ul>
<li>NPEs</li>
<li>hard to read (is this value always defined?)</li>
<li>handling possibly undefined values is tedious</li>
</ul>
<p>The issue is that we focus on <code>null</code>, and not on the actual problems it causes. If your only goal is to get rid of NPEs at all costs, then you will pay those costs. Dearly.</p>
<p>The memory safety issues caused by <code>null</code> are solved on most platforms. In many languages, <code>null</code> is a pointer to a specific value with specific properties, so not literally a null pointer anymore, and on modern OSs, the memory protection system will prevent your code from directly accessing the address <code>0x00</code>.</p>
<p>So the big risk is having your program blow up (<code>NPE</code>, <code>segfault</code>, <code>panic</code>, …) because of an unexpected missing value. The core issue is that you were unable to express that the value was possibly missing; the crash is a consequence of this issue. Yet many people try to solve the issue by preventing the crash (null check, <a href="https://en.wikipedia.org/wiki/Null_Object_pattern">null object pattern</a>, …) instead of handling the core issue: a value could be missing and you weren&#39;t able to express it.</p>
<h2 id="stop-chasing-npes-and-fix-your-domain-model">Stop chasing NPEs and fix your domain model</h2>
<p>If you&#39;re trying to get rid of NPEs by removing the difference between &quot;there is a meaningful value&quot; and &quot;there is no value&quot;, then not only you&#39;re not solving your issue, but you&#39;re making it far, far worse.</p>
<p>Your domain model didn&#39;t let you express statically the possible absence of a value, but the presence of null at least gave you a stuctural difference at runtime. That&#39;s why putting default values or worse, following the null object pattern, is terrible. You had structural information, but couldn&#39;t use it in a rigorous way, so you&#39;re just throwing it all away because of an implementation detail.</p>
<p>If you&#39;re searching for a replacement to <code>null</code> to denote missing values, it has to be structurally different from a regular value (it cannot belong to the domain of the value you may have). So if you&#39;re in a typed system, then a value that may be not there has to have a different type from a value that&#39;s definitely there. In an untyped language, you can&#39;t have a static difference, so using <code>null</code> is kind of OK (though there are better solutions).</p>
<p>For example, in java you can do:</p>
<pre><code class="language-java">// Bad
String notThere = null;
String there = &quot;my string&quot;;
// Turbo-bad
String notThere = &quot;&quot;; // or &quot;N/A&quot;, etc
String there = &quot;my string&quot;;
// Good
Optional&lt;String&gt; notThere = Optional.empty();
Optional&lt;String&gt; there = Optional.of(&quot;my string&quot;);
</code></pre>
<p>With optional, not only you have a structural difference between defined and undefined strings (instead of having to check if the string is equal to <code>&quot;&quot;</code> or <code>&quot;N/A&quot;</code>, without any guarantee that it&#39;s not the actual value), but it&#39;s clearly documented in the type.</p>
<p><code>Optional</code> is available in Java 8 (and in Guava if you&#39;re not using java 8 yet). In scala, rust, ocaml and many other languages, it&#39;s called <code>Option</code>, in Haskell it&#39;s called <code>Maybe</code>.</p>
<h2 id="this-is-why-you-can-have-nice-things">This is why you <em>can</em> have nice things</h2>
<p>Ok so now you have a proper representation for your optional values. In a typed language it means that you&#39;re forced to check if the value is already there before using it.</p>
<p>For instance, in java:</p>
<pre><code class="language-java">Optional&lt;Integer&gt; parseOptionalString(Optional&lt;String&gt; myOptionalString) {
    if(myOptionalString.isPresent()) {
        Optional&lt;Integer&gt; result = parseInt(myOptionalString.get());
        return result;
    } else {
        return Optional.empty();
    }
}
</code></pre>
<p>This works perfectly well, but is still as verbose as using explicit <code>null</code> checks. So if you&#39;re only concerned about code terseness (you really shouldn&#39;t), it can feel like a marginal improvement (it&#39;s way better than that).</p>
<p>Thankfully that&#39;s not the idiomatic way of handling <code>Optional</code> values: now that we can denote the abstract concept of <em>being possibly not there</em> (in this case, <code>Optional&lt;_&gt;</code>), then we can do useful stuff about it:</p>
<ul>
<li>transforming it only if it&#39;s defined (with <code>map</code>)</li>
<li>eliminate the option by providing a default value when we don&#39;t need the
information anymore (with <code>orElseGet</code>)</li>
<li>sequencing several operations returning options (with <code>flatMap</code>)</li>
</ul>
<p>All of this comes for free because we were able to clearly define our domain model. Some languages like Kotlin provide approaching solutions with things like the Safe Call Operator for chaining operations (instead of using <code>map</code> and <code>flatMap</code>) and the Elvis Operator for providing default values. This, however, is less extensible and less composable than having proper options (<code>map</code> and <code>flatMap</code> are not specific to <code>Optional</code>).</p>
<pre><code class="language-java">Optional&lt;Integer&gt; parseOptionalString(Optional&lt;String&gt; myOptionalString) {
    return myOptionalString.flatMap(parseInt);
}
</code></pre>
<p>Once you have properly defined your domain model, then you can have cleaner code thanks to the information encoded in your types. Aiming at terser code without proper abstraction will lead you to perlish nightmares.</p>
<h2 id="to-sum-up">To sum up</h2>
<p>Using <code>null</code> causes problems. Resorting to solutions that erase information (setting a default value too early or worse, the null object pattern) will cause graver and subtler problems.</p>
<p>In order of decreasing importance, the problems with <code>null</code> are:</p>
<ol>
<li>it&#39;s not clear for people if a value can be missing</li>
<li>the program can blow up if somebody forgot to handle a missing value</li>
<li>it&#39;s tedious to sequence operations returning null</li>
</ol>
<p>Don&#39;t settle for solutions that only address #2 and #3.</p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>What is a developer’s job?</title>
		<link>https://www.clever.cloud/blog/company/2016/04/18/what-is-a-developers-job/</link>
		
		<dc:creator><![CDATA[Quentin Adam]]></dc:creator>
		<pubDate>Mon, 18 Apr 2016 11:22:00 +0000</pubDate>
				<category><![CDATA[Company]]></category>
		<category><![CDATA[thoughts]]></category>
		<guid isPermaLink="false">https://www2.cleverapps.io/wp/blog/technology/2016/04/18/what-is-a-developers-job/</guid>

					<description><![CDATA[<p><img width="1400" height="540" src="https://cdn.clever-cloud.com/uploads/2021/08/developer-job-1.jpg" class="attachment-post-thumbnail size-post-thumbnail wp-post-image" alt="developer job 1" decoding="async" loading="lazy" srcset="https://cdn.clever-cloud.com/uploads/2021/08/developer-job-1.jpg 1400w, https://cdn.clever-cloud.com/uploads/2021/08/developer-job-1-300x116.jpg 300w, https://cdn.clever-cloud.com/uploads/2021/08/developer-job-1-1024x395.jpg 1024w, https://cdn.clever-cloud.com/uploads/2021/08/developer-job-1-768x296.jpg 768w, https://cdn.clever-cloud.com/uploads/2021/08/developer-job-1-1368x528.jpg 1368w" sizes="auto, (max-width: 1400px) 100vw, 1400px" /></p><p>The software industry is quite young, about 30 to 40 years old. Yet massive companies emerged quickly: billion dollar businesses bringing huge social changes. What does it mean to be a developer today, and how did that job evolve these last few years? I think we need to picture this as a global shift within the evolution of productivity.</p>
<span id="more-2747"></span>

<p>Let&#39;s start from the beginning.</p>
<p>Tool creation is deeply linked to human progress: to improve our quality of life, manage population growth and create new endeavors. With time, tools are less and less focused on survival.</p>
<p>The evolution of tools is strongly linked to “technology”: better product quality, more variety and quantity. This progress is not linear. It&#39;s accelerating. Ray Kurzweil wrote about this in <a href="https://en.wikipedia.org/wiki/The_Age_of_Spiritual_Machines">The Age of Spiritual Machines</a>, where he described the “law of accelerating returns”: each step up makes the next step closer (For instance, X-rays paved the ways for many medical breakthroughs).</p>
<p>Industrialization was an important step on production of tools. It brought :</p>
<ul>
<li>cost-efficiency</li>
<li>standard quality</li>
<li>repeatable processes</li>
</ul>
<p>All these to produce items in industrial quantity. So some items became something we called <strong>commodity</strong>.</p>
<p>Commodity is a significant concept. A product becomes a commodity when its quality becomes predictable, repeatable, and it fulfills a common need. Let&#39;s take pens, paper or clippers as example. Nobody care about their brand. We need them to be cheap and predictable. Cost efficiency is essential. Imagine the cost of a clipper handcrafted by a blacksmith. That would be a luxury product. And the ROI of this product would be irrelevant: nobody would use it. So our quality of life would be affected (what’s life without clippers? HELL).</p>
<p>In the 19th century, industrialization took over manufacturing. Machinery started replacing most of the human work force. This evolution was driven by the engine replacing the human and animal muscle. During  the last decades,  computers have been revolutionizing work by replacing humans for intellectual tasks. At first, people delegated simple and repetitive tasks: computation, accounting, price comparison, long-term memory, etc. As the technology moved forward, we started using it for more complex stuff, mapping increasingly convoluted workflows, networking communications. </p>
<p>Now it’s time to delegate more complicated tasks like image recognition, translation or have systems play Go. This is it: as engines industrialized muscle, computers industrialize brains. We are commoditizing of intellectual services.</p>
<p>So now let’s talk about developers.</p>
<p>A software developer’s day to day job is writing code. Modeling specific processes in software, creating tools to industrialize intellectual services, improving value creation and processes to leverage money. With a nice ROI. This is why developer-managed companies became so successful: Microsoft, Apple, Google, Uber, Facebook, etc. They industrialized intellectual services, disrupted markets where brainpower was only human powered, non-scalable and unfocused. This is why Marc Andreessen <a href="https://www.google.fr/url?sa=t&amp;rct=j&amp;q=&amp;esrc=s&amp;source=web&amp;cd=1&amp;ved=0ahUKEwiC9aq3gZHMAhVCnRoKHZvjCAYQFggdMAA&amp;url=http%3A%2F%2Fwww.wsj.com%2Farticles%2FSB10001424053111903480904576512250915629460&amp;usg=AFQjCNEpxLV16wQRxtfYBSRXELeZMYqVlg&amp;sig2=e_4mm-udsojqGBeOe3_wew">said that « software is eating the world »</a>.</p>
<blockquote>
<p>The industrial revolution of intellectual services is here, and developers like you and me are at the heart of it.</p>
</blockquote>
<p>This professional evolution leads to a new way of producing software: more fluent, able to adapt the “brain power tool” faster, in a competitive market. Quickly adapting software makes for adapting businesses. It brings a huge advantage over the competition. The job of a developer must focus on short and continuous delivery, to compete in that market. This leads to a specialization of developers in various combinations of skills and tasks.</p>
<p>Some will go for low level systems. Others, on higher abstraction levels, will manage data or create data pipelining related to core business. That&#39;s why “developer” is more of a skill among others specialties, like banking, insurance or food, or people knowing how to model the process in a business domain, optimize and adapt it in a short time.</p>
<p>This is why we need to push forward efficient software factories, from dev to QA to hosting and production. Greatly reducing human and process costs to ship new software will give a decisive competitive edge.</p>
<p>This is why continuous delivery is now necessary.</p>
<p>Because it is driving competition between companies. Because it is reducing cost and time to deliver new software. Because it&#39;s providing the finest brain power at exactly the right time, and more important, ahead of others in the market.</p>
<p>The major change in company organization in the last few years is a pivot point. IT services evolved from being a cost center to being a company’s core, with software running the largest part of the business. It is becoming the biggest part of a company’s valuation. As developers, our role is to maintain this core and to make it evolve. We need to bring organisations to the next level, understand market and business logic, and deliver updates to all industrialized intellectual services.</p>
]]></description>
										<content:encoded><![CDATA[<p><img width="1400" height="540" src="https://cdn.clever-cloud.com/uploads/2021/08/developer-job-1.jpg" class="attachment-post-thumbnail size-post-thumbnail wp-post-image" alt="developer job 1" decoding="async" loading="lazy" srcset="https://cdn.clever-cloud.com/uploads/2021/08/developer-job-1.jpg 1400w, https://cdn.clever-cloud.com/uploads/2021/08/developer-job-1-300x116.jpg 300w, https://cdn.clever-cloud.com/uploads/2021/08/developer-job-1-1024x395.jpg 1024w, https://cdn.clever-cloud.com/uploads/2021/08/developer-job-1-768x296.jpg 768w, https://cdn.clever-cloud.com/uploads/2021/08/developer-job-1-1368x528.jpg 1368w" sizes="auto, (max-width: 1400px) 100vw, 1400px" /></p><p>The software industry is quite young, about 30 to 40 years old. Yet massive companies emerged quickly: billion dollar businesses bringing huge social changes. What does it mean to be a developer today, and how did that job evolve these last few years? I think we need to picture this as a global shift within the evolution of productivity.</p>
<span id="more-2747"></span>

<p>Let&#39;s start from the beginning.</p>
<p>Tool creation is deeply linked to human progress: to improve our quality of life, manage population growth and create new endeavors. With time, tools are less and less focused on survival.</p>
<p>The evolution of tools is strongly linked to “technology”: better product quality, more variety and quantity. This progress is not linear. It&#39;s accelerating. Ray Kurzweil wrote about this in <a href="https://en.wikipedia.org/wiki/The_Age_of_Spiritual_Machines">The Age of Spiritual Machines</a>, where he described the “law of accelerating returns”: each step up makes the next step closer (For instance, X-rays paved the ways for many medical breakthroughs).</p>
<p>Industrialization was an important step on production of tools. It brought :</p>
<ul>
<li>cost-efficiency</li>
<li>standard quality</li>
<li>repeatable processes</li>
</ul>
<p>All these to produce items in industrial quantity. So some items became something we called <strong>commodity</strong>.</p>
<p>Commodity is a significant concept. A product becomes a commodity when its quality becomes predictable, repeatable, and it fulfills a common need. Let&#39;s take pens, paper or clippers as example. Nobody care about their brand. We need them to be cheap and predictable. Cost efficiency is essential. Imagine the cost of a clipper handcrafted by a blacksmith. That would be a luxury product. And the ROI of this product would be irrelevant: nobody would use it. So our quality of life would be affected (what’s life without clippers? HELL).</p>
<p>In the 19th century, industrialization took over manufacturing. Machinery started replacing most of the human work force. This evolution was driven by the engine replacing the human and animal muscle. During  the last decades,  computers have been revolutionizing work by replacing humans for intellectual tasks. At first, people delegated simple and repetitive tasks: computation, accounting, price comparison, long-term memory, etc. As the technology moved forward, we started using it for more complex stuff, mapping increasingly convoluted workflows, networking communications. </p>
<p>Now it’s time to delegate more complicated tasks like image recognition, translation or have systems play Go. This is it: as engines industrialized muscle, computers industrialize brains. We are commoditizing of intellectual services.</p>
<p>So now let’s talk about developers.</p>
<p>A software developer’s day to day job is writing code. Modeling specific processes in software, creating tools to industrialize intellectual services, improving value creation and processes to leverage money. With a nice ROI. This is why developer-managed companies became so successful: Microsoft, Apple, Google, Uber, Facebook, etc. They industrialized intellectual services, disrupted markets where brainpower was only human powered, non-scalable and unfocused. This is why Marc Andreessen <a href="https://www.google.fr/url?sa=t&amp;rct=j&amp;q=&amp;esrc=s&amp;source=web&amp;cd=1&amp;ved=0ahUKEwiC9aq3gZHMAhVCnRoKHZvjCAYQFggdMAA&amp;url=http%3A%2F%2Fwww.wsj.com%2Farticles%2FSB10001424053111903480904576512250915629460&amp;usg=AFQjCNEpxLV16wQRxtfYBSRXELeZMYqVlg&amp;sig2=e_4mm-udsojqGBeOe3_wew">said that « software is eating the world »</a>.</p>
<blockquote>
<p>The industrial revolution of intellectual services is here, and developers like you and me are at the heart of it.</p>
</blockquote>
<p>This professional evolution leads to a new way of producing software: more fluent, able to adapt the “brain power tool” faster, in a competitive market. Quickly adapting software makes for adapting businesses. It brings a huge advantage over the competition. The job of a developer must focus on short and continuous delivery, to compete in that market. This leads to a specialization of developers in various combinations of skills and tasks.</p>
<p>Some will go for low level systems. Others, on higher abstraction levels, will manage data or create data pipelining related to core business. That&#39;s why “developer” is more of a skill among others specialties, like banking, insurance or food, or people knowing how to model the process in a business domain, optimize and adapt it in a short time.</p>
<p>This is why we need to push forward efficient software factories, from dev to QA to hosting and production. Greatly reducing human and process costs to ship new software will give a decisive competitive edge.</p>
<p>This is why continuous delivery is now necessary.</p>
<p>Because it is driving competition between companies. Because it is reducing cost and time to deliver new software. Because it&#39;s providing the finest brain power at exactly the right time, and more important, ahead of others in the market.</p>
<p>The major change in company organization in the last few years is a pivot point. IT services evolved from being a cost center to being a company’s core, with software running the largest part of the business. It is becoming the biggest part of a company’s valuation. As developers, our role is to maintain this core and to make it evolve. We need to bring organisations to the next level, understand market and business logic, and deliver updates to all industrialized intellectual services.</p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>Why isn&#8217;t there a free tier in Clever Cloud</title>
		<link>https://www.clever.cloud/blog/company/2015/04/14/why-isnt-t-there-a-free-tier-in-clever-cloud/</link>
		
		<dc:creator><![CDATA[Quentin Adam]]></dc:creator>
		<pubDate>Tue, 14 Apr 2015 15:50:00 +0000</pubDate>
				<category><![CDATA[Company]]></category>
		<category><![CDATA[Hosting]]></category>
		<category><![CDATA[payment]]></category>
		<category><![CDATA[Pricing]]></category>
		<category><![CDATA[service]]></category>
		<category><![CDATA[thoughts]]></category>
		<guid isPermaLink="false">https://www2.cleverapps.io/wp/blog/technology/2015/04/14/why-isnt-t-there-a-free-tier-in-clever-cloud/</guid>

					<description><![CDATA[<p><img width="1400" height="540" src="https://cdn.clever-cloud.com/uploads/2021/08/no-free-tier-1.jpg" class="attachment-post-thumbnail size-post-thumbnail wp-post-image" alt="no free tier 1" decoding="async" loading="lazy" srcset="https://cdn.clever-cloud.com/uploads/2021/08/no-free-tier-1.jpg 1400w, https://cdn.clever-cloud.com/uploads/2021/08/no-free-tier-1-300x116.jpg 300w, https://cdn.clever-cloud.com/uploads/2021/08/no-free-tier-1-1024x395.jpg 1024w, https://cdn.clever-cloud.com/uploads/2021/08/no-free-tier-1-768x296.jpg 768w, https://cdn.clever-cloud.com/uploads/2021/08/no-free-tier-1-1368x528.jpg 1368w" sizes="auto, (max-width: 1400px) 100vw, 1400px" /></p><p>Do you know that hosting is one of the nastiest business out there? Hardware, bandwidth suck up huge amounts of money and energy. But some hosting companies want to give it for free, forever. And people keep asking me “do you have a free plan?”</p>
<span id="more-2743"></span>

<p>The problem is quite basic. Hosting the web&#39;s &quot;hello world&quot; applications for zero money is not a sustainable business model. Most of all, we should really ask ourselves: is it really useful to humanity? The problem with free offerings is that it’s killing product value: nobody really takes care of a free product.  </p>
<p>At Clever Cloud, we have built a great platform.<br>We’ve worked with developers to help them build great applications, be more efficient, and sustain huge traffic surges without stress.  </p>
<p>Our job is not to host unfinished side projects.</p>
<blockquote>
<p>Hosting the web&#39;s &quot;hello world&quot; applications for zero money is not a sustainable business model. Most of all, we should really ask ourselves: is it really useful to humanity?</p>
</blockquote>
<p>Since free tier costs money, who really pays for it? Loyal and paying customers, of course. And that’s just not fair. I prefer to say: our price is the right price. We are not making you pay for a poor marketing idea. If you are not ok with our price, don&#39;t worry.</p>
<p>We can always agree on something: just email us at <a href="mailto:&#115;&#x61;&#108;&#101;&#x73;&#x40;&#99;&#x6c;&#101;&#118;&#101;&#114;&#x2d;&#99;&#108;&#111;&#x75;&#x64;&#46;&#x63;&#111;&#x6d;">&#115;&#x61;&#108;&#101;&#x73;&#x40;&#99;&#x6c;&#101;&#118;&#101;&#114;&#x2d;&#99;&#108;&#111;&#x75;&#x64;&#46;&#x63;&#111;&#x6d;</a>.</p>
<p>But the problem about free tier goes even deeper: this poor marketing strategy is lowering the overall customer perception of PaaS. What doesn’t have a price doesn’t have any value, and the idea that PaaS provides no value is a deeply entrenched misconception. This is one of the reasons the PaaS market has taken so long to emerge.</p>
<h3 id="can-clever-cloud-ever-be-free">Can Clever Cloud ever be free?</h3>
<p>Sure, we help open-source projects, charity, media and other projects by giving them free hosting. If you think your project deserves it, just send me an email: <a href="mailto:&#x71;&#117;&#101;&#110;&#116;&#x69;&#110;&#x2e;&#x61;&#x64;&#x61;&#109;&#x40;&#99;&#108;&#101;&#x76;&#x65;&#114;&#45;&#99;&#x6c;&#x6f;&#117;&#100;&#x2e;&#99;&#x6f;&#x6d;">&#x71;&#117;&#101;&#110;&#116;&#x69;&#110;&#x2e;&#x61;&#x64;&#x61;&#109;&#x40;&#99;&#108;&#101;&#x76;&#x65;&#114;&#45;&#99;&#x6c;&#x6f;&#117;&#100;&#x2e;&#99;&#x6f;&#x6d;</a>.</p>
<p><em>Post Scriptum</em>: I’m really happy to see Heroku changing their point of view on this and slowly nerfing their free trial offer. The industry, and the web in general, can only benefit from it.</p>
<style type="text/css">
@media (min-width: 661px)
.content .pullquote {
  display: block;
}
@media (min-width: 661px)
.content .pullquote {
  float: left;
}
@media (min-width: 961px)
.content .pullquote {
  margin: 64px 64px 64px -100px;
}
.pullquote {
  background: #fff;
  max-width: 300px;
  position: relative;
  background: #fff;
  border-bottom: 1px solid rgba(0,0,0,0.18);
  border-top: 10px solid #000;
  display: none;
  font-family: brandon-text-wired,brandon-text,brandon-grotesque-1,brandon-grotesque-2,'Gill Sans',HelveticaNeue-Bold,'Helvetica Neue Bold','Helvetica Neue',Helvetica,Arial,'Lucida Grande',sans-serif;
  font-size: 24px;
  font-style: normal;
  font-weight: 400;
  line-height: 27px;
  padding: 16px 0;
  width: 300px;
}
</style>
]]></description>
										<content:encoded><![CDATA[<p><img width="1400" height="540" src="https://cdn.clever-cloud.com/uploads/2021/08/no-free-tier-1.jpg" class="attachment-post-thumbnail size-post-thumbnail wp-post-image" alt="no free tier 1" decoding="async" loading="lazy" srcset="https://cdn.clever-cloud.com/uploads/2021/08/no-free-tier-1.jpg 1400w, https://cdn.clever-cloud.com/uploads/2021/08/no-free-tier-1-300x116.jpg 300w, https://cdn.clever-cloud.com/uploads/2021/08/no-free-tier-1-1024x395.jpg 1024w, https://cdn.clever-cloud.com/uploads/2021/08/no-free-tier-1-768x296.jpg 768w, https://cdn.clever-cloud.com/uploads/2021/08/no-free-tier-1-1368x528.jpg 1368w" sizes="auto, (max-width: 1400px) 100vw, 1400px" /></p><p>Do you know that hosting is one of the nastiest business out there? Hardware, bandwidth suck up huge amounts of money and energy. But some hosting companies want to give it for free, forever. And people keep asking me “do you have a free plan?”</p>
<span id="more-2743"></span>

<p>The problem is quite basic. Hosting the web&#39;s &quot;hello world&quot; applications for zero money is not a sustainable business model. Most of all, we should really ask ourselves: is it really useful to humanity? The problem with free offerings is that it’s killing product value: nobody really takes care of a free product.  </p>
<p>At Clever Cloud, we have built a great platform.<br>We’ve worked with developers to help them build great applications, be more efficient, and sustain huge traffic surges without stress.  </p>
<p>Our job is not to host unfinished side projects.</p>
<blockquote>
<p>Hosting the web&#39;s &quot;hello world&quot; applications for zero money is not a sustainable business model. Most of all, we should really ask ourselves: is it really useful to humanity?</p>
</blockquote>
<p>Since free tier costs money, who really pays for it? Loyal and paying customers, of course. And that’s just not fair. I prefer to say: our price is the right price. We are not making you pay for a poor marketing idea. If you are not ok with our price, don&#39;t worry.</p>
<p>We can always agree on something: just email us at <a href="mailto:&#115;&#x61;&#108;&#101;&#x73;&#x40;&#99;&#x6c;&#101;&#118;&#101;&#114;&#x2d;&#99;&#108;&#111;&#x75;&#x64;&#46;&#x63;&#111;&#x6d;">&#115;&#x61;&#108;&#101;&#x73;&#x40;&#99;&#x6c;&#101;&#118;&#101;&#114;&#x2d;&#99;&#108;&#111;&#x75;&#x64;&#46;&#x63;&#111;&#x6d;</a>.</p>
<p>But the problem about free tier goes even deeper: this poor marketing strategy is lowering the overall customer perception of PaaS. What doesn’t have a price doesn’t have any value, and the idea that PaaS provides no value is a deeply entrenched misconception. This is one of the reasons the PaaS market has taken so long to emerge.</p>
<h3 id="can-clever-cloud-ever-be-free">Can Clever Cloud ever be free?</h3>
<p>Sure, we help open-source projects, charity, media and other projects by giving them free hosting. If you think your project deserves it, just send me an email: <a href="mailto:&#x71;&#117;&#101;&#110;&#116;&#x69;&#110;&#x2e;&#x61;&#x64;&#x61;&#109;&#x40;&#99;&#108;&#101;&#x76;&#x65;&#114;&#45;&#99;&#x6c;&#x6f;&#117;&#100;&#x2e;&#99;&#x6f;&#x6d;">&#x71;&#117;&#101;&#110;&#116;&#x69;&#110;&#x2e;&#x61;&#x64;&#x61;&#109;&#x40;&#99;&#108;&#101;&#x76;&#x65;&#114;&#45;&#99;&#x6c;&#x6f;&#117;&#100;&#x2e;&#99;&#x6f;&#x6d;</a>.</p>
<p><em>Post Scriptum</em>: I’m really happy to see Heroku changing their point of view on this and slowly nerfing their free trial offer. The industry, and the web in general, can only benefit from it.</p>
<style type="text/css">
@media (min-width: 661px)
.content .pullquote {
  display: block;
}
@media (min-width: 661px)
.content .pullquote {
  float: left;
}
@media (min-width: 961px)
.content .pullquote {
  margin: 64px 64px 64px -100px;
}
.pullquote {
  background: #fff;
  max-width: 300px;
  position: relative;
  background: #fff;
  border-bottom: 1px solid rgba(0,0,0,0.18);
  border-top: 10px solid #000;
  display: none;
  font-family: brandon-text-wired,brandon-text,brandon-grotesque-1,brandon-grotesque-2,'Gill Sans',HelveticaNeue-Bold,'Helvetica Neue Bold','Helvetica Neue',Helvetica,Arial,'Lucida Grande',sans-serif;
  font-size: 24px;
  font-style: normal;
  font-weight: 400;
  line-height: 27px;
  padding: 16px 0;
  width: 300px;
}
</style>
]]></content:encoded>
					
		
		
			</item>
	</channel>
</rss>
