How to collaboration with opensource project
Bài đăng này đã không được cập nhật trong 3 năm
Android platform là mã nguồn mở, điều này cho phép nó phát triển đến như ngày nay. Việc phát triển mã nguồn bởi cộng đồng đã tạo nên những platform mạnh mẽ cỡ Linux, Apache Web Service, Rails ... Hầu như lập trình viên Android nào cũng đã từng tiếp xúc với mã nguồn mở, kể cả new bie hay sernior. Tuy nhiên bạn đã từng tham gia vào phát triển mã nguồn mở bao giờ chưa?
Nếu chưa thì bạn đọc tiếp nhé. Việc này mang lại rất nhiều lợi ích, khoan tính cho cộng đồng, nói cái này thì to tát với bạn hiện tại, thời gian sẽ làm bạn nghiệm ra giá trị của nó thôi. Với bản thân bạn nó có quá nhiều lợi ích:
- Tiếp xúc với mã nguồn chuyên nghiệp
- Được cơ hội tiếp xúc với các lập trình viên code chuẩn, flow làm việc chuẩn -> cái này có tiền và kinh nghiệm không chắc mua được đâu, nếu bạn thực sự cởi mở, bạn sẽ học được rất nhiều thứ
- Code của bạn sẽ trong sáng, chuẩn và dễ hiểu hơn vì bạn sẽ phải code không phải cho riêng bạn đọc
- Make fun: thật đấy, cảm giác một pull request được merged vào repo thật là phê
- Tạo các mối quan hệ, tìm được bạn cùng chí hướng
Lợi ích nhiều lắm luôn, quan trọng nhất là bạn có cơ hội trở thành chuyên nghiệp như Tây , chứ không quẩn quanh trong công việc ở văn phòng nữa.
Thôi lợi ích thì bạn sẽ tự tìm ra thôi, bây giờ bắt đầu nhé
Tìm repo để cộng tác
Có nhiều nguồn để bạn tìm, tuy nhiên phổ biến nhất là Explore Github https://github.com/explore. Trang này cho phép liệt kê các project đang là xu hướng theo ngày, theo tuần, theo tháng.
Nên chọn một project trong số này để bắt đầu hoặc trong quá trình làm việc, bạn sử dụng thư viện mã nguồn mở nào đó, thấy nó bị lỗi, hoặc thấy nó có thể mở rộng được, hay đơn giản là convention chỗ này có vấn đề -> bạn đều có thể cộng tác được.
Những repo để bạn có cơ hội merged pull request nhiều nhất là những repo mới, lúc đó còn ít người theo dõi, ít người biết đến. Bạn có thể follow trang github Android prject để nhận thư mới khi có repo đến. Thỉnh thoảng đọc thư viện mã nguồn mở tôi vẫn bị tò mò với pull của lâp trình viên Việt nam, tuy nhiên còn ít lắm!
Ví dụ cộng tác một repo
Lang thang trên git tôi tìm thấy repo này https://github.com/alexstyl/Material-SearchTransition.
Xem thử demo thấy khá thú vị, tôi bắt đầu đặt câu hỏi:
- Cái này chỉ chạy với Toolbar? View khác thì sao? Support được không
- Có vẻ nó vẫn hơi giật lúc show lại toolbar khi back về
Tôi đọc qua code của repo và nhận thấy tôi có thể giải quyết 2 issue trên.
Bước 1: Fork repo
Click vào fork repo và fork repo này về của mình, sau đó bạn clone repo vừa fork và mở project, bắt đầu code như bình thường.
Bước 2: Starting code
Để giải quyết 1 issue, trước tiên bạn cần có những định hướng như sau:
- Viết code không phải cho mình bạn dùng, vì thế hãy để tâm đến coding convention mà project dùng
- Viết phải có tính dùng lại
- Viết phải dễ dùng
- Đóng gói nhiều nhất có thể
- Mở Interface để custom nhiều nhất có thể
- Test cẩn thận, unit test được thì càng tốt
Tôi bắt đầu thử với Linear layout
public class TransformingViewGroup extends LinearLayout {
public TransformingViewGroup(Context context, AttributeSet attrs) {
super(context, attrs);
}
/**
* Sets the Visibility of all children to GONE
*/
public void hideContent() {
for (int i = 0; i < getChildCount(); i++) {
getChildAt(i).setVisibility(GONE);
}
}
/**
* Sets the Visibility of all children to VISIBLE
*/
public void showContent() {
for (int i = 0; i < getChildCount(); i++) {
getChildAt(i).setVisibility(VISIBLE);
}
}
}
-> Test
Nó có vẻ không ổn với LayoutParam, vì người tạo project trước họ dùng mỗi FrameLayout cho Toolbar. -> phát sinh issue 3.
Test thử với LinearLayout, đọc code và thấy cái này có thể chạy được ViewGroup chứ không giới hạn. Nice! Mình có thứ để pull rồi!
Trông nó như này
Có vẻ ổn. Bây giờ refactor lại code, viết class test.
Pull request vào repo
Cuối cùng bạn chỉ cần tạo pull request vào repo. Thông thường sẽ khá lâu để pull request của bạn được merged. Trong lúc đó hãy không ngừng cải tiến mã nguồn của mình hoặc tiếp tục với những issue khác.
Tôi viết bài này chủ yếu dựa vào kinh nghiệm của bản thân. Mong hữu ích, và giúp bạn yêu code hơn.
Đừng bao giờ tự giới hạn mình lại.
Having fun coding!
All rights reserved