Other Tools

Table of Contents:


SpamBlocker

Hướng dẫn dùng SpamBlocker (Android)

SpamBlocker là ứng dụng mã nguồn mở giúp chặn cuộc gọi và tin nhắn spam, đặc biệt mạnh khi chặn theo dải số và regex.


1. Cài đặt & cấp quyền

  1. Cài SpamBlocker từ F-Droid hoặc file APK/GitHub của tác giả.
  2. Mở app lần đầu, bật Enable ở góc trên cùng.
  3. Cấp đầy đủ quyền:
  • Quyền Điện thoại (Phone)
  • Quyền Tin nhắn (nếu muốn chặn SMS)
  • Quyền Thông báo (Notifications)
  1. Đảm bảo app không bị tối ưu pin quá mức (Battery optimization) để không bị hệ thống "giết" ngầm.

Nếu không cấp đủ quyền, app sẽ không chặn được hoặc chỉ hoạt động lúc đang mở.

pasted image 20251206112112


2. Các khái niệm chính trên màn hình Settings

  • Contacts:
    • Bật nếu muốn luôn cho phép số trong danh bạ (whitelist tự động).
  • Repeated Call:
    • Chặn số gọi tới liên tục trong một khoảng thời gian (chống quấy rối).
  • Block Type:
    • Reject: Từ chối cuộc gọi (có thể vẫn đổ 1–2 tiếng chuông ngắn rồi cúp).
    • Silence: Chặn im lặng, thường không thấy chuông.
    • Answer + Hangup: Tự động nghe rồi cúp, đảm bảo cắt cuộc gọi nhanh.
  • Notification:
    • Chọn kiểu thông báo khi có cuộc gọi/SMS bị chặn (hoặc tắt hẳn nếu muốn "vô tri").

pasted image 20251206112302


3. Number Rules – chặn theo số/regex

3.1. Tạo rule mới
  1. Vào Number Rules → bấm New.
  2. Ở ô Phone Number, nhập mẫu cần chặn:
  • Chặn chính xác 1 số:
    • Dạng regex: ^0839221196$
    • Hoặc đơn giản chỉ nhập 0839221196 (ít rủi ro hơn khi không hiểu sâu regex).
  • Chặn dải số (ví dụ dải 0839xxx…):
    • Nhập: ^0839.*
  1. Điền Description (mô tả) cho dễ nhớ, ví dụ: anh hoang, telemarketing, ngân hàng spam.

pasted image 20251206112526

3.2. Regex Flags (cờ regex)

Trong popup Regex Flags:

  • Raw Number:
    • Nếu BẬT: so khớp với số dạng "thô".
    • Nếu TẮT: app có thể bỏ số 0 đầu, đổi sang +84…, nên pattern cần linh hoạt.
  • Ignore Country Code:
    • Dùng nếu bạn muốn chặn cả dạng 0839221196 lẫn +84839221196 mà không phải viết 2 pattern.
  • Case Sensitive:
    • Với số điện thoại thường không cần quan tâm, có thể bỏ qua.

Kinh nghiệm đơn giản:

  • Nếu chặn 1 số cụ thể → chỉ nhập số thẳng, không cần ^$, không bật Raw Number.
  • Nếu chặn dải số → dùng regex ^….* và test kỹ trước khi lưu.

4. Thiết lập hành vi chặn cho rule

Trong cửa sổ rule:

  • Apply to:
    • Tick Call để chặn cuộc gọi.
    • Tick SMS để chặn tin nhắn.
  • Type:
    • Chọn Block (chặn) — đừng nhầm với Allow (cho phép).
  • Block Type:
    • Gợi ý: chọn Silence để chặn im lặng, không bị giật mình vì chuông.
  • Notification:
    • Chọn "X" nếu không muốn thông báo.
    • Hoặc chọn kiểu thông báo phù hợp nếu muốn theo dõi log chặn.
  • Schedule:
    • Có thể bật nếu muốn rule này chỉ hoạt động theo khung giờ nhất định (ví dụ giờ làm việc).

Đừng quên bấm Save ở góc dưới để lưu rule.


5. Kiểm tra rule bằng nút Test

SpamBlocker có nút Test cho từng rule:

  1. Mở rule vừa tạo.
  2. Bấm icon Test (thường là biểu tượng giống kính lúp/kiểm tra).
  3. Nhập một số giả lập (hoặc chính số bạn muốn chặn) rồi chạy test.
  4. Nếu test báo matched → rule hoạt động đúng.
  5. Nếu không match:
  • Kiểm tra lại pattern (regex có đúng không).
  • Kiểm tra lại cờ Raw Number / Ignore Country Code.

6. Một số ví dụ pattern hữu ích

  • Chặn một số cụ thể:
    • 0839221196
  • Chặn tất cả số bắt đầu bằng 0839:
    • ^0839.*
  • Chặn mọi số bắt đầu bằng 02488 (spam cố định):
    • ^2488.* và bật "Ignore Country Code" nếu cần.

7. Lưu ý khi dùng lâu dài

  • Định kỳ mở SpamBlocker xem log chặn để:
    • Bổ sung dải số mới.
    • Unblock những số lỡ tay chặn nhầm.
  • Nếu thấy app bỗng không chặn nữa:
    • Kiểm tra lại quyền app.
    • Tắt tối ưu hóa pin hoặc cho phép chạy nền.
    • Khởi động lại máy nếu cần.

"Lý tưởng nhất là kết hợp chặn dải số + chỉ cho phép danh bạ qua, vậy là gần như sạch spam."


USB Boot

USB Boot Windows – Ghi chú nhanh

1. Copy bộ cài sang USB khác có được không? Được. Chỉ cần copy toàn bộ file, không cần nén/giải nén.

2. USB mới nên dùng định dạng gì? Bắt buộc dùng FAT32 nếu muốn boot UEFI ổn định trên mọi máy.

3. Vì sao FAT32? UEFI chỉ đọc phân vùng EFI nằm trên FAT32.

4. Bộ cài dạng .swm là gì? Là file WIM đã được chia nhỏ (<4GB) → chạy tốt trên FAT32.

5. Quy trình chuẩn để tạo USB mới:

  • Format USB → FAT32, MBR
  • Copy toàn bộ file từ USB cũ sang
  • Xong, boot được trên mọi máy.

6. Khi nào NTFS dùng được? Chỉ khi Legacy BIOS hoặc mainboard hỗ trợ NTFS boot → không chắc chắn.


Bluetooth Keyboard

ASUS KW100

pasted image 20251208162704

Con KW100 có nút Bluetooth (thường là tổ hợp Fn + 1/2/3 tùy profile). Mày làm như sau:

  1. Giữ Fn + 1 (hoặc 2, hoặc 3) tầm 3 giây. -> Đèn LED Bluetooth sẽ nhấp nháy, nghĩa là vào chế độ pair
  2. Nếu nó yêu cầu nhập mã, thì PC sẽ hiện ra 6 số → mày gõ đúng số đó trên bàn phím KW100, rồi nhấn Enter.

Nếu mày bấm mà nó không nháy → có thể nó đang kết nối profile cũ. Giữ lâu hơn hoặc chuyển sang nút khác.

Logitech K380

pasted image 20251208162837

1. Ba nút trắng 1 – 2 – 3 chính là nút chuyển thiết bị

  1. Giữ Fn + 1 (hoặc 2, hoặc 3) tầm 3 giây. -> Đèn LED Bluetooth sẽ nhấp nháy, nghĩa là vào chế độ pair
  2. Nếu nó yêu cầu nhập mã, thì PC sẽ hiện ra 6 số → mày gõ đúng số đó trên bàn phím K380, rồi nhấn Enter.

Nếu đèn không nháy → mày chỉ nhấn chứ không giữ đủ lâu.


Icon Design

Bộ ký hiệu tối giản – Symbol System

Mục đích: tạo nhịp thị giác, phân cấp tư duy, đánh dấu logic Nguyên tắc: ít – chuẩn – sống dai – không màu mè


I. Core Symbols – Lõi hệ thống (ưu tiên tuyệt đối)

  1. * – Asterisk
  2. – Bullet / Dot
  3. + – Plus
  4. × – Cross (nhân)
  5. · – Middle Dot
  6. # – Hash
  7. – Em Dash
  8. | – Vertical Bar
  9. ° – Degree / Marker
  10. – Circle (outline)

II. Structural Symbols – Phân cấp & cấu trúc

  1. – Small Circle
  2. – Square (outline)
  3. – Square (filled)
  4. – Triangle (outline)
  5. – Triangle (filled)
  6. – Diamond (outline)
  7. – Diamond (filled)
  8. – Arrow Right
  9. – Arrow Both
  10. – End Mark / Block

III. Auxiliary Symbols – Bổ trợ logic (dùng có chọn lọc)

  1. ~ – Tilde
  2. = – Equal
  3. _ – Underscore
  4. : – Colon
  5. – Ellipsis
  6. – Pilcrow
  7. § – Section
  8. – Circled Plus
  9. – Circled Cross
  10. – Math Dot

IV. Extended Symbols – Mở rộng có chiều sâu (chọn lọc kỹ)

  1. – Reference Asterisk (nhấn mạnh, chú thích)
  2. – Cross nhẹ (khác ×)
  3. – Check tối giản
  4. – Reject / Deny
  5. – Square light
  6. – Square layered
  7. – Circle focus
  8. – Circle double
  9. – Diamond target
  10. – Pointer Right

V. Experimental Symbols – Chỉ dùng khi hiểu rõ ý nghĩa

  1. – Wave separator
  2. – Home symbol
  3. – Command
  4. – Option
  5. – Sharp logic marker
  6. – Small math circle
  7. – Centered dot
  8. – Perpendicular / Break
  9. – Therefore
  10. – Because

Khác

  • list.svg

PayPal

Cách 1: Sử dụng paypal.me

https://paypal.me/nguyendinhquoc hoặc đặt mặc định là 5$: https://paypal.me/nguyendinhquoc/5 Note: Thêm param amount /5 để đặt mặc định số tiền, hoặc thêm ?locale.x=vi_VN để cố định ngôn ngữ.

Cách 2: PayPal Smart Buttons (muốn UX tốt)

Bước lấy Client ID

  1. Vào https://developer.paypal.com → Dashboard → Apps & Credentials → Tạo app mới → Copy Client ID (live khi đã sẵn sàng, sandbox để test).

pasted image 20251027165004 pasted image 20251027165308

pasted image 20251027165235 Client ID: AeP5pRvHAaGRuYEzMfFF0miT3LsxlmtTUYuQQBB1sgt3aXhmdpSnOd0SAdEa7jlxloZGkyJlyKO5mF4m Secret key 1: EILh6rrhQ6ei2OgCR6L-hXY72RuQnd3DIpQxImvhNSZYRf1FC4AEUi0rctY9QitAueykfizBylLJMc23

Ví dụ implement trong src/pages/donate.astro

---
// src/pages/donate.astro
const PAYPAL_CLIENT_ID = "REPLACE_WITH_YOUR_CLIENT_ID";
---
<html>
  <head>
    <meta charset="utf-8" />
    <meta name="viewport" content="width=device-width,initial-scale=1" />
    <title>Donate</title>
  </head>
  <body>
    <main style="max-width:700px;margin:40px auto;text-align:center;">
      <h1>Ủng hộ tác giả</h1>
      <p>Chọn số tiền và phương thức để ủng hộ.</p>

      <!-- Option: preset amounts -->
      <div id="amounts" style="margin:20px 0;">
        <button data-amount="5">5 USD</button>
        <button data-amount="10">10 USD</button>
        <button data-amount="25">25 USD</button>
        <button data-amount="50">50 USD</button>
      </div>

      <!-- PayPal button container -->
      <div id="paypal-button-container"></div>

      <p id="status" style="margin-top:20px;"></p>
    </main>

    <!-- PayPal SDK -->
    <script src={`https://www.paypal.com/sdk/js?client-id=${PAYPAL_CLIENT_ID}&currency=USD`}></script>

    <script>
      (function(){
        // default amount
        let currentAmount = "5.00";

        // amount buttons
        document.querySelectorAll('#amounts button').forEach(btn=>{
          btn.addEventListener('click', ()=> {
            currentAmount = parseFloat(btn.dataset.amount).toFixed(2);
            document.getElementById('status').textContent = "Số tiền: $" + currentAmount;
          });
        });

        // render paypal button
        paypal.Buttons({
          style: { layout: 'vertical', color: 'gold', shape: 'rect', label: 'donate' },

          createOrder: function(data, actions) {
            return actions.order.create({
              purchase_units: [{
                amount: {
                  value: currentAmount
                },
                description: "Ủng hộ Quoc - Donate"
              }]
            });
          },

          onApprove: function(data, actions) {
            return actions.order.capture().then(function(details) {
              document.getElementById('status').textContent = "Cảm ơn " + details.payer.name.given_name + "! Giao dịch id: " + data.orderID;
              // TODO: gửi thông tin về server nếu cần lưu lại
            });
          },

          onError: function(err) {
            console.error(err);
            document.getElementById('status').textContent = "Có lỗi khi xử lý thanh toán.";
          }
        }).render('#paypal-button-container');

      })();
    </script>
  </body>
</html>

Ghi chú:

  • Thay REPLACE_WITH_YOUR_CLIENT_ID bằng Client ID thật.
  • Đổi currency=USD sang VNĐ hay EUR nếu cần (PayPal hỗ trợ nhiều loại tiền).
  • Nếu muốn test, dùng sandbox Client ID và sandbox account trong PayPal dev. Khi chuyển sang production đổi client-id.