
Dalam artikel ini saya akan memberi tahu Anda bagaimana saya mencoba berpartisipasi dalam pengembangan beberapa proyek open source utama, saya membenci diri sendiri, dan kemudian mengotomatisasi rutinitas dan belajar untuk menikmati hidup. Detail - di bawah potongan.
Mengapa ini perlu?
Biasanya, pengembang ingin berpartisipasi dalam komunitas open source karena beberapa alasan. Berikut adalah beberapa (dan mungkin tidak semuanya):
- terima kasih atas kesempatan untuk menggunakan ini dan program lainnya secara gratis
- mendapatkan pengalaman baru
- untuk memompa resume Anda
Saya selalu tertarik pada kesempatan untuk mempelajari sesuatu yang baru, untuk menyerap praktik terbaik dalam pengembangan perangkat lunak, tetapi segala sesuatu yang lain tidak kurang menyenangkan dalam proses ini.
Oke, saya dalam bisnis, di mana saya mulai?
Hal pertama yang harus dilakukan adalah menemukan tugas untuk dikerjakan. Anda benar-benar beruntung, jika Anda perlu memodifikasi beberapa perpustakaan untuk kebutuhan pekerjaan Anda - mulailah tugas, diskusikan dengan pemilik dan mulai implementasi! Kalau tidak, Anda bisa merujuk ke daftar tugas terbuka di halaman proyek dan mengambil sesuatu untuk Anda sendiri. Menemukan yang tepat tidak kalah pentingnya dari implementasinya, dan di sini tidak begitu sederhana. Bahkan jika Anda seorang insinyur yang berpengalaman, mungkin berguna untuk memulai dengan tugas-tugas yang lebih sederhana, membiasakan diri dengan basis kode, proses pengembangan yang diterima, dan hanya kemudian mengambil fitur yang lebih besar.
Bagaimana menemukan tugas untuk pemula?
Beberapa waktu lalu, github mulai menunjukkan tugas yang cocok untuk pemula.
Anda dapat melihatnya dengan pergi dari pengumuman di tajuk halaman masalah Dan inilah halaman berharga kami Setelah menyelesaikan "alat-alat" ini, hari saya yang biasa mulai terlihat seperti ini - saya membuka daftar proyek yang ingin saya kerjakan (agar mudah digunakan, saya menandai semuanya dengan bintang-bintang kecil), pergi ke bagian di atas atau mencari melalui tag pencarian yang saya butuhkan, secara bersamaan mencari yang digunakan dalam proyek khusus ini. Tak perlu dikatakan, pergi sekitar 40-60 repositori membutuhkan banyak sekali kekuatan dan dengan cepat membuatku bosan. Dalam prosesnya, saya menjadi mudah tersinggung, kehilangan kesabaran dan meninggalkan hal ini. Pada suatu hari, saya menyadari bahwa saya dapat mengotomatiskan proses pencarian dan melanjutkan untuk menyusun TOR.
Persyaratan
- Tugas harus terbuka
- Tugas tidak ditugaskan kepada siapa pun
- Tugas tersebut harus dilabeli dengan kesederhanaan dan keterbukaan kepada komunitas.
- Tugas tidak boleh terlalu lama
Setelah itu, saya mulai menganalisis berbagai repositori untuk label yang digunakan. Ternyata ada sejumlah besar label yang berbeda, beberapa di antaranya unik untuk repositori / organisasi tertentu. Peka huruf besar-kecil, saya menyusun daftar ~ 60 tag
Pengembangan Solusi
Sebagai alat, saya memutuskan untuk menggunakan Kotlin, yang sudah akrab bagi saya, dan menerapkan algoritma berikut: memeriksa semua repositori yang ditandai dengan tanda bintang, mendapatkan semua tugas yang sesuai dengan persyaratan, mengurutkan berdasarkan tanggal perubahan, membuang yang terlalu lama dan menampilkannya. Daftar yang dihasilkan dibagi dengan stempel waktu - untuk hari ini, untuk kemarin, selama seminggu terakhir, untuk bulan dan yang lainnya - berkat ini menjadi jauh lebih nyaman untuk menggunakan program secara teratur. Saya memutuskan bahwa pada tahap pertama aplikasi akan menjadi utilitas konsol, jadi hasilnya hanya untuk stdout.
Saya membungkus hasilnya dalam gambar buruh pelabuhan, berharap bahwa seseorang lebih mungkin memiliki buruh pelabuhan diinstal daripada JRE. Utilitas tidak menyimpan keadaan apa pun, sehingga setiap peluncuran akan mengeksekusi seluruh algoritma, dan wadah yang dihabiskan dapat dengan aman dihapus dari sistem.
Begini cara program bekerja:

Batas Permintaan
Panggilan ke API pihak ketiga adalah contoh klasik dari tugas intensif, sehingga diputuskan untuk mulai memuat data ke beberapa aliran. Melalui trial and error, saya memenuhi batasan API Github. Pertama, dengan sejumlah besar utas, pemeriksaan anti-penyalahgunaan di sisi Github dipicu dan saya harus berhenti di 10 utas secara default, dengan kemungkinan konfigurasi melalui argumen masukan.
Kedua, ada batasan jumlah permintaan - permintaan bisa dibuat tidak lebih dari 5000 per jam. Dengan batasan ini, semuanya jauh lebih rumit, karena ketika mengirimkan beberapa tag ke permintaan pencarian, Github menempatkan 'Dan' yang logis di antara mereka dan, mengingat jumlah tag dalam daftar, itu tidak akan menemukan apa pun dengan probabilitas hampir 100%. Dihadapkan dengan pemborosan besar panggilan ke API, saya mulai membuat permintaan tambahan untuk semua tag yang ada di proyek, mengambil persimpangan dengan daftar saya dan tugas sepotong demi sepotong tugas hanya untuk tag ini. Dengan menambahkan 1 permintaan ke setiap repositori, saya menyingkirkan 50-55 permintaan tambahan (semakin banyak tag yang didukung program, semakin banyak permintaan tambahan) untuk tugas pada tag yang tidak ada untuk repositori.
Namun, untuk beberapa pengguna optimasi ini mungkin tidak cukup. Menurut penilaian yang dangkal, solusi saat ini memungkinkan Anda untuk mem-bypass 1000 repositori (ada juga batasan ketat dalam kode), berharap bahwa rata-rata ada 4 label sederhana di setiap repositori. Sejauh ini tidak ada yang mengalami pembatasan seperti itu, tetapi gagasan solusinya ada di tumpukan simpanan. Semuanya sederhana di sini - menyimpan keadaan, menyimpan respons, terutama dalam kasus-kasus sulit, memotong secara perlahan di latar belakang.
Bagaimana cara menemukan repositori?
Jika Anda belum menjadi pengguna Github aktif, atau jika Anda tidak menggunakan fungsionalitas bintang, berikut adalah beberapa kiat untuk menemukan repositori yang tepat:
- Telusuri teknologi yang Anda gunakan pada proyek Anda, mungkin beberapa di antaranya disajikan di Github
- Gunakan bagian tren populer
- Gunakan repositori daftar-mengagumkan untuk topik-topik yang menarik bagi Anda.
Luncurkan
Untuk memulai, Anda perlu:
Pengaturan lain (filter berdasarkan bahasa, tingkat paralelisme, daftar hitam repositori) dapat ditemukan di halaman proyek. Tautan ke proyek .
Jika Anda kehilangan beberapa tag dalam proyek - buat PR atau tulis saya secara pribadi, saya akan menambahkan.