aws-samples / aws-iot-twinmaker-samples

Apache License 2.0
97 stars 77 forks source link

unable to execute 'x86_64-linux-gnu-gcc': No such file or directory #86

Closed cm-rwakatsuki closed 1 year ago

cm-rwakatsuki commented 1 year ago

I tried AWS IoT TwinMaker Insights , but I'm having trouble running the cdk deploy command on cloud9 Environment.

$ cdk deploy --all --require-approval never                    

✨  Synthesis time: 18.38s

CookieFactoryKdaStack: building assets...

current credentials could not be used to assume 'arn:aws:iam::000000000000:role/cdk-hnb659fds-deploy-role-000000000000-us-east-1', but are for the right account. Proceeding anyway.
[0%] start: Building 9ac91652bed689e137a8c2dc37127d334623e1706c485e737842c897a9e2fa64:000000000000-us-east-1
[100%] success: Built 9ac91652bed689e137a8c2dc37127d334623e1706c485e737842c897a9e2fa64:000000000000-us-east-1

CookieFactoryKdaStack: assets built

CookieFactorySageMakerStack: building assets...

current credentials could not be used to assume 'arn:aws:iam::000000000000:role/cdk-hnb659fds-deploy-role-000000000000-us-east-1', but are for the right account. Proceeding anyway.
[0%] start: Building b13c84220b58e4ebc58b6534d32c90621be7a29ba8e292daa1b3fea7c9100af2:000000000000-us-east-1
[0%] start: Building 6c86094f4acfcf2f82ef96efa77c98f0485abe716d705290350e419445a6ac06:000000000000-us-east-1
[0%] start: Building e1d3d136595270ead4b70f507ab0fc6e83efa762a3cbfdbd3527574738b9e29b:000000000000-us-east-1
[0%] start: Building 4afdcd85010adc84f46c5851a7f4baf15718f79c83916fb4c118f2eea5f1024f:000000000000-us-east-1
[25%] success: Built b13c84220b58e4ebc58b6534d32c90621be7a29ba8e292daa1b3fea7c9100af2:000000000000-us-east-1
[50%] success: Built 6c86094f4acfcf2f82ef96efa77c98f0485abe716d705290350e419445a6ac06:000000000000-us-east-1
[75%] success: Built e1d3d136595270ead4b70f507ab0fc6e83efa762a3cbfdbd3527574738b9e29b:000000000000-us-east-1
current credentials could not be used to assume 'arn:aws:iam::000000000000:role/cdk-hnb659fds-image-publishing-role-000000000000-us-east-1', but are for the right account. Proceeding anyway.
Sending build context to Docker daemon  160.8kB
Step 1/11 : FROM ubuntu:18.04
 ---> 251b86c83674
Step 2/11 : RUN apt-get -y update && apt-get install -y --no-install-recommends          wget          python3-pip          python3-matplotlib          python3-setuptools          nginx          cmake          ca-certificates     && cd /usr/local/bin     && ln -s /usr/bin/python3.6 python     && rm -rf /var/lib/apt/lists/*
 ---> Using cache
 ---> 7d6a64b9cb3a
Step 3/11 : RUN ln -s /usr/bin/python3 /usr/bin/python
 ---> Using cache
 ---> 1d8830efe4c1
Step 4/11 : RUN ln -s /usr/bin/pip3 /usr/bin/pip
 ---> Using cache
 ---> 737f976d9f6c
Step 5/11 : RUN pip --no-cache-dir install matplotlib pathlib numpy==1.16.2 scipy==1.2.1 scikit-learn==0.20.2 pandas flask gunicorn gevent==1.4 fmpy==0.3.1
 ---> Running in 2d5485e31f80
Requirement already satisfied: matplotlib in /usr/lib/python3/dist-packages
Collecting pathlib
  Downloading https://files.pythonhosted.org/packages/78/f9/690a8600b93c332de3ab4a344a4ac34f00c8f104917061f779db6a918ed6/pathlib-1.0.1-py3-none-any.whl
Collecting numpy==1.16.2
  Downloading https://files.pythonhosted.org/packages/35/d5/4f8410ac303e690144f0a0603c4b8fd3b986feb2749c435f7cdbb288f17e/numpy-1.16.2-cp36-cp36m-manylinux1_x86_64.whl (17.3MB)
Collecting scipy==1.2.1
  Downloading https://files.pythonhosted.org/packages/7f/5f/c48860704092933bf1c4c1574a8de1ffd16bf4fde8bab190d747598844b2/scipy-1.2.1-cp36-cp36m-manylinux1_x86_64.whl (24.8MB)
Collecting scikit-learn==0.20.2
  Downloading https://files.pythonhosted.org/packages/0d/3a/b92670f5c368c20329ecc4c255993fae7934564d485c3ed7ea7b8da7f741/scikit_learn-0.20.2-cp36-cp36m-manylinux1_x86_64.whl (5.4MB)
Collecting pandas
  Downloading https://files.pythonhosted.org/packages/c3/e2/00cacecafbab071c787019f00ad84ca3185952f6bb9bca9550ed83870d4d/pandas-1.1.5-cp36-cp36m-manylinux1_x86_64.whl (9.5MB)
Collecting flask
  Downloading https://files.pythonhosted.org/packages/cd/77/59df23681f4fd19b7cbbb5e92484d46ad587554f5d490f33ef907e456132/Flask-2.0.3-py3-none-any.whl (95kB)
Collecting gunicorn
  Downloading https://files.pythonhosted.org/packages/e4/dd/5b190393e6066286773a67dfcc2f9492058e9b57c4867a95f1ba5caf0a83/gunicorn-20.1.0-py3-none-any.whl (79kB)
Collecting gevent==1.4
  Downloading https://files.pythonhosted.org/packages/f2/ca/5b5962361ed832847b6b2f9a2d0452c8c2f29a93baef850bb8ad067c7bf9/gevent-1.4.0-cp36-cp36m-manylinux1_x86_64.whl (5.5MB)
Collecting fmpy==0.3.1
  Downloading https://files.pythonhosted.org/packages/93/12/524dfcfd08ffff4ef60b1eb407e685f862d8a1be4d71092b7328695c7559/FMPy-0.3.1-py3-none-any.whl (4.4MB)
Requirement already satisfied: pytz>=2017.2 in /usr/lib/python3/dist-packages (from pandas)
Collecting python-dateutil>=2.7.3 (from pandas)
  Downloading https://files.pythonhosted.org/packages/36/7a/87837f39d0296e723bb9b62bbb257d0355c7f6128853c78955f57342a56d/python_dateutil-2.8.2-py2.py3-none-any.whl (247kB)
Collecting click>=7.1.2 (from flask)
  Downloading https://files.pythonhosted.org/packages/4a/a8/0b2ced25639fb20cc1c9784de90a8c25f9504a7f18cd8b5397bd61696d7d/click-8.0.4-py3-none-any.whl (97kB)
Collecting Jinja2>=3.0 (from flask)
  Downloading https://files.pythonhosted.org/packages/20/9a/e5d9ec41927401e41aea8af6d16e78b5e612bca4699d417f646a9610a076/Jinja2-3.0.3-py3-none-any.whl (133kB)
Collecting Werkzeug>=2.0 (from flask)
  Downloading https://files.pythonhosted.org/packages/f4/f3/22afbdb20cc4654b10c98043414a14057cd27fdba9d4ae61cea596000ba2/Werkzeug-2.0.3-py3-none-any.whl (289kB)
Collecting itsdangerous>=2.0 (from flask)
  Downloading https://files.pythonhosted.org/packages/9c/96/26f935afba9cd6140216da5add223a0c465b99d0f112b68a4ca426441019/itsdangerous-2.0.1-py3-none-any.whl
Requirement already satisfied: setuptools>=3.0 in /usr/lib/python3/dist-packages (from gunicorn)
Collecting greenlet>=0.4.14; platform_python_implementation == "CPython" (from gevent==1.4)
  Downloading https://files.pythonhosted.org/packages/fd/6a/f07b0028baff9bca61ecfcd9ee021e7e33369da8094f00eff409f2ff32be/greenlet-2.0.1.tar.gz (163kB)
Collecting attrs (from fmpy==0.3.1)
  Downloading https://files.pythonhosted.org/packages/fb/6e/6f83bf616d2becdf333a1640f1d463fef3150e2e926b7010cb0f81c95e88/attrs-22.2.0-py3-none-any.whl (60kB)
Collecting msgpack (from fmpy==0.3.1)
  Downloading https://files.pythonhosted.org/packages/22/44/0829b19ac243211d1d2bd759999aa92196c546518b0be91de9cacc98122a/msgpack-1.0.4.tar.gz (128kB)
Collecting lxml (from fmpy==0.3.1)
  Downloading https://files.pythonhosted.org/packages/6d/b9/44f7e3b8a27eeef778188c50ad11feb46c7572f06227b4842188730591db/lxml-4.9.2-cp36-cp36m-manylinux_2_5_x86_64.manylinux1_x86_64.whl (5.8MB)
Collecting lark-parser (from fmpy==0.3.1)
  Downloading https://files.pythonhosted.org/packages/76/00/90f05db333fe1aa6b6ffea83a35425b7d53ea95c8bba0b1597f226cf1d5f/lark_parser-0.12.0-py2.py3-none-any.whl (103kB)
Requirement already satisfied: six>=1.5 in /usr/lib/python3/dist-packages (from python-dateutil>=2.7.3->pandas)
Collecting importlib-metadata; python_version < "3.8" (from click>=7.1.2->flask)
  Downloading https://files.pythonhosted.org/packages/a0/a1/b153a0a4caf7a7e3f15c2cd56c7702e2cf3d89b1b359d1f1c5e59d68f4ce/importlib_metadata-4.8.3-py3-none-any.whl
Collecting MarkupSafe>=2.0 (from Jinja2>=3.0->flask)
  Downloading https://files.pythonhosted.org/packages/fc/d6/57f9a97e56447a1e340f8574836d3b636e2c14de304943836bd645fa9c7e/MarkupSafe-2.0.1-cp36-cp36m-manylinux1_x86_64.whl
Collecting dataclasses; python_version < "3.7" (from Werkzeug>=2.0->flask)
  Downloading https://files.pythonhosted.org/packages/fe/ca/75fac5856ab5cfa51bbbcefa250182e50441074fdc3f803f6e76451fab43/dataclasses-0.8-py3-none-any.whl
Collecting zipp>=0.5 (from importlib-metadata; python_version < "3.8"->click>=7.1.2->flask)
  Downloading https://files.pythonhosted.org/packages/bd/df/d4a4974a3e3957fd1c1fa3082366d7fff6e428ddb55f074bf64876f8e8ad/zipp-3.6.0-py3-none-any.whl
Collecting typing-extensions>=3.6.4; python_version < "3.8" (from importlib-metadata; python_version < "3.8"->click>=7.1.2->flask)
  Downloading https://files.pythonhosted.org/packages/45/6b/44f7f8f1e110027cf88956b59f2fad776cca7e1704396d043f89effd3a0e/typing_extensions-4.1.1-py3-none-any.whl
Installing collected packages: pathlib, numpy, scipy, scikit-learn, python-dateutil, pandas, zipp, typing-extensions, importlib-metadata, click, MarkupSafe, Jinja2, dataclasses, Werkzeug, itsdangerous, flask, gunicorn, greenlet, gevent, attrs, msgpack, lxml, lark-parser, fmpy
  Found existing installation: numpy 1.13.3
    Not uninstalling numpy at /usr/lib/python3/dist-packages, outside environment /usr
  Found existing installation: python-dateutil 2.6.1
    Not uninstalling python-dateutil at /usr/lib/python3/dist-packages, outside environment /usr
  Running setup.py install for greenlet: started
    Running setup.py install for greenlet: finished with status 'error'
    Complete output from command /usr/bin/python3 -u -c "import setuptools, tokenize;__file__='/tmp/pip-build-noscv1ag/greenlet/setup.py';f=getattr(tokenize, 'open', open)(__file__);code=f.read().replace('\r\n', '\n');f.close();exec(compile(code, __file__, 'exec'))" install --record /tmp/pip-_7ohigw7-record/install-record.txt --single-version-externally-managed --compile:
    /usr/lib/python3.6/distutils/dist.py:261: UserWarning: Unknown distribution option: 'long_description_content_type'
      warnings.warn(msg)
    running install
    running build
    running build_py
    creating build
    creating build/lib.linux-x86_64-3.6
    creating build/lib.linux-x86_64-3.6/greenlet
    copying src/greenlet/__init__.py -> build/lib.linux-x86_64-3.6/greenlet
    creating build/lib.linux-x86_64-3.6/greenlet/platform
    copying src/greenlet/platform/__init__.py -> build/lib.linux-x86_64-3.6/greenlet/platform
    creating build/lib.linux-x86_64-3.6/greenlet/tests
    copying src/greenlet/tests/__init__.py -> build/lib.linux-x86_64-3.6/greenlet/tests
    copying src/greenlet/tests/leakcheck.py -> build/lib.linux-x86_64-3.6/greenlet/tests
    copying src/greenlet/tests/test_contextvars.py -> build/lib.linux-x86_64-3.6/greenlet/tests
    copying src/greenlet/tests/test_cpp.py -> build/lib.linux-x86_64-3.6/greenlet/tests
    copying src/greenlet/tests/test_extension_interface.py -> build/lib.linux-x86_64-3.6/greenlet/tests
    copying src/greenlet/tests/test_gc.py -> build/lib.linux-x86_64-3.6/greenlet/tests
    copying src/greenlet/tests/test_generator.py -> build/lib.linux-x86_64-3.6/greenlet/tests
    copying src/greenlet/tests/test_generator_nested.py -> build/lib.linux-x86_64-3.6/greenlet/tests
    copying src/greenlet/tests/test_greenlet.py -> build/lib.linux-x86_64-3.6/greenlet/tests
    copying src/greenlet/tests/test_greenlet_trash.py -> build/lib.linux-x86_64-3.6/greenlet/tests
    copying src/greenlet/tests/test_leaks.py -> build/lib.linux-x86_64-3.6/greenlet/tests
    copying src/greenlet/tests/test_stack_saved.py -> build/lib.linux-x86_64-3.6/greenlet/tests
    copying src/greenlet/tests/test_throw.py -> build/lib.linux-x86_64-3.6/greenlet/tests
    copying src/greenlet/tests/test_tracing.py -> build/lib.linux-x86_64-3.6/greenlet/tests
    copying src/greenlet/tests/test_version.py -> build/lib.linux-x86_64-3.6/greenlet/tests
    copying src/greenlet/tests/test_weakref.py -> build/lib.linux-x86_64-3.6/greenlet/tests
    running egg_info
    writing src/greenlet.egg-info/PKG-INFO
    writing dependency_links to src/greenlet.egg-info/dependency_links.txt
    writing requirements to src/greenlet.egg-info/requires.txt
    writing top-level names to src/greenlet.egg-info/top_level.txt
    reading manifest file 'src/greenlet.egg-info/SOURCES.txt'
    reading manifest template 'MANIFEST.in'
    warning: no previously-included files found matching 'benchmarks/*.json'
    no previously-included directories found matching 'docs/_build'
    warning: no files found matching '*.py' under directory 'appveyor'
    warning: no previously-included files matching '*.pyc' found anywhere in distribution
    warning: no previously-included files matching '*.pyd' found anywhere in distribution
    warning: no previously-included files matching '*.so' found anywhere in distribution
    warning: no previously-included files matching '.coverage' found anywhere in distribution
    writing manifest file 'src/greenlet.egg-info/SOURCES.txt'
    copying src/greenlet/greenlet.cpp -> build/lib.linux-x86_64-3.6/greenlet
    copying src/greenlet/greenlet.h -> build/lib.linux-x86_64-3.6/greenlet
    copying src/greenlet/greenlet_allocator.hpp -> build/lib.linux-x86_64-3.6/greenlet
    copying src/greenlet/greenlet_compiler_compat.hpp -> build/lib.linux-x86_64-3.6/greenlet
    copying src/greenlet/greenlet_cpython_compat.hpp -> build/lib.linux-x86_64-3.6/greenlet
    copying src/greenlet/greenlet_exceptions.hpp -> build/lib.linux-x86_64-3.6/greenlet
    copying src/greenlet/greenlet_greenlet.hpp -> build/lib.linux-x86_64-3.6/greenlet
    copying src/greenlet/greenlet_internal.hpp -> build/lib.linux-x86_64-3.6/greenlet
    copying src/greenlet/greenlet_refs.hpp -> build/lib.linux-x86_64-3.6/greenlet
    copying src/greenlet/greenlet_slp_switch.hpp -> build/lib.linux-x86_64-3.6/greenlet
    copying src/greenlet/greenlet_thread_state.hpp -> build/lib.linux-x86_64-3.6/greenlet
    copying src/greenlet/greenlet_thread_state_dict_cleanup.hpp -> build/lib.linux-x86_64-3.6/greenlet
    copying src/greenlet/greenlet_thread_support.hpp -> build/lib.linux-x86_64-3.6/greenlet
    copying src/greenlet/slp_platformselect.h -> build/lib.linux-x86_64-3.6/greenlet
    copying src/greenlet/platform/setup_switch_x64_masm.cmd -> build/lib.linux-x86_64-3.6/greenlet/platform
    copying src/greenlet/platform/switch_aarch64_gcc.h -> build/lib.linux-x86_64-3.6/greenlet/platform
    copying src/greenlet/platform/switch_alpha_unix.h -> build/lib.linux-x86_64-3.6/greenlet/platform
    copying src/greenlet/platform/switch_amd64_unix.h -> build/lib.linux-x86_64-3.6/greenlet/platform
    copying src/greenlet/platform/switch_arm32_gcc.h -> build/lib.linux-x86_64-3.6/greenlet/platform
    copying src/greenlet/platform/switch_arm32_ios.h -> build/lib.linux-x86_64-3.6/greenlet/platform
    copying src/greenlet/platform/switch_arm64_masm.asm -> build/lib.linux-x86_64-3.6/greenlet/platform
    copying src/greenlet/platform/switch_arm64_masm.obj -> build/lib.linux-x86_64-3.6/greenlet/platform
    copying src/greenlet/platform/switch_arm64_msvc.h -> build/lib.linux-x86_64-3.6/greenlet/platform
    copying src/greenlet/platform/switch_csky_gcc.h -> build/lib.linux-x86_64-3.6/greenlet/platform
    copying src/greenlet/platform/switch_m68k_gcc.h -> build/lib.linux-x86_64-3.6/greenlet/platform
    copying src/greenlet/platform/switch_mips_unix.h -> build/lib.linux-x86_64-3.6/greenlet/platform
    copying src/greenlet/platform/switch_ppc64_aix.h -> build/lib.linux-x86_64-3.6/greenlet/platform
    copying src/greenlet/platform/switch_ppc64_linux.h -> build/lib.linux-x86_64-3.6/greenlet/platform
    copying src/greenlet/platform/switch_ppc_aix.h -> build/lib.linux-x86_64-3.6/greenlet/platform
    copying src/greenlet/platform/switch_ppc_linux.h -> build/lib.linux-x86_64-3.6/greenlet/platform
    copying src/greenlet/platform/switch_ppc_macosx.h -> build/lib.linux-x86_64-3.6/greenlet/platform
    copying src/greenlet/platform/switch_ppc_unix.h -> build/lib.linux-x86_64-3.6/greenlet/platform
    copying src/greenlet/platform/switch_riscv_unix.h -> build/lib.linux-x86_64-3.6/greenlet/platform
    copying src/greenlet/platform/switch_s390_unix.h -> build/lib.linux-x86_64-3.6/greenlet/platform
    copying src/greenlet/platform/switch_sparc_sun_gcc.h -> build/lib.linux-x86_64-3.6/greenlet/platform
    copying src/greenlet/platform/switch_x32_unix.h -> build/lib.linux-x86_64-3.6/greenlet/platform
    copying src/greenlet/platform/switch_x64_masm.asm -> build/lib.linux-x86_64-3.6/greenlet/platform
    copying src/greenlet/platform/switch_x64_masm.obj -> build/lib.linux-x86_64-3.6/greenlet/platform
    copying src/greenlet/platform/switch_x64_msvc.h -> build/lib.linux-x86_64-3.6/greenlet/platform
    copying src/greenlet/platform/switch_x86_msvc.h -> build/lib.linux-x86_64-3.6/greenlet/platform
    copying src/greenlet/platform/switch_x86_unix.h -> build/lib.linux-x86_64-3.6/greenlet/platform
    copying src/greenlet/tests/_test_extension.c -> build/lib.linux-x86_64-3.6/greenlet/tests
    copying src/greenlet/tests/_test_extension_cpp.cpp -> build/lib.linux-x86_64-3.6/greenlet/tests
    running build_ext
    building 'greenlet._greenlet' extension
    creating build/temp.linux-x86_64-3.6
    creating build/temp.linux-x86_64-3.6/src
    creating build/temp.linux-x86_64-3.6/src/greenlet
    x86_64-linux-gnu-gcc -pthread -DNDEBUG -g -fwrapv -O2 -Wall -g -fstack-protector-strong -Wformat -Werror=format-security -Wdate-time -D_FORTIFY_SOURCE=2 -fPIC -I/usr/include/python3.6m -c src/greenlet/greenlet.cpp -o build/temp.linux-x86_64-3.6/src/greenlet/greenlet.o
    unable to execute 'x86_64-linux-gnu-gcc': No such file or directory
    error: command 'x86_64-linux-gnu-gcc' failed with exit status 1

    ----------------------------------------
Command "/usr/bin/python3 -u -c "import setuptools, tokenize;__file__='/tmp/pip-build-noscv1ag/greenlet/setup.py';f=getattr(tokenize, 'open', open)(__file__);code=f.read().replace('\r\n', '\n');f.close();exec(compile(code, __file__, 'exec'))" install --record /tmp/pip-_7ohigw7-record/install-record.txt --single-version-externally-managed --compile" failed with error code 1 in /tmp/pip-build-noscv1ag/greenlet/
The command '/bin/sh -c pip --no-cache-dir install matplotlib pathlib numpy==1.16.2 scipy==1.2.1 scikit-learn==0.20.2 pandas flask gunicorn gevent==1.4 fmpy==0.3.1' returned a non-zero code: 1
[100%] fail: docker build --tag cdkasset-4afdcd85010adc84f46c5851a7f4baf15718f79c83916fb4c118f2eea5f1024f . exited with error code 1: The command '/bin/sh -c pip --no-cache-dir install matplotlib pathlib numpy==1.16.2 scipy==1.2.1 scikit-learn==0.20.2 pandas flask gunicorn gevent==1.4 fmpy==0.3.1' returned a non-zero code: 1

 ❌ Building assets failed: Error: Building Assets Failed: Error: Failed to build one or more assets. See the error messages above for more information.
    at buildAllStackAssets (/home/ec2-user/.nvm/versions/node/v16.19.0/lib/node_modules/cdk/node_modules/aws-cdk/lib/build.ts:21:11)
    at processTicksAndRejections (node:internal/process/task_queues:96:5)
    at CdkToolkit.deploy (/home/ec2-user/.nvm/versions/node/v16.19.0/lib/node_modules/cdk/node_modules/aws-cdk/lib/cdk-toolkit.ts:197:9)
    at initCommandLine (/home/ec2-user/.nvm/versions/node/v16.19.0/lib/node_modules/cdk/node_modules/aws-cdk/lib/cli.ts:374:12)

Building Assets Failed: Error: Failed to build one or more assets. See the error messages above for more information.

Please tell me what shoud I do. Thanks.

stevenyang-aws commented 1 year ago

Hi @cm-rwakatsuki , to confirm are you using Amazon Linux 2 or Ubuntu Server 18.04 as the platform for Cloud9? From the error message, seems Ubuntu is used. If so, could you try the environment with Amazon Linux 2 and let us know the results? (Amazon Linux 2 is recommended in https://github.com/aws-samples/aws-iot-twinmaker-samples/blob/main/CLOUD9_SETUP.md).

cm-rwakatsuki commented 1 year ago

Yes, It is happening on Amazon Linux 2. image

hanamz commented 1 year ago

Thank you @cm-rwakatsuki for reaching out. Sorry for the inconvenience. We are investigating issue. Will get back to you ASAP.

hanamz commented 1 year ago

Hi @cm-rwakatsuki we have pushed changes to fix this issue. Could you please try again follow the updated instruction here? https://github.com/aws-samples/aws-iot-twinmaker-samples/blob/main/CLOUD9_SETUP.md

cm-rwakatsuki commented 1 year ago

@hanamz Thank you for your quick response and fix. I can now successfully run the command !

hanamz commented 1 year ago

@cm-rwakatsuki Do you mind briefly sharing the use cases that you plan to use our service for? Will be really helpful for us to evolve if we can get more datapoint directly from our customers. :)

cm-rwakatsuki commented 1 year ago

@hanamz Sorry, I don't have any use cases of IoT Twinmaker yet. Now I am trying to disseminate information about IoT TwinMaker by writing blogs in Japan. Blog posts are here.

hanamz commented 1 year ago

This is amazing! Thanks for sharing!