Hiển thị các bài đăng có nhãn Chuyện nghề. Hiển thị tất cả bài đăng
Hiển thị các bài đăng có nhãn Chuyện nghề. Hiển thị tất cả bài đăng

Thứ Sáu, 21 tháng 6, 2019

Cypress Gathering

 
  • Read a file that maybe not exist
https://docs.cypress.io/api/commands/task.html#Read-a-file-that-might-not-exist


  • Add timeout when checking for element


cy.get('.selector', {timeout: 5000});


  • Wait to be redirected to new location


cy.url({timeout: 15000}).should('contain', '/new-location');


Cách truyền tham số có tên (named arguments) khi chạy file .bat (Windows)


Việc sử dụng tham số có tên thay vì tham số thứ tự tăng tính trực quan, dễ sử dụng cho các tool thực thi, trải dài từ các script bash, Python, Node.js và cả Windows .bat

Với ví dụ, để truyền hai tham số EMAIL và PASSWORD vào .bat script, từ Command Prompt (CMD) ta chạy như sau

run-tool.bat "EMAIL=sample@gmail.com" "PASSWORD=secret"

Nội dung của run-tool.bat:

set EMAIL=
set PASSWORD=

set %1
set %2

echo EMAIL: %EMAIL%
echo PASSWORD: %PASSWORD%

Giải thích:

set %1
set %2

Khi chạy run-tool.bat "EMAIL=sample@gmail.com" "PASSWORD=secret"

%1 do bat hỗ trợ đọc được sẽ là "EMAIL=sample@gmail.com"
set %1 tương đương set "EMAIL=sample@gmail.com"
Tức là set biến môi trường EMAIL với giá trị sample@gmail.com.
Lúc đó ta truy cập được giá trị (echo %EMAIL%)

Tương tự với PASSWORD thông qua %2

2 câu set tham số về rỗng nhằm đảm bảo mỗi lần chạy script giá trị hiện tại của biến được xóa sạch đi.
set EMAIL=
set PASSWORD= 

Như vậy bằng cách dùng set, tận dụng %1, %2, %3... ta có thể để nó set giá trị các biến môi trường và tool có thể bắt đầu sử dụng chúng.

Bài viết được viết theo trải nghiệm và tham khảo chính từ Stackoverflow

Thứ Hai, 27 tháng 5, 2019

Tăng tốc mysqldump

Nên dùng Schema Inspector để biết được kích thước của từng bảng trong CSDL. Sau đó chạy mysqldump riêng rẽ dump ra từng bảng, pipe output qua nén gzip để giảm thiểu kích thước.

mysqldump -u <username> -p <database_name> <target_table> | gzip > ~/<target_table.gzip>

Dump tất cả các bảng ngoại trừ một số bảng:

mysqldump -u <username> -p <database_name> --ignore-table=<db_name.table_name> --ignore-table=<db_name.other_table_name> ... | gzip > ~/remaining_tables.gzip

Tham khảo thêm:  https://stackoverflow.com/questions/425158/skip-certain-tables-with-mysqldump

Thứ Năm, 28 tháng 3, 2019

Tập tành VBA: Biến (Variable)

Yêu cầu:

  • Đọc lại bài số 2, nơi ta đã tạo một nút bấm và thực hiện một đoạn mã ngắn để hiển thị cửa sổ thông báo khi bấm vào nút đó.

Dựa vào những gì đã có ở bài số 2, ta sửa lại đoạn mã của thủ tục CommandButton1_Click như sau:

  • Trước tiên, khai báo một biến tên là "message" có kiểu dữ liệu là kiểu chuỗi (String).

Dim message as String

  • Thứ hai, gán cho nó một giá trị là "Hi"

message = "Hi"

  • Thay dòng MsgBox("Hi") bằng MsgBox(message).

Nội dung soạn thảo hiện tại phải là:
Private Sub CommandButton1_Click()
    Dim message As String
    message = "Hi"
    MsgBox (message)
End Sub
 



  • Trở về sheet Excel, tắt chế độ Design, bấm nút, và cửa sổ thông báo với nội dung "Hi" vẫn xuất hiện như ở bài 2.

Sự khác biệt:

  • Ở bài 2, ta truyền giá trị "Hi" vào thẳng hàm MsgBox("Hi").
  • Ở bài 3 này, ta gián tiếp truyền giá trị "Hi" thông qua việc gán "Hi" vào biến "message", sau đó mới truyền vào hàm MsgBox(message).

Và đều cho ra một kết quả.

Biến giống như việc ta định danh một vị trí trong bộ nhớ, và được phép đính kèm (= gán) cho nó một giá trị.

Ví dụ như để tính diện tích hình chữ nhật, ta có thể chia làm 2 biến là: chieu_rong (chiều rộng) và chieu_cao (chiều cao), tính diện tích sẽ là s = chieu_rong * chieu_cao.

Trong lập trình việc dùng biến là tối quan trọng bậc nhất, nó giúp chúng ta chia nhỏ các quá trình tính toàn thành từng bước, dùng các biến để gán các giá trị trung gian trước khi tính ra kết quả cuối cùng.
Đoạn mã lập trình khi được phân chia thành các biến sẽ dễ đọc, dễ sửa, tựa như những công thức toán học.... vậy.

Chốt lại:

Cú pháp khai báo biến

Dim <tên biến> As <kiểu dữ liệu>

Vd:
Dim chieu_rong as Integer
Dim chieu_cao as Integer
Dim message as String
Dim doanhThu as Currency

Tên biến:
  • Bắt đầu bằng chữ cái (Vd: message, chieu_rong).
  • Không được chứa các kí tự đặc biệt như ! # @.
  • Không được dài quá 255 kí tự.
  • Không được trùng với các từ khóa đặc biệt trong VBA (như Sub, Call, Workbook)
 Lưu ý: Phần trên đã đủ cơ bản về biến, tuy nhiên vẫn khuyến khích đọc thêm phần dưới.

Kiểu dữ liệu 
Nếu nói về Excel thì kiểu dữ liệu làm việc chính là kiểu số, tuy nhiên cũng có nhiều kiểu số khác nhau tùy theo khoảng giá trị.

  • Kiểu byte: giá trị từ 0 - 255.
  • Kiểu Integer: giá trị từ -32,768 - 32,767
  • ...

Có thể xem thêm bảng tóm tắt:

Kiểu số


Các kiểu khác ngoài số

  • Chọn đúng kiểu dữ liệu để đảm bảo kết quả tính toán được chính xác, ví dụ như để lưu giá trị tiền bạc (thường sẽ rất lớn) ta sẽ dùng các kiểu: Single, Double, Currency, Decimal chứ không nên dùng Integer (max của nó chỉ tầm 32767) và Long (max chỉ tầm 2 tỉ).
  • Nếu biết chắc giá trị của một biến tối đa có thể là bao nhiêu thì ta có thể chọn những kiểu dữ liệu đủ chứa được, để tiết kiệm bộ nhớ, đúng mục đính.

2 kiểu quan trọng nhiều nữa là kiểu chuỗi (String) và giá trị luận lý (logic - Boolean  - Đúng/sai).
Kiểu Boolean ta sẽ gặp rất nhiều trong các bài sau, ở bài vòng lặp (for) và điều kiện (if else).

Ok, với kiến thức về biến như hôm nay, mình nghĩ hôm sau ta sẽ nói về các đối tượng trong Excel (Excel Object) nhằm giúp chúng ta đạt được các tác vụ thường ngày như mở file Excel lên, đọc sheet 1 và tính giá trị bên sheet2,... hoàn toàn có thể làm được.

Sau đó chúng ta sẽ quay ngược lại với các khái niệm cơ bản trong bất cứ ngôn ngữ lập trình nào: điều kiện, vòng lặp. Từ đó ta sẽ dần xây được nền tảng trong việc lập trình VBA.

Và mục tiêu sẽ là: hình thành được tư duy, cách phát biểu các vấn đề (nói thẳng là các tác vụ, việc cần tính toán trong sheet Excel thông qua VBA) trước khi đặt tay vào code.

Nguồn tham khảo: https://www.tutorialspoint.com/vba/vba_variables.htm

Thứ Tư, 27 tháng 3, 2019

Tập tành VBA: Button & MessageBox

Mục tiêu của bài này là bắt tay vào việc gõ vài dòng mã (lập trình @@) để hiên thị một cửa sổ thông báo với nội dung được truyền vào sử dụng hệ thống MessageBox (MsgBox) của Excel.

Tóm gọn:
Nhấn vào nút (Button) để kích hoạt cửa sổ thông báo (MsgBox).

Yêu cầu: Xem bài 1 và kích hoạt chế độ nhà phát triển VBA (Developer).

  • Trước tiên ta cần chèn nút vào một vị trí bất kỳ (cho nhanh) trên sheet Excel hiện tại.
    Tại tab Developer, chọn Insert Command Button, sau đó nhấn giữ chuột trái và kéo một hình chữ nhật vừa phải để tạo một nút (Button).




  • Nhấn đúp hoặc nhấn chuột phải vào nút vừa tạo (có tên CommandButton1) chọn View Code để lập trình xử lý khi nút được nhấn vào.


Lúc này trình soạn thảo VBA xuất hiện với nội dung được điền sẵn:

Private Sub CommandButton1_Click()
End Sub


Dòng Sub CommandButton1_Click() - là Excel đã khai báo tự động một thủ tục (là việc gom nhóm đoạn mã lập trình, có thể tạm hiểu như ta phân chia ra việc rửa chén sẽ gồm các thủ tục con như: tráng nước, rửa xà phòng, rửa bằng nước sạch, sẽ nói thêm sau này) có tên là CommandButton1_Click - thủ tục được gọi khi người ta nhấn vào nút này.
Việc cần làm bây giờ là lập trình thêm mã vào phần thân thủ tục, tức là phần giữa Sub và End Sub

Ta gõ MsgBox("Hi") vào thân thủ tục.


Sau khi thử gõ thêm vào thân thủ tục, kiểm tra lại nội dung soạn thảo phải như thế này:

Private Sub CommandButton1_Click()
  MsgBox ("Hi")
End Sub




  • Mở lại sheet Excel, tại tab Developer, nhấn vào nút Design Mode để tắt chế độ thiết kế (là chế độ dùng để sắp xếp, bố cục, thêm bớt các thành phần như nút,...) để đổi sang chế độ sử dụng.


  • Lúc này, ta có thể nhấn vào nút "CommandButton1" kia, sẽ có một cửa sổ hiện lên với nội dung "Hi" như ta đã lập trình.


Ok như vậy là xong bài này. Thực sự bài này rất đơn giản, ta chỉ cần rờ một chút và gõ thêm dòng MsgBox("Hi") để khi bấm nút nó hiện lên thông báo "Hi".

MsgBox là thủ tục sẵn có của Excel, nó nhận vào tham số là nội dung tin nhắn: MsgBox("Hi") - ta truyền "Hi" vào thì nó sẽ hiện cửa sổ với nội dung "Hi" lên.
Việc lập trình VBA về sau cũng tạm hiểu theo cách như vậy, ta viết các thủ tục (hoặc hàm), truyền các tham số, tính ra kết quả, thực hiện các việc này việc nọ....

Thực ra thì việc sử dụng nút trong Excel thông qua VBA như này mình nghĩ không nhiều. Tuy nhiên việc lợi dụng giới thiệu về nút (button) và lập trình một đoạn mã ngắn để chạy khi nhấn vào nút đó, mình nghĩ cũng là một cách khá phù hợp cho những người mới làm quen việc "lập trình", tức là về sau mình sẽ đi vào vấn đề chính hơn, thực tế hơn, đó là dùng VBA để chạy xử lý các tác vụ âm thầm và tự động chứ không nhất thiết là phải "bấm nút".

Trong bài mình đã khéo léo giới thiệu sơ về thủ tục (và về sau chỉ cần nói lại thêm một chút sẽ rất dễ), mình nghĩ với kiến thức hiện tại thì bài sau sẽ nên nói về biến (variable).

Hẹn gặp lại.







Tập tành VBA: Trình soạn thảo VBA Editor

Để bước chân vào việc lập trình VBA, sẽ cần phải làm việc thường xuyên với khung soạn thảo VBA.
Đây là nơi để chúng ta "lập trình", gõ những đoạn mã (code).

Gọi là lập trình chứ cũng không có gì quá to tát và sợ hãi, hãy hiểu đơn giản đó là việc chúng ta thay các tác vụ hằng ngày bằng những dòng lệnh và nhờ chúng chạy một cách tự động, nhanh chóng, chính xác nhằm giúp ích hiệu quả cho công việc.

Mở Excel, vào menu File - Options - Chọn mục Customize the Ribbon (tùy chỉnh các menu con trên Excel) - Check vào Developer - OK
Mở Menu File

Mở cửa sổ Options để kích hoạt chế độ nhà phát triển (Developer)

Check vào mục Developer để hiển thị tab này ngoài màn hình chính của Excel


Lúc này sẽ có một tab Developer, ta bấm vào.

Bấm View Code hoặc Visual Basic, hoặc bấm phím tắt ALT + F11 để mở trình soạn thảo VBA Editor.


VBA Editor chia làm 2 bên chính là cấu trúc đối tượng (Sheet, module, workbook) bên tay trái, bên tay phải là khung soạn thảo, là nơi ta sẽ gõ các đoạn mã vào.

Nhìn nhận:
  • Đây là bài khởi động. Cần nhớ mục tiêu trong khóa học này cũng như trong bất kỳ vấn đề nào là đi từ những thứ nền tảng, cơ bản trước hết.
  • Chỉ mất chừng 5 phút để làm quen mà thui.
  • Bài sau chúng ta sẽ đặt tay vào viết một vài đoạn mã đơn giản, giới thiệu về button, biến (variable)...

Danh sách bài (Syllabus)

Thứ Ba, 31 tháng 7, 2018

Cài đặt tên miền con cho trang dự án GitHub

Cài đặt tên miền con cho trang dự án GitHub (Setup custom subdomain for Github Project Page)

Đây là ghi chép nhỏ trong lúc mình tìm cách cài đặt tên miền con cho dự án trên tài khoản Github của mình.
Mặc định GitHub cung cấp một url cho dự án của mình là: https://nghiaht.github.io/skey/

Bây giờ mình muốn cài đặt một tên miền con là skey.softworld.studio, để từ nay về sau dù truy cập skey.softworld.studio hay nghiaht.github.io/skey đều trỏ về skey.softworld.studio, nó sẽ là tên miền chính cho trang dự án này.
  1. Vào phần cài đặt DNS Nâng cao trên dịch vụ tên miền mà mình sở hữu (Godaddy, Namecheap...).
  2. Thêm một bản ghi (record) CNAME, với name là "skey", target là "nghiaht.github.io" (USERNAME.github.io, không phải là USERNAME.github.io/project).
  3. Vào phần cài đặt của dự án Github, ở ô Custom domain gõ tên miền con mong muốn được trỏ vào: skey.softworld.studio và bấm "Save".
Đợi một chút và kiểm tra thành quả tại skey.softworld.studio.
Chú ý ở CNAME, target phải là USERNAME.github.io (của mình là nghiaht.github.io), khi cài đặt custom subdomain trong Github settings, nó sẽ tự trỏ về đúng trang dự án (nghiaht.github.io/skey/).

Thực tế: Github cung cấp chứng chỉ SSL miễn phí cho cả tên miền con tự cài đặt, rất tuyệt và việc dùng tên miền con thay tên miền mặc địch cũng giúp rút gọn URL lại một chút, và cũng mang tính thương hiệu hơn.

Thứ Năm, 10 tháng 8, 2017

Spring Social Facebook - Error (#12) bio field is deprecated for versions v2.8 and higher due to Facebook API version changes

When i'm trying to overcome the spring-boot-starter-social-facebook error: (#12) bio field is deprecated for versions v2.8 and higher due to Facebook API version changes. I used the workaround here: Error message is (#12) bio field is deprecated for versions v2.8 and higher
And I also want picture url, so I include "picture" in fields list: