Tsu_Kpa's Blog




Tại sao lại là Vim?

Khi bạn code quá nhanh và muốn tăng thêm tốc độ gõ phím của mình? Đây là một sự lựa chọn hợp lý để làm điều đó. Hãy cùng hiểu Vim như một ngôn ngữ nhé. Thật ra nó là một editor khá nổi tiếng.

Lịch sử Vim

Viết tắt của Vi Improved là một bản saovới một số tính năng bổ sung của trình soạn thảo vi của Bill Joy cho Unix. Nó được viết bởi Bram Moolenaar dựa trên mã nguồn của Stevie editor lên Amiga và phát hành lần đầu vào năm 1991.

Ngôn ngữ Vim

Động từ

  • d: Delete
  • c: Change
  • y: Yank (copy)
  • v: Visual Select

Công cụ sửa đổi

  •            i: Inside
  •       a: Around
  •            t: Tìm kiếm thứ gì đó và dừng trước nó
  •       f: Tìm kiếm thứ gì đó và đứng trên nó
  •            /: Tìm kiếm một chuỗi hoặc regex


Danh từ

  •         w: Word
  •         s: Sentence
  •         p: Paragraph
  •         t: Tag (HTML/XML)
  •         b: Block


Một số câu (lệnh) minh họa để thực hiện khi sử dụng:

  •         Xóa 2 từ (Delete 2 words): d2w
  •        Copy đoạn văn bản đang trỏ (Yank inside Paragraph): yip
  •         Chọn 2 dòng (Visual 2 jump): v2j


Khá là logic đúng không, giờ chúng ta tìm hiểu về cách lưu file thông dụng nhé (có lần mình mới xài Vim chỉnh sửa xong không biết cách để thoát :v đành phải tắt cả cửa sổ terminal)



 


Tìm kiếm


 


Di chuyển xung quanh






Di chuyển bất kì






Di chuyển nội dòng






Di chuyển qua từ






Undo và Redo





Copy và Paste





Chế độ Visual






Cùng xem một lão làng múa phím với Vim





Ngoài ra thì còn một số tính năng hay ho trên Vscode mà mình đã chia sẽ ở bài viết trước:

Tham khảo thêm tại đây:





Chào các bạn, khi đã là một lập trình viên lâu năm (:v) thì chắc ai cũng sẽ biết đến Vim. Một editor nổi tiếng cực nhẹ và đặc biệt là không cần sử dụng chuột. Vim hỗ trợ hầu hết các plugin hỗ trợ lập trình như các IDE khác. Vậy tại sao chúng ta không dùng Vim?


Kết quả hình ảnh cho vim là gì



Vì nó khó sử dụng :v
Thực sự mà nói thì việc config plugin cũng mất kha khá thời gian vì phải google rồi copy từng dòng vào file .vimrc sau đó test xem nó chạy không,... 
Ngoài ra Vim còn bonus cho chúng ta khả năng code tốc độ bàn thờ bởi chỉ sử dụng bàn phím (có thể youtube xem các lão làng coder múa phím)
Ở bài này mình xin giới thiệu với các bạn một số tính năng tiện lợi của plugin Vim được minh họa bằng hình ảnh của mình trên VSCode. Lý do là vì VSCode khá dễ sử dụng chúng ta chỉ cần gõ từ vim trong phần Extensions và cài đặt nó mà thôi. Khi chán thì có thể disable nó để sử dụng kiểu soạn thảo thông thường

Vim – Surround

Chế độ này cho phép chúng ta chỉnh sửa các dấu ngoặc đơn, dấu ngoặc kép, dấu ngoặc vuông, hay thậm chí là tag.

Cú pháp như sau:

ds <kí tự cần xóa> : (delete surround) Xóa kí tự xung quanh

 Ví dụ:

     #input: “hello”

     Thao tác: ds”

     #output: hello






cs <kí tự hiện tại> <kí tự mong muốn> : (change surround) Thay đổi kí tự xung quanh

 Ví dụ:

     #input: “hello”

     Thao tác: cs”’

     #output: ‘hello’






S <kí tự mong muốn>: Surround vùng đã chọn trong chế độ Visual mode.

 Ví dụ:

     #input: chọn 1 từ với lệnh viw. hello

     Thao tác: S”

     #output: “hello”



Vim – Commentary

Comment code với Vim bằng dòng lệnh thay vì bôi đen rồi sử dụng các lệnh "ctrl" + "/" ở các IDE khác.
  • gcc toggle comment ở dòng hiện tại. Và gc2j để toggle dòng hiện tại và 2 dòng kế tiếp.





  • gC để toggle block comment. Ví dụ gCi{ để comment mọi thứ bên trong {}





Multi - Cursor Mode

Chế độ này giúp chúng ta có thể chỉnh sửa từ ở nhiều nơi khác nhau.

Để kích hoạt chế độ này:

  • Trên OS - X : cmd - d. Trên Windows: ctrl - d
  • gb, một shortcut mới được VScode thêm vào tương tự như 2 lệnh phía trên. Sẽ thêm một con trỏ vào từ khớp với từ đang trỏ hiện tại. Để thoát sử dụng phím Escape 2 lần.


VSCodeVim tricks!

Một số trick trong VSCodeVim mà mình thấy dễ sử dụng:

  • gd: Nhảy tới nơi khai báo




  • gb: Được nói đến ở phần MultiCursor



  • gh: Hover nơi con trỏ đang đứng thay vì sử dụng chuột. Dùng để xem mô tả hàm, biến, lỗi,…





Demo vậy thôi nhe, ở bài sau mình sẽ nói về "ngôn ngữ Vim" nhé. Mời các bạn đón xem!

Tham khảo Vim trên VSCode tại đây nha


Với xu hướng công nghệ 4.0 hiện nay thì Blockchain là một trong những công nghệ được sử dụng hàng đầu. Ở bài viết trước thì mình có giới thiệu tại sao công nghệ này lại được chọn mà không phải là Ethereum.

Truy xuất nguồn gốc là một công việc đòi hỏi sự minh bạch khá cao do đó blockchain là sự lựa chọn hết sức hợp lý. Truy xuất nguồn gốc sản phẩm giúp cho người tiêu dùng yên tâm hơn về sản phẩm mình sẽ sử dụng cũng như dễ quản lý.

Trong ví dụ này mình sẽ tạo một trường hợp sử dụng nhỏ đó là truy xuất giống trước khi đem giống đi nuôi thành nguyên liệu. Sau khi thêm 1 sản phẩm giống thì cần một người để xác thực nó có hợp lệ hay không. OK dài dòng vậy thôi bắt đầu nào!






Điều kiện tiên quyết

Để cài đặt Hyperledger Composer thì cần có những điều kiện sau:
· Operating Systems: Ubuntu Linux 14.04 / 16.04 LTS (both 64-bit), or Mac OS 10.12
· Docker Engine: Version 17.03 or higher
· Docker-Compose: Version 1.8 or higher
· Node: 8.9 or higher (note version 9 and higher is not supported)
· npm: v5.x
· git: 2.9.x or higher
· Python: 2.7.x
· A code editor of your choice, we recommend VSCode.
Lưu ý khi cài npm và các lệnh script thì đừng sử dụng sudo hoặc su chỉ nên sử dụng trong khi đang chạy.

Download script về bằng lệnh:
curl -O https://hyperledger.github.io/composer/latest/prereqs-ubuntu.sh
chmod u+x prereqs-ubuntu.sh

Tiếp theo chạy script dưới đây nó sẽ tự động tải về và cài các gói cần thiết:
./prereqs-ubuntu.sh

Lưu ý nếu có lỗi xảy ra thì chịu khó đọc và tìm nguyên nhân bằng cách tìm lỗi đó trên google.

Cài đặt môi trường phát triển


Bước 1: Cài đặt công cụ CLIs

- Cài đặt công cụ CLI 
npm install -g composer-cli

- Cài đặt REST-SERVER
npm install -g composer-rest-server
- Cài đặt công cụ sinh ra tài sản
npm install -g generator-hyperledger-composer

- Cài đặt công cụ sinh ra code
npm install -g yo

Bước 2: Cài đặt playground (tùy chọn) hoặc vào trang https://composer-playground.mybluemix.net/


npm install -g composer-playground

Chạy giao diện playground bằng lệnh:
$composer-playground

Là một công cụ để giúp chỉnh sửa và test mạng

Bước 3: Cài đặt IDE để lập trình

- Tải VSCode tại trang chủ https://code.visualstudio.com/download
- Thêm Extensions Hyperledger Composer để hỗ trợ việc hiển thị trong Marketplace.

Bước 4: Cài đặt mạng Hyperledger Fabric

- Tạo thư mục để chạy mạng khi làm việc và tải gói về cài đặt
mkdir ~/fabric-dev-servers && cd ~/fabric-dev-servers

curl -O https://raw.githubusercontent.com/hyperledger/composer-tools/master/packages/fabric-dev-servers/fabric-dev-servers.tar.gz

- Giải nén
tar -xvf fabric-dev-servers.tar.gz

- Tiếp tục tải phiên bản runtime
cd ~/fabric-dev-servers
export FABRIC_VERSION=hlfv12
./downloadFabric.sh


Sau khi hoàn thành các bước trên thì chúng ta có thể khởi động mạng theo các bước dưới đây:
    cd ~/fabric-dev-servers
    export FABRIC_VERSION=hlfv12
    ./startFabric.sh
    ./createPeerAdminCard.sh


Lưu ý khi chạy ./startFabric.sh sẽ tạo peer mới và CouchDB mới, khi đó dữ liệu cũ sẽ bị xóa cho nên để lưu trạng thái phiên làm việc CouchDB bằng cách vào 
<thư mục chứa fabric-dev-server>/fabric-script/hlfv1/compose/ và gõ 
docker-compose stop để tắt và start để chạy mỗi phiên làm việc.




Để hủy thiết lập trước đó trong trường hợp muốn nâng cấp phiên bản:

    docker kill $(docker ps -q)
    docker rm $(docker ps -aq)
    docker rmi $(docker images dev-* -q)

Bắt đầu cài đặt ứng dụng mẫu

Bước 1: Tạo kiến trúc mạng

- Tạo khung mạng bằng yeoman. Câu lệnh này sẽ đề nghị thông tin như là tên mạng, mô tả ...
yo hyperledger-composer:businessnetwork


Business network name: quanly-thuysan     --> Tên thư mục và tên mạng
Description: Ung dung quan ly thuy san
Author name: Nguyen Quang Nam
Author email: nam@gmail.com
License: Apache-2.0
Namespace: org.hlfc.qlts      --> tên gì cũng được nhưng phải nhớ để gọi
Do you want to generate an empty template network? Yes





Sau đó thì cd quanly-thuysan sẽ có các file và folder như sau:
- models 
- package.json
- permissions.acl 
- README.md

Bước 2: Khai báo các file trong kiến trúc mạng

Vào folder models sửa file org.hlfc.qlts.cto

namespace org.hlfc.qlts

participant nguoichungthuc identified by id {
  o String id
  o String name
}

asset NguyenLieu identified by idnguyenlieu {
  o String idnguyenlieu
  o String tennguyenlieu
  o String ghichu
}

asset QuocGia identified by idQG {
  o String idQG
  o String tenQG
}

asset Tinh identified by idTinh {
  o String idTinh
  o String tenTinh
}

asset Huyen identified by idHuyen {
  o String idHuyen
  o String tenHuyen
}

asset Ao identified by idAo {
  o String idAo
  o String tenAo
}

asset TrangTrai identified by idTrangTrai {
  o String idTrangTrai
  o String tenTrangTrai
}

enum status {
  o chua_xacthuc
  o da_xacthuc
}
asset SanPham identified by idSP{
  o String idSP
  --> QuocGia qg
  --> Tinh tinh
  --> Huyen huyen
  --> NguyenLieu nguyenlieu
  --> Ao ao
  --> TrangTrai trangtrai
  o status status
}

transaction xacThucSanPham {
  --> SanPham sanpham
  o status status
}

Sau đó tạo file ChungThuc.js trong thư mục lib cần tạo. File trong thư mục này là tổng hợp chaincode hay smartcontract để xử lý logic của blockchain. Có thể có nhiều file để thực hiện nhiều chức năng khác nhau. Trong ví dụ này chỉ đơn giản là sửa trạng thái khi người chứng thực đã duyệt. 

/**
 * Sample transaction processor function.
 * @param {org.hlfc.qlts.xacThucSanPham} tx The sample transaction instance.
 * @transaction
 */
async function xacThucSanPham(tx) {
    // Get the asset registry for the asset.
    const assetRegistry = await getAssetRegistry('org.example.basic.SanPham');
   tx.sanpham.status = tx.status;
    // Update the asset in the asset registry.
    await assetRegistry.update(tx.sanpham); 
}

Bước 3: Khai báo lưu trữ mạng thành file bna dùng để test và deploy

- Vào thư mục mạng đã khai báo ở trên
- Thực hiện lệnh sau sẽ tạo ra file bna trong thư mục đó:
composer archive create -t dir -n .

 

Bước 4: Deploy mạng

Vào thư mục đã khai báo ở trên
- Cài đặt mạng đã khai báo vào mạng fabric
composer network install --card PeerAdmin@hlfv1 --archiveFile quanly-thuysan@0.0.1.bna

- Chạy mạng đã cài đặt
composer network start --networkName quanly-thuysan --networkVersion 0.0.1 --networkAdmin admin --networkAdminEnrollSecret adminpw --card PeerAdmin@hlfv1 --file networkadmin.card







- Thêm admin card 
composer card import --file networkadmin.card

- Kiểm tra mạng
composer network ping --card admin@quanly-thuysan





Bước 5: Chạy REST API server

composer-rest-server
Lệnh trên có tác dụng tùy chọn chức năng cho server hoặc bạn có thể sử dụng lênh dưới để sử dụng nhanh chóng
composer-rest-server -c admin@quanly-thuysan -n never -u true -w true







Tùy chọn khi lập trình, sau khi sửa version trong file package.json thì chúng ta cần cập nhật lại mạng và thực hiện từ bước tạo bna


Nâng cấp phiên bản
composer network upgrade -c PeerAdmin@hlfv1 -n quanly-thuysan -V 0.0.2


Sau khi đã chạy REST-server thì chúng ta có thể sử dụng nó làm backend và tạo một app frontend để giao tiếp với nó. Ở bài viết này mình chỉ dừng ở đây thôi. Cám ơn cám bạn đã theo dõi!





Xu hướng công nghệ 4.0 hiện nay làm cho blockchain được thể hiện mình thực sự là một xu hướng công nghệ mới bởi tính chất bất biến của nó. Do đó nhu cầu về tính minh bạch của thông tin mà các ngành nghề đòi hỏi được tăng lên như là y tế, giáo dục, tài chính ngân hàng...

Các doanh nghiệp ngày càng quan tâm đến blockchain do lời hứa của nó về hiệu quả được cải thiện và giảm chi phí. Tuy nhiên, họ không thể sử dụng các blockchain công khai/permissionless vì thiếu quyền riêng tư, khả năng mở rộng thấp và thông lượng giao dịch ít hơn.

Các doanh nghiệp không thể sử dụng blockchain công khai vì những lý do sau: 
  • Vấn đề bảo mật : Các blockchain công khai như Bitcoin là không được phép. Bất cứ ai cũng có thể tham gia nó, bao gồm cả người dùng ẩn danh và giả danh. Nhiều doanh nghiệp như tổ chức dịch vụ tài chính và nhà cung cấp dịch vụ chăm sóc sức khỏe làm việc theo các yêu cầu nghiêm ngặt về quyền riêng tư. Họ không thể cho phép bất cứ ai nhìn thấy thông tin nhạy cảm của họ.

  • Khả năng mở rộng : Hầu hết các chuỗi khối công khai có khả năng mở rộng thấp vì tất cả các nút trên mạng được yêu cầu xử lý giao dịch. Điều này cũng dẫn đến thông lượng giao dịch thấp.

  • Tính bất biến của hợp đồng thông minh : Hợp đồng thông minh không thể thay đổi sau khi được triển khai và kết quả thực hiện của chúng là không thể đảo ngược. Các doanh nghiệp cần các cách để đảm bảo chúng không có lỗi trước khi triển khai chúng.

  • Vấn đề lưu trữ : Vì mỗi nút đầy đủ lưu trữ tất cả dữ liệu trên blockchain công cộng, yêu cầu lưu trữ rất cao, liên tục tăng theo thời gian. Sự dư thừa lưu trữ quá mức này không thực tế cho các doanh nghiệp.

  • Thuật toán đồng thuận không bền vững : Bitcoin và Ethereum sử dụng thuật toán 'proof of work' (POW), đòi hỏi rất nhiều sức mạnh tính toán và tốn nhiều năng lượng. Thời gian trôi qua, sức mạnh xử lý và yêu cầu năng lượng tăng lên khiến nó không thực tế trong bối cảnh kinh doanh. 

  • Thiếu quản trị : Không ai kiểm soát các blockchain công cộng, khiến trách nhiệm của các nhà phát triển cá nhân hoặc cộng đồng nhà phát triển phải thực hiện các dự án cải tiến. Các doanh nghiệp cần có đủ quản trị để duy trì blockchain hiệu quả trong thời gian dài.


Các doanh nghiệp cần có các yêu cầu cụ thể từ mạng blockchain: 
  • Họ cần một blockchain nơi họ có thể kiểm soát ai tham gia mạng và họ phải có thể xác thực danh tính của người dùng mới bằng hệ thống quản lý danh tính trong tổ chức của họ; 
  • Doanh nghiệp cần khả năng mở rộng và thực hiện giao dịch nhanh; 
  • Doanh nghiệp phải có khả năng đặt quy tắc kiểm soát truy cập cho thông tin nhạy cảm của mình; 
  • Cơ chế đồng thuận cần tính đến quy trình công việc trong đó có sự phân tách nhiệm vụ giữa người yêu cầu, người phê duyệt và người lưu giữ hồ sơ. 
  • Mạng phải có khả năng phục hồi cao; 
  • Khắc phục sự cố nên được tự động hóa càng tốt; 
  • Khả năng bảo trì phải cao; 
  • Một quản trị chủ động để phát triển các công cụ và quy trình phù hợp cho các hoạt động hiệu quả lâu dài. 

Hyperledger Fabric là một nền tảng được xây dựng để có thể đáp ứng những yêu cầu này.

Ưu điểm của Hyperledger Fabric: 

1. Kiến trúc mô đun

Fabric cung cấp một kiến trúc môđun nơi các nhà phát triển có thể tạo các thành phần bổ trợ. Điều này rất hữu ích cho các nhà phát triển. Chúng có thể dễ dàng bao gồm các thành phần như quản lý nhận dạng tùy chỉnh, v.v., nhờ tính năng này.
Nhiều công ty muốn xây dựng một blockchain được phép nhưng muốn sử dụng lại hệ thống quản lý danh tính hiện có của họ. Các kiến trúc môđun cho phép điều này.

2. Bạn có thể sử dụng Hyperledger Fabric để xây dựng blockchain riêng tư/permissioned

Các doanh nghiệp như ngân hàng hoạt động theo các yêu cầu nghiêm ngặt về quy định không thể cho phép người dùng chưa biết xem dữ liệu giao dịch. Bên cạnh đó, thông tin này là một tài sản quan trọng các doanh nghiệp này vì vậy việc xem trái phép là rủi ro đối với lợi nhuận tài chính trong tương lai.
Các tổ chức sử dụng Fabric thường sử dụng Member Service Provider (MSP) để cấp và xác nhận chứng chỉ, và để xác thực người dùng.
MSP còn được gọi là Certificate Authority (CA) theo cách nói của Fabric. Nền tảng cung cấp các công cụ để tạo chứng chỉ MSP, ví dụ: 'cryptogen'.

3. Hiệu suất và khả năng mở rộng

Không có thuật toán POW và khai thác tiền điện tử trong Fabric, và nó mang lại khả năng mở rộng cao và giao dịch nhanh. Xác thực giao dịch phản ánh cách thức một quy trình giao dịch hoạt động trong doanh nghiệp bình thường và hoạt động như sau:
Quá trình xử lý giao dịch có 3 giai đoạn riêng biệt: 
1. Xử lý logic phân tán và các thỏa thuận liên quan đến chaincode; 
2. Đặt hàng giao dịch; 
3. Xác nhận giao dịch và commit. 

Điều này đảm bảo mức độ tin cậy và xác nhận ít hơn trên các loại nút khác nhau, do đó giảm chi phí; 
Vòng đời giao dịch như sau: 
1. Một requester submit một giao dịch cho một người chứng thực; 
2. Chính sách chứng thực chỉ định số lượng và sự kết hợp của các chứng thực cần thiết cho giao dịch này; 
3. Người xác nhận thực hiện các chaincode để mô phỏng đề xuất cho các đồng nghiệp thông qua một 'bộ đọc / ghi'; 
4. Người xác nhận gửi lại phản hồi đề xuất đã ký, còn được gọi là 'chứng thực'; 
5. Khách hàng gửi giao dịch cho người đặt hàng bằng chữ ký số; 
6. Người đặt hàng tạo ra một block các giao dịch và gửi nó cho các đồng nghiệp; 
7. Kiểm tra ngang hàng xem chính sách chứng thực có được đáp ứng hay không và kiểm tra các giao dịch xung đột. Khi cả hai kiểm tra thành công, các peer sẽ commit block vào sổ cái. 

Chỉ có bộ đọc / ghi chữ ký đi qua mạng, tối ưu hóa khả năng mở rộng và hiệu suất. Chỉ những người chứng thực và đồng nghiệp cam kết giao dịch thực sự nhìn thấy các giao dịch này, do đó tính bảo mật của dữ liệu được duy trì tối ưu.

4. 'Kênh' để phân vùng dữ liệu

Hyperledger Fabric hỗ trợ tạo các kênh, cho phép mạng Blockchain cho phép các tổ chức khác nhau trao đổi thông tin qua các phương tiện riêng tư hơn. Ví dụ: một công ty có thể có các kênh riêng cho nhiều nhà cung cấp cạnh tranh. Điều này cho phép mức độ bảo mật và sự tự tin trên ACL.

5. Khả năng truy vấn phong phú

Với mỗi bản cập nhật của sổ cái phân tán, một tập hợp các cặp giá trị khóa tài sản cũng được cam kết với sổ cái.
CouchDB, có cơ sở dữ liệu tài liệu nơi nội dung được lưu trữ dưới dạng JSON. Điều này làm cho cơ sở dữ liệu rất dễ dàng để truy vấn.
Sử dụng JSON giúp loại bỏ sự cần thiết phải thay đổi thường xuyên đối với ứng dụng chỉ để tạo điều kiện truy vấn. CouchDB cũng hỗ trợ các truy vấn giàu dữ liệu.

6. Khóa kỹ thuật số dựa trên phần cứng

Hardware Security Model (HSM) giúp bảo vệ và quản lý các khóa kỹ thuật số được sử dụng để xác thực. Đối với các trường hợp sử dụng như quản lý danh tính, HSM tăng khả năng bảo vệ khóa và dữ liệu nhạy cảm.

7. Sự hỗ trợ cộng đồng phong phú

Cùng xem danh sách thành viên của Hyperledger tại trang chủ 
https://www.hyperledger.org/members
Đây là một trong những cộng đồng phát triển giàu nhất. Đến từ một tập hợp các tổ chức đa dạng như vậy, mỗi tổ chức đều có chuyên môn quan trọng cả về công nghệ blockchain cũng như 'Lines of Business' (LOBs) chính của họ. Sức mạnh tổng hợp của cộng đồng dự kiến sẽ góp phần phong phú cho lộ trình phát triển trong tương lai của Fabric.

 

Những nhược điểm của Hyperledger Fabric:

Hai nhược điểm rõ ràng của Fabric đều liên quan đến khung còn khá mới. Đó là: 
1. Thiếu các trường hợp sử dụng đã được chứng minh; 
2. Một số lượng không đủ các lập trình viên lành nghề có thể sử dụng nó.