Javascript saves the world
Tags: javascript, serverless, azure, aws
Published: 2020-04-14 21:16:54

> When building apps, we focus on minimizing costs, time to market, bugs, bundle size, application speed, SEO, but we spend almost no effort trying to minimize the damage our applications are making to the environment.

# Global-Warming 
So Carbon dioxide (CO2) is a greenhouse gas that gets pumped to the atmosphere and acts like a blanket that traps heat.
There is also Methane (CH4) it has 25 times the heating potential of Carbon dioxide.

#### What is CO2e (Carbon Dioxide Equivalent)
It's 1 ton of Methane, 25 tons of Carbons + some other gases.

Google says it's 
> The standard unit for measuring carbon footprints. The idea is to express the impact of each different greenhouse gas in terms of the amount of CO2 that would create the same amount of warming.

There was a Paris Climate agreement in 2016 where 187 states agreed on trying to keep the increase in temperature to 2 degrees or ideally 1.5 degrees (We already reached 1 degree)

*No one cares about 2 degrees* We don't even feel it.
Let me tell you that there are species will extinct if this happened

> A report from the UN says that is likely we hit 3.2C by the end of the century 

# What happens when the climate rise 5°C
All water ice on the planet will meltdown, raising the sea levels a few dozen meters above the normal “sea levels” and destroying the coastlines, and it will be a catastrophic event obviously, and millions upon millions of animal species (discovered and Undiscovered) will die.

# We need to start reducing the climate rise curve

> ### *As a Developer you have an impact (A big one too)*

*Electricity is responsible for 30% of the CO2e.*
80% of the world's electricity is created from burning Fossil fuels. 
So don't waste electricity, because we destroying our planet to create some electricity so don't wast it.

---

### *Microsoft Azure* and *Google Cloud* are Carbon-neutral firms.
*Carbon neutral*: A product or company that's carbon neutral (or carbon-free) is removing the same amount of carbon dioxide it's emitting into the atmosphere to achieve net-zero carbon emissions, usually by purchasing carbon offsets or credits to make up the difference.

---

# Servers "Carbon" Cost
(The carbon released to create the electricity to run the server)
Let's talk about an absolute Dell server

### To run a server
It's about 600 kilograms of carbons that are the electrical cost of it was running at 100% for a year

### Idle server
Still costs electricity even nothing running on it, still cost about 25% or 150 kilograms of carbon a year 

### To create the server
If we said we created that particular server and got four yeara lifespan it produced 320 kilograms of carbon

So idle servers waste almost half a ton of CO2e per year (creation + idleness)

---

# What the hell is serverless?
It's an execution model where the cloud provider (AWS, Azure, or Google Cloud) is responsible for executing a piece of code by dynamically allocating the resources. And only charging for the amount of resources used to run the code.

# How serverless help
So when you use something like Microsoft Asure, Google Cloud or AWS your code gets executed next to my code, So we utilize all the servers at 100%, So no waste.

> ### Serverless is greener because
> CO2e was released to <u>create</u> the server
> CO2e was released to <u>power</u> the server
> If you don't run 100% of your server you are <u>wasting</u> CO2e
> #serverless run servers at 100%

---

# How to go Serverless in Node.js?
We have 
- Microsoft Azure Function 
- AWS Lambda Function
- Google Cloud Function

So there is a problem when you use azure function you got this
```javascript 
module.exports = async function(context, req) {
  context.log("Javascript HTTP trigger function processed a request.");

  if (req.query.name || (req.body && req.body.name)) {
    context.res = {
      // status: 200, /* Defaults to 200 */
      body: "Hello " + (req.query.name || req.body.name)
    };
  } else {
    context.res = {
      status: 400,
      body: "Please pass a name on the query string or in the request body"
    };
  }
};
```

## So we gonna use nestjs
### with Microsoft Azure
```
nest add @nestjs/azure-func-http
```
Basically, it adds or updates 10 files into your nest project to serverless application
And when you want to deploy (I recommend to) use a tool named Hexa
```
npm install -g @manekinekko/hexa
hexa init
hexa deploy
```

And you are good to go 

### To know more about nestjs with
- Microsoft Azure: go to [Nitr.ooo](https://nitr.ooo)
- Google Clouds: See [this video](https://fireship.io/snippets/setup-nestjs-on-cloud-functions/)
- AWS Lambda: Read this [article](https://keyholesoftware.com/2019/05/13/aws-lambda-with-nestjs/)

*I'm gonna write about serverless and nodejs again but tech-wise only, with AWS, Google and Azure*

---

#### Credits
Photo by [Ciprian Morar](https://unsplash.com/@ciprianmorar) on [Unsplash](https://unsplash.com/)

---

<center>**Thanks for reading**</center>