Bot Telegram untuk pilihan artikel yang diperibadikan daripada Habr

Untuk soalan seperti "mengapa?" ada artikel lama - Natural Geektimes - menjadikan ruang lebih bersih.

Terdapat banyak artikel, atas sebab subjektif beberapa daripadanya saya tidak suka, dan sesetengahnya, sebaliknya, sayang untuk melangkau. Saya ingin mengoptimumkan proses ini dan menjimatkan masa.

Artikel di atas mencadangkan pendekatan skrip dalam penyemak imbas, tetapi saya tidak begitu menyukainya (walaupun saya pernah menggunakannya sebelum ini) atas sebab berikut:

  • Untuk penyemak imbas yang berbeza pada komputer/telefon anda, anda perlu mengkonfigurasinya semula, jika boleh.
  • Penapisan ketat oleh pengarang tidak selalunya mudah.
  • Masalah dengan pengarang yang artikelnya anda tidak mahu ketinggalan, walaupun diterbitkan setahun sekali, tidak dapat diselesaikan.

Penapisan terbina dalam tapak berdasarkan penilaian artikel tidak selalunya mudah, kerana artikel yang sangat khusus, walaupun nilainya, boleh menerima penilaian yang agak sederhana.

Pada mulanya, saya ingin menjana suapan RSS (atau bahkan beberapa), hanya meninggalkan perkara yang menarik di sana. Tetapi pada akhirnya, ternyata membaca RSS nampaknya tidak begitu mudah: dalam apa jua keadaan, untuk mengulas/mengundi artikel/menambahnya ke kegemaran anda, anda perlu melalui penyemak imbas. Itulah sebabnya saya menulis bot telegram yang menghantar artikel menarik kepada saya dalam mesej peribadi. Telegram sendiri membuat pratonton yang indah daripada mereka, yang, digabungkan dengan maklumat tentang pengarang/penilaian/pandangan, kelihatan agak bermaklumat.

Bot Telegram untuk pilihan artikel yang diperibadikan daripada Habr

Di bawah potongan adalah butiran seperti ciri kerja, proses penulisan dan penyelesaian teknikal.

Secara ringkas tentang bot

Repositori: https://github.com/Kright/habrahabr_reader

Bot dalam telegram: https://t.me/HabraFilterBot

Pengguna menetapkan penilaian tambahan untuk teg dan pengarang. Selepas itu, penapis digunakan pada artikel - rating artikel pada HabrΓ©, rating pengguna pengarang dan purata untuk rating pengguna mengikut teg ditambah. Jika amaun itu lebih besar daripada ambang yang ditentukan pengguna, maka artikel itu melepasi penapis.

Matlamat sampingan menulis bot adalah untuk mendapatkan keseronokan dan pengalaman. Di samping itu, saya kerap mengingatkan diri saya bahawa Saya bukan Google, dan oleh itu banyak perkara dilakukan dengan mudah dan juga secara primitif yang mungkin. Walau bagaimanapun, ini tidak menghalang proses menulis bot daripada mengambil masa tiga bulan.

Ia adalah musim panas di luar

Julai telah berakhir, dan saya memutuskan untuk menulis bot. Dan bukan sahaja, tetapi dengan rakan yang menguasai skala dan ingin menulis sesuatu di atasnya. Permulaan kelihatan menjanjikan - kod akan dipotong oleh pasukan, tugas itu kelihatan mudah dan saya fikir dalam beberapa minggu atau sebulan bot akan siap.

Walaupun fakta bahawa saya sendiri telah menulis kod pada batu dari semasa ke semasa untuk beberapa tahun kebelakangan ini, tiada siapa yang biasanya melihat atau melihat kod ini: projek haiwan peliharaan, menguji beberapa idea, prapemprosesan data, menguasai beberapa konsep dari FP. Saya sangat berminat dengan rupa penulisan kod dalam pasukan, kerana kod pada batu boleh ditulis dengan cara yang sangat berbeza.

Apa yang boleh pergi jadi? Namun, janganlah kita tergesa-gesa.
Semua yang berlaku boleh dikesan menggunakan sejarah komit.

Seorang kenalan mencipta repositori pada 27 Julai, tetapi tidak melakukan apa-apa lagi, jadi saya mula menulis kod.

Julai 30

Secara ringkas: Saya menulis penghuraian suapan rss Habr.

  • com.github.pureconfig untuk membaca konfigurasi typesafe terus ke dalam kelas kes (ternyata ia sangat mudah)
  • scala-xml untuk membaca xml: kerana pada mulanya saya ingin menulis pelaksanaan saya sendiri untuk suapan rss, dan suapan rss adalah dalam format xml, saya menggunakan perpustakaan ini untuk menghurai. Sebenarnya, penghuraian RSS juga muncul.
  • scalatest untuk ujian. Walaupun untuk projek kecil, ujian menulis menjimatkan masa - contohnya, apabila menyahpepijat penghuraian xml, lebih mudah untuk memuat turunnya ke fail, menulis ujian dan membetulkan ralat. Apabila pepijat kemudian muncul dengan menghuraikan beberapa html pelik dengan aksara utf-8 yang tidak sah, ternyata lebih mudah untuk memasukkannya ke dalam fail dan menambah ujian.
  • pelakon dari Akka. Secara objektif, mereka tidak diperlukan sama sekali, tetapi projek itu ditulis untuk keseronokan, saya ingin mencubanya. Akibatnya, saya bersedia untuk mengatakan bahawa saya menyukainya. Idea OOP boleh dilihat dari sisi lain - terdapat pelakon yang bertukar mesej. Apa yang lebih menarik ialah anda boleh (dan harus) menulis kod sedemikian rupa sehingga mesej mungkin tidak tiba atau mungkin tidak diproses (secara umumnya, apabila akaun berjalan pada satu komputer, mesej tidak boleh hilang). Pada mulanya saya menggaru kepala dan terdapat sampah dalam kod dengan pelakon melanggan antara satu sama lain, tetapi akhirnya saya berjaya menghasilkan seni bina yang agak ringkas dan elegan. Kod di dalam setiap pelakon boleh dianggap berutas tunggal; apabila pelakon ranap, acca memulakannya semula - hasilnya adalah sistem yang cukup tahan terhadap kesalahan.

9 Ogos

Saya menambah kepada projek itu scala-scrapper untuk menghuraikan halaman html daripada Habr (untuk mengeluarkan maklumat seperti penarafan artikel, bilangan penanda halaman, dsb.).

Dan Kucing. Yang dalam batu.

Bot Telegram untuk pilihan artikel yang diperibadikan daripada Habr

Saya kemudian membaca buku tentang pangkalan data yang diedarkan, saya menyukai idea CRDT (Jenis data replika tanpa konflik, https://en.wikipedia.org/wiki/Conflict-free_replicated_data_type, habr), jadi saya menyiarkan kelas jenis semikumpulan komutatif untuk mendapatkan maklumat tentang artikel tentang HabrΓ©.

Sebenarnya, ideanya sangat mudah - kami mempunyai kaunter yang berubah secara monoton. Bilangan promosi semakin meningkat secara beransur-ansur, begitu juga dengan bilangan tambah (serta bilangan tolak). Jika saya mempunyai dua versi maklumat tentang artikel, maka saya boleh "mencantumkannya menjadi satu" - keadaan kaunter yang lebih besar dianggap lebih relevan.

Semigroup bermaksud dua objek dengan maklumat tentang artikel boleh digabungkan menjadi satu. Komutatif bermakna anda boleh menggabungkan kedua-dua A + B dan B + A, hasilnya tidak bergantung pada susunan, dan akhirnya versi terbaharu akan kekal. By the way, terdapat juga pergaulan di sini.

Sebagai contoh, seperti yang dirancang, rss selepas penghuraian memberikan maklumat yang sedikit lemah tentang artikel - tanpa metrik seperti bilangan paparan. Seorang pelakon khas kemudian mengambil maklumat tentang artikel dan berlari ke halaman html untuk mengemas kini dan menggabungkannya dengan versi lama.

Secara umumnya, seperti dalam akka, tidak ada keperluan untuk ini, anda hanya boleh menyimpan kemas kini untuk artikel dan mengambil yang lebih baru tanpa sebarang gabungan, tetapi jalan pengembaraan membawa saya.

12 Ogos

Saya mula berasa lebih bebas dan, hanya untuk keseronokan, saya menjadikan setiap sembang sebagai pelakon yang berasingan. Secara teorinya, seorang pelakon itu sendiri mempunyai berat kira-kira 300 bait dan mereka boleh dicipta dalam berjuta-juta, jadi ini adalah pendekatan yang benar-benar normal. Nampaknya saya penyelesaiannya agak menarik:

Seorang pelakon adalah jambatan antara pelayan telegram dan sistem mesej di Akka. Dia hanya menerima mesej dan menghantarnya kepada pelakon sembang yang dikehendaki. Pelakon sembang boleh menghantar sesuatu sebagai balasan - dan ia akan dihantar semula ke telegram. Apa yang sangat mudah ialah pelakon ini ternyata semudah mungkin dan hanya mengandungi logik untuk membalas mesej. Ngomong-ngomong, maklumat tentang artikel baharu datang ke setiap sembang, tetapi sekali lagi saya tidak melihat sebarang masalah dalam hal ini.

Secara umum, bot telah berfungsi, membalas mesej, menyimpan senarai artikel yang dihantar kepada pengguna, dan saya sudah berfikir bahawa bot itu hampir siap. Saya perlahan-lahan menambah sedikit ciri seperti menormalkan nama pengarang dan teg (menggantikan "sd f" dengan "s_d_f").

Hanya ada satu perkara yang tinggal kecil tetapi β€” negeri itu tidak diselamatkan di mana-mana.

Semuanya menjadi salah

Anda mungkin perasan bahawa saya menulis bot kebanyakannya bersendirian. Jadi, peserta kedua terlibat dalam pembangunan, dan perubahan berikut muncul dalam kod:

  • MongoDB nampaknya menyimpan keadaan. Pada masa yang sama, log dalam projek itu telah rosak, kerana atas sebab tertentu Monga mula menghantar spam kepada mereka dan sesetengah orang hanya mematikannya secara global.
  • Pelakon jambatan dalam Telegram telah berubah sehingga tidak dapat dikenali dan mula menghuraikan mesej sendiri.
  • Pelakon untuk sembang telah dipotong tanpa belas kasihan, dan sebaliknya mereka digantikan oleh seorang pelakon yang menyembunyikan semua maklumat tentang semua sembang sekaligus. Setiap kali bersin, pelakon ini mendapat masalah. Ya, seperti semasa mengemas kini maklumat tentang artikel, menghantarnya kepada semua pelakon sembang adalah sukar (kita seperti Google, berjuta-juta pengguna menunggu sejuta artikel dalam sembang untuk setiap satu), tetapi setiap kali sembang dikemas kini, ia adalah perkara biasa untuk pergi ke Monga. Seperti yang saya sedari kemudiannya, logik kerja sembang juga telah dipotong sepenuhnya dan sebagai gantinya sesuatu yang tidak berfungsi muncul.
  • Tiada kesan yang tinggal bagi kelas jenis.
  • Beberapa logik yang tidak sihat telah muncul dalam diri pelakon dengan langganan mereka antara satu sama lain, yang membawa kepada keadaan perlumbaan.
  • Struktur data dengan medan jenis Option[Int] bertukar menjadi Int dengan nilai lalai ajaib seperti -1. Kemudian saya menyedari bahawa mongoDB menyimpan json dan tidak ada salahnya menyimpannya di sana Option baik, atau sekurang-kurangnya menghuraikan -1 sebagai Tiada, tetapi pada masa itu saya tidak mengetahui perkara ini dan mengambil kata-kata saya bahawa "begitulah sepatutnya." Saya tidak menulis kod itu, dan saya tidak bersusah payah menukarnya buat masa ini.
  • Saya mendapati bahawa alamat IP awam saya cenderung berubah, dan setiap kali saya perlu menambahkannya ke senarai putih Mongo. Saya melancarkan bot secara tempatan, Monga berada di suatu tempat di pelayan Monga sebagai sebuah syarikat.
  • Tiba-tiba, normalisasi tag dan pemformatan mesej untuk telegram hilang. (Hmm, kenapa begitu?)
  • Saya suka keadaan bot disimpan dalam pangkalan data luaran, dan apabila dimulakan semula, ia terus berfungsi seolah-olah tiada apa-apa yang berlaku. Walau bagaimanapun, ini adalah satu-satunya kelebihan.

Orang kedua tidak tergesa-gesa, dan semua perubahan ini muncul dalam satu timbunan besar pada awal September. Saya tidak segera menghargai skala kemusnahan yang terhasil dan mula memahami kerja pangkalan data, kerana... Saya tidak pernah berurusan dengan mereka sebelum ini. Hanya kemudian saya menyedari berapa banyak kod kerja telah dipotong dan berapa banyak pepijat telah ditambah di tempatnya.

September

Pada mulanya saya fikir ia akan berguna untuk menguasai Monga dan melakukannya dengan baik. Kemudian saya perlahan-lahan mula memahami bahawa mengatur komunikasi dengan pangkalan data juga merupakan seni di mana anda boleh membuat banyak perlumbaan dan hanya membuat kesilapan. Sebagai contoh, jika pengguna menerima dua mesej seperti /subscribe - dan sebagai tindak balas kepada setiap satu kami akan membuat entri dalam jadual, kerana pada masa memproses mesej tersebut pengguna tidak melanggan. Saya mempunyai syak wasangka bahawa komunikasi dengan Monga dalam bentuk semasa tidak ditulis dengan cara yang terbaik. Sebagai contoh, tetapan pengguna telah dibuat semasa dia mendaftar. Jika dia cuba mengubahnya sebelum fakta langganan... bot tidak bertindak balas apa-apa, kerana kod dalam pelakon itu masuk ke pangkalan data untuk tetapan, tidak menemuinya dan terhempas. Apabila ditanya mengapa tidak membuat tetapan seperti yang diperlukan, saya mengetahui bahawa tidak perlu mengubahnya jika pengguna belum melanggan... Sistem penapisan mesej dibuat entah bagaimana secara tidak jelas, dan walaupun selepas melihat kod dengan teliti, saya boleh tidak faham sama ada ia bertujuan begini pada mulanya atau terdapat ralat di sana.

Tiada senarai artikel yang diserahkan ke sembang; sebaliknya, saya dicadangkan untuk menulisnya sendiri. Ini mengejutkan saya - secara amnya, saya tidak menentang menyeret semua jenis perkara ke dalam projek itu, tetapi adalah logik bagi orang yang membawa perkara ini dan mengacaukannya. Tetapi tidak, peserta kedua seolah-olah berputus asa dengan segala-galanya, tetapi berkata bahawa senarai di dalam sembang kononnya penyelesaian yang buruk, dan perlu membuat tanda dengan acara seperti "artikel y telah dihantar kepada pengguna x." Kemudian, jika pengguna meminta untuk menghantar artikel baharu, adalah perlu untuk menghantar permintaan ke pangkalan data, yang akan memilih acara yang berkaitan dengan pengguna daripada acara, juga mendapatkan senarai artikel baharu, menapisnya, menghantarnya kepada pengguna dan buang peristiwa tentang ini kembali ke dalam pangkalan data.

Peserta kedua telah dibawa ke suatu tempat ke arah abstraksi, apabila bot akan menerima bukan sahaja artikel daripada Habr dan dihantar bukan sahaja ke telegram.

Saya entah bagaimana melaksanakan acara dalam bentuk tanda berasingan untuk separuh kedua bulan September. Ia tidak optimum, tetapi sekurang-kurangnya bot mula berfungsi dan mula menghantar artikel kepada saya semula, dan saya perlahan-lahan mengetahui apa yang berlaku dalam kod itu.

Kini anda boleh kembali ke permulaan dan ingat bahawa repositori itu pada asalnya tidak saya cipta. Apa yang boleh berlaku seperti ini? Permintaan tarik saya ditolak. Ternyata saya mempunyai kod redneck, saya tidak tahu cara bekerja dalam satu pasukan, dan saya terpaksa membetulkan pepijat dalam lengkung pelaksanaan semasa, dan tidak memperhalusinya kepada keadaan yang boleh digunakan.

Saya kecewa dan melihat sejarah komit dan jumlah kod yang ditulis. Saya melihat detik-detik yang asalnya ditulis dengan baik, dan kemudian dipatahkan kembali...

F*rk itu

Saya teringat artikel itu Anda bukan Google.

Saya fikir tiada siapa yang benar-benar memerlukan idea tanpa pelaksanaan. Saya fikir saya mahu mempunyai bot yang berfungsi, yang akan berfungsi dalam satu salinan pada satu komputer sebagai program java yang mudah. Saya tahu bahawa bot saya akan berfungsi selama berbulan-bulan tanpa dimulakan semula, kerana saya telah pun menulis bot sedemikian pada masa lalu. Jika ia tiba-tiba jatuh dan tidak menghantar pengguna artikel lain, langit tidak akan jatuh ke tanah dan tiada malapetaka akan berlaku.

Mengapa saya memerlukan Docker, mongoDB dan kultus kargo perisian "serius" lain jika kod itu tidak berfungsi atau berfungsi secara bengkok?

Saya bercabang projek dan melakukan segala-galanya seperti yang saya mahu.

Bot Telegram untuk pilihan artikel yang diperibadikan daripada Habr

Pada masa yang sama, saya bertukar kerja dan masa lapang menjadi sangat kurang. Pagi saya bangun betul-betul di dalam kereta api, petang saya balik lambat dan tidak mahu berbuat apa-apa lagi. Saya tidak melakukan apa-apa untuk seketika, kemudian keinginan untuk menyelesaikan bot mengatasi saya, dan saya mula perlahan-lahan menulis semula kod semasa saya memandu ke tempat kerja pada waktu pagi. Saya tidak akan mengatakan bahawa ia adalah produktif: duduk di atas kereta api yang bergegar dengan komputer riba di pangkuan anda dan melihat limpahan timbunan dari telefon anda tidak begitu mudah. Walau bagaimanapun, masa yang dihabiskan untuk menulis kod berlalu begitu sahaja tanpa disedari, dan projek itu mula perlahan-lahan bergerak ke arah keadaan berfungsi.

Di suatu tempat di belakang fikiran saya terdapat cacing keraguan yang ingin menggunakan mongoDB, tetapi saya fikir sebagai tambahan kepada kelebihan storan keadaan "dipercayai", terdapat kelemahan yang ketara:

  • Pangkalan data menjadi satu lagi titik kegagalan.
  • Kod itu menjadi lebih kompleks, dan saya akan mengambil masa yang lebih lama untuk menulisnya.
  • Kod menjadi perlahan dan tidak cekap; daripada menukar objek dalam ingatan, perubahan dihantar ke pangkalan data dan, jika perlu, ditarik balik.
  • Terdapat sekatan pada jenis penyimpanan acara dalam jadual berasingan, yang dikaitkan dengan keanehan pangkalan data.
  • Versi percubaan Monga mempunyai beberapa had, dan jika anda menghadapinya, anda perlu melancarkan dan mengkonfigurasi Monga pada sesuatu.

Saya memotong monga, kini keadaan bot hanya disimpan dalam memori program dan dari semasa ke semasa disimpan ke fail dalam bentuk json. Mungkin dalam komen mereka akan menulis bahawa saya salah, di sinilah pangkalan data harus digunakan, dsb. Tetapi ini adalah projek saya, pendekatan dengan fail adalah semudah mungkin dan ia berfungsi dengan cara yang telus.

Membuang nilai ajaib seperti -1 dan mengembalikan nilai biasa Option, menambahkan storan jadual cincang dengan artikel yang dihantar kembali ke objek dengan maklumat sembang. Menambah pemadaman maklumat mengenai artikel yang lebih lama daripada lima hari, supaya tidak menyimpan segala-galanya. Saya membawa pembalakan ke keadaan berfungsi - log ditulis dalam kuantiti yang munasabah pada kedua-dua fail dan konsol. Menambah beberapa arahan pentadbir seperti menyimpan keadaan atau mendapatkan statistik seperti bilangan pengguna dan artikel.

Sebilangan besar perkara kecil telah diperbaiki: contohnya, untuk artikel bilangan tontonan, suka, tidak suka dan ulasan pada masa melepasi penapis pengguna kini ditunjukkan. Secara umum, sangat mengejutkan berapa banyak perkara kecil yang perlu diperbetulkan. Saya menyimpan senarai, mencatat semua "penyelewengan" di sana dan membetulkannya sejauh mungkin.

Sebagai contoh, saya menambah keupayaan untuk menetapkan semua tetapan secara langsung dalam satu mesej:

/subscribe
/rating +20
/author a -30
/author s -20
/author p +9000
/tag scala 20
/tag akka 50

Dan satu lagi pasukan /settings memaparkannya tepat dalam borang ini, anda boleh mengambil teks daripadanya dan menghantar semua tetapan kepada rakan.
Ia kelihatan seperti perkara kecil, tetapi terdapat berpuluh-puluh nuansa yang serupa.

Penapisan artikel yang dilaksanakan dalam bentuk model linear ringkas - pengguna boleh menetapkan penilaian tambahan untuk pengarang dan teg, serta nilai ambang. Jika jumlah penilaian pengarang, penilaian purata untuk teg dan penilaian sebenar artikel adalah lebih besar daripada nilai ambang, maka artikel itu ditunjukkan kepada pengguna. Anda boleh sama ada meminta bot untuk artikel dengan arahan /baru, atau melanggan bot dan ia akan menghantar artikel dalam mesej peribadi pada bila-bila masa sepanjang hari.

Secara umumnya, saya mempunyai idea untuk setiap artikel untuk mengeluarkan lebih banyak ciri (hab, bilangan ulasan, penanda halaman, dinamik perubahan rating, jumlah teks, gambar dan kod dalam artikel, kata kunci) dan tunjukkan kepada pengguna ok/ tidak ok mengundi di bawah setiap artikel dan melatih model untuk setiap pengguna, tetapi saya terlalu malas.

Di samping itu, logik kerja tidak akan begitu jelas. Sekarang saya boleh menetapkan rating +9000 secara manual untuk patientZero dan dengan rating ambang +20 saya akan dijamin menerima semua artikelnya (melainkan, sudah tentu, saya tetapkan -100500 untuk beberapa tag).

Seni bina akhir ternyata agak mudah:

  1. Pelakon yang menyimpan keadaan semua sembang dan artikel. Ia memuatkan keadaannya daripada fail pada cakera dan menyimpannya kembali dari semasa ke semasa, setiap kali ke fail baharu.
  2. Seorang pelakon yang melawat suapan RSS dari semasa ke semasa, mengetahui tentang artikel baharu, melihat pautan, menghuraikan dan menghantar artikel ini kepada pelakon pertama. Di samping itu, ia kadangkala meminta senarai artikel daripada pelakon pertama, memilih mereka yang tidak lebih daripada tiga hari, tetapi tidak dikemas kini untuk masa yang lama, dan mengemas kininya.
  3. Seorang pelakon yang berkomunikasi dengan telegram. Saya masih membawa penghuraian mesej sepenuhnya ke sini. Dengan cara yang baik, saya ingin membahagikannya kepada dua - supaya satu menghuraikan mesej masuk, dan yang kedua menangani masalah pengangkutan seperti menghantar semula mesej yang tidak dihantar. Sekarang tiada penghantaran semula, dan mesej yang tidak sampai kerana ralat akan hilang begitu sahaja (melainkan ia dicatat dalam log), tetapi setakat ini ini tidak menyebabkan sebarang masalah. Mungkin masalah akan timbul jika sekumpulan orang melanggan bot dan saya mencapai had untuk menghantar mesej).

Apa yang saya suka ialah terima kasih kepada akka, kejatuhan pelakon 2 dan 3 secara amnya tidak menjejaskan prestasi bot. Mungkin beberapa artikel tidak dikemas kini tepat pada masanya atau beberapa mesej tidak sampai ke telegram, tetapi akaun memulakan semula pelakon dan semuanya terus berfungsi. Saya menyimpan maklumat bahawa artikel itu ditunjukkan kepada pengguna hanya apabila pelakon telegram menjawab bahawa dia telah berjaya menyampaikan mesej. Perkara paling teruk yang mengancam saya ialah menghantar mesej beberapa kali (jika ia dihantar, tetapi pengesahan entah bagaimana hilang). Pada dasarnya, jika pelakon pertama tidak menyimpan keadaan di dalam dirinya, tetapi berkomunikasi dengan beberapa pangkalan data, maka dia juga boleh jatuh secara tidak dapat dilihat dan kembali hidup. Saya juga boleh mencuba kegigihan akka untuk memulihkan keadaan pelakon, tetapi pelaksanaan semasa sesuai dengan saya dengan kesederhanaannya. Bukannya kod saya sering ranap - sebaliknya, saya berusaha keras untuk menjadikannya mustahil. Tetapi najis berlaku, dan keupayaan untuk memecahkan program kepada bahagian-bahagian terpencil-pelakon kelihatan sangat mudah dan praktikal kepada saya.

Saya menambah circle-ci supaya jika kod itu pecah, anda akan segera mengetahuinya. Sekurang-kurangnya, ini bermakna kod telah berhenti menyusun. Pada mulanya saya ingin menambah travis, tetapi ia hanya menunjukkan projek saya tanpa garpu. Secara umum, kedua-dua perkara ini boleh digunakan secara bebas dalam repositori terbuka.

Keputusan

Sekarang sudah masuk bulan November. Bot itu ditulis, saya telah menggunakannya selama dua minggu yang lalu dan saya menyukainya. Jika anda mempunyai idea untuk penambahbaikan, tulis. Saya tidak nampak guna mengewangkannya - biarkan ia berfungsi dan menghantar artikel yang menarik.

Pautan bot: https://t.me/HabraFilterBot
Github: https://github.com/Kright/habrahabr_reader

Kesimpulan kecil:

  • Malah projek kecil boleh mengambil banyak masa.
  • Anda bukan Google. Tidak ada gunanya menembak burung pipit dari meriam. Penyelesaian mudah mungkin berfungsi dengan baik.
  • Projek haiwan kesayangan sangat bagus untuk bereksperimen dengan teknologi baharu.
  • Bot Telegram ditulis dengan ringkas. Jika bukan kerana "kerja berpasukan" dan percubaan dengan teknologi, bot itu akan ditulis dalam seminggu atau dua minggu.
  • Model pelakon adalah perkara yang menarik yang sesuai dengan kod berbilang benang dan toleransi kesalahan.
  • Saya rasa saya telah merasai sebab komuniti sumber terbuka menyukai garpu.
  • Pangkalan data adalah baik kerana keadaan aplikasi tidak lagi bergantung pada ranap/dimulakan semula aplikasi, tetapi bekerja dengan pangkalan data merumitkan kod dan mengenakan sekatan pada struktur data.

Sumber: www.habr.com

Tambah komen