Carbon: How much is 1 ppm of CO2 in Earth atmosphere

On Earth day 2021 will be officially announced XPRIZE Carbon Removal sponsored by Elon Musk.  Now there is a carbon dioxide content in the atmosphere 412 ppm. It would be good to know how much is actually 1 ppm of carbon dioxide in the whole atmosphere.

The atmosphere has a mass of about 5.15×1018 kg. The average molecular weight of dry air, which can be used to calculate densities or to convert between mole fraction and mass fraction, is about 28.946 or 28.96 g/mol. Let’s take the first value of 28.946 g/mol or 0.028946 kg/mol. The whole atmosphere has then 5.15×1018 / 0.028946 = 1.77917×1020 mol. One part per million is then 1.77917×1014 mol. The weight of such amount of the carbon dioxide is then 1.77917×1014 * 0.044009 = 7.82997×1012 kg (or 7.82997×109 ton or 7.82997 gigaton).

The current concentration of CO2 is about 412 ppm by volume, having risen from pre-industrial levels of 280 ppm. Increase is 132 ppm. It represents 132 * 7.82997 = 1,033.55 giga ton, about 1 tera ton.

Related posts:
Carbon: What is a size of the 1 ton of CO2

Posted in workday | Tagged , , | Leave a comment

Carbon: What is a size of the 1 ton of CO2

On Earth day 2021 will be officially announced XPRIZE Carbon Removal sponsored by Elon Musk. We know now, that a scale model at a level of carbon removal of 1 ton of CO2 per day has to be demonstrated. So, what it means, how much is actually 1 ton of CO2?

Here are some carbon dioxide properties from Wikipedia:

Chemical formulaCO2
Molar mass44.009 g·mol−1
AppearanceColorless gas
OdorLow concentrations: none
High concentrations: sharp; acidic[1]
Density1562 kg/m3 (solid at 1 atm (100 kPa) and −78.5 °C (−109.3 °F))
1101 kg/m3 (liquid at saturation −37 °C (−35 °F))
1.977 kg/m3 (gas at 1 atm (100 kPa) and 0 °C (32 °F))

Now based on knowledge of the properties it’s possible to write what it means 1 ton = 1000 kg of CO2:
– 2.272262^4 mol (1000 / 0.044009)
– 509.2 m3 of gas (2.272262^4 * 0.02241) computed from Avogadro’s law
– 505.8 m3 of gas (1000 / 1.977) computed from density
– 0.908 m3 of liquid (1000 / 1101)
– 0.640 m3 of solid – dry ice (1000 / 1562)

One ton of the carbon dioxide can be result of burning 273 kg of pure carbon like graphite or diamante (1000 * 12 / 44). Or of the twice as much as of a wood.

Carbon dioxide content in fresh air (averaged between sea-level and 10 kPa level, i.e., about 30 km (19 mi) altitude) varies between 0.036% (360 ppm) and 0.041% (412 ppm). Let’s continue with value 0.0412%. Abbreviation ppm means parts per million. One square meter has 1 million square centimeters (100 x 100 x 100), so it has volume 412 square centimeters of the CO2. Now let’s ask a question, what is a volume of air with 1000 kg of CO2:
– 1.2277109^6 m3 (505.8 / 0.0412 / 100) or (505.8 / 412^-6)
Volume 1.2277109^6 m3 of fresh air in 2021 can be a cube of size 107 meters or a sphere with radius of 66.4 meters (diameter 132.9 m) with 1 ton of CO2.

Posted in workday | Tagged , , | Leave a comment


Did you find your WAN IPv4 address in the range to Then most likely your Internet Service Provider (ISP) is utilizing shared address space. Most likely that address would be behind Carrier-Grade NAT (CGN). See more RFC 6598.

Posted in Blogroll, workday | Tagged , | Leave a comment

Go webserver on Apache

Go language allows create very easily webserver. Let’s consider a full working example of a simple web server at implemented in the file web8080.go:

package main

import (

func handler(w http.ResponseWriter, r *http.Request) {
    fmt.Fprintf(w, "Hi there, I love %s!", r.URL.Path[1:])

func main() {
    http.HandleFunc("/", handler)
    log.Fatal(http.ListenAndServe(":8080", nil))

Code above could be one of the several web application implemented in go language. Each application should use different port, if running on the same server. Each port could be redirected to different virtual host implemented on Apache2 webserver. For example on Ubuntu 20.04 LTS we should add apache module:
a2enmod proxy proxy_http
Create virtual host configuration file /etc/apache2/sites-available/

<VirtualHost *:80>
        ProxyPass /
        ProxyPassReverse /

        ErrorLog ${APACHE_LOG_DIR}/error.log
        CustomLog ${APACHE_LOG_DIR}/access.log combined

Run command
so in the directory /etc/apache2/sites-enabled will be created symbolic link in similar way like by commands cd /etc/apache2/sites-enabled; ln -s ../sites-available/ .
Then reload apache server
systemctl reload apache
and you should be able browse and continue in development!

Posted in golang, workday | Tagged , , | Leave a comment

Weather: Daily Loop

Cooperative Institute for Research in the Atmosphere (CIRA) has a great page named Daily Loop. One can look to the weather almost in the real time.
We can be fascinated by view of the California wild fires:

2020-09-09 – Large fires burn along U.S. West Coast – GOES-17 GeoColor + Fire Temperature

2020-09-11 – Large swirl of smoke sits over Pacific – GOES-17 GeoColor

Although Winter weather in Minnesota is interesting as well:

2020-01-17 – Watch for blowing snow in southern Minnesota and northern Iowa – GOES-16 Natural Color (Day Land Cloud RGB)

2020-09-25 Evening situation partly cloudy, 2 hours loop from 6:40 PM CDT to 8:40 PM

Posted in workday | Leave a comment

Brief go lang programs

Here is list of brief go lang programs

Posted in golang, workday | Leave a comment

Google Cloud Next

Google Cloud Next conference is for year 2020 online, see

Here is a play list of the presentations in the last few years:

Posted in Blogroll, workday | Tagged | Leave a comment

REGEX at awk file

More complex awk text processing is better to put in the file. And there can be regex filter as well. Below is a simple example utilizing awk code in the file xml-info.awk, which prints information only for XML files.

$ ls -l
total 24
-rw-r--r-- 1 User User 9223 Jul 26 11:06 alpha.html
-rw-r--r-- 1 User User 6173 Jul 29 10:03 alpha.xml
-rw-r--r-- 1 User User 3227 Jul 29 10:43 beta.xml
BEGIN { print "Hello at BEGIN"}
 printf("filename: %s, size: %s\n", $9, $5);
END { print "Hello at END"}
$ ls -l | awk -f ../bin/xml-info.awk
Hello at BEGIN
filename: alpha.xml, size: 6173
filename: beta.xml, size: 3227
Hello at END
Posted in Blogroll, workday | Leave a comment

ssh password-less

Here are steps, how to do it in Linux type environment on LOCAL host:

  1. USER_REMOTE=username@remote-host
  2. ssh-keygen -t rsa #no password
  3. ssh $USER_REMOTE mkdir -p .ssh
  4. cat .ssh/ | ssh $USER_REMOTE ‘cat >> .ssh/authorized_keys’
  5. ssh $USER_REMOTE ‘chmod 700 .ssh; chmod 640 .ssh/authorized_keys’
  6. ssh $USER_REMOTE

Step 2 is necessary only if you don’t have file yet
Steps 3,4,5 need remote password
Steps 3 and 5 are not necessary, if the file .ssh/authorized_keys with appropriate access rights is already on remote host
Step 4 actually transfers the public key
Step 6 does not need password, you are there already, congratulations!

Posted in workday | Leave a comment

Hello Website on GKE Cluster

Let’s explore, how deploy web application “Hello Website” written in go language at Google Kubernetes Engine Cluster.

Source code for “Hello Website” in the file helloweb.go

package main

import (

func main() {
    http.HandleFunc("/", func(w http.ResponseWriter, r *http.Request) {
        fmt.Fprintf(w, "Hello website! You've requested: %s\n", r.URL.Path)

    http.ListenAndServe(":80", nil)

Source code for dockerfile

# image environment definition
FROM golang:1.14

WORKDIR /go/src/app
#copy current dir on local host to current dir on image, in this case workdir
COPY . .

#get all packages in current dir (.) and all subdirs (...), just download (-d)
RUN go get -d -v ./...
RUN go install -v ./...

CMD ["app"]


  1. At search for Kubernetes (k8s) and then enable k8s Engine API
  2. Create Docker image
    At authenticated terminal or cloud shell go to the directory with helloweb source files and do:
    docker build -t helloweb-container-image .
    docker images
    gcloud auth configure-docker
    docker tag helloweb-container-image<MY_PROJECT_ID>/helloweb-container-image:v1
    docker push<MY_PROJECT_ID>/helloweb-container-image:v1
    gcloud container images list
    gcloud container images list –<MY_PROJECT_ID>
  3. Create Kubernetes Engine cluster:
    gcloud config set compute/zone us-central1-a
    gcloud container clusters create helloweb-cluster1 –num-nodes=4
    gcloud container clusters get-credentials helloweb-cluster1
    kubectl create deployment hello-website –<MY_PROJECT_ID>/helloweb-container-image:v1
  4. Expose deployed workload
    kubectl expose deployment hello-website –type=LoadBalancer –name=hello-website-service –port=80 –target-port=80
    kubectl get services
  5. With your web browser, go to the EXTERNAL-IP to see Hello Website!

Posted in golang, workday | Tagged | Leave a comment