Thủ thuật Notepad++

Xóa các dòng chứa từ khóa biết trước

Ví dụ: Muốn xóa các dòng có từ “tukhoa”

1. Menu => Search => Mark (hoặc Ctrl + F, chọn Tab Mark

)

2. Nhập từ cần xóa: “tukhoa”

3. Check ô Mark line và Wrap aroud => Chọn Find All

4. Search => Bookmark => Remove Bookmarked Lines. (Xóa dòng đã đánh dấu)

Xóa dòng không chứa từ khóa

Ví dụ: Muốn xóa các dòng không có từ “tukhoa”

1,2,3 Lặp lại như trên.

4. Chọn Remove Unmarked Lines.

Xóa dòng trắng (không có gì)

Edit => Line Operations => Remove Empty Lines (Containing Black Character)

Thêm từ khóa vào đầu dòng

1. Ctrl + F => Replace

2. Tích ô Regular expression và Wrap around

3. Find what gõ: ^

4. Replace with gõ từ khóa cần thêm: tukhoa

5. Replace All.

Thêm từ khóa vào cuối dòng

Như trên chỉ khác tìm từ $

Xóa từ khóa cuối dòng

Ví dụ xóa từ tukhoa ở cuối

Như trên.


Find what gõ

: tukhoa$


Replace with: để trống.

Xóa từ khóa đầu dòng

Như trên.


Find what gõ: ^tukhoa

Xóa mọi thứ sau từ khóa

Find what: tukhoa.*

Xóa mọi thứ trước một từ khóa

Find what: ^.+tukhoa

Xóa mọi số (number)

Find what: [0-9] +

Ở phần tiếp theo, mình sẽ giới thiệu thêm một số thủ thuật nội dung, quản lý notepad ++.

Tìm hiểu về resume download

Mình sẽ nói sơ qua flow làm việc của IDM khi bắt đầu tải một file nhé (ý kiến và hiểu biết của cá nhân mình, nên có thể không chính xác lắm):

  1. IDM sẽ request lên server đó với đường dẫn của file cần tải.
  2. Sau khi nhận được response từ server. Nó kiểm tra xem có header Accept-Ranges: bytes hay không.
  3. Nếu có, thì server đó hỗ trợ resume. Và lần sau (nếu bạn đã tạm dừng và tải tiếp) nó sẽ gửi kèm một header Range: bytes=<Số lượng bytes đã tải được>- lên. Server sẽ trả về một status code là 206 Partial Content kèm header Content-Range: bytes <Số bytes bạn gửi lên>-<Số bytes của file – 1>/<Số bytes của file>

Để có thể dễ tưởng tượng hơn. Bây giờ chúng ta cùng đi thực nghiệm nhé. Mình dùng Ubuntu, nên chúng ta có thể sử dụng luôn package Wget với tùy chọn -c (–continue) để thử (không cần phải IDM). Phần chuẩn bị, chúng ta sẽ cài đặt NginX hoặc Apache2. Sau đó cho một file nặng nặng vào thư mục public của NginX (hoặc Apache – thường là /var/www/html). Do tốc độ truyền dữ liệu trong mạng local là rất nhanh nên chúng ta khó có thể xem chính xác được. Rất may là Wget có hỗ trợ limit rate (chúng ta sẽ sử dụng nó để giả lập tốc độ mạng).

Đầu tiên, chúng ta tải file với lệnh:

$ wget http://localhost/file.mp3 -c –limit-rate 500K

Rồi trong quá trình nó download, bạn bấm tổ hợp phím Ctrl+C để dừng. Rồi tiếp tục chạy lại lệnh trên để xem kết quả 

$ wget http://localhost/file.mp3 -c –limit-rate 500K

–2018-09-16 11:03:19– http://localhost/file.mp3

Resolving localhost (localhost)… 127.0.0.1

Connecting to localhost (localhost)|127.0.0.1|:80… connected.

HTTP request sent, awaiting response… 200 OK

Length: 10266423 (9.8M)

 

Saving to: ‘file.mp3’

13% [=====> ] 1,386,970 500KB/s ^C

$ wget http://localhost/file.mp3 -c –limit-rate 500K

–2018-09-16 11:03:24– http://localhost/file.mp3

Resolving localhost (localhost)… 127.0.0.1

Connecting to localhost (localhost)|127.0.0.1|:80… connected.

HTTP request sent, awaiting response… 206 Partial Content

Length: 10266423 (9.8M), 8772957 (8.4M) remaining

 

Saving to: ‘file.mp3’

29% [+++++++======> ] 2,984,410 500KB/s ^C

Để có thể xem chi tiết thằng Wget này nó làm việc như thế nào. Bạn có thể sử dụng thêm tùy chọn -d (–debug):

$ wget http://localhost/file.mp3 -c -d –limit-rate 500K

Setting –limit-rate (limitrate) to 500K

DEBUG output created by Wget 1.15 on linux-gnu.

URI encoding = ‘UTF-8’

–2018-09-16 11:16:03– http://localhost/file.mp3

Resolving localhost (localhost)… 127.0.0.1

Caching localhost => 127.0.0.1

Connecting to localhost (localhost)|127.0.0.1|:80… connected.

Created socket 3.

Releasing 0x000000000174c820 (new refcount 1).

—request begin—

GET /file.mp3 HTTP/1.1

User-Agent: Wget/1.15 (linux-gnu)

Accept: */*

Host: localhost

Connection: Keep-Alive

—request end—

HTTP request sent, awaiting response…

—response begin—

HTTP/1.1 200 OK

Server: nginx/1.12.1

Date: Sun, 16 Sep 2018 04:16:03 GMT

Content-Type: audio/mpeg

Content-Length: 10266423

Last-Modified: Sun, 24 Jul 2016 08:34:00 GMT

Connection: keep-alive

ETag: “57947d78-9ca737”

Accept-Ranges: bytes

—response end—

200 OK

Registered socket 3 for persistent reuse.

Length: 10266423 (9.8M)

 

Saving to: ‘file.mp3’

0% [ ] 0 –.-K/s

$ wget http://localhost/file.mp3 -c -d –limit-rate 500K

Setting –limit-rate (limitrate) to 500K

DEBUG output created by Wget 1.15 on linux-gnu.

URI encoding = ‘UTF-8’

–2018-09-16 11:17:08– http://localhost/file.mp3

Resolving localhost (localhost)… 127.0.0.1

Caching localhost => 127.0.0.1

Connecting to localhost (localhost)|127.0.0.1|:80… connected.

Created socket 3.

Releasing 0x00000000023b8670 (new refcount 1).

—request begin—

GET /file.mp3 HTTP/1.1

Range: bytes=212992-

User-Agent: Wget/1.15 (linux-gnu)

Accept: */*

Host: localhost

Connection: Keep-Alive

—request end—

HTTP request sent, awaiting response…

—response begin—

HTTP/1.1 206 Partial Content

Server: nginx/1.12.1

Date: Sun, 16 Sep 2018 04:17:08 GMT

Content-Type: audio/mpeg

Content-Length: 10053431

Last-Modified: Sun, 24 Jul 2016 08:34:00 GMT

Connection: keep-alive

ETag: “57947d78-9ca737”

Content-Range: bytes 212992-10266422/10266423

—response end—

206 Partial Content

Registered socket 3 for persistent reuse.

Length: 10266423 (9.8M), 10053431 (9.6M) remaining

 

Saving to: ‘file.mp3’

2% [++ ] 212,992 –.-K/s

Giờ chúng ta muốn vô hiệu hóa việc resume thì làm như thế nào? Vâng, từ NginX v1.1.2 thì chúng ta có directive max_ranges. Bạn hãy set nó về 0 rồi restart lại NginX để vô hiệu hóa việc resume và thử lại:

server {

listen 80;

listen [::]:80;

server_name localhost;

location / {

# …

max_ranges 0;

# …

}

}

Kết quả:

$ wget http://localhost/file.mp3 -c –limit-rate 500K

–2018-09-16 11:23:21– http://localhost/file.mp3

Resolving localhost (localhost)… 127.0.0.1

Connecting to localhost (localhost)|127.0.0.1|:80… connected.

HTTP request sent, awaiting response… 200 OK

Length: 10266423 (9.8M)

 

Saving to: ‘file.mp3’

6% [=======> ] 638,976 500KB/s ^C

$ wget http://localhost/file.mp3 -c –limit-rate 500K

–2018-09-16 11:23:23– http://localhost/file.mp3

Resolving localhost (localhost)… 127.0.0.1

Connecting to localhost (localhost)|127.0.0.1|:80… connected.

HTTP request sent, awaiting response… 200 OK

Length: 10266423 (9.8M)

 

Saving to: ‘file.mp3’

5% [======> ] 532,480 500KB/s ^C

Với tùy chọn -d (–debug):

$ wget http://localhost/file.mp3 -c -d –limit-rate 500K

Setting –debug (debug) to 1

Setting –limit-rate (limitrate) to 500K

DEBUG output created by Wget 1.15 on linux-gnu.

URI encoding = ‘UTF-8’

–2018-09-16 11:24:41– http://localhost/file.mp3

Resolving localhost (localhost)… 127.0.0.1

Caching localhost => 127.0.0.1

Connecting to localhost (localhost)|127.0.0.1|:80… connected.

Created socket 3.

Releasing 0x00000000006bf820 (new refcount 1).

—request begin—

GET /file.mp3 HTTP/1.1

User-Agent: Wget/1.15 (linux-gnu)

Accept: */*

Host: localhost

Connection: Keep-Alive

—request end—

HTTP request sent, awaiting response…

—response begin—

HTTP/1.1 200 OK

Server: nginx/1.12.1

Date: Sun, 16 Sep 2018 04:24:41 GMT

Content-Type: audio/mpeg

Content-Length: 10266423

Last-Modified: Sun, 24 Jul 2016 08:34:00 GMT

Connection: keep-alive

ETag: “57947d78-9ca737”

—response end—

200 OK

Registered socket 3 for persistent reuse.

Length: 10266423 (9.8M)

 

Saving to: ‘file.mp3’

0% [ ] 0 –.-K/s

$ wget http://localhost/file.mp3 -c -d –limit-rate 500K

Setting –debug (debug) to 1

Setting –limit-rate (limitrate) to 500K

DEBUG output created by Wget 1.15 on linux-gnu.

URI encoding = ‘UTF-8’

–2018-09-16 11:25:26– http://localhost/file.mp3

Resolving localhost (localhost)… 127.0.0.1

Caching localhost => 127.0.0.1

Connecting to localhost (localhost)|127.0.0.1|:80… connected.

Created socket 3.

Releasing 0x0000000002114670 (new refcount 1).

—request begin—

GET /file.mp3 HTTP/1.1

Range: bytes=212992-

User-Agent: Wget/1.15 (linux-gnu)

Accept: */*

Host: localhost

Connection: Keep-Alive

—request end—

HTTP request sent, awaiting response…

—response begin—

HTTP/1.1 200 OK

Server: nginx/1.12.1

Date: Sun, 16 Sep 2018 04:25:26 GMT

Content-Type: audio/mpeg

Content-Length: 10266423

Last-Modified: Sun, 24 Jul 2016 08:34:00 GMT

Connection: keep-alive

ETag: “57947d78-9ca737”

—response end—

200 OK

Registered socket 3 for persistent reuse.

Length: 10266423 (9.8M)

 

Saving to: ‘file.mp3’

0% [ ] 0 –.-K/s

Vâng, bạn sẽ để ý thấy rằng client chúng ta gửi header Range: nhưng server vẫn lạnh lùng trả về status code là 200 và không kèm theo header Content-Range. Vậy là phải tải lại từ đầu thôi .

Đối với Apache (từ version 2.2.21) thì bạn có thể thêm tùy chọn MaxRanges none.

<VirtualHost *:80>

DocumentRoot /var/www

# …

MaxRanges none

# …

</VirtualHost>

Mình có thử cài NginX trên Windows và thử nghiệm với IDM và chụp ảnh lại. Các bạn có thể xem kết quả:



Đây là chúng ta đang nói về server riêng, do chúng ta cài đặt. Còn trong trường hợp bạn sử dụng shared hosting, và nhà cung cấp lại vô hiệu hóa việc resume download. Vậy chúng ta có thể làm được không? Câu trả lời là có thể. Chúng ta sẽ xử lý bằng code theo flow như sau:

  1. Trả file về kèm với header Accept-Ranges: bytes
  2. Kiểm tra xem trong header request có HTTP_RANGE không? Nếu có, lấy thông tin rồi đọc và trả lại cho client status code 206 kèm các bytes kế tiếp cùng header Content-Range: bytes

Đấy là lý thuyết. Còn thực tế, bạn có thể Google với ngôn ngữ tương ứng bạn đang sử dụng, sẽ có khá nhiều mẫu code giúp chúng ta thực hiện việc này trong trường hợp server vô hiệu hóa việc resume. Với PHP thì bạn có thể tham khảo tại https://github.com/pomle/php-serveFilePartial

Lời kết

Khi server đã hỗ trợ việc resume, công việc của client sẽ thực hiện giống với flow của IDM mình đã viết ở trên. Và mình chia sẻ một phần nhỏ nữa, là việc download đa luồng giống IDM (với điều kiện server hỗ trợ resume, các bạn có thể xem ảnh dưới mình chụp IDM với cài đặt 8 luồng và download file không hỗ trợ resume rồi so sánh với ảnh hỗ trợ resume ở trên) đơn giản chỉ là tạo nhiều process. Mỗi process một phần với header gửi lên là Range: bytes=<Byte bắt đầu>-<Byte kết thúc>, sau khi hoàn thành các phần khác nhau sẽ thực hiện ghép lại thành một file cuối cùng. Đó cũng là lý do vì sao chúng ta nên kiểm tra mã checksum MD5 (hoặc SHA1) của file sau khi đã tải so với trang chủ của file cung cấp tránh trường hợp file tải về bị lỗi ở một luồng nào đó dẫn đến file làm việc không đúng.


Bài viết của mình đến đây là kết thúc. Hy vọng với bài viết đơn giản này sẽ giúp bạn trong một tương lai không xa. See you !

Thêm tự xuống dòng trong công thức Excel

Xuống dòng trong excel chỉ cần Alt Enter là xong. Tuy nhiên, khi viết các hàm ghép chuỗi thì không thể Alt Enter được. Để làm việc này, chúng ta sử dụng hàm CHAR(10), Trong đó 10 là mã của ký tự xuống dòng (line break)

=”abc”&CHAR(10)&”def”

Tuy nhiên, chúng ta vẫn không thấy kết quả xuống dòng, bởi gì mặc định Wrapper cho cell đó k được bật, chỉ cần bấm vào Wrapper text là xong.

Những gì bạn cần biết về monitoring elasticsearch

Elasticsearch là gì

 


Elasticsearch chắc hẳn là nhiều người đã biết, nhưng để bài viết trơn tru, cứ phải có cái introduction cho nó dài. Elasticsearch là cơ sở dữ liệu (database) (từng) dành để lưu trữ text (document) là chính, dựa trên một engine nổi tiếng là lucene. Nói là “từng” vì hiện tại elasticsearch được dùng cho cả những ứng dụng thời thượng như là time series data (lưu dữ liệu là các “point” thay vì document) chứ không chỉ dừng lại cho text nữa.

Trong Elasticsearch thì dữ liệu được biểu diễn dưới dạng JSON và có thể dễ dàng truy vấn thông qua REST API cũng như native API (thông qua thư viện). Điểm thú vị của elasticsearch nằm ở chỗ Distributed: Dữ liệu của elasticsearch được phân tán đều trên các node (primary shard / replica shard) và được tự động phân chia lại khi thêm/xoá node đã có. Việc này khiến cho Elasticsearch rất dễ dàng để scale up/down.

Mô hình dữ liệu của ES:

 


Về cơ bản thì sẽ có 2 loại node chính trong ES:

  • Master node: Node này có nhiệm vụ đứng mũi chịu sào, chịu trách nhiệm điều hành anh em làm việc (coordinate), cũng như nhận một số trọng trách quan trọng như thêm, xoá index… Khi master node chết thì anh em còn lại sẽ họp lại và tìm ra thằng mới dựa trên một thuật toán gọi là Paxos.
  • Data node: Thằng này là culi, chuyên bốc vác dữ liệu, ai bảo gì làm nấy, có trách nhiệm lưu trữ là chính.

Tuy nhiên distributed cũng khiến cho việc vận hành trở nên painful hơn, nhiều khi do bug của việc cooperate giữa các node, hay là do các hoàn cảnh không dự đoán trước được như server gặp mưa, server gặp bão, cá mập cắn cáp… Ngoài ra một số design của elasticsearch (hay cũng như nhiều database khác) khiến cho nó có thể chết không dự đoán trước được do hết memory hay gặp phải query nặng hơn nó có thể chịu được.

Để vận hành đỡ painful thì việc quan trọng nhất chính là monitoring, tức là nắm được elasticsearch cluster của bạn đang hoạt động thế nào mà không cần phải nhìn log hay là các kiến thức cao siêu mà không phải ai cũng biết. Và cuối cùng chúng ta cũng đén được phần chính của bài viết: chúng ta cần monitoring “cái gì” để biết về sức khoẻ của elasticsearch cluster?

Những metrics cần xem khi monitoring ES

Search performance

Đây là một trong những chỉ số quan trọng nhất khi mà chức năng chính của ES là .. tìm kiếm. Những chỉ số có thể lấy được từ ES liên quan đến search performance gồm có

Total number of queries indices.search.query_total Throughput
Total time spent on queries indices.search.query_time_in_millis Performance
Number of queries currently in progress indices.search.query_current Throughput
Total number of fetches indices.search.fetch_total Throughput
Total time spent on fetches indices.search.fetch_time_in_millis Performance
Number of fetches currently in progress indices.search.fetch_current Throughput

Để hiểu hơn những chỉ số trên thì chúng ta cần hiểu trước về việc: Elasticsearch thực hiện việc “tìm kiếm” thế nào? Khi có một request về tìm kiếm thì đầu tiên request sẽ được gửi đến một data node bất kì chữa data của một index nào đó. Sau đó thì node này sẽ gửi request đến tất cả các node xung quanh mà chứa shard của index đang tìm, và nhận kết quả từ các node xung quanh, việc này được gọi là Fetching.
Theo như bảng ở trên thì chúng ta sẽ cần theo dõi các yếu tố chính dưới đây:

  • Query Load : dựa vào “số lượng” query hiện tại đang được thực hiện, qua đó xem cluster có bị quá tải không

 

  • Query Latency : dựa vào query time, chúng ta có thể biết cluster mất bao nhiều lâu để trả về một request
  • Fetch Latency : nếu fetch tốn quá lâu, thì khả năng cao sẽ là do disk hay network có vấn đề

Index performance

Nếu coi tìm kiếm là thao tác “read” thì index chính là thao tác “write”. Để có performance tốt nhất thì các database thường tiết kiệm việc phải ghi dữ liệu vào disk (fsync) thông qua buffer, tức là lưu tạm ở memory trước, đợi nhiều nhiều rồi ghi vào disk cả thể. Elasticsearch cũng vậy, việc này thể hiện ở diagram dưới đây:

 


 


Nhìn vào 2 diagram ở trên chúng ta cần chú ý đến 2 thao tác là Refresh và Flush. 2 thao tác này dựa trên một đơn vị gọi là “Segment”. Bạn nào từng làm việc với các hệ thống database (Postgres, cassandra, influxdb) thì sẽ hiểu rằng có các đơn vị dữ liệu không thay đổi được (immutable) là rất quan trọng trong việc tạo ra một database với high write throughput. Việc này dựa trên idea chính là, cứ write đã, đúng sai tính sau (việc đúng sai tính sau thể hiện bằng thao tác “merge” được thực hiện ở background). Ở đây thì “Segment” chính là đơn vị dữ liệu không thay đổi (immutable data) của elastic search.
Một segment được tạo mới thông qua Refresh và được ghi vào đĩa + merge thông qua Flush. Flush sẽ được trigger khi memory đến giới hạn, hoặc sau một khoảng cách thời gian nào đó (khoảng sau mỗi 30 phút).

Để theo dõi các thông số liên quan đến index thì có các chỉ số dưới đây

Total number of documents indexed indices.indexing.index_total Throughput
Total time spent indexing documents indices.indexing.index_time_in_millis Performance
Number of documents currently being indexed indices.indexing.index_current Throughput
Total number of index refreshes indices.refresh.total Throughput
Total time spent refreshing indices indices.refresh.total_time_in_millis Performance
Total number of index flushes to disk indices.flush.total Throughput
Total time spent on flushing indices to disk indices.flush.total_time_in_millis Performance

Từ những con số trên các bạn có thể hiểu ra được

  • Index latency: thông qua index_total và index_time_in_millis thì bạn có thể thấy ES tốn bao nhiêu thời gian cho việc indexing , và đang phải chịu tải là bao nhiêu request.

 

  • Flush latency : thông qua flush.total_time_in_millis thì bạn có thể thấy được latency của thao tác Flush. Nếu latency quá cao, thì có khả năng bạn đang gặp phải vấn đề về disk, hoặc là flush size quá lớn.

JVM metrics

Elasticsearch được build trên java. Vận hành một hệ thống java mà không hiểu về JVM thì coi như bạn toi chắc rồi. Để monitoring JVM system thì việc kiểm soát Memory và GC là 2 cái quan trọng nhất. Đặc biệt memory là cái tối quan trọng khi mà một query nặng có thể dẫn đến memory vượt quá kiểm soát và JVM sẽ lăn ra chết, hay là trở nên unresponsive. Khi nhìn vào heap thì quan trọng nhất là xem heap percent, tức là trong XXGB memory đã được cấp phát cho JVM, thì bao nhiêu % đã và đang được sử dụng.

Bên cạnh đó thì việc nhìn vào GC (mặc dù có nhìn thì cũng không làm được gì vì GC nằm ngoài tầm kiểm soát của bạn) cũng khá có ích để phán đoán việc khi ES cluster của bạn trở nên chậm chạp thì liệu có phải do ES bug không :v. ES team cũng khuyến cáo người dùng đừng có cố thay đổi GC option default: https://www.elastic.co/guide/en/elasticsearch/guide/current/_don_8217_t_touch_these_settings.html

Host metrics

Host metrics là những metrics thể hiện sự khoẻ mạnh của machine nói chung. Nó bao gồm những thông số như diskSpace, CPU usage , IO utilization. Như đã nói ở trên thì việc disk chậm, CPU bị starve cũng đều ảnh hưởng đến chức năng tìm kiếm rất lớn (tất nhiên rồi :v), vậy nên việc theo dõi những thông số này một cách chặt chẽ cũng giúp ích rất nhiều trong việc trouble shooting cũng như dự đoán trước về performance downgrade của ES.

Cluster health

Những thông số tôi đã nói ở trên hầu hết thể hiện sự khoẻ mạnh của một node trong toàn thể cluster. Vậy làm thế nào để biết được sự khoẻ mạnh “tổng thể” của toàn bộ cluster?

Cluster status (green, yellow, red) cluster.health.status Other
Number of nodes cluster.health.number_of_nodes Availability
Number of initializing shards cluster.health.initializing_shards Availability
Number of unassigned shards cluster.health.unassigned_shards Availability

Quan trọng nhất, và cũng dễ hiểu nhất chính là “Cluster status”.

  • Green: khoẻ mạnh, không vấn đề gì

 

  • Yellow: Một hoặc một vài replica shard đột nhiên biến mất, và nếu nó tiếp tục biến mất nữa, bạn sẽ mất dữ liệu khi tìm kiếm (có thể hiểu yellow là threshold trước khi dữ liệu tìm kiếm không còn toàn vẹn nữa )
  • Red: Một hoặc một vài primary shard biến mất, điều này có nghĩa là chắc chắn kết quả search của bạn sẽ không toàn vẹn, sẽ thiếu data.

Bên cạnh cluster status thì Initializing and unassigned shards cũng khá quan trọng, nó thể hiện các shard mà đang được khởi động , hoặc chưa được assigned cho master, nếu con số này không về 0 không một nhanh chóng, chứng tỏ rằng cluster của bạn đang ở trạng thái rất thiếu ổn định.

Làm thế nào để monitoring?

Như vậy là chúng ta đã nắm được là : cần phải xem gì, nhưng chúng ta vẫn chưa đề cập đến việc: làm thế nào để xem các thông số đó. Elasticsearch cung cấp cho chúng ta tất cả các thông số ở trên thông qua HTTP GET một cách rất dễ dàng, dựa vào endpoint /_nodes/_local/stats

Đây là ví dụ khi tôi vào một node bất kì với url : node-name/_nodes/_local/stats

 


Để lưu dữ liệu lại và xem dưới dạng graph, bạn có thể sử dụng những service hiện có như datadog, hay là sử dụng solution có sẵn như prometheus + elasticsearch_exporter

Kết luận

Việc tìm hiểu xem một hệ thống middleware xem cần monitoring những gì và hiểu rõ về từng metrics phải monitoring sẽ giúp chúng ta có thêm nhiều kiến thức rât bổ ích về internal của middleware đó. Trong bài tiếp theo tôi sẽ nói về monitoring metrics của mysql, đợi năm sau nhé :P.

Reference

Active các bản windows và Office thông qua KMS lậu

Mở cmd với quyền admin và chạy các lệnh tương ứng

Windows Server 2016 Datacenter:
slmgr /ipk CB7KF-BWN84-R7R2Y-793K2-8XDDG
slmgr /skms kms.digiboy.ir
slmgr /ato
Windows Server 2016 Standard:
<pre>slmgr /ipk WC2BQ-8NRM3-FDDYY-2BFGV-KHKQY
slmgr /skms kms.digiboy.ir
slmgr /ato
Active windows 10:
Windows 10 Home: TX9XD-98N7V-6WMQ6-BX7FG-H8Q99
Windows 10 Home N: 3KHY7-WNT83-DGQKR-F7HPR-844BM
Windows 10 Home Single Language: 7HNRX-D7KGG-3K4RQ-4WPJ4-YTDFH
Windows 10 Home Country Specific: PVMJN-6DFY6-9CCP6-7BKTT-D3WVR
Windows10 Professional: W269N-WFGWX-YVC9B-4J6C9-T83GX
Windows10 Professional N: MH37W-N47XK-V7XM9-C7227-GCQG9
Windows10 Enterprise: NPPR9-FWDCX-D2C8J-H872K-2YT43
Windows10 Enterprise N: DPH2V-TTNVB-4X9Q3-TJR4H-KHJW4
Windows10 Education: NW6C2-QMPVW-D7KKK-3GKT6-VCFB2
Windows10 Education N: 2WH4N-8QGBV-H22JP-CT43Q-MDWWJ
Windows10 Enterprise2015 LTSB: WNMTR-4C88C-JK8YV-HQ7T2-76DF9
Windows10 Enterprise2015 LTSB: 2F77B-TNFGY-69QQF-B8YKP-D69TJ
Thay vào dòng dưới
slmgr /ipk W269N-WFGWX-YVC9B-4J6C9-T83GX
slmgr /skms kms.digiboy.ir
slmgr /ato

Windows Server 2022

Win Server 2022 Datacenter: WX4NM-KYWYW-QJJR4-XV3QB-6VM33
Win Server 2022 Standard: VDYBN-27WPP-V4HQT-9VMD4-VMK7H

Active Office:

Chỉ áp dụng cho bản Office 2016 VL, nếu đang bản retail thì phải convert sang, cách convert bằng cách chạy Script tương ứng dưới quyền administrator sẽ được hướng dẫn ở cuối bài.

Sau khi convert

Tiếp theo là active bằng cách dưới:
cd C:\Program Files (x86)\Microsoft Office\Office16
cscript OSPP.VBS /inpkey:XQNVK-8JYDB-WJ9W3-YJ8YR-WFG99
cscript OSPP.VBS /sethst:kms.digiboy.ir
cscript OSPP.VBS /act
cscript OSPP.VBS /dstatus
Đối với office 64bit
cd C:\Program Files\Microsoft Office\Office16
cscript OSPP.VBS /inpkey:XQNVK-8JYDB-WJ9W3-YJ8YR-WFG99
cscript OSPP.VBS /sethst:kms.digiboy.ir
cscript OSPP.VBS /act
cscript OSPP.VBS /dstatus
Trong đó:
XQNVK-8JYDB-WJ9W3-YJ8YR-WFG99 là key Office 2016 Pro Plus. Nếu các bạn sử dụng các phiên bản Office như Visio, Project… thì thay key dưới đây vào:
Office Professional Plus 2016: XQNVK-8JYDB-WJ9W3-YJ8YR-WFG99
Office Standard 2016 : JNRGM-WHDWX-FJJG3-K47QV-DRTFM
Project Professional 2016: YG9NW-3K39V-2T3HJ-93F3Q-G83KT
Project Standard 2016: GNFHQ-F6YQM-KQDGJ-327XX-KQBVC
Visio Professional 2016: PD3PC-RHNGV-FXJ29-8JK7D-RJRJK
Visio Standard 2016: 7WHWN-4T7MP-G96JF-G33KR-W8GF4
Access 2016: GNH9Y-D2J4T-FJHGG-QRVH7-QPFDW
Excel 2016: 9C2PK-NWTVB-JMPW8-BFT28-7FTBF
OneNote 2016: DR92N-9HTF2-97XKM-XW2WJ-XW3J6
Outlook 2016: R69KK-NTPKF-7M3Q4-QYBHW-6MT9B
PowerPoint 2016: J7MQP-HNJ4Y-WJ7YM-PFYGF-BY6C6
Publisher 2016: F47MM-N3XJP-TQXJ9-BP99D-8K837
Skype for Business 2016: 869NQ-FJ69K-466HW-QYCP2-DDBV6
Word 2016: WXY84-JN2Q9-RBCCQ-3Q3J3-3PFJ6
========================

Hướng dẫn convert sang bản VL:

Chạy script tương ứng với Office 64 bit hoặc 32 bit

Office 32 bit, Lưu đoạn dưới đây thành file name.cmd rồi chạy
@echo off
:ADMIN
openfiles >nul 2>nul ||(
echo Set UAC = CreateObject^(“Shell.Application”^) > “%temp%\getadmin.vbs”
echo UAC.ShellExecute “%~s0”, “”, “”, “runas”, 1 >> “%temp%\getadmin.vbs”
“%temp%\getadmin.vbs” >nul 2>&1
goto:eof

)

del /f /q “%temp%\getadmin.vbs” >nul 2>nul

for /f “tokens=6 delims=[]. ” %%G in (‘ver’) do set win=%%G

pushd “%~dp0”

Title Office 2016 Retail to Volume License Converter

echo Press Enter to start VL-Conversion…

echo.

pause

echo.

cd /D “%SystemRoot%\System32”

if %win% GEQ 9200 (

cscript slmgr.vbs /ilc “%ProgramFiles(x86)%\Microsoft Office\root\Licenses16\ProPlusVL_KMS_Client-ppd.xrm-ms”

cscript slmgr.vbs /ilc “%ProgramFiles(x86)%\Microsoft Office\root\Licenses16\ProPlusVL_KMS_Client-ul.xrm-ms”

cscript slmgr.vbs /ilc “%ProgramFiles(x86)%\Microsoft Office\root\Licenses16\ProPlusVL_KMS_Client-ul-oob.xrm-ms”

cscript slmgr.vbs /ilc “%ProgramFiles(x86)%\Microsoft Office\root\Licenses16\ProjectProVL_KMS_Client-ppd.xrm-ms”

cscript slmgr.vbs /ilc “%ProgramFiles(x86)%\Microsoft Office\root\Licenses16\ProjectProVL_KMS_Client-ul-oob.xrm-ms”

cscript slmgr.vbs /ilc “%ProgramFiles(x86)%\Microsoft Office\root\Licenses16\ProjectProVL_KMS_Client-ul.xrm-ms”

cscript slmgr.vbs /ilc “%ProgramFiles(x86)%\Microsoft Office\root\Licenses16\VisioProVL_KMS_Client-ppd.xrm-ms”

cscript slmgr.vbs /ilc “%ProgramFiles(x86)%\Microsoft Office\root\Licenses16\VisioProVL_KMS_Client-ul-oob.xrm-ms”

cscript slmgr.vbs /ilc “%ProgramFiles(x86)%\Microsoft Office\root\Licenses16\VisioProVL_KMS_Client-ul.xrm-ms”

cscript slmgr.vbs /ilc “%ProgramFiles(x86)%\Microsoft Office\root\Licenses16\client-issuance-bridge-office.xrm-ms

cscript slmgr.vbs /ilc “%ProgramFiles(x86)%\Microsoft Office\root\Licenses16\client-issuance-root.xrm-ms

cscript slmgr.vbs /ilc “%ProgramFiles(x86)%\Microsoft Office\root\Licenses16\client-issuance-root-bridge-test.xrm-ms

cscript slmgr.vbs /ilc “%ProgramFiles(x86)%\Microsoft Office\root\Licenses16\client-issuance-stil.xrm-ms

cscript slmgr.vbs /ilc “%ProgramFiles(x86)%\Microsoft Office\root\Licenses16\client-issuance-ul.xrm-ms

cscript slmgr.vbs /ilc “%ProgramFiles(x86)%\Microsoft Office\root\Licenses16\client-issuance-ul-oob.xrm-ms

cscript slmgr.vbs /ilc “%ProgramFiles(x86)%\Microsoft Office\root\Licenses16\pkeyconfig-office.xrm-ms

)

if %win% LSS 9200 (

cscript “%ProgramFiles(x86)%\Microsoft Office\Office16\ospp.vbs” /inslic:”%ProgramFiles(x86)%\Microsoft Office\root\Licenses16\ProPlusVL_KMS_Client-ppd.xrm-ms”

cscript “%ProgramFiles(x86)%\Microsoft Office\Office16\ospp.vbs” /inslic:”%ProgramFiles(x86)%\Microsoft Office\root\Licenses16\ProPlusVL_KMS_Client-ul.xrm-ms”

cscript “%ProgramFiles(x86)%\Microsoft Office\Office16\ospp.vbs” /inslic:”%ProgramFiles(x86)%\Microsoft Office\root\Licenses16\ProPlusVL_KMS_Client-ul-oob.xrm-ms”

cscript “%ProgramFiles(x86)%\Microsoft Office\Office16\ospp.vbs” /inslic:”%ProgramFiles(x86)%\Microsoft Office\root\Licenses16\ProjectProVL_KMS_Client-ppd.xrm-ms”

cscript “%ProgramFiles(x86)%\Microsoft Office\Office16\ospp.vbs” /inslic:”%ProgramFiles(x86)%\Microsoft Office\root\Licenses16\ProjectProVL_KMS_Client-ul-oob.xrm-ms”

cscript “%ProgramFiles(x86)%\Microsoft Office\Office16\ospp.vbs” /inslic:”%ProgramFiles(x86)%\Microsoft Office\root\Licenses16\ProjectProVL_KMS_Client-ul.xrm-ms”

cscript “%ProgramFiles(x86)%\Microsoft Office\Office16\ospp.vbs” /inslic:”%ProgramFiles(x86)%\Microsoft Office\root\Licenses16\VisioProVL_KMS_Client-ppd.xrm-ms”

cscript “%ProgramFiles(x86)%\Microsoft Office\Office16\ospp.vbs” /inslic:”%ProgramFiles(x86)%\Microsoft Office\root\Licenses16\VisioProVL_KMS_Client-ul-oob.xrm-ms”

cscript “%ProgramFiles(x86)%\Microsoft Office\Office16\ospp.vbs” /inslic:”%ProgramFiles(x86)%\Microsoft Office\root\Licenses16\VisioProVL_KMS_Client-ul.xrm-ms”

cscript “%ProgramFiles(x86)%\Microsoft Office\Office16\ospp.vbs” /inslic:”%ProgramFiles(x86)%\Microsoft Office\root\Licenses16\client-issuance-bridge-office.xrm-ms

cscript “%ProgramFiles(x86)%\Microsoft Office\Office16\ospp.vbs” /inslic:”%ProgramFiles(x86)%\Microsoft Office\root\Licenses16\client-issuance-root.xrm-ms

cscript “%ProgramFiles(x86)%\Microsoft Office\Office16\ospp.vbs” /inslic:”%ProgramFiles(x86)%\Microsoft Office\root\Licenses16\client-issuance-root-bridge-test.xrm-ms

cscript “%ProgramFiles(x86)%\Microsoft Office\Office16\ospp.vbs” /inslic:”%ProgramFiles(x86)%\Microsoft Office\root\Licenses16\client-issuance-stil.xrm-ms

cscript “%ProgramFiles(x86)%\Microsoft Office\Office16\ospp.vbs” /inslic:”%ProgramFiles(x86)%\Microsoft Office\root\Licenses16\client-issuance-ul.xrm-ms

cscript “%ProgramFiles(x86)%\Microsoft Office\Office16\ospp.vbs” /inslic:”%ProgramFiles(x86)%\Microsoft Office\root\Licenses16\client-issuance-ul-oob.xrm-ms

cscript “%ProgramFiles(x86)%\Microsoft Office\Office16\ospp.vbs” /inslic:”%ProgramFiles(x86)%\Microsoft Office\root\Licenses16\pkeyconfig-office.xrm-ms

)

echo.

echo Retail to Volume License conversion finished.

echo.

pause

Đối với office 64 bit

Office 64 bit, Lưu đoạn dưới đây thành file name.cmd rồi chạy
@echo off
:ADMIN
openfiles >nul 2>nul ||(
echo Set UAC = CreateObject^(“Shell.Application”^) > “%temp%\getadmin.vbs”
echo UAC.ShellExecute “%~s0”, “”, “”, “runas”, 1 >> “%temp%\getadmin.vbs”
“%temp%\getadmin.vbs” >nul 2>&1
goto:eof

)

del /f /q “%temp%\getadmin.vbs” >nul 2>nul

for /f “tokens=6 delims=[]. ” %%G in (‘ver’) do set win=%%G

pushd “%~dp0”

Title Office 2016 Retail to Volume License Converter

echo Press Enter to start VL-Conversion…

echo.

pause

echo.

cd /D “%SystemRoot%\System32”

if %win% GEQ 9200 (

cscript slmgr.vbs /ilc “%ProgramFiles%\Microsoft Office\root\Licenses16\ProPlusVL_KMS_Client-ppd.xrm-ms”

cscript slmgr.vbs /ilc “%ProgramFiles%\Microsoft Office\root\Licenses16\ProPlusVL_KMS_Client-ul.xrm-ms”

cscript slmgr.vbs /ilc “%ProgramFiles%\Microsoft Office\root\Licenses16\ProPlusVL_KMS_Client-ul-oob.xrm-ms”

cscript slmgr.vbs /ilc “%ProgramFiles%\Microsoft Office\root\Licenses16\ProjectProVL_KMS_Client-ppd.xrm-ms”

cscript slmgr.vbs /ilc “%ProgramFiles%\Microsoft Office\root\Licenses16\ProjectProVL_KMS_Client-ul-oob.xrm-ms”

cscript slmgr.vbs /ilc “%ProgramFiles%\Microsoft Office\root\Licenses16\ProjectProVL_KMS_Client-ul.xrm-ms”

cscript slmgr.vbs /ilc “%ProgramFiles%\Microsoft Office\root\Licenses16\VisioProVL_KMS_Client-ppd.xrm-ms”

cscript slmgr.vbs /ilc “%ProgramFiles%\Microsoft Office\root\Licenses16\VisioProVL_KMS_Client-ul-oob.xrm-ms”

cscript slmgr.vbs /ilc “%ProgramFiles%\Microsoft Office\root\Licenses16\VisioProVL_KMS_Client-ul.xrm-ms”

cscript slmgr.vbs /ilc “%ProgramFiles%\Microsoft Office\root\Licenses16\client-issuance-bridge-office.xrm-ms

cscript slmgr.vbs /ilc “%ProgramFiles%\Microsoft Office\root\Licenses16\client-issuance-root.xrm-ms

cscript slmgr.vbs /ilc “%ProgramFiles%\Microsoft Office\root\Licenses16\client-issuance-root-bridge-test.xrm-ms

cscript slmgr.vbs /ilc “%ProgramFiles%\Microsoft Office\root\Licenses16\client-issuance-stil.xrm-ms

cscript slmgr.vbs /ilc “%ProgramFiles%\Microsoft Office\root\Licenses16\client-issuance-ul.xrm-ms

cscript slmgr.vbs /ilc “%ProgramFiles%\Microsoft Office\root\Licenses16\client-issuance-ul-oob.xrm-ms

cscript slmgr.vbs /ilc “%ProgramFiles%\Microsoft Office\root\Licenses16\pkeyconfig-office.xrm-ms

)

if %win% LSS 9200 (

cscript “%ProgramFiles%\Microsoft Office\Office16\ospp.vbs” /inslic:”%ProgramFiles%\Microsoft Office\root\Licenses16\ProPlusVL_KMS_Client-ppd.xrm-ms”

cscript “%ProgramFiles%\Microsoft Office\Office16\ospp.vbs” /inslic:”%ProgramFiles%\Microsoft Office\root\Licenses16\ProPlusVL_KMS_Client-ul.xrm-ms”

cscript “%ProgramFiles%\Microsoft Office\Office16\ospp.vbs” /inslic:”%ProgramFiles%\Microsoft Office\root\Licenses16\ProPlusVL_KMS_Client-ul-oob.xrm-ms”

cscript “%ProgramFiles%\Microsoft Office\Office16\ospp.vbs” /inslic:”%ProgramFiles%\Microsoft Office\root\Licenses16\ProjectProVL_KMS_Client-ppd.xrm-ms”

cscript “%ProgramFiles%\Microsoft Office\Office16\ospp.vbs” /inslic:”%ProgramFiles%\Microsoft Office\root\Licenses16\ProjectProVL_KMS_Client-ul-oob.xrm-ms”

cscript “%ProgramFiles%\Microsoft Office\Office16\ospp.vbs” /inslic:”%ProgramFiles%\Microsoft Office\root\Licenses16\ProjectProVL_KMS_Client-ul.xrm-ms”

cscript “%ProgramFiles%\Microsoft Office\Office16\ospp.vbs” /inslic:”%ProgramFiles%\Microsoft Office\root\Licenses16\VisioProVL_KMS_Client-ppd.xrm-ms”

cscript “%ProgramFiles%\Microsoft Office\Office16\ospp.vbs” /inslic:”%ProgramFiles%\Microsoft Office\root\Licenses16\VisioProVL_KMS_Client-ul-oob.xrm-ms”

cscript “%ProgramFiles%\Microsoft Office\Office16\ospp.vbs” /inslic:”%ProgramFiles%\Microsoft Office\root\Licenses16\VisioProVL_KMS_Client-ul.xrm-ms”

cscript “%ProgramFiles%\Microsoft Office\Office16\ospp.vbs” /inslic:”%ProgramFiles%\Microsoft Office\root\Licenses16\client-issuance-bridge-office.xrm-ms

cscript “%ProgramFiles%\Microsoft Office\Office16\ospp.vbs” /inslic:”%ProgramFiles%\Microsoft Office\root\Licenses16\client-issuance-root.xrm-ms

cscript “%ProgramFiles%\Microsoft Office\Office16\ospp.vbs” /inslic:”%ProgramFiles%\Microsoft Office\root\Licenses16\client-issuance-root-bridge-test.xrm-ms

cscript “%ProgramFiles%\Microsoft Office\Office16\ospp.vbs” /inslic:”%ProgramFiles%\Microsoft Office\root\Licenses16\client-issuance-stil.xrm-ms

cscript “%ProgramFiles%\Microsoft Office\Office16\ospp.vbs” /inslic:”%ProgramFiles%\Microsoft Office\root\Licenses16\client-issuance-ul.xrm-ms

cscript “%ProgramFiles%\Microsoft Office\Office16\ospp.vbs” /inslic:”%ProgramFiles%\Microsoft Office\root\Licenses16\client-issuance-ul-oob.xrm-ms

cscript “%ProgramFiles%\Microsoft Office\Office16\ospp.vbs” /inslic:”%ProgramFiles%\Microsoft Office\root\Licenses16\pkeyconfig-office.xrm-ms

)

echo.

echo Retail to Volume License conversion finished.

echo.

pause

Đọc tiếp Active các bản windows và Office thông qua KMS lậu

Lỗi cannot be loaded because the execution of scripts is disabled on this system. cuả POWERSHELL

Chạy Script bằng powershell lỗi cannot be loaded because the execution of scripts is disabled on this system.

Nguyên nhân do mặc định windows chặn powershell thực thi các scripts này vì lý do an ninh, để mở thả cửa cho chức năng này, chạy câu sau, hỏi gì cứ Yes to All

Set-ExecutionPolicy RemoteSigned