How to collaboration with opensource project

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é

osi-logo.png

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.

Screen Shot 2016-10-27 at 8.01.34 AM.png

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.

transition-to-search.gif

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

Untitled.gif

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