QuânSysAd's Blog

25 tháng 3 2026

Sửa lỗi máy in Canon LBP2900 lỗi 0x0000011b khi in qua mạng trên Windows 10

 

Phương pháp 2: Kết nối bằng cổng cục bộ

Phương pháp này tạo kết nối cục bộ giữa thiết bị và máy in mạng, bỏ qua việc thực thi RPC.

  1. Nhấn Win + R, nhập Control và nhấn Enter.
  2. Từ Control Panel (chế độ xem biểu tượng), điều hướng đến Devices and Printers > View more devices > More devices and printers settings.
  3. Nhấp vào Add a printer > The printer that I want isn’t listed.
  4. Chọn Add a local printer or network printer with manual settings.
  5. Nhấp vào Next.
  6. Chọn Create a new port and set it to Local Port.
  7. Khi được nhắc, hãy nhập đường dẫn mạng của máy in theo định dạng sau:
    \\<HostName>\<PrinterName>. Trong đó <HostName> là tên/địa chỉ IP của máy tính chủ và <PrinterName> là tên hiển thị của máy in được chia sẻ trên máy tính chủ (ví dụ, \\OfficePC\HP_DeskJet).
  8. Khi được hỏi, hãy cài đặt driver máy in chính xác.

06 tháng 3 2026

AOE : Rise of rome : Cơ chế của AI computer

 Đây là toàn bộ cơ chế hoạt động:


Cơ chế game chọn file AI — toàn bộ hệ thống

3 lớp file hoạt động độc lập

┌─────────────────────────────────────────────┐
│  LAYER 1: .per  →  "Tính cách" AI           │
│  LAYER 2: .ai   →  "Build order / Chiến lược"│
│  LAYER 3: .cty  →  "Sơ đồ xây dựng base"   │
└─────────────────────────────────────────────┘

Mỗi lớp được chọn hoàn toàn độc lập với nhau.


LAYER 1 — File .per được chọn như thế nào?

Trong Scenario Editor, bạn trực tiếp chọn Personality cho từng computer player — nhiều personality được thiết kế đặc biệt cho campaign scenario, các personality còn lại có thể chọn là Aggressive hoặc Passive cho hầu hết tình huống.

Trong Random Map (không phải Scenario):

  • Game tự động load Random Map.per cho tất cả computer player
  • File Defensive.per, Aggressive.per... chỉ dùng được khi bạn chỉ định trong Scenario Editor
  • Đây là lý do file .per bạn upload có tên "Defensive" — nó là một option trong Scenario Editor

LAYER 2 — File .ai được chọn như thế nào?

Trong Scenario Editor, bạn trực tiếp chọn Strategy (file .ai) cho từng computer player — tên của các strategy thường chỉ rõ unit chính mà computer dùng để tấn công và Age mà cuộc tấn công xảy ra.

Trong Random Map: Mỗi civilization có một số file .ai tương ứng. Chưa rõ chính xác chúng được chọn theo tiền tố tên hay không — computer sẽ random chọn một file .ai phù hợp để thực hiện.

Ví dụ Hittite có 3 file: Hittite Bowmen.ai, Hittite Elephant.ai, Hittite Horse Archers.ai — game random chọn 1 trong 3.


Sơ đồ toàn bộ luồng quyết định

Bắt đầu game
      │
      ├── Random Map?
      │       ├── .per  →  "Random Map.per" (cố định, không đổi)
      │       └── .ai   →  Random 1 file theo tên civilization
      │
      └── Scenario / Campaign?
              ├── .per  →  Bạn chọn trong Scenario Editor
              │            (Aggressive / Defensive / Custom...)
              └── .ai   →  Bạn chọn trong Scenario Editor
                           (Infantry Iron / Cavalry Bronze / Custom...)

Danh sách file .ai chung — dùng khi tộc không có file riêng

Những file này được tất cả tộc dùng trong Random Map nếu game không tìm thấy file riêng:

File Chiến lược
Infantry Stone.ai Bộ binh Stone Age
Infantry Tool.ai Bộ binh Tool Age
Infantry Bronze.ai Bộ binh Bronze Age
Archers Bronze.ai Cung thủ Bronze
Archers Iron.ai Cung thủ Iron
Cavalry Bronze.ai Cavalry Bronze
Cavalry Iron.ai Cavalry Iron
Phalanx Bronze.ai / Phalanx Iron.ai Phalanx
Priest Bronze.ai / Priest Iron.ai Priest rush
War Elephant Iron.ai Voi chiến
Default.ai Fallback cuối cùng

Các file shared build order này không tốt, vì vậy trong mod cải tiến, người ta đã xóa chúng để buộc computer phải dùng file AI riêng của từng civilization.


Kết luận thực tế

Muốn làm gì Cần sửa file nào
Thay đổi AI trong Random Map Random Map.per + file .ai theo tên tộc
Thay đổi AI trong Scenario Chọn trong Scenario Editor
AI tất cả tộc đều dùng brutal Ghi đè Infantry Iron.ai, Cavalry Iron.ai, Archers Iron.ai
Chỉ một tộc dùng brutal Ghi đè Hittite Bowmen.ai (hoặc file tộc đó)




Sự thật về file .per trong Random Map

Hai file kiểm soát computer player là .ai.per. Tuy tên là "AI file" nhưng file .ai không phải là file trí tuệ nhân tạo và không kiểm soát cách computer hành xử — đó là nhiệm vụ của file .per.


Vậy trong Random Map, file .per nào được dùng?

Câu trả lời thật sự là: game hardcode chọn .per theo difficulty level bạn chọn trong menu, không phải theo tên file "Random Map.per".

Cơ chế thực tế như sau:

Bạn chọn difficulty trong menu
        │
        ├── Easy     →  Passive.per  (hoặc tên tương đương)
        ├── Moderate →  Moderate.per
        └── Hard     →  Aggressive.per (hoặc file aggressive nhất)

Các file .per trong data2\ được map thẳng vào difficulty level — không có file "Random Map.per" tồn tại trong bản gốc RoR. Đó là tên mình đặt sai trong các câu trả lời trước, xin lỗi về điều này.


Danh sách file .per thực tế trong data2\ và vai trò

File .per Được dùng khi nào
Passive.per / Defensive.per Difficulty Easy — AI thu mình, ít tấn công
Moderate.per Difficulty Moderate
Aggressive.per Difficulty Hard trong Random Map
Các file khác (Hittite.per...) Chỉ dùng được trong Scenario Editor khi designer chỉ định thủ công

Sơ đồ đúng hoàn toàn

RANDOM MAP
    │
    ├─ Difficulty Easy     → Passive.per     (hardcoded)
    ├─ Difficulty Moderate → Moderate.per    (hardcoded)  
    ├─ Difficulty Hard     → Aggressive.per  (hardcoded)
    │
    └─ File .ai → random chọn theo tên tộc (đúng như đã nói)

SCENARIO / CAMPAIGN
    │
    ├─ File .per → Designer chọn thủ công bất kỳ file nào
    └─ File .ai  → Designer chọn thủ công bất kỳ file nào

Hệ quả thực tế để mod AI trong Random Map

Muốn AI Hard khó hơn → sửa Aggressive.per trong data2\, đây mới là file thực sự được load. File Defensive.per bạn upload trước đó chính là file được dùng ở difficulty Easy.



17 tháng 1 2026

Options: Phân tích các greek ảnh hưởng tới hợp đồng 0DTE

 

Giao dịch 0DTE (Zero Days to Expiration) – tức là các quyền chọn đáo hạn ngay trong ngày – là một "trò chơi" hoàn toàn khác biệt. Trong thế giới 0DTE, các chỉ số Greek không còn vận động theo cách bình thường mà trở nên cực đoan.

Hai chỉ số thống trị tuyệt đối 0DTE là Gamma và Theta. Các chỉ số khác như Vega hầu như bị loại bỏ khỏi cuộc chơi.

Dưới đây là phân tích chi tiết:

1. Gamma: "Vị vua" của 0DTE (Rủi ro và Biến động)

Trong ngày đáo hạn, Gamma đạt mức cao khủng khiếp, đặc biệt là tại các quyền chọn sát giá thực hiện (At-the-Money).

  • Tác động: Gamma đo lường tốc độ thay đổi của Delta. Với 0DTE, chỉ cần giá tài sản cơ sở nhích nhẹ 0.5%, Delta có thể nhảy từ 0.10 lên 0.60 ngay lập tức.

  • Hệ quả: Đây là lý do tại sao giá quyền chọn 0DTE có thể tăng 500% hoặc giảm 90% chỉ trong vài phút.

  • Góc độ người bán (Short Call): Gamma là kẻ thù số 1. Nó tạo ra rủi ro "vỡ trận" khiến bạn không kịp trở tay nếu giá tài sản biến động ngược hướng.

2. Theta: "Cỗ máy tử thần" (Bào mòn thời gian)

Nếu Gamma là kẻ thù của người bán, thì Theta là đồng minh lớn nhất.

  • Tác động: Trong 0DTE, sự sụt giảm thời gian không tính bằng ngày nữa mà tính bằng giờ và phút. Giá trị thời gian (Extrinsic Value) của quyền chọn 0DTE bốc hơi cực nhanh.

  • Hệ quả: Nếu bạn Short Call và giá cổ phiếu chỉ đi ngang hoặc giảm nhẹ, Theta sẽ "ăn" sạch giá trị của quyền chọn đó chỉ trong vài giờ giao dịch cuối cùng.

  • Góc độ người bán: Bạn kiếm tiền nhờ tốc độ Theta đạt đỉnh. Chỉ cần giá không tăng vượt Strike, bạn thắng.

3. Delta: "Con rối" của Gamma

  • Tác động: Delta trong 0DTE cực kỳ không ổn định. Nó không còn là một chỉ số dự báo xác suất tốt nữa vì nó bị Gamma chi phối hoàn toàn.

  • Hệ quả: Một quyền chọn 0DTE có Delta 0.10 (xác suất thắng 90% cho người bán) có thể biến thành Delta 0.90 (xác suất thua) chỉ sau một cây nến 5 phút.

  • Ghi nhớ: Trong 0DTE, Delta chỉ có ý nghĩa tại thời điểm tức thời, nó thay đổi nhanh đến mức bạn không thể dựa vào nó để quản trị rủi ro dài hạn.

4. Vega: "Kẻ đứng ngoài cuộc"

  • Tác động: Vega đo lường độ nhạy với biến động (IV). Tuy nhiên, vì thời gian đáo hạn còn quá ngắn (tính bằng giờ), sự thay đổi của IV hầu như không còn tác động lên giá quyền chọn.

  • Hệ quả: Dù tin tức ra làm IV tăng vọt, nhưng nếu chỉ còn 2 giờ là đáo hạn, giá quyền chọn 0DTE cũng không tăng đáng kể từ Vega.

  • Kết luận: Bạn có thể gần như ngó lơ Vega khi trade 0DTE.


Bảng tóm tắt các Greek trong 0DTE

GreekMức độ ảnh hưởngĐặc điểm trong 0DTE
GammaCực cao (Số 1)Gây ra những cú nhảy vọt về giá (Explosive price moves).
ThetaCực cao (Số 2)Bào mòn giá trị quyền chọn theo từng phút (Time decay on steroids).
DeltaTrung bìnhThay đổi liên tục và khó lường do tác động của Gamma.
VegaThấp/Không đáng kểIV không còn đủ thời gian để tác động lên giá.

Tại sao 0DTE lại nguy hiểm cho vị thế Short Call?

  1. Pin Risk (Rủi ro găm giá): Vào những phút cuối cùng trước khi sàn đóng cửa, nếu giá cổ phiếu nằm ngay sát Strike Price, Gamma sẽ khiến giá Call nhảy loạn xạ. Bạn có thể bị thực hiện quyền chọn (bị ép bán cổ phiếu) ngay cả khi bạn nghĩ rằng mình đã thắng.

  2. Không có thời gian để sửa sai: Với các hợp đồng dài hạn, nếu giá đi ngược hướng, bạn có thể chờ. Với 0DTE, nếu giá đi ngược hướng, Gamma sẽ giết chết vị thế của bạn chỉ trong tích tắc.

Lời khuyên: Nếu bạn bán (Short) 0DTE, bạn đang ăn tiền từ Theta, nhưng bạn đang đặt cược tính mạng vào Gamma. Đừng bao giờ giữ vị thế 0DTE sát giờ đáo hạn nếu giá đang nằm quá gần vùng Strike.

Option: Trong bối cảnh short call, vị thế in the money rất sâu nếu giá cơ sở giảm mạnh xuống dưới giá strike hãy phân tích tác động của các greek

 

Phân tích quyền chọn:

Đây là một kịch bản rất có lợi cho người nắm giữ vị thế Short Call. Khi giá tài sản cơ sở giảm mạnh từ vùng In-the-Money (ITM) xuống dưới giá thực hiện (Strike Price) để trở thành Out-of-the-Money (OTM), vị thế của bạn chuyển từ trạng thái rủi ro cao sang trạng thái bắt đầu thu lợi nhuận tối đa.

Dưới đây là phân tích chi tiết biến động của các chỉ số Greek trong quá trình này:

1. Delta: Nguồn lợi nhuận chính

  • Trạng thái ban đầu (ITM): Khi quyền chọn đang ITM, Delta của Short Call nằm trong khoảng từ -0.5 đến -1.0. Điều này có nghĩa là giá Call biến động rất sát với giá cổ phiếu.

  • Khi giá giảm mạnh: Vì bạn Short Call (Delta âm), giá giảm mang lại lợi nhuận lớn. Khi giá rơi từ ITM xuống OTM, Delta sẽ chạy từ -1.0 về gần 0.

  • Tác động: Đây là yếu tố mang lại lợi nhuận thực tế lớn nhất. Bạn đang "thu hồi" lại phần giá trị nội tại (Intrinsic Value) mà trước đó quyền chọn sở hữu.

2. Gamma: "Gia tốc" của lợi nhuận và rủi ro

  • Đặc điểm: Gamma của vị thế Short luôn là Gamma âm. Gamma cao nhất khi giá ở trạng thái At-the-Money (ATM - tức là lúc giá tài sản xấp xỉ giá Strike).

  • Khi giá giảm xuyên qua Strike: Khi giá giảm mạnh tiến về vùng Strike, Gamma sẽ tăng vọt lên mức cực đại. Điều này khiến Delta thay đổi rất nhanh.

  • Tác động: Nó giúp tốc độ giảm giá của quyền chọn Call (tức là tốc độ có lời của bạn) tăng nhanh hơn khi giá tiến gần Strike. Tuy nhiên, nếu giá bật tăng trở lại tại điểm này, lỗ cũng sẽ đến nhanh tương ứng. Khi đã xuống sâu dưới vùng OTM, Gamma giảm dần, lợi nhuận từ Delta bắt đầu chững lại.

3. Vega: "Kẻ ngáng đường" tạm thời

  • Trạng thái ban đầu: Short Call có Vega âm.

  • Khi giá giảm mạnh: Như đã thảo luận ở câu trước, giá giảm mạnh thường đi kèm với việc IV (Biến động kỳ vọng) tăng vọt.

  • Tác động: IV tăng sẽ làm tăng giá trị thời gian (Extrinsic Value) của quyền chọn. Mặc dù Delta đang giúp bạn có lời vì giá giảm, nhưng Vega (do IV tăng) lại đẩy giá quyền chọn lên, làm giảm bớt tốc độ chốt lời của bạn.

  • Kết quả: Bạn có thể thấy dù giá đã giảm dưới Strike, nhưng giá quyền chọn Call không giảm rẻ như bạn mong đợi vì "phí hoảng loạn" (IV) đang quá cao.

4. Theta: "Người bạn" kiên trì

  • Trạng thái ban đầu: Short Call có Theta dương (bạn thu tiền từ việc thời gian trôi đi).

  • Khi giá giảm xuống vùng Strike (ATM): Chỉ số Theta đạt giá trị cao nhất khi quyền chọn ở trạng thái ATM.

  • Tác động: Khi giá giảm từ ITM về ATM, tốc độ bào mòn thời gian sẽ tăng lên. Điều này cực kỳ có lợi cho bạn. Ngay cả khi giá tài sản cơ sở đứng yên sau cú giảm mạnh, bạn vẫn thu được lợi nhuận đáng kể mỗi ngày nhờ sự sụt giảm giá trị thời gian này.


Tóm tắt diễn biến khi giá giảm từ ITM xuống OTM:

  1. Giai đoạn 1 (Đang ITM sâu): Lợi nhuận chủ yếu đến từ Delta. Giá trị nội tại mất đi nhanh chóng.

  2. Giai đoạn 2 (Tiến sát Strike - ATM): Gamma đẩy tốc độ có lời lên cao nhất. Nhưng Vega bắt đầu gây áp lực (do IV thường tăng ở điểm này). Theta bắt đầu hoạt động mạnh nhất.

  3. Giai đoạn 3 (Đã xuống OTM): Quyền chọn giờ chỉ còn giá trị thời gian (Extrinsic Value). Lợi nhuận từ Delta ít đi. Lúc này bạn chỉ cần chờ đợi Theta bào mòn nốt phần giá trị còn lại hoặc chờ IV giảm xuống (Volatility Crush) để đóng vị thế với lợi nhuận tối đa.

Rủi ro cần lưu ý:

Mặc dù vị thế đang tốt lên, nhưng vì Gamma âm ở vùng Strike rất lớn, nếu có một cú "hồi mã thương" (giá bật tăng trở lại đột ngột từ đáy), vị thế Short Call sẽ chuyển từ lãi thành lỗ cực nhanh. Do đó, các nhà giao dịch chuyên nghiệp thường chốt lời một phần khi giá vừa giảm xuyên qua Strike và IV đang ở mức cao.

15 tháng 11 2025

VBA : Điều chỉnh lại các cột trong bảng của tài liệu word để làm sách song ngữ.

 Sub AdjustThreeColumnTables()

    ' Bỏ qua lỗi và tiếp tục thực thi nếu có bảng không hợp lệ

    On Error Resume Next


    ' Khai báo các biến sẽ được sử dụng

    Dim tbl As Table

    Dim pageWidth As Single

    Dim remainingWidth As Single

    Dim col1and3Width As Single

    Dim cell As Cell


    ' Xác định độ rộng có thể sử dụng của trang giấy (chiều rộng trang trừ đi lề trái và phải)

    With ActiveDocument.PageSetup

        pageWidth = .PageWidth - .LeftMargin - .RightMargin

    End With


    ' Bắt đầu vòng lặp qua từng bảng trong tài liệu

    For Each tbl In ActiveDocument.Tables

        ' Chỉ thực hiện trên các bảng có chính xác 3 cột

        If tbl.Columns.Count = 3 Then

            ' Đảm bảo bảng không tự động điều chỉnh kích thước

            tbl.AllowAutoFit = False

            

            ' Thiết lập loại độ rộng ưa thích thành điểm (points) và đặt độ rộng của bảng sao cho vừa khít trang

            tbl.PreferredWidthType = wdPreferredWidthPoints

            tbl.PreferredWidth = pageWidth

            

            ' Cho phép cột giữa tự động điều chỉnh theo nội dung để có chiều rộng nhỏ nhất có thể

            tbl.Columns(2).AutoFit

            

            ' Tính toán độ rộng còn lại cho hai cột kia

            remainingWidth = pageWidth - tbl.Columns(2).Width

            col1and3Width = remainingWidth / 2

            

            ' Gán độ rộng đã tính cho cột 1 và cột 3

            tbl.Columns(1).Width = col1and3Width

            tbl.Columns(3).Width = col1and3Width

            

            ' Lặp qua từng ô trong cột đầu tiên

            For Each cell In tbl.Columns(1).Cells

                ' Căn đều (justify) nội dung văn bản trong ô

                cell.Range.ParagraphFormat.Alignment = wdAlignParagraphJustify

                ' Thiết lập để văn bản vừa khít với kích thước ô

                cell.FitText = True

            Next cell

            

            ' Lặp qua từng ô trong cột thứ ba

            For Each cell In tbl.Columns(3).Cells

                ' Căn đều (justify) nội dung văn bản trong ô

                cell.Range.ParagraphFormat.Alignment = wdAlignParagraphJustify

                ' Thiết lập để văn bản vừa khít với kích thước ô

                cell.FitText = True

            Next cell

        End If

    Next tbl

    

    ' Thông báo cho người dùng khi quá trình hoàn tất

    MsgBox "Đã hoàn tất việc điều chỉnh các bảng có 3 cột!", vbInformation

End Sub

Cấu hình chạy powershell script trong Task Scheduler

 

Trong mục Start a program cấu hình như sau:
Mục Program/script : điền powershell.exe
Trong mục agrument điền : -File và đường dẫn tới script ps1.


13 tháng 11 2025

Hotspot Window 10 thỉnh thoảng đang chạy một thời gian không kết nối lại được.

 Tốt nhất là tạo script Powershell sau và thực hiện đặt schedule task để chạy lại sau một số khoảng thời gian. 


# Yêu cầu quyền Administrator

# if (-NOT ([Security.Principal.WindowsPrincipal][Security.Principal.WindowsIdentity]::GetCurrent()).IsInRole([Security.Principal.WindowsBuiltInRole] "Administrator"))

# {

#     Write-Warning "Script này cần quyền Administrator. Vui lòng chạy PowerShell với quyền Administrator!"

#     Break

# }


Add-Type -AssemblyName System.Runtime.WindowsRuntime


# Tìm phương thức AsTask cho Generic

$asTaskGeneric = ([System.WindowsRuntimeSystemExtensions].GetMethods() | Where-Object {

    $_.Name -eq 'AsTask' -and

    $_.GetParameters().Count -eq 1 -and

    $_.GetParameters()[0].ParameterType.Name -eq 'IAsyncOperation`1'

})[0]


# Function đợi kết quả từ Windows Runtime Async Operation

Function Await($WinRtTask, $ResultType) {

    try {

        $asTask = $asTaskGeneric.MakeGenericMethod($ResultType)

        $netTask = $asTask.Invoke($null, @($WinRtTask))


        # Đợi task hoàn thành

        $completed = $netTask.Wait(30000) # Timeout 30 giây


        if (-not $completed) {

            throw "Operation timed out after 30 seconds"

        }


        # Kiểm tra lỗi

        if ($netTask.IsFaulted) {

            throw $netTask.Exception.InnerException

        }


        return $netTask.Result

    }

    catch {

        Write-Error "Await error: $($_.Exception.Message)"

        throw

    }

}


# Function đợi hoàn thành Windows Runtime Async Action

Function AwaitAction($WinRtAction) {

    try {

        $asTask = ([System.WindowsRuntimeSystemExtensions].GetMethods() | Where-Object {

            $_.Name -eq 'AsTask' -and

            $_.GetParameters().Count -eq 1 -and

            !$_.IsGenericMethod

        })[0]

        $netTask = $asTask.Invoke($null, @($WinRtAction))


        # Đợi task hoàn thành

        $completed = $netTask.Wait(30000) # Timeout 30 giây


        if (-not $completed) {

            throw "Operation timed out after 30 seconds"

        }


        # Kiểm tra lỗi

        if ($netTask.IsFaulted) {

            throw $netTask.Exception.InnerException

        }

    }

    catch {

        Write-Error "AwaitAction error: $($_.Exception.Message)"

        throw

    }

}


try {

    # Load Windows Runtime assemblies

    [Windows.Networking.Connectivity.NetworkInformation, Windows.Networking.Connectivity, ContentType = WindowsRuntime] | Out-Null

    [Windows.Networking.NetworkOperators.NetworkOperatorTetheringManager, Windows.Networking.NetworkOperators, ContentType = WindowsRuntime] | Out-Null


    # Lấy connection profile

    $connectionProfile = [Windows.Networking.Connectivity.NetworkInformation]::GetInternetConnectionProfile()


    if ($null -eq $connectionProfile) {

        Write-Error "Không tìm thấy kết nối Internet. Vui lòng kiểm tra kết nối mạng của bạn."

        Break

    }


    # Tạo tethering manager

    $tetheringManager = [Windows.Networking.NetworkOperators.NetworkOperatorTetheringManager]::CreateFromConnectionProfile($connectionProfile)


    # Kiểm tra khả năng tethering

    # if ($tetheringManager.TetheringCapability -ne 0) {

    #     Write-Warning "Hotspot không khả dụng trên thiết bị này. Lý do: $($tetheringManager.TetheringCapability)"

    #     Break

    # }


    # Kiểm tra trạng thái hiện tại

    if ($tetheringManager.TetheringOperationalState -eq 1) {

        Write-Host "Hotspot đang bat! Đang khoi dong lai..." -ForegroundColor Yellow


        # Tắt hotspot

        $stopResult = Await ($tetheringManager.StopTetheringAsync()) ([Windows.Networking.NetworkOperators.NetworkOperatorTetheringOperationResult])


        if ($stopResult.Status -eq 0) {

            Write-Host "Da bat lai hotspot thanh cong." -ForegroundColor Green

            Start-Sleep -Seconds 2


            # Bật lại hotspot

            $startResult = Await ($tetheringManager.StartTetheringAsync()) ([Windows.Networking.NetworkOperators.NetworkOperatorTetheringOperationResult])


            if ($startResult.Status -eq 0) {

                Write-Host "Da bat lai hotspot thanh cong !" -ForegroundColor Green

            } else {

                Write-Error "Không thể bật lại hotspot. Mã lỗi: $($startResult.Status)"

            }

        } else {

            Write-Error "Không thể tắt hotspot. Mã lỗi: $($stopResult.Status)"

        }

    }

    else {

        Write-Host "Hotspot đang tat! Đang bat len..." -ForegroundColor Yellow


        # Bật hotspot

        $startResult = Await ($tetheringManager.StartTetheringAsync()) ([Windows.Networking.NetworkOperators.NetworkOperatorTetheringOperationResult])


        if ($startResult.Status -eq 0) {

            Write-Host "Da bat hotspot thanh cong!" -ForegroundColor Green

        } else {

            Write-Error "Không thể bật hotspot. Mã lỗi: $($startResult.Status)"

        }

    }

}

catch {

    Write-Error "Đã xảy ra lỗi: $($_.Exception.Message)"

    Write-Host "`nGợi ý khắc phục:" -ForegroundColor Cyan

    Write-Host "1. Chạy PowerShell với quyền Administrator" -ForegroundColor White

    Write-Host "2. Kiểm tra xem thiết bị có hỗ trợ Mobile Hotspot không" -ForegroundColor White

    Write-Host "3. Đảm bảo có kết nối mạng hoạt động (Ethernet hoặc Wi-Fi)" -ForegroundColor White

    Write-Host "4. Kiểm tra Windows Update và driver mạng" -ForegroundColor White

}


05 tháng 11 2025

Wifi Hotspot trong window 10 bị tự tắt hoặc disconnect

 Thực hiện vào network adapter, Direct Virtual Adapter và vào mục config -> Power Management và tắt  Allow the computer to turn off this device to safe power.



01 tháng 11 2025

Dọn rác trong nixos

 

Mục tiêuLệnh
Dọn gói không dùngsudo nix-collect-garbage
Dọn tất cả cũ + rollbacksudo nix-collect-garbage -d
Giữ lại 3 ngày gần nhấtsudo nix-collect-garbage --delete-older-than 3d
Dọn cache tải vềsudo rm -rf /nix/var/nix/downloads
Hợp nhất file trùngsudo nix-store --optimise
Xóa generation cũsudo nix-env --delete-generations old


Mẹo quản lý lâu dài

Thêm vào configuration.nix để tự dọn định kỳ:

{ nix.gc = { automatic = true; dates = "weekly"; options = "--delete-older-than 14d"; }; }

→ Nix sẽ tự chạy nix-collect-garbage mỗi tuần, giữ hệ thống gọn gàng.

Cài gói trong nixos

 

Mục tiêuCách làm
Cài gói vào toàn hệ thốngenvironment.systemPackages = with pkgs; [ ... ];
Cài gói cho usernix profile install nixpkgs#pkg
Cài qua Home Managerhome.packages = with pkgs; [ ... ];
Gỡ góiXóa dòng rồi nixos-rebuild switch
Rollbacksudo nixos-rebuild switch --rollback

23 tháng 10 2025

Lựa chọn Router Microtik cho gói mạng 400Mbps (megabit per second)

 

Trung bình một gói tin trên mạng tầm 600 byte. Nên tính toán dựa vào thông số này.

1) Tính pps cần thiết cho 400 Mbps với gói 600 byte (phải làm từng bước)

  • Kích thước gói = 600 byte = 600 × 8 = 4800 bit.

  • Băng thông = 400 Megabit/s = 400 000 000 bit/s.

  • Số gói/giây = 400 000 000 ÷ 4800.

Bây giờ tính chữ số-một-một:

  • 4800 × 83 333 = 399 998 400.

  • 4800 × 83 334 = 400 003 200.

Nên

pps83333.3 packets/second\text{pps} ≈ 83\,333.3\ \text{packets/second}

Khoảng 83.3k pps (gói 600 byte) để đạt 400 Mbps.

2) So sánh với các dòng MikroTik (dựa trên ước lượng trước đó)

(đã có ước lượng pps ở câu trước)

  • RB750Gr3 / hEX (SOHO): ~200–300k pps ước tính → đủ (còn dư headroom).

  • RB4011: ~2.0 million pps ước tính → rất dư.

  • CCR2004 / CCR1072: hàng chục triệu pps → quá mạnh/overkill cho 400 Mbps.

3) Yếu tố thực tế ảnh hưởng

  • Nếu mạng chỉ routing thuần (không nhiều rule) → con số 83k pps là ít, hầu hết thiết bị SOHO/văn phòng đều xử lý tốt.

  • Nếu bật NAT + nhiều firewall rule / mangle / queues / IPS/IDS / VPN → hiệu năng thực tế có thể giảm đáng kể (thường giảm 30–70% tuỳ mức độ).

    • Ví dụ: sau NAT + firewall nặng, 200–300k pps thực tế của thiết bị nhỏ có thể xuống còn 80–150k pps — vẫn có model vừa vặn nhưng phải kiểm tra.

  • FastTrack / FastPath / connection tracking offload / hardware offload: bật đúng sẽ tăng đáng kể hiệu năng cho NAT/firewall.

4) Khuyến nghị thực tế (dựa trên 400 Mbps, gói 600 B)

  • Nếu mạng bạn đơn giản (web/email, NAT cơ bản, số lượng rule ít): RB750Gr3 (hEX) hoặc tương đương là đủ và chi phí thấp.

  • Nếu có nhiều rule firewall, nhiều kết nối đồng thời, VPN, hoặc muốn dự phòng tăng trưởng: chọn RB4011 (an toàn, nhiều headroom).

  • Nếu bạn chạy dịch vụ nặng (IPS, nhiều VPN/ACLs, HW encryption ở tốc độ cao) hoặc hoạch định mở rộng lớn: cân nhắc CCR2004 trở lên.

5) Các bước tối ưu

  1. Bật FastTrack cho các session TCP/UDP thích hợp.

  2. Giữ rule firewall rõ ràng, sắp xếp rule thường xuyên khớp lên trước.

  3. Dùng hardware offload / switch chip cho bridge nếu có.

  4. Giám sát CPU/conntrack để thấy khi nào cần nâng cấp.


Tóm tắt ngắn: để chạy 400 Mbps với gói 600 byte bạn cần ~83.3k pps. Hầu hết MikroTik phổ thông (RB750Gr3) xử lý được; nếu có nhiều firewall/NAT/VPN hoặc muốn dự phòng, chọn RB4011

17 tháng 10 2025

Fix Sửa máy in in qua mạng chậm, gửi lệnh in rất lâu mới in (ricoh)

 Máy in có hiện tượng in qua mạng chậm, gửi lệnh in rất lâu mới in. Có thể máy đang cấu hình port WSD. Cần chuyển qua cấu hình port sử dụng TCP/IP sẽ nhanh hơn

07 tháng 10 2025

Tìm giá trị có trong một cột

 =IF(COUNTIF(E31:E53, A31)>0, "Đã tồn tại", "Không tồn tại")

26 tháng 9 2025

Excel: Di chuyển tới một hàng bất kỳ

 Nếu cần kéo công thức mà dài ko muốn cuộn chuột thì bấm CTRL -G sau đó chọn cell muốn di chuyển tới ví dụ E1000. Trước khi bấm OK có thể bấm giữ Shift phục vụ mục đích chọn cell để fill value

25 tháng 9 2025

Để chạy m3u8 một số trang cần thêm cả header vào lệnh để chạy

 Để chạy với vlc cần cấu hình nâng cao một chút


https://gist.github.com/milesrichardson/4661c311199b98023701f6cecd3b89b0


Excel dữ liệu là cross join của 2 cột ban đầu

 Bạn có 2 cột E, 4,5,6 và cột F A,B,C

Bạn cần tạo ra bảng là cross join có kết quả như sau:


4 A

4 B

4 B

5 A

5 B 

5 C

6 A

6 B

6 C


ở cột A: =INDEX($E$1:$E$3,INT((ROW()-1)/3)+1)

ở cột B  =INDEX($F$1:$F$54,MOD(ROW()-1,3)+1)



30 tháng 7 2025

Google sheet: Công thức để condition formating đổi màu nền khi cell có giá trị là thứ bảy hoặc chủ nhật ở định dạng cell datetime

 Công thức để condition formating đổi màu nền khi đó là thứ bảy hoặc chủ nhật ở định dạng cell datetime

=OR(WEEKDAY(B5:B35)=7;WEEKDAY(B5:B35)=1)