11 tháng 5 2026
14 tháng 4 2026
Tại sao giá thị trường future lại lệch so với spot giao ngay
Vì hàng hóa future là giao hàng ở một thời điểm trong tương lai, trong khoảng thời gian đến lúc đáo hạn sẽ có các chi phí như
11 tháng 4 2026
Sửa lỗi máy in khi kết nối máy in share qua mạng báo Credential
Vào Control Panel mục Credential Manager
Add thêm Credential : Tên máy PC đang share máy in VD Nhập \\TENMAY
User: username tài khoản share network máy in qua mạng đã thiết lập share : VD: \\ mayin
Password: Password tài khoản share máy in: VD : 123456
Sau khi lưu xong thực hiện add lại máy in mạng : \\TENMAY\HPLASETJET là ok
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.
- Nhấn Win + R, nhập Control và nhấn Enter.
- 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.
- Nhấp vào Add a printer > The printer that I want isn’t listed.
- Chọn Add a local printer or network printer with manual settings.
- Nhấp vào Next.
- Chọn Create a new port and set it to Local Port.
- 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). - 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.percho 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
.perbạ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 và .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.
1. Gamma: "Vị vua" của 0DTE (Rủi ro và Biến động)
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)
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
Tại sao 0DTE lại nguy hiểm cho vị thế Short Call?
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. 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.
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.
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:
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. 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. 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 ý:
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
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êu | Lệnh |
|---|
| Dọn gói không dùng | sudo nix-collect-garbage |
| Dọn tất cả cũ + rollback | sudo nix-collect-garbage -d |
| Giữ lại 3 ngày gần nhất | sudo 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ùng | sudo 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êu | Cách làm |
|---|
| Cài gói vào toàn hệ thống | environment.systemPackages = with pkgs; [ ... ]; |
| Cài gói cho user | nix profile install nixpkgs#pkg |
| Cài qua Home Manager | home.packages = with pkgs; [ ... ]; |
| Gỡ gói | Xóa dòng rồi nixos-rebuild switch |
| Rollback | sudo 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
pps≈83333.3 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
-
Bật FastTrack cho các session TCP/UDP thích hợp.
-
Giữ rule firewall rõ ràng, sắp xếp rule thường xuyên khớp lên trước.
-
Dùng hardware offload / switch chip cho bridge nếu có.
-
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.





