Mã nguồn ibus-bogo được đặt trên Github ở địa chỉ: https://github.com/BoGoEngine/ibus-bogo-python
Để tham gia viết code bạn cần biết cách sử dụng git và lập trình bằng python.
Hãy fork và tạo một branch mới từ branch develop
(xem phần Git Flow
bên dưới), sau đó viết code và gửi chúng tôi một pull request. Chúng
tôi sẽ xem xét và commit code của bạn trong thời gian sớm nhất.
Tuy nhiên, bạn cũng có thể đóng góp theo những cách đơn giản hơn như sử dụng phiên bản unstable và thông báo lỗi, viết hướng dẫn sử dụng, viết blog, chia sẻ với bạn bè và người thân về bộ gõ tiếng Việt này.
Hãy trò chuyện với chúng tôi thông qua IRC ở kênh #bogo
trên mạng Freenode
nếu bạn có mong muốn giúp sức. Mọi sự đóng góp của các bạn dù dưới hình thức
nào cũng đều được chúng tôi hết sức trân trọng.
Chúng tôi cố gắng module hóa phần mềm để dễ dàng chuyển sang các nền tảng
khác nên BoGo được chia làm 2 thành phần là IBus engine và BoGo engine.
BoGo engine là phần xử lý tiếng Việt chính nằm trong thư mục /bogo
có API đơn giản (hàm process_key()
). Còn IBus engine là phần giao tiếp
với IBus, gồm tất cả các file và thư mục con trong /ibus_engine
có nhiệm vụ
gọi hàm process_key, đưa kết quả cho người dùng và tạo giao diện tinh
chỉnh phương pháp gõ.
Chúng tôi sử dụng flake8 để thực hiện kiểm tra styling và những lỗi cơ bản. Hãy đảm bảo code của bạn vượt qua được flake8 trước khi tạo pull request.
Chúng tôi cũng cố gắng viết code thật dễ hiểu với documentation, comment đầy đủ trong code nên hi vọng bạn sẽ không cảm thấy khó khăn khi tìm hiểu BoGo.
Thành phần IBus engine có sử dụng các thư viện ngoài của IBus, Gtk và GLib/GIO. Bạn có thể tìm thấy tài liệu về cách sử dụng chúng dưới đây:
- IBus: http://ibus.googlecode.com/svn/docs/ibus-1.5/index.html
- Gtk: http://python-gtk-3-tutorial.readthedocs.org/en/latest/index.html
- GIO: http://developer.gnome.org/gio/unstable/
Nhóm phát triển ibus-bogo sử dụng phương pháp TDD (test-driven
development) để phát triển phần mềm. Khi đóng góp cho BoGo, bạn luôn phải
viết test mỗi khi thay đổi code. Các test case có thể tìm thấy trong thư con
mục test
nằm trong mỗi thư mục lớn của dự án.
Để chạy test, bạn cần cài nosetests cho Python 3 và chạy lệnh sau ở thư mục ngoài cùng:
nosetests
Nosetests sẽ tự tìm, chạy tất cả các test và in kết quả ra màn hình.
Note
Lệnh trên sẽ chạy tất cả các test trong dự án (khoảng 37000 test) nên tốn khoảng 2 đến 3 phút mới chạy xong. Bạn có thể skip các test được đánh dấu là chạy chậm bằng lệnh sau:
nosetests --attr "!slow"
ibus-bogo được quản lý bằng Git. Phương pháp này sử dụng có thể trình bày sơ lược như sau:
- Repo chính trên Github luôn có 2 branch là
master
vàdevelop
.master
luôn chứa phiên bản stable mới nhất còndevelop
là branch chứa tất cả những thay đổi mới nhất của BoGo. Tuy nhiên, thường ít khi commit trực tiếp vàodevelop
ngoài những commit sửa lỗi nhỏ. - Khi thực hiện một tính năng mới thì lập trình viên tạo branch mới với
tên
feature/<tên tính năng>
. Khi đã cảm thấy đủ chín thì merge branch này vớidevelop
và xóa branchfeature/*
đi. Từ sau trở đi tính năng này sẽ được maintain trong branchdevelop
. - Khi có đủ tính năng mới và các lỗi quan trọng đã được sửa thì có thể
tính đến việc release phiên bản major mới. Khi đó tạo branch
release/v<phiên bản>
và thực hiện tất cả các commit sửa lỗi cho phiên bản này tại đây. Khi tất cả các lỗi trước khi phát hành được sửa hết thì sửa version string trong source code, tạo tag cho phiên bản mới và merge vào master. Trong toàn bộ quá trình này, các thay đổi mới vẫn thực hiện ở các feature branch vàdevelop
như bình thường. Sau khi release thì các commit ởrelease/*
được merge trở lại vàodevelop
. - Sau khi release phiên bản major mà phát hiện lỗi đặc biệt nghiêm trọng
nào đó thì phải sửa ngay lập tức và release phiên bản minor với branch
hotfix/v<phiên bản>
. Quy trình giống như một branchrelease/*
. Sau khi release phải merge lại vàodevelop
.
- Chi tiết về phương pháp git flow:
- http://nvie.com/posts/a-successful-git-branching-model/
- Công cụ hỗ trợ
git-flow
: - http://jeffkreeftmeijer.com/2010/why-arent-you-using-git-flow/