Hexa's Blog

K1 max & Nozzle 0.6mm

16/11/2024 @ Saigon 3D Print

This profile is tested with Creality Ender PLA filament. I only note which is the most important settings.

  • Nozzle: 0.6mm
  • Maximum volumetric speed: 30mm3/s
  • Layer height: 0.3mm
  • Nozzle temperature: 220C
  • Flow ratio: 1
  • Pressure Advance: 0.02
  • First layer:
    • outer wall speed: 50m/s
    • first infill speed: 105mm/s
  • Other layer:
    • outer speed: 105mm/s
    • inner speed: 125mm/s
    • Top surface speed: 105mm/s
[1] Speed settings
[1] Speed settings
  • Retraction
    • Length: 0.5mm
    • Z hop when retract: 0.2mm
    • Z hop type: spiral
    • Retraction speed: 40mm/s
[2] Retraction settings
[2] Retraction settings

Air filter

09/11/2024 @ Saigon Projects

I currently live in a mini apartment with its bathroom not having an exhaust system. This is a major issue.

In reality, it doesn’t need to be said; it’s very inconvenient. The landlord refuses to drill into the wall or make any repairs.

As I am unemployed and addicted to manufacturing, my products aren’t particularly innovative. Yes, they are a gas air purifier. My product is nothing new at all.

But why do I create them when I could just buy one? If I don’t work on simple tasks, even those that others have already done, I’ll never come up with any creative ideas or design anything better than what others have created before. And further, I won’t be able to make more complex products.

If profit is the top priority and time-saving is a goal, I’d look for something on Lazada or Shopee, and then I wouldn’t be able to create anything more refined!

By the way, here are some pictures of the product. Just for fun, I designed and 3D printed it myself.

[1] Plasticity design
[1] Plasticity design
[2] Product from left to right
[2] Product from left to right
[3] Product from right to left
[3] Product from right to left
[4] Activated cabon rack installed
[4] Activated cabon rack installed
[5] Activated cabon rack uninstalled
[5] Activated cabon rack uninstalled

At the time of creating this product, I didn’t have any measuring equipment, so I couldn’t check if the concentration of methanol and ammonia in the air purifier was accurate. I couldn’t even verify if my product really solves a problem or just has a placebo effect.

I hope not, but that’s how I feel about it!

Máy lọc không khí

08/11/2024 @ Saigon Projects

Tôi hiện tại đang sống trong một căn hộ mini mà phòng vệ sinh của nó không có hệ thống thoát khí. Thực sự là vấn đề này chả cần phải nói nhiều, nó rất bất tiện. Chủ căn hộ hoàn toàn không muốn đục tường hay sữa chữa gì cả.

Tôi thì lại đang thất nghiệp và nghiện chế tạo. Sản phẩm tôi làm cũng chả có gì mới. Đúng, nó là máy lọc khí. Sản phẩm chả có gì mới cả.

Nhưng tại sao tôi lại làm thay vì đi mua? Nếu tôi không chịu làm những cái đơn giản, thậm chí người khác đã làm rồi, tôi sẽ không bao giờ có tư duy sáng tạo hay thiết kế cũa những người đi trước. Và xa hơn, tôi cũng sẽ không thể làm ra những sản phẩm có tính phức tạp cao hơn.

Nếu đặt vấn đề lợi nhuận lên hàng đầu, tìm cách tiết kiệm thời gian, tôi sẽ lên lazada, shopee! Và rồi tôi sẽ không thể mạnh hơn được, tôi sẽ không thể tạo ra những thứ khác có độ tinh xảo cao hơn!

Dưới đây là một vài hình ảnh sản phẩm. Nhân tiện, sản phẩm được tôi thiết kế và in 3D.

[1] Thiết kế với Plasticity
[1] Thiết kế với Plasticity
[2] Ảnh chụp từ trái qua phải
[2] Ảnh chụp từ trái qua phải
[3] Ảnh chụp từ phải qua trái
[3] Ảnh chụp từ phải qua trái
[4] Sản phẩm với máng than hoạt tính đã được lắp đặt
[4] Sản phẩm với máng than hoạt tính đã được lắp đặt
[5] Sản phẩm với máng than hoạt tính chưa được lắp đặt
[5] Sản phẩm với máng than hoạt tính chưa được lắp đặt

Ở thời điểm tạo ra sản phẩm này, tôi ko có thiết bị đo đạc, kiểm tra nồng độ của methanol và amoniac, tôi hoàn toàn không thể kiểm tra xem sản phẩm tôi làm có thực sự giải quyết vấn đề hay không, hay nó chỉ là hiệu ứng palacebo!

Tôi hi vọng là không, cảm nhận của tôi là chính xác!

Setup Monero P2Pool

I. Go to https://github.com/SChernykh/p2pool, download & extract to /opt/

$ tree /opt/p2pool-v4.1-linux-x64

/opt/p2pool-v4.1-linux-x64
├── LICENSE
├── p2pool
├── p2pool.cache
├── p2pool_peers.txt
└── README.md

II. Create and edit /etc/systemd/system/p2pool.service

[Unit]
Description=Monero P2Pool
After=network.target

[Service]
WorkingDirectory=/opt/p2pool-v4.1-linux-x64
ExecStart=/opt/p2pool-v4.1-linux-x64/p2pool --host 127.0.0.1 --wallet YOUR_MAIN_WALLET_HERE
User=nguyenvinhlinh
RemainAfterExit=yes
Restart=on-failure
RestartSec=10
TimeoutStopSec=180

[Install]
WantedBy=multi-user.target

III. Port list

Description Port Port forwarding
P2Pool p2p 37889 YES
Stratum server 3333 YES

Creality K1 Max - User Configuration for Filament

13/09/2024 @ Saigon 3D Print

NOTE: Due to Creality Print bug, filament configuration gonna be missed after software restarts.

a. Filament

  • Filament > Pressure Advance: 0.2
  • Filament > Flow Ratio: 1
  • Filament > Print Temperature > Nozzle > First Layer: 230
  • Filament > Print Temperature > Nozzle > Other Layer: 230
  • Filament > Max volumetric speed: 27

b. Setting Override

  • Setting Override > Retraction > Length: 0.5
  • Setting Override > Retraction > Z hop type: Spiral
  • Setting Override > Retraction > Retraction Speed: 18

There are more settings gonna be reset but not important that much!

I. Filament

[1] Filament #1
[1] Filament #1
[2] Filament #2
[2] Filament #2
[3] Filament #3
[3] Filament #3
[4] Filament #4
[4] Filament #4
[5] Filament #5
[5] Filament #5

II. Cools

[6] Cool #1
[6] Cool #1
[7] Cool #2
[7] Cool #2
[8] Cool #3
[8] Cool #3

III. Setting Overrides

[9]  Setting Overrides #1
[9] Setting Overrides #1
[10] Setting Overrides #2
[10] Setting Overrides #2

IV. Advanced

[11] Advanced settings
[11] Advanced settings

V. Multimaterial

[12] Multimaterial #1
[12] Multimaterial #1
[13] Multimaterial #2
[13] Multimaterial #2

Doanh thu đầu tiên với máy in 3D

15/08/2024 @ Saigon Projects

Xin chào, bây giờ là tháng 8, vậy là đã 6 tháng từ khi tôi nghỉ khỏi công ty cũ TTEK (29/2/2024). Áp lực công việc là quá lớn, sức khỏe và cụ thể là cột sống của tôi không thể chịu đựng nổi, tôi hoàn toàn không có giải pháp nào ngoài trừ phải nghỉ việc.

Trong khoảng thời gian nghỉ việc, tôi hoàn toàn không có xin được trợ cấp thất nghiệp do giấy tờ gặp trục trặc. 3 tháng để làm giấy tờ có vẻ là quá ít với tôi.

  • Có 2 sổ bảo hiểm xã hội thay vì một sổ.
  • Thiếu tờ rời trong cuốn bảo hiểm xã hội.

Trong quá trình làm việc tại TTEK, tôi có tìm hiểu và tự học về thiết kế, cũng như là in 3D. Cảm ơn anh Tiến Minh RMIT đã bán cho em Creality Ender 3 Pro.

Ở thời điểm thất nghiệp hiện tại, may mắn làm sao, lại có người cần tôi đúng mảng này. Rất cảm ơn anh Dũng đã ủng hộ và hỗ trợ khoảng thời gian qua.

Mặt hàng tôi thiết kế là ống dẫn khí cho ASIC dòng KS0/KS0 Ultra. Với sản phẩm này, ASIC sẽ chạy mát hơn, bên cạnh đó cho phép việc mod firmware để chạy nhanh hơn. Một cái ống dẫn khí tôi bán với mức giá là 150,000 VND, ngay sau khi ra thiết kế, và tinh chỉnh. Khách hàng đã đặt ngay 10 chiếc và hứa hẹn có những đơn hàng sau.

Tôi thực sự rất vui khi mình đã có thể tự kiếm tiền mà không cần nhờ đến công ty, hay một đơn vị chủ quản. Tất nhiên là không thể nào nhiều bằng làm cho công ty TTEK được.

Dưới đây là mẫu tôi đã làm.

[1] Sản phẩm ống thoát khí
[1] Sản phẩm ống thoát khí

Còn đây là hình ảnh khách hàng đầu tiên, anh Dũng.

[2] Khách hàng đầu tiên
[2] Khách hàng đầu tiên

Cuối cùng, đây là hóa đơn VAT cho khách hàng.

[3] Hóa đơn VAT
[3] Hóa đơn VAT

Nếu mà bạn thắc mắc tên công ty tại sao lại là Nguyễn Hoàng, thì đó là hai chữ đầu tiên của tên ông ngoại tôi - Nguyễn Hoàng Nhu.

Google Search Console - Sitemap Indexing Error!

15/08/2024 @ Saigon etc

Today, I have seen a very weird error while using Google Search Console to index my sitemap. After I submit my sitemap https://hexalink.xyz/sitemap.xml. it always shows error: Couldn't fetch. I think you can try it yourself with my sitemap.

This error is super tricky and it took me a whole night to debug. At first, let look at our usecase.

There are two identical file named: sitemap.xml and sitemap1.xml.

Check 1: Sitemap file are all the same with extract contents.

[1][nginx directory]: file ownership & md5sum
[1][nginx directory]: file ownership & md5sum
  • Same ownership (jenkins:jenkins)
  • Same content (md5sum: 859ffa73b9eaf8dcaef920ffafbc1a45)

Check 2: wget & md5sum

[2]wget & md5sum
[2]wget & md5sum
  • Same content (md5sum: 859ffa73b9eaf8dcaef920ffafbc1a45)

Check 3: Testing with Google Search Console to read my sitemap

It’s getting interesting here!
When google try to fetch my sitemap.xml , it shows an error Couldn't fetch. However, it works for sitemap1.xml.
I believe it’s because of caching issue. Old data exists somewhere on the google data center. I would wait hours for this but to debug a sitemap generator, it’s crazy. I better create a new file sitemap-n.xml to debug.

Right now, there is no solution for me but a work-around using sitemap1.xml, or any sitemap-n.xml.

[3]Google Search Console | Indexing Sitemap | 2024-08-14 22:26:39 GMT+7
[3]Google Search Console | Indexing Sitemap | 2024-08-14 22:26:39 GMT+7

By the way, this is my jekyll sitemap.xml. You can found it https://github.com/nguyenvinhlinh/nguyenvinhlinh.github.io/blob/master/sitemap.xml.

---
layout: null
---
<?xml version="1.0" encoding="UTF-8"?>
<urlset
    xmlns="http://www.sitemaps.org/schemas/sitemap/0.9"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://www.sitemaps.org/schemas/sitemap/0.9 http://www.sitemaps.org/schemas/sitemap/0.9/sitemap.xsd">
{% for post in site.posts %}
{%   if post.update == nil or post.update == ""  %}
{%     assign mod_date = post.date %}
{%   else %}
{%     assign mod_date = post.update %}
{%   endif %}
<url>
  <loc>{{ site.url }}{{ post.url }}</loc>
  <lastmod>{{ mod_date | date_to_xmlschema }}</lastmod>
</url>
{% endfor %}
</urlset>

Personal Node: Installing a Spectre fullnode

08/08/2024 @ Saigon Cryptocurrency Node

I. Systemctl service - /etc/systemd/system/spectre.service

[Unit]
Description=Spectre Network - Full Node
After=network.target mnt-disk_2.mount

[Service]
WorkingDirectory=/opt/rusty-spectre-v0.3.14-linux-gnu-amd64
ExecStart=/opt/rusty-spectre-v0.3.14-linux-gnu-amd64/bin/spectred  --appdir=/mnt/disk_2/CryptoCurrency/Spectre  --rpclisten=0.0.0.0:18110 --rpclisten-borsh=0.0.0.0:19110 --rpclisten-json=0.0.0.0:20110 --listen=0.0.0.0:18111 --outpeers=64>
User=nguyenvinhlinh
RemainAfterExit=yes
Restart=on-failure
RestartSec=10

[Install]
WantedBy=multi-user.target

II. Firewall-cmd service - /etc/firewalld/services/spectre.xml

Port Description Firewall
18110 gRPC, miner/stratum bridge/golang wallet need it Closed
18111 P2P Open
19110 WebSocket-framed wRPC/Borsh protocol. It’s used for (rust) spectre wallet Closed
20110 WebSocket-framed wRPC/JSON-RPC protocol Closed
<?xml version="1.0" encoding="utf-8"?>
<service>
  <short>Spectre node</short>
  <description>
    This option allows Spectre node to use tcp port 18110
    - RPC: 18110
    - P2P: 18111
  </description>
  <port protocol="tcp" port="18110"/>
  <port protocol="udp" port="18110"/>
  <port protocol="tcp" port="18111"/>
  <port protocol="udp" port="18111"/>
</service>

References

Setup kaspa stratum bridge for solo mining

16/07/2024 @ Saigon Cryptocurrency Node

I. Clone repo https://github.com/rdugan/kaspa-stratum-bridge

Or copy relase to /opt/kaspa-ks-bridge

$  kaspa_ks_bridge pwd
/opt/kaspa_ks_bridge

$  kaspa_ks_bridge tree
.
├── bridge.log
├── config.yaml
└── ks_bridge

1 directory, 3 files

II. Modify config.yaml

stratum_port: :5555
kaspad_address: localhost:16110
min_share_diff: 8192
pow2_clamp: true
var_diff: true
shares_per_min: 20
var_diff_stats: true
block_wait_time: 500ms
extranonce_size: 2
print_stats: true
log_to_file: true
prom_port: :2114

III. Systemctl service - /etc/systemd/system/kaspa_ks_bridge.service

[Unit]
Description=Kaspa - KS Bridge
Requires=network.target

[Service]
WorkingDirectory=/opt/kaspa_ks_bridge
ExecStart=/opt/kaspa_ks_bridge/ks_bridge
User=nguyenvinhlinh
RemainAfterExit=yes
Restart=on-failure
RestartSec=10
TimeoutStopSec=180

[Install]
WantedBy=multi-user.target

To check log, journalctl -f -u kaspa_ks_bridge

[1] KS bridge - Console log
[1] KS bridge - Console log

IV. Config ASIC’s Mining Settings

The pool address should be stratum+tcp://192.168.1.XXX:5555 (your local stratum node ip)

[2] ASIC's Mining setting
[2] ASIC's Mining setting

Kaspa Asic - KS5L - API sample to get operational stage

15/07/2024 @ Saigon Mining Rig

Ice River - KS5L
Ice River - KS5L

This post is all about HTTP API to get ASIC operational stage, in particular KS5L. I believe that this API is also for KS0 and other future Ice River’s ASICs This finding is a part of my open source project named Mining Rig Monitor.

This is the HTTP POST example with curl.

$ curl 'http://192.168.1.XXX/user/userpanel' \
  -H 'Accept: application/json, text/javascript, */*; q=0.01' \
  -H 'Accept-Language: en-US,en;q=0.9,vi-VN;q=0.8,vi;q=0.7' \
  -H 'Connection: keep-alive' \
  -H 'Content-Type: application/x-www-form-urlencoded; charset=UTF-8' \
  -H 'Cookie: language=en; ctime=1' \
  -H 'DNT: 1' \
  -H 'Origin: http://192.168.1.XXX' \
  -H 'Referer: http://192.168.1.XXX/' \
  -H 'User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/126.0.0.0 Safari/537.36' \
  -H 'X-Requested-With: XMLHttpRequest' \
  --data-raw 'post=4' \
  --insecure

HTTP 200 - Response

{
  "error": 0,
  "data": {
    "model": "none",
    "algo": "none",
    "online": true,
    "firmver1": "BOOT_3_1",
    "firmver2": "image_1.0",
    "softver1": "ICM168_3_2_10_ks5L_miner",
    "softver2": "ICM168_3_2_10_ks5L_bg",
    "firmtype": "Factory",
    "nic": "eth0",
    "mac": "****:****:****:****:****:**",
    "ip": "192.168.1.XX",
    "netmask": "255.255.255.0",
    "host": "XJGXG_SSYYGB",
    "dhcp": false,
    "gateway": "192.168.1.xxfe80::1",
    "dns": "xx.xx.xx.xx",
    "locate": false,
    "rtpow": "15011G",
    "avgpow": "10789G",
    "reject": 0.0,
    "runtime": "01:04:29:02",
    "unit": "G",
    "pows": {
      "board1": [
        10789,
        9851,
        11728,
        11728,
        9851,
        8913,
        7505,
        7505,
        8913,
        8913,
        13135,
        8444,
        10320,
        7036,
        5629,
        12197,
        9382,
        12666,
        11258,
        9382,
        7505,
        8913,
        15011
      ]
    },
    "pows_x": [
      "0 mins",
      "5 mins",
      "10 mins",
      "15 mins",
      "20 mins",
      "25 mins",
      "30 mins",
      "35 mins",
      "40 mins",
      "45 mins",
      "50 mins",
      "55 mins",
      "60 mins",
      "65 mins",
      "70 mins",
      "75 mins",
      "80 mins",
      "85 mins",
      "90 mins",
      "95 mins",
      "100 mins",
      "105 mins",
      "110 mins"
    ],
    "powstate": true,
    "netstate": true,
    "fanstate": true,
    "tempstate": false,
    "fans": [
      5900,
      5900,
      5900,
      5855
    ],
    "pools": [
      {
        "no": 1.0,
        "addr": "stratum+tcp://asia1.kaspa-pool.org:4441",
        "user": "kaspa:qr3d34p6gzewwjs93fvheruwjyvfn35kn5uu00e6ffsgt6k087c4qsgp8l0mk.worker_1",
        "pass": "x",
        "connect": 1.0,
        "diff": "140737.49 G",
        "priority": 1.0,
        "accepted": 7225.0,
        "rejected": 0.0,
        "diffa": 0.0,
        "diffr": 0.0,
        "state": 1.0,
        "lsdiff": 0.0,
        "lstime": "00:00:00"
      },
      {
        "no": 2.0,
        "addr": "stratum+tcp://eu1.kaspa-pool.org:4441",
        "user": "kaspa:**********.worker_1",
        "pass": "x",
        "connect": -1.0,
        "diff": "0.00 G",
        "priority": 2.0,
        "accepted": 0.0,
        "rejected": 0.0,
        "diffa": 0.0,
        "diffr": 0.0,
        "state": 0.0,
        "lsdiff": 0.0,
        "lstime": "00:00:00"
      },
      {
        "no": 3.0,
        "addr": "stratum+tcp://us1.kaspa-pool.org:4441",
        "user": "kaspa:**********.worker_1",
        "pass": "x",
        "connect": -1.0,
        "diff": "0.00 G",
        "priority": 3.0,
        "accepted": 0.0,
        "rejected": 0.0,
        "diffa": 0.0,
        "diffr": 0.0,
        "state": 0.0,
        "lsdiff": 0.0,
        "lstime": "00:00:00"
      }
    ],
    "boards": [
      {
        "no": 1.0,
        "chipnum": 18.0,
        "chipsuc": 0.0,
        "error": 0.0,
        "freq": 875.0,
        "rtpow": "5160.37G",
        "avgpow": "3831.19G",
        "idealpow": "0.00G",
        "tempnum": "(null)",
        "pcbtemp": "0.00-0.00-0.00-0.00",
        "intmp": 61.0,
        "outtmp": 63.0,
        "state": true,
        "false": [
          1,
          2,
          3,
          4,
          5,
          6,
          7,
          8,
          9,
          10,
          11,
          12,
          13,
          14,
          15,
          16,
          17,
          18
        ]
      },
      {
        "no": 2.0,
        "chipnum": 18.0,
        "chipsuc": 0.0,
        "error": 0.0,
        "freq": 875.0,
        "rtpow": "5629.50G",
        "avgpow": "3440.25G",
        "idealpow": "0.00G",
        "tempnum": "(null)",
        "pcbtemp": "0.00-0.00-0.00-0.00",
        "intmp": 57.0,
        "outtmp": 61.0,
        "state": true,
        "false": [
          1,
          2,
          3,
          4,
          5,
          6,
          7,
          8,
          9,
          10,
          11,
          12,
          13,
          14,
          15,
          16,
          17,
          18
        ]
      },
      {
        "no": 3.0,
        "chipnum": 18.0,
        "chipsuc": 0.0,
        "error": 0.0,
        "freq": 875.0,
        "rtpow": "4222.12G",
        "avgpow": "3518.44G",
        "idealpow": "0.00G",
        "tempnum": "(null)",
        "pcbtemp": "0.00-0.00-0.00-0.00",
        "intmp": 62.0,
        "outtmp": 67.0,
        "state": true,
        "false": [
          1,
          2,
          3,
          4,
          5,
          6,
          7,
          8,
          9,
          10,
          11,
          12,
          13,
          14,
          15,
          16,
          17,
          18
        ]
      }
    ],
    "refTime": "2024-03-08 01:58:25 UTC"
  },
  "message": ""
}

I hope that you guys could find it useful, good luck!