Hexa's Blog

PhoenixMiner - config.txt Template

08/12/2021 Mining Rig

# PhoenixMiner configuration file config.txt

-pool   asia1.ethermine.org:4444
-pool2  asia2.ethermine.org:4444
-wal    miner_address_here
-worker huyen-vu

Personal Note: Installing a Monero full node

I. Monero Node Config - monerod.conf

# /opt/monero-gui-v0.17.2.3/monerod.conf

# Data directory (blockchain db and indices)
data-dir=/mnt/disk_2/Monero/  # Remember to create the monero user first

# Log file
log-file=/mnt/disk_2/Monero/log/monerod.log
max-log-file-size=0            # Prevent monerod from managing the log files; we want logrotate to take care of that

# P2P full node
p2p-bind-ip=0.0.0.0            # Bind to all interfaces (the default)
p2p-bind-port=18080            # Bind to default port

# RPC open node
rpc-bind-ip=0.0.0.0            # Bind to all interfaces
rpc-bind-port=18081            # Bind on default port
confirm-external-bind=1        # Open node (confirm)
restricted-rpc=1               # Prevent unsafe RPC calls
no-igd=1                       # Disable UPnP port mapping

# Slow but reliable db writes
db-sync-mode=safe:sync
block-sync-size=100

# Emergency checkpoints set by MoneroPulse operators will be enforced to workaround potential consensus bugs
# Check https://monerodocs.org/infrastructure/monero-pulse/ for explanation and trade-offs
enforce-dns-checkpointing=1

out-peers=64              # This will enable much faster sync and tx awareness; the default 8 is suboptimal nowadays
in-peers=1024             # The default is unlimited; we prefer to put a cap on this

limit-rate-up=1048576     # 1048576 kB/s == 1GB/s; a raise from default 2048 kB/s; contribute more to p2p network
limit-rate-down=1048576   # 1048576 kB/s == 1GB/s; a raise from default 8192 kB/s; allow for faster initial sync

II. Systemctl service - /etc/systemd/system/monero.service

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

[Service]
WorkingDirectory=/opt/monero-gui-v0.17.2.3
ExecStart=/opt/monero-gui-v0.17.2.3/monerod --config-file /opt/monero-gui-v0.17.2.3/monerod.conf --detach
User=nguyenvinhlinh
RemainAfterExit=yes
Restart=on-failure
RestartSec=10
TimeoutStopSec=infinity

[Install]
WantedBy=multi-user.target

III. Firewall-cmd service - /etc/firewalld/services/monero.xml

<?xml version="1.0" encoding="utf-8"?>
<service>
  <short>Monero node</short>
  <description>
    This option allows Monero node to use tcp port:
    - 18080: p2p network
    - 18081: JSON-RPC server
  </description>
  <port protocol="tcp" port="18080"/>
  <port protocol="tcp" port="18081"/>
</service>

Personal Note: Installing an Alephium full node

I. Alephium node config - $ALEPHIUM_HOME/user.conf

alephium.network.external-address="x.x.x.x:9973"
alephium.api.network-interface = "0.0.0.0"
alephium.mining.api-interface="0.0.0.0"

alephium.mining.miner-addresses=[
 "miner_address_1",
 "miner_address_2",
 "miner_address_3",
 "miner_address_4",
]

II. Systemctl EnvironmentFile - /opt/alephium/alephium.env

ALEPHIUM_HOME=/mnt/CaHeoNas/disk_3/Alephium

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

[Unit]
Description=Alphelium Full Node
After=network.target mnt-CaHeoNas-disk_3.mount

[Service]
WorkingDirectory=/opt/alephium
EnvironmentFile=/opt/alephium/alephium.env
ExecStart=java -jar -Xms512m -Xmx1028m alephium-1.0.0.jar
User=nguyenvinhlinh
RemainAfterExit=yes
Restart=on-failure
RestartSec=10

[Install]
WantedBy=multi-user.target

IV. Firewall-cmd service - /etc/firewalld/services/alephium.xml

<?xml version="1.0" encoding="utf-8"?>
<service>
  <short>Alephium node</short>
  <description>
    This option allows Alephium node to use tcp port 9973, 10973, 12973
  </description>
  <port protocol="tcp" port="9973"/>
  <port protocol="tcp" port="10973"/>
  <port protocol="tcp" port="12973"/>
</service>

IV. Balance checking script

All Credit goes this guy Mark Rahmani (diomark#8272) https://www.facebook.com/diomark/

#!/bin/zsh

#first need to unlock wallet. not putting password in here

#check wallet
curlResult=`curl -X 'GET'   'http://127.0.0.1:12973/wallets/MINER_WALLET_NAME/balances'   -H 'accept: application/json' 2>/dev/null | json_pp | grep totalBalanceHint| cut -f1 -d","`
lastdate=`date +%s`


if echo $curlResult | grep -q ALPH; then
  datestr=`date +"%x %R"`
  echo -n "$datestr "
  echo Wallet unlocked - $curlResult;
else
  echo Please unlock wallet first
  exit
fi

while true; do
 oldResult=$curlResult

 datestr=`date +"%x %R"`; echo -n "."; curlResult=`curl -X 'GET'   'http://127.0.0.1:12973/wallets/MINER_WALLET_NAME/balances'   -H 'accept: application/json' 2>/dev/null | json_pp | grep totalBalanceHint| cut -f1 -d","`
 if [ "$oldResult" != "" ]; then
    if [ "$curlResult" != "$oldResult" ]; then
       echo
       echo -n "$datestr "
       newdate=`date +%s`
       secs=`expr $newdate - $lastdate`
       mins=`expr $secs / 60`
       echo  -n "Won a block after $mins minutes! "
       echo $curlResult
       lastdate=$newdate
    fi
 fi

 sleep 30
done

Balance Checking Script Output.
Balance Checking Script Output.

Personal Note: Installing a Bitcoin full node

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

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

[Service]
WorkingDirectory=/opt/bitcoin-0.21.1/
ExecStart=/opt/bitcoin-0.21.1/bin/bitcoind -datadir=/mnt/disk_2/Bitcoin -daemon
ExecStop=/opt/bitcoin-0.21.1/bin/bitcoin-cli -datadir=/mnt/disk_2/Bitcoin stop
User=nguyenvinhlinh
RemainAfterExit=yes
Restart=on-failure
RestartSec=10
TimeoutStopSec=infinity

[Install]
WantedBy=multi-user.target

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

<?xml version="1.0" encoding="utf-8"?>
<service>
  <short>Bitcoin node</short>
  <description>This option allows Bitcoin node to use tcp port 8333</description>
  <port protocol="tcp" port="8333"/>
</service>

Thiết lập thông số 3080 - Dàn #2 Bạch Hổ

01/10/2021 Mining Rig

I. Lời mở đầu

Bài viết này phục vụ mục đích duy nhất là đó là nếu tôi lỡ tay xóa mấy profile trên MSI Afterburner. Tôi sẽ quay lại đây xem.

  • MSI 3080 GAMING X TRIO (1 cái)
  • MSI 3080 VENTUS (2 cái)
  • GIGABYTE 3080 GAMING OC 10G (1 cái)
Vị Trí trên main VGA Vị trí trên OS
1 MSI 3080 GAMING X TRIO 3
2 MSI 3080 VENTUS 1
3 MSI 3080 VENTUS 2
4 GIGABYTE 3080 GAMING OC 10G 4
[1] Dàn 3080 - #2 Bạch Hổ
[1] Dàn 3080 - #2 Bạch Hổ

II. Mức thiết lập - 95MH/s

a. Tinh chỉnh tốc độ quạt theo nhiệt độ

  • 30C –> 40% Fan
  • 50C –> 60% Fan
  • 60C –> 85% Fan
  • 65C –> 100% Fan
[2] Tinh chỉnh tốc độ quạt
[2] Tinh chỉnh tốc độ quạt

b. MSI 3080 GAMING X TRIO

  • Power Limit: 105%
  • Temperature Limit: 65C
  • Core Clock: -502Mhz
  • Memory Clock: 825Mhz
  • Fan: User define - Auto

Kết quả thu được:

  • Hashrate: 95.436MH/s
  • Công suất: 235W
  • Nhiệt độ GPU: 58C
  • Nhiệt độ VRAM: 98C

c. MSI 3080 VENTUS

  • Power Limit: 77%
  • Temperature Limit: 65C
  • Core Clock: -502Mhz
  • Memory Clock: 800Mhz
  • Fan: User define - Auto

Kết quả thu được:

  • Hashrate: 95.426MH/s
  • Công suất: 238W
  • Nhiệt độ GPU: 61C
  • Nhiệt độ VRAM: 110C

c. GIGABYTE 3080 OC

  • Power Limit: 64%
  • Temperature Limit: 65C
  • Core Clock: -502 Mhz
  • Memory Clock: 850Mhz
  • Fan: User define - Auto

Kết quả thu được:

  • Hashrate: 96.013MH/s
  • Công suất: 237W
  • Nhiệt độ GPU: 61C
  • Nhiệt độ VRAM: 84C

CSGO, binding để nhảy ném smoke

15/09/2021 CSGO

Trong trường hợp này phím nhảy ném là phím mouse-5. Mở console lên và gõ lệnh sau:

alias +jumpthrow "+jump;-attack";
alias -jumpthrow "-jump";
bind mouse5 +jumpthrow;

Cách sử dụng tương đối đơn giản, bắt đầu bằng giữ chuột trái, tiếp theo là căn góc ném, cuối cùng là ấn phím mouse-5.

Support dropdown with multiple value in Redash, plus ALL value

09/09/2021 Redash

In Redash, there is a big demand for dropdown with ALL value. However, it’s tricky to write where statement for ALL value. This post is all about work-around this issue. Thank for my colleague - Trieu. All Credit to him.

[1] Dropdown Field
[1] Dropdown Field

The dropdown configuration is in the following image.

[2] Dropdown Configuration
[2] Dropdown Configuration

In the where section, condition statement should look like this one

(column_name in (SELECT unnest(CONCAT('{', '', '}')::varchar[])) OR '' LIKE '%ALL%')

And It’s all done, you are ready to go!

Cách thiết lập GPG cho Emacs trên Window

01/09/2021 Emacs

Bài viết này hướng dẫn cách cài đặt GPG cho emacs trên window. Đầu tiên, cần vào trang web https://gnupg.org/download/index.html và tải Gpg4Win

[1] Download Gpg4Win
[1] Download Gpg4Win

Sau khi cài đặt xong Gpg4Win. Trong emacs, thiết lập các biến sau:

  • epg-gpg-home-directory
  • epg-gpg-program
  • epg-gpgconf-program

Ví dụ như sau:

(custom-set-variables
 '(epg-gpg-home-directory "C:/Users/nguye/AppData/Roaming/gnupg")
 '(epg-gpg-program "D:/Software/GnuPG/bin/gpg.exe")
 '(epg-gpgconf-program "D:/Software/GnuPG/bin/gpgconf.exe")
 )

(provide 'window-gpg)

Single Sign On sử dụng SAML - Cách hoạt động

31/07/2021 SSO

I. Mục đích

Mục đích sau cùng của tất cả những thứ này là gia tăng trải nghiệm người dùng. Một doanh nghiệp có thể đang sử dụng nhiều ứng dụng. Mỗi ứng dụng này chắn chắn sẽ chứa users. Cách làm truyền thống và dễ gặp nhất đó là mỗi ứng dụng sẽ có một danh sách users tách biệt. Tuy nhiên, cách làm này làm giảm trải nghiệm người dùng rất nhiều, họ phải đăng nhập lại cho mỗi ứng dụng họ muốn sử dụng, ghi nhớ password; là người quản trị, việc thêm users / xóa users cho hệ thống cũng sẽ mệt mỏi vì phải làm việc này cho từng ứng dụng một, thậm chí ngoài ra còn là về vấn đề bảo mật, chúng ta càng bắt users phải nhập nhiều mật khẩu bao nhiêu, chúng ta càng làm họ dễ mất mật khẩu. Tôi đã từng thấy những người họ sử dụng 1 hoặc 2 mật khẩu và áp dụng nó từ tài khoản zing, gmail cho đến flickr.

Với phía là doanh nghiệp, việc có một hệ thống quản lý danh sách users, hệ thống này là trung gian, nằm chính giữa tất cả các ứng dụng sẽ cực kỳ hữu ích.

II. Các đối tượng tham gia

  • Identity Provider: Chứa thông tin của users, bên cạnh đó cung cấp giao thức để users có thể đăng nhập vào các ứng dụng (service provider) mà không cần đăng ký lại.
  • Service Provider*: Ở trong bài viết này, nó được xem như là ứng dụng, để truy cập vào ứng dụng này, chắn chắn users cần đăng nhập. Và với sự hỗ trợ của Identity Provider, nguồn users của ứng dụng sẽ đến từ Identify Provider.
  • User-Agent: Trình duyệt web

III. Nguyên lý

Sequence Diagram dưới đây miêu tả những từng bước một bắt đầu từ việc users vào service provider, hay còn gọi cách khác là SP-Initiated. Trong bài viết này, tôi không đề cập đến sequence diagram bắt đầu từ Identity Provider (IdP-Initiated).

SP-Initiated Sequence Diagram.
SP-Initiated Sequence Diagram.

IV. Nguồn và Trích dẫn

Hướng dẫn sử dụng mũ bảo hiểm tích hợp tai nghe bluetooth

21/06/2021 Projects

[1] Cách sử dụng hệ thống bluetooth
[1] Cách sử dụng hệ thống bluetooth