.. raw:: html
.. _sec_how_to_contribute:
Đóng góp cho Quyển sách
=======================
.. raw:: html
Những đóng góp từ `cộng
đồng `__ giúp
chúng tôi cải thiện cuốn sách này. Nếu bạn tìm thấy có lỗi đánh máy,
đường dẫn hết hạn, hay phần nào đó mà bạn nghĩ chúng tôi thiếu trích
dẫn, phần mã nguồn không được thanh thoát hay có chỗ giải thích không rõ
ràng, xin vui lòng đóng góp và giúp chúng tôi hỗ trợ những độc giả khác.
Trong khi với các quyển sách bình thường, khoảng cách giữa những lần
xuất bản (đó là giữa các lần sửa lỗi đánh máy) có thể tính bằng năm, thì
giờ đây chúng tôi chỉ cần vài giờ đến vài ngày để đưa một cải thiện vào
bản dịch này. Để có thể đóng góp trực tiếp, bạn cần đăng một `pull
request `__ lên GitHub của bản
dịch này. Khi pull request của bạn được nhóm dịch gộp (*merge*) vào
repo, bạn sẽ trở thành một người đóng góp (*contributor*). Một cách khác
để bạn có thể đóng góp đơn giản hơn là tạo một
`issues `__ mới và báo cáo vấn
đề bạn tìm thấy, tạo một `thảo
luận `__ mới để cùng trao
đổi nhiều vấn đề hơn với nhóm dịch thuật.
.. raw:: html
Thay đổi nhỏ trong Văn bản
--------------------------
.. raw:: html
Đóng góp phổ biến nhất là chỉnh sửa một câu hoặc chữa lỗi đánh máy.
Chúng tôi khuyến nghị bạn nên tìm tệp gốc trên
`github `__ và trực tiếp chỉnh sửa
tệp. Ví dụ, bạn có thể tìm tệp thông qua nút `Find
file `__
(:numref:`fig_edit_file`) để định vị tệp gốc, tệp ở đây là một tệp
markdown. Sau đó bạn nhấn nút “Edit this file” ở góc trên bên phải để
thay đổi tệp markdown này.
.. raw:: html
.. _fig_edit_file:
.. figure:: ../img/edit-file.png
:width: 300px
Chỉnh sửa tệp trên GitHub.
.. raw:: html
Sau khi hoàn thành, điền mô tả thay đổi của bạn vào ô “Propose file
change” ở cuối trang và sau đó nhấn nút “Propose file change”. Trang sẽ
được chuyển hướng đến một trang mới để bạn có thể kiểm tra lại thay đổi
của bạn (:numref:`fig_git_createpr`). Nếu mọi thứ đều ổn, bạn có thể
đăng một pull request bằng cách nhấn vào nút “Create pull request”.
.. raw:: html
Đề xuất một Thay đổi Lớn
------------------------
.. raw:: html
Nếu bạn có dự định cập nhật một phần lớn văn bản hay mã nguồn thì bạn
cần phải biết thêm một chút về định dạng mà cuốn sách này sử dụng. Tệp
nguồn được dựa trên `định dạng
markdown `__ với
một tập các phần mở rộng thông qua gói
`d2lbook `__ ví dụ như tham chiếu
đến phương trình, hình ảnh, chương mục và trích dẫn. Bạn có thể sử dụng
bất kỳ trình biên tập Markdown nào để mở các tệp này và thực hiện chỉnh
sửa.
.. raw:: html
Nếu bạn muốn thay đổi mã nguồn, chúng tôi khuyến nghị các bạn sử dụng
Jupyter để mở các tệp Markdown này như mô tả trong
:numref:`sec_jupyter`. Nhờ đó bạn có thể chạy và kiểm tra thay đổi của
bạn. Xin vui lòng xóa toàn bộ các ô kết quả trước khi đăng thay đổi của
bạn, hệ thống CI của chúng tôi sẽ thực thi phần bạn cập nhật để sinh kết
quả.
.. raw:: html
Một số phần có thể hỗ trợ lập trình đa framework, bạn có thể sử dụng
``d2lbook`` để kích hoạt một framework cụ thể, khi đó phần lập trình các
framework khác trở thành khối mã Markdown và sẽ không được thực thi khi
bạn chạy“Run All” trong Jupyter. Nói cách khác, đầu tiên cài đặt
``d2lbook`` bằng cách chạy
.. code:: bash
pip install git+https://github.com/d2l-ai/d2l-book
.. raw:: html
Sau đó trong thư mục gốc ``d2l-en``, bạn có thể kích hoạt một đoạn mã cụ
thể bằng cách chạy một trong các lệnh sau:
.. code:: bash
d2lbook activate mxnet chapter_multilayer-perceptrons/mlp-scratch.md
d2lbook activate pytorch chapter_multilayer-perceptrons/mlp-scratch.md
d2lbook activate tensorflow chapter_multilayer-perceptrons/mlp-scratch.md
.. raw:: html
Trước khi đăng thay đổi của bạn lên, xin vui lòng xóa toàn bộ các ô kết
quả và kích hoạt tất cả bằng
.. code:: bash
d2lbook activate all chapter_multilayer-perceptrons/mlp-scratch.md
.. raw:: html
Nếu bạn thêm một khối mã nguồn mới không có trong cách lập trình mặc
định, tức MXNet, xin vui lòng sử dụng ``#@tab`` để đánh dấu khối này tại
dòng đầu tiên. Ví dụ, ``#@tab pytorch`` cho khối mã PyTorch,
``#@tab tensorflow`` cho khối mã TensorFlow, hoặc ``#@tab all`` cho khối
mã được dùng chung cho tất cả các cách lập trình. Bạn có thể tham khảo
`d2lbook `__ để biết thêm thông
tin.
.. raw:: html
Thêm một Phần Mới hoặc một Cách lập trình cho Framework Mới
-----------------------------------------------------------
.. raw:: html
Nếu bạn muốn tạo một chương mới, ví dụ như học tăng cường, hoặc thêm một
cách lập trình cho một framework mới, ví dụ như TensorFlow, trước tiên
xin vui lòng liên hệ với nhóm dịch, có thể bằng email hoặc sử dụng
`github issues `__.
.. raw:: html
Đăng một Thay đổi Lớn
---------------------
.. raw:: html
Chúng tôi đề nghị bạn phải sử dụng quy trình ``git`` chuẩn để đăng một
thay đổi lớn. Tóm lại, quy trình này hoạt động như mô tả trong
:numref:`fig_contribute`.
.. raw:: html
.. _fig_contribute:
.. figure:: ../img/contribute.svg
Đóng góp cho quyển sách.
.. raw:: html
Chúng tôi sẽ hướng dẫn chi tiết từng bước. Nếu bạn quen thuộc với Git
bạn có thể bỏ qua phần này. Để ngắn gọn chúng tôi giả sử người đóng góp
có username là “astonzhang”.
.. raw:: html
Cài đặt Git
~~~~~~~~~~~
.. raw:: html
Cuốn sách mã nguồn mở của Git mô tả chi tiết `cách cài đặt
Git `__. Việc này có thể được thực hiện
thông qua ``apt install git`` trên Ubuntu Linux, bằng cách cài đặt công
cụ phát triển Xcode trên macOS, hoặc bằng cách sử dụng `desktop
client `__ của GitHub. Nếu bạn không có tài
khoản GitHub, bạn cần phải đăng ký một tài khoản.
.. raw:: html
Đăng nhập vào GitHub
~~~~~~~~~~~~~~~~~~~~
.. raw:: html
Điền `địa chỉ `__ của repo chứa mã
nguồn bản dịch cuốn sách này vào trình duyệt web của bạn. Chọn nút
``Fork`` trong khung đỏ ở phía trên bên phải của
:numref:`fig_git_fork`, để tạo một bản sao cho repo của cuốn sách này.
Nó giờ đây là *bản sao của bạn* và bạn có thể tuỳ ý thay đổi nó.
.. raw:: html
.. _fig_git_fork:
.. figure:: ../img/git-fork.png
:width: 700px
Trang repo chứa mã nguồn.
.. raw:: html
Giờ thì repo chứa mã nguồn của cuốn sách đã được fork (tức sao chép) tới
tên người dùng của bạn, ví dụ như ``astonzhang/d2l-en`` được chỉ ra phía
trên bên trái của ảnh chụp màn hình :numref:`fig_git_forked`.
.. raw:: html
.. _fig_git_forked:
.. figure:: ../img/git-forked.png
:width: 700px
Fork repo chứa mã nguồn.
.. raw:: html
Clone Repo
~~~~~~~~~~
.. raw:: html
Để clone một repo (tức là tạo bản sao cục bộ) ta cần phải có địa chỉ của
repo đó. Nút màu xanh trong :numref:`fig_git_clone` hiển thị địa chỉ
này. Hãy đảm bảo rằng bản sao cục bộ của bạn cập nhật gần nhất với repo
chính nếu bạn quyết định giữ bản fork này lâu dài. Còn bây giờ chỉ cần
đơn giản làm theo các hướng dẫn trong :ref:`chap_installation` để bắt
đầu. Điểm khác biệt chính ở đây là bạn đang tải về *bản fork của riêng
bạn* cho repo này.
.. raw:: html
.. _fig_git_clone:
.. figure:: ../img/git-clone.png
:width: 700px
Git clone.
::
# Replace your_github_username with your GitHub username
git clone https://github.com/your_github_username/d2l-vn.git
.. raw:: html
Chỉnh sửa Bản dịch và Đẩy lên
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
.. raw:: html
Giờ là lúc để chỉnh sửa bản dịch. Tốt nhất là chỉnh sửa các notebook
trên Jupyter theo hướng dẫn trong :numref:`sec_jupyter`. Tạo thay đổi
và kiểm tra xem chúng ổn chưa. Giả sử bạn đã điều chỉnh một lỗi đánh máy
trong tệp ``~/d2l-vn/chapter_appendix_tools/how-to-contribute.md``. Sau
đó bạn có thể kiểm tra xem bạn đã sửa đổi những tệp nào.
.. raw:: html
Ở thời điểm này Git sẽ thông báo là tệp
``chapter_appendix_tools/how-to-contribute.md`` đã được sửa đổi.
::
mylaptop:d2l-vn me$ git status
On branch master
Your branch is up-to-date with 'origin/master'.
Changes not staged for commit:
(use "git add ..." to update what will be committed)
(use "git checkout -- ..." to discard changes in working directory)
modified: chapter_appendix_tools/how-to-contribute.md
.. raw:: html
Sau khi xác nhận đây là những sửa đổi bạn muốn, thực thi lệnh sau:
::
git add chapter_appendix_tools/how-to-contribute.md
git commit -m 'fix typo in git documentation'
git push
.. raw:: html
Đoạn mã được chỉnh sửa lúc này sẽ nằm trong bản fork cá nhân của bạn cho
repo này. Để yêu cầu thay đổi thêm, bạn cần phải tạo một pull request
đối với repo chính thức của bản dịch.
.. raw:: html
Pull Request
~~~~~~~~~~~~
.. raw:: html
Như chỉ ra trong :numref:`fig_git_newpr`, đi tới bản fork của bạn trên
GitHub và chọn “New pull request”. Thao tác này sẽ mở ra một cửa sổ hiển
thị những điểm khác nhau giữa bản chỉnh sửa của bạn và bản hiện trong
repo chính của cuốn sách.
.. raw:: html
.. _fig_git_newpr:
.. figure:: ../img/git-newpr.png
:width: 700px
Pull Request.
.. raw:: html
Đăng Pull Request lên
~~~~~~~~~~~~~~~~~~~~~
.. raw:: html
Cuối cùng, đăng một pull request lên bằng cách nhấn vào nút như chỉ ra
trong :numref:`fig_git_createpr`. Hãy đảm bảo mô tả các thay đổi bạn
đã thực hiện trong pull request này. Việc này sẽ giúp nhóm dịch dễ dàng
hơn trong việc kiểm tra và gộp vào bản dịch. Tuỳ thuộc vào các thay đổi,
pull request này có thể được chấp thuận ngay lập tức, bác bỏ, hoặc khả
năng cao hơn là bạn sẽ nhận được phản hồi trên các thay đổi này. Một khi
bạn đã hợp nhất được chúng, chúc mừng bạn đã hoàn thành và hãy tiếp tục
phát huy.
.. raw:: html
.. _fig_git_createpr:
.. figure:: ../img/git-createpr.png
:width: 700px
Tạo Pull Request.
.. raw:: html
Pull request của bạn sẽ xuất hiện ở danh sách Pull requests trong repo
chính. Chúng tôi sẽ làm mọi thứ có thể để xử lý nó nhanh chóng.
Tóm tắt
-------
.. raw:: html
- Bạn có thể sử dụng GitHub để đóng góp cho bản dịch này.
- Bạn có thể chỉnh sửa tệp trực tiếp trên GitHub với những thay đổi
nhỏ.
- Với một thay đổi lớn, xin vui lòng tạo fork cho repo này, tạo chỉnh
sửa cục bộ và chỉ đóng góp một khi bạn đã sẵn sàng.
- Pull request là cách mà các đóng góp được gói lại. Cố gắng đừng đăng
một pull request quá lớn do điều này khiến chúng khó hiểu và khó để
hợp nhất. Tốt hơn là gửi nhiều pull request nhỏ.
Bài tập
-------
.. raw:: html
1. Star và tạo fork của repo ``d2l-vn``.
2. Tìm đoạn mã nào đó cần cải thiện và đăng một pull request.
3. Tìm một trích dẫn mà chúng tôi bỏ sót và đăng một pull request.
4. Thường thì trong thực hành, tốt hơn hết là khi tạo một pull request
thì sử dụng một nhánh (*branch*) mới. Hãy học cách thực hiện việc này
với `Git
branching `__.
Thảo luận
---------
- Tiếng Anh: `Main Forum `__
- Tiếng Việt: `Diễn đàn Machine Learning Cơ
Bản `__
Những người thực hiện
---------------------
Bản dịch trong trang này được thực hiện bởi:
- Đoàn Võ Duy Thanh
- Đỗ Trường Giang
- Nguyễn Văn Cường
- Nguyễn Mai Hoàng Long