Telegraph bot bakeng sa khetho ea hau ea lingoliloeng tse tsoang ho Habr

Для вопросов в стиле «зачем?» есть более старая статья — Natural Geektimes - ho etsa hore sebaka se hloeke.

Ho na le lingoloa tse ngata, ka mabaka a ikhethileng tse ling tsa tsona ha ke li rate, 'me tse ling, ho fapana le hoo, ke masoabi ho tlola. Ke kopa ho ntlafatsa ts'ebetso ena le ho boloka nako.

В вышеупомянутой статье предлагался подход со скриптами в браузере, но он мне не очень понравился (хоть я им и пользовался раньше) по следующим причинам:

  • Bakeng sa li-browser tse fapaneng khomphuteng / fonong ea hau, u tlameha ho e lokisa hape, haeba ho khoneha.
  • Жёсткая фильтрация по авторам не всегда удобна.
  • Bothata ba bangoli bao lihlooho tsa bona u sa batleng ho li fosa, le haeba li hatisoa hang ka selemo, ha lia rarolloa.

Ho sefa ho thehiloeng sebakeng sa marang-rang ho ipapisitse le lintlha tsa sengoloa ha se kamehla ho leng bonolo, kaha lingoliloeng tse ikhethileng, leha boleng ba tsona li le bohlokoa, li ka fumana lintlha tse itekanetseng.

Qalong, ke ne ke batla ho hlahisa RSS feed (kapa esita le tse 'maloa), ho siea lintho tse thahasellisang feela moo. Empa qetellong, ho ile ha fumaneha hore ho bala RSS ha hoa ka ha bonahala ho le bonolo haholo: ho sa tsotellehe boemo leha e le bofe, ho fana ka maikutlo / ho vouta bakeng sa sehlooho / ho se eketsa ho seo u se ratang, u tlameha ho feta ho sebatli. Ke kahoo ke ngotseng bot ea thelekramo e nthomellang lingoliloeng tse khahlisang ka molaetsa oa botho. Thelekramo ka boeona e etsa liponelopele tse ntle ho tsoa ho tsona, tseo, ha li kopantsoe le tlhaiso-leseling ka mongoli / lintlha / maikutlo, li shebahala li na le tsebo.

Telegraph bot bakeng sa khetho ea hau ea lingoliloeng tse tsoang ho Habr

Ka tlase ho sehiloeng ho na le lintlha tse kang likarolo tsa mosebetsi, mokhoa oa ho ngola le tharollo ea theknoloji.

Ka bokhutšoanyane ka bot

Sebaka sa polokelo: https://github.com/Kright/habrahabr_reader

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

Пользователь задаёт добавочный рейтинг для тэгов и авторов. После этого к статьям применяется фильтр — складываются рейтинг статьи на Хабре, пользовательский рейтинг автора и среднее для пользовательских рейтингов по тегам. Если сумма оказывается больше заданного пользователем порогового значения, то статья проходит фильтр.

Побочной целью написания бота было получение фана и опыта. Кроме того, я регулярно напоминал себе, что Ha ke Google, ka hona lintho tse ngata li etsoa ka mokhoa o bonolo le oa khale kamoo ho ka khonehang. Leha ho le joalo, sena ha sea ka sa thibela mokhoa oa ho ngola bot ho nka likhoeli tse tharo.

За окном было лето

July e ne e fela, 'me ke ile ka etsa qeto ea ho ngola bot. Eseng feela, empa le motsoalle ea neng a tseba scala mme a batla ho ngola ho hong ho eona. Tšimoloho e ne e shebahala e tšepisa - khoutu e tla khaoloa ke sehlopha, mosebetsi o ne o bonahala o le bonolo 'me ke nahana hore ka libeke tse' maloa kapa khoeli bot e tla be e loketse.

Ho sa tsotellehe taba ea hore 'na ka bonna ke' nile ka ngola khoutu lefikeng nako le nako lilemong tse 'maloa tse fetileng, ha ho motho ea atisang ho bona kapa ho sheba khoutu ena: merero ea liphoofolo tse ruuoang lapeng, ho hlahloba maikutlo a itseng, ho lokisa lintlha, ho tseba likhopolo tse ling ho tsoa ho FP. Ke ne ke hlile ke thahasella hore na khoutu ea ho ngola sehlopheng e shebahala joang, hobane khoutu e holim'a lefika e ka ngoloa ka litsela tse fapaneng haholo.

Что же могло пойти kahoo? Leha ho le joalo, ha re potlakiseng lintho.
Всё происходящее можно отследить по истории коммитов.

Motho eo ke mo tloaetseng o ile a theha polokelo ka la 27 Phupu, empa ha aa ka a etsa letho, kahoo ke ile ka qala ho ngola khoutu.

30 July

Ka bokhuts'oane: Ke ngotse tlhahlobo ea Habr's rss feed.

  • com.github.pureconfig bakeng sa ho bala li-typesafe configs ka kotloloho lihlopheng tsa linyeoe (ho ile ha bonahala ho le bonolo haholo)
  • scala-xml bakeng sa ho bala xml: ho tloha qalong ke ne ke batla ho ngola ts'ebetsong ea ka bakeng sa phepelo ea rss, 'me phepelo ea rss e ka sebopeho sa xml, ke sebelisitse laeborari ena ho arola. Haele hantle, RSS parsing le eona e ile ea hlaha.
  • scalatest bakeng sa liteko. Le bakeng sa merero e menyane, liteko tsa ho ngola li boloka nako - mohlala, ha u lokisa xml parsing, ho bonolo haholo ho e jarolla faeleng, ho ngola liteko le ho lokisa liphoso. Ha phoso e hlaha hamorao ka ho arola html e 'ngoe e makatsang e nang le litlhaku tse sa sebetseng tsa utf-8, ho ile ha bonahala ho le bonolo ho e beha faeleng le ho kenya tlhahlobo.
  • акторы из Akka. Объективно, они вообще не были нужны, но проект писался for fun, я хотел их попробовать. В результате готов сказать, что мне понравилось. На идею ООП можно взглянуть с другой стороны — есть акторы, которые обмениваются сообщениями. Что интереснее — можно (и нужно) писать код с таким рассчётом, что сообщение может не дойти или не быть обработано (вообще говоря, при работе акки на одном-единственном компе сообщения не должны теряться). Я поначалу ломал голову и в коде происходил треш с подписками акторов друг на друга, но в итоге удалось прийти довольно простой и изящной архитектуре. Код внутри каждого актора можно считать однопоточным, при падениях актора акка перезапускает его — получается довольно отказоустойчивая система.

9 Aug

Ke kentse morero scala-scrapper bakeng sa ho arola maqephe a html ho tloha ho Habr (ho ntša tlhahisoleseling joalo ka lintlha tsa sengoloa, palo ea li-bookmark, joalo-joalo).

И Cats. Те самые, которые в скале.

Telegraph bot bakeng sa khetho ea hau ea lingoliloeng tse tsoang ho Habr

Я тогда читал одну книжку про распределённые базы данных, мне понравилась идея CRDT (Conflict-free replicated data type, https://en.wikipedia.org/wiki/Conflict-free_replicated_data_type, habr), kahoo ke ile ka beha sehlopha sa mofuta oa semigroup bakeng sa tlhahisoleseding e mabapi le sehlooho se buang ka Habré.

Ha e le hantle, khopolo e bonolo haholo - re na le li-counters tse fetohang monotonically. Palo ea lipapatso e ntse e eketseha butle-butle, joalo ka palo ea li-pluses (hammoho le palo ea minuses). Haeba ke na le mefuta e 'meli ea tlhahisoleseling mabapi le sengoloa, ke khona ho "li kopanya hore e be se le seng" - boemo ba k'haontareng e kholo bo nkoa bo le bohlokoa haholoanyane.

Semigroup e bolela hore lintho tse peli tse nang le tlhahisoleseding mabapi le sehlooho li ka kopanngoa ho ba ntho e le 'ngoe. Commutative e bolela hore o ka kopanya A + B le B + A ka bobeli, sephetho ha se itšetlehe ka tatellano, 'me qetellong mofuta o mocha o tla sala. Ka tsela, ho boetse ho na le associativity mona.

Mohlala, joalo ka ha ho reriloe, rss ka mor'a ho arola e fane ka leseli le fokolang ka sengoloa - ntle le litekanyetso tse joalo ka palo ea maikutlo. Sebapali se ikhethileng se ile sa nka tlhahisoleseling mabapi le lingoliloeng mme sa mathela maqepheng a html ho e nchafatsa le ho e kopanya le mofuta oa khale.

Ka kakaretso, joalo ka akka, ho ne ho sa hlokahale sena, o ka boloka updateDate bakeng sa sengoloa ebe o nka e ncha ntle le ho kopanngoa, empa tsela ea bohahlauli e ile ea ntsamaisa.

12 Aug

Я начал свободнее себя чувствовать и ради интереса сделал, чтобы каждый чат был отдельным актором. Теоретически, актор сам по себе весит около 300 байт и их можно хоть миллионами создавать, так что это вполне нормальный подход. Получилось, как мне кажется, довольно интересно решение:

Один актор был мостом между сервером телеграмма и системой сообщений в акке. Он просто получал сообщения и отправлял их нужному актору-чату. Актор-чат в ответ мог послать что-нибудь обратно — и оно отправлялось обратно в телеграм. Что было очень удобно — этот актор получился максимально простым и содержал только логику ответа на сообщения. Кстати, информация о новых статьях приходила в каждый чат, но я опять же не вижу в этом никаких проблем.

Ka kakaretso, bot e ne e se e ntse e sebetsa, e arabela melaetsa, e boloka lethathamo la lihlooho tse rometsoeng ho mosebedisi, 'me ke ne ke se ke ntse ke nahana hore bot e se e batla e loketse. Butle-butle ke kentse likarolo tse nyane joalo ka ho tloaeleha mabitso a sengoli le li-tag (ho tlosa "sd f" ka "s_d_f").

Ho ne ho setse ntho e le nngwe feela e nyane empa - mmuso o ne o sa bolokeha kae kapa kae.

Tsohle di tsamaile hampe

Mohlomong u hlokometse hore ke ngotse bot haholo ke le mong. Kahoo, karolo ea bobeli e ile ea kenya letsoho ntlafatsong, 'me ho ile ha hlaha liphetoho tse latelang khoutu:

  • Для хранения состояния появилась mongoDB. Заодно в проекте поломались логи, потому что монга зачем-то начинала в них спамить и кое-кто их просто глобально выключил.
  • Motšoantšisi oa borokho ho Telegraph o ile a fetoloa hore a se ke a tsebahala mme a qala ho fetisa melaetsa ka boeena.
  • Batšoantšisi ba lipuisano ba ile ba khaoloa ka mokhoa o se nang mohau, 'me ho e-na le hoo ba ile ba nkeloa sebaka ke setšoantšisi se neng se pata boitsebiso bohle ka lipuisano tsohle hang-hang. Bakeng sa ho thimola ho hong le ho hong, setšoantšisi sena se ile sa kena mathateng. Ho joalo, joalo ka ha u ntlafatsa tlhahisoleseling mabapi le sengoloa, ho thata ho e romella ho libapali tsohle tsa meqoqo (re tšoana le Google, basebelisi ba limilione ba emetse lingoliloeng tse milione moqoqong bakeng sa e mong le e mong), empa nako le nako ha moqoqo o ntlafatsoa, ke ntho e tloaelehileng ho kena Monga. Joalokaha ke ile ka hlokomela hamorao, mokhoa oa ho sebetsa oa lipuisano le oona o ile oa khaoloa ka ho feletseng 'me sebakeng sa oona ho ile ha hlaha ntho e sa sebetseng.
  • От тайп-классов не осталось и следа.
  • В акторах появилась какая-то нездоровая логика с подписками их друг на друга, ведущая к race condition.
  • Структуры данных с полями типа Option[Int] превратились в Int с магическими дефолтными значениями типа -1. Позже я понял, что mongoDB хранит json и нет ничего плохого в том, чтобы хранить там Option hantle, kapa bonyane hlalosa -1 joalo ka None, empa ka nako eo ke ne ke sa tsebe sena mme ke nka lentsoe la ka la hore "ke kamoo e lokelang ho ba kateng." Ha kea ngola khoutu eo, 'me ha kea ka ka ikhathatsa ho e fetola ka nako eo.
  • Я узнал, что мой публичный айпи адрес имеет свойство меняться, и каждый раз приходилось добавлять его в whitelist монге. Бота я запускал локально, монга была где-то на серверах монги как компании.
  • Ka tšohanyetso, ho tloaeleha ha li-tag le ho fometa melaetsa bakeng sa lithelekramo ho ile ha nyamela. (Hmm, hobaneng ho ka ba joalo?)
  • Ke ratile hore boemo ba bot bo bolokoa sebakeng sa polokelo ea ka ntle, 'me ha bo tsosolosoa bo tsoela pele ho sebetsa joalokaha eka ha ho letho le etsahetseng. Leha ho le joalo, ena e ne e le eona feela tlatsetso.

Второй человек не особо торопился, и все эти изменения появились одной большой кучей уже в начале сентября. Я не сразу оценил масштаб полученных разрушений и начал разбираться в работе БД, т.к. раньше и с ними не имел дело. Только потом я понял, сколько работающего кода было выпилено и сколько багов добавлено взамен.

September

Qalong ke ne ke nahana hore ho tla ba molemo ho tseba Monga le ho e etsa hantle. Eaba butle-butle ke qala ho utloisisa hore ho hlophisa puisano le database e boetse ke bonono boo u ka etsang merabe e mengata le ho etsa liphoso feela. Mohlala, haeba mosebelisi a amohela melaetsa e 'meli joalo ka /subscribe - 'me ho arabela e' ngoe le e 'ngoe re tla theha ho kena tafoleng, hobane ka nako ea ho sebetsana le melaetsa eo mosebedisi ha a ngolisoa. Ke na le pelaelo ea hore puisano le Monga ka mokhoa oa hona joale ha oa ngoloa ka tsela e molemo ka ho fetisisa. Mohlala, litlhophiso tsa mosebelisi li entsoe nakong eo a ingolisang. Haeba a leka ho li fetola pele ho ngolisoe ... bot ha ea ka ea arabela letho, hobane khoutu ea setšoantšisi e kene ka har'a database bakeng sa litlhophiso, ha ea ka ea e fumana 'me ea senyeha. Ha ke botsoa hore na ke hobane'ng ha u sa bōpe litlhophiso kamoo ho hlokahalang, ke ithutile hore ha ho hlokahale hore u li fetole haeba mosebedisi a sa ngolisa ... Sistimi ea ho hloekisa melaetsa e entsoe ka tsela e itseng e sa hlaka, 'me esita le ka mor'a ho shebisisa khoutu eo nka e khonang. ha e utloisise hore na e ne e reretsoe ka tsela ena qalong kapa ho na le phoso moo.

Ho ne ho se na lethathamo la lingoliloeng tse rometsoeng moqoqong; ho e-na le hoo, ho ile ha etsoa tlhahiso ea hore ke li ngole ka bonna. Sena se ile sa 'makatsa - ka kakaretso, ke ne ke se khahlanong le ho hulela mefuta eohle ea lintho morerong, empa e ne e tla ba ntho e utloahalang ho ea tlisitseng lintho tsena le ho li senya. Empa che, monkakarolo oa bobeli o ne a bonahala a inehela nthong e 'ngoe le e' ngoe, empa a re lenane le kahare ho moqoqo e ne e le tharollo e mpe, 'me ho ne ho hlokahala ho etsa lets'oao le nang le liketsahalo tse kang "sengoloa y se rometsoe ho mosebelisi x." Joale, haeba mosebelisi a kopa ho romella lingoliloeng tse ncha, ho ne ho hlokahala hore a romele kopo ho database, e neng e tla khetha liketsahalo tse amanang le mosebelisi ho tsoa liketsahalong, hape a fumane lethathamo la lingoliloeng tse ncha, a li sefa, a li romelle ho mosebelisi. mme o lahlele diketsahalo tse mabapi le sena hape ka hara database.

Morupeluoa oa bobeli o ile a isoa kae-kae ho ea ho tse ling, ha bot e ke ke ea amohela feela lingoliloeng tse tsoang ho Habr le ho romelloa eseng ho thelekramo feela.

Ka tsela e itseng ke ile ka kenya ts'ebetsong liketsahalo ka mokhoa oa pontšo e arohaneng bakeng sa halofo ea bobeli ea September. Ha se hantle, empa bonyane bot e ile ea qala ho sebetsa 'me ea qala ho nthomella lingoliloeng hape,' me butle-butle ke ile ka utloisisa se etsahalang khoutu.

Joale u ka khutlela qalong 'me u hopole hore sebaka sa polokelo ha sea bōptjoa ke' na. Ke’ng ​​se ka beng se ile tjee? Kopo ea ka ea ho hula e ile ea hanoa. Ho ile ha fumaneha hore ke ne ke e-na le khoutu ea redneck, eo ke neng ke sa tsebe ho sebetsa sehlopheng, 'me ke ne ke tlameha ho lokisa litšitšili mokhoeng oa hona joale oa ts'ebetsong,' me ke se ke ka e ntlafatsa ho ea boemong bo ka sebelisoang.

Ke ile ka halefa 'me ka sheba histori ea boitlamo le palo ea khoutu e ngotsoeng. Ke ile ka sheba linako tseo qalong li neng li ngotsoe hantle, eaba li robeha morao...

F*rk eona

Ke ile ka hopola sehlooho seo Ha u Google.

Ke ne ke nahana hore ha ho motho ea hlileng a hlokang mohopolo ntle le ts'ebetsong. Ke ne ke nahana hore ke batla ho ba le bot e sebetsang, e tla sebetsa ka kopi e le 'ngoe khomphuteng e le' ngoe e le lenaneo le bonolo la java. Kea tseba hore bot ea ka e tla sebetsa likhoeli tse ngata ntle le ho qala hape, kaha ke se ke ngotse li-bots tse joalo nakong e fetileng. Haeba e oela ka tšohanyetso 'me e sa romele mosebedisi sehlooho se seng, leholimo le ke ke la oela fatše 'me ha ho letho le kotsi le tla etsahala.

Зачем мне докер, mongoDB и прочий карго-культ «серьёзного» софта, если код тупо не работает или работает криво?

Ke ile ka tela projeke mme ka etsa tsohle kamoo ke neng ke batla.

Telegraph bot bakeng sa khetho ea hau ea lingoliloeng tse tsoang ho Habr

Примерно тогда же я поменял место работы и свободного времени стало катастрофически не хватать. Утром я просыпался ровно на электричку, вечером возвращался поздно и что-либо делать уже не хотелось. Я какое-то время не делал ничего, потом желание дописать бота пересилило, и я стал потихоньку переписывать код, пока ездил на работу утром. Не скажу, что это было продуктивно: сидеть в трясущейся электричке с ноутбуком на коленях и подглядывать на stack overflow с телефона не очень удобно. Впрочем, время за написанием кода пролетало совершенно незаметно, и проект начал потихоньку двигаться к рабочему состоянию.

Kae-kae ka morao kelellong ea ka ho ne ho e-na le seboko sa lipelaelo se neng se batla ho sebelisa mongoDB, empa ke ne ke nahana hore ntle le melemo ea "ho tšepahala" polokelo ea mmuso, ho ne ho e-na le mathata a bonahalang:

  • Database e fetoha ntlha e 'ngoe ea ho hlōleha.
  • Khoutu e ntse e rarahana le ho feta, 'me ho tla nkuka nako e telele ho e ngola.
  • Код становится медленным и неэффективным, вместо изменения объекта в памяти изменения отправляются в БД и при необходимости вытаскиваются обратно.
  • Появляются ограничения типа хранения ивентов в отдельной табличке, которые связаны с особенностями работы БД.
  • Mofuta oa teko oa Monga o na le mefokolo e itseng, 'me haeba u kena ho eona, u tla tlameha ho qala le ho lokisa Monga ho hong.

Ke ile ka khaola monga, hona joale boemo ba bot bo bolokiloe mohopolong oa lenaneo mme nako le nako e bolokoa faeleng ka mokhoa oa json. Mohlomong ka litlhaloso ba tla ngola hore ke fositse, hore ke hona moo database e lokelang ho sebelisoa, joalo-joalo. Empa ona ke morero oa ka, mokhoa o nang le faele o bonolo ka hohle kamoo ho ka khonehang 'me o sebetsa ka mokhoa o hlakileng.

O lahlile boleng ba boselamose joalo ka -1 mme a khutlisa tse tloaelehileng Option, добавил хранение хеш-таблички с отправленными статьями обратно в объект с информацией о чате. Добавил удаление информации о статьях старше пяти дней, чтобы не хранить всё подряд. Привёл логирование к рабочему состоянию — логи в разумных количествах пишутся и в файл и в консоль. Добавил несколько админских команд типа сохранения состояния или получения статистики типа количества пользователей и статей.

E lokisitse sehlopha sa lintho tse nyane: mohlala, bakeng sa lingoliloeng palo ea maikutlo, lintho tseo u li ratang, tseo u sa li rateng le maikutlo nakong ea ho fetisa filthara ea mosebelisi e se e bonts'itsoe. Ka kakaretso, hoa makatsa hore na ke lintho tse kae tse nyenyane tse ileng tsa tlameha ho lokisoa. Ke ile ka boloka lethathamo, ka hlokomela “litšitiso” tsohle tse teng moo ’me ka li lokisa ka hohle kamoo ho ka khonehang.

Mohlala, ke kentse bokhoni ba ho beha litlhophiso tsohle ka kotloloho molaetseng o le mong:

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

Le sehlopha se seng /settings e li bonts'a hantle ka foromo ena, o ka nka mongolo ho eona ebe o romella motsoalle litlhophiso tsohle.
Вроде и мелочь, но подобных нюансов — десятки.

Sefate sa lingoloa se kentsoeng ka mokhoa oa mofuta o bonolo oa mohala - mosebelisi a ka beha lintlha tse eketsehileng bakeng sa bangoli le li-tag, hammoho le boleng ba moeli. Haeba kakaretso ea lintlha tsa sengoli, lintlha tse tloaelehileng tsa li-tag le lintlha tsa 'nete tsa sengoloa li le ngata ho feta tekanyo, joale sengoloa se bontšoa mosebelisi. U ka kopa bot bakeng sa lingoliloeng tse nang le taelo / e ncha, kapa u ingolise ho bot mme e tla romella lingoliloeng ka molaetsa oa hau ka nako efe kapa efe ea letsatsi.

Ka kakaretso, ke ne ke e-na le mohopolo oa hore sengoloa se seng le se seng se hule likarolo tse ling (li-hubs, palo ea maikutlo, li-bookmark, liphetoho tsa litekanyetso, palo ea mongolo, litšoantšo le khoutu sengolong, mantsoe a bohlokoa), le ho bonts'a mosebelisi ok/ eseng hantle ho vouta tlasa sengoloa se seng le se seng le ho koetlisa mohlala bakeng sa mosebelisi e mong le e mong, empa ke ne ke le botsoa haholo.

Вдобавок, логика работы станет не такой очевидной. Сейчас я могу вручную поставить для patientZero рейтинг +9000 и при пороговом рейтинге в +20 буду гарантированно получать все его статьи (если, конечно, не поставлю -100500 для каких нибудь тегов).

Mohaho oa ho qetela o ile oa bonahala o le bonolo haholo:

  1. Sebapali se bolokang boemo ba lipuisano le lingoliloeng tsohle. E jarisa boemo ba eona ho tsoa faeleng e ho disk ebe e e boloka nako le nako, nako le nako ho ea faeleng e ncha.
  2. Sebapali se etelang phepelo ea RSS nako le nako, se ithuta ka lingoliloeng tse ncha, se sheba likhokahano, se qhekella, 'me se romela lingoliloeng tsena ho sebapali sa pele. Ho phaella moo, ka linako tse ling e kopa lethathamo la lihlooho tse tsoang ho motšoantšisi oa pele, e khetha tse seng tsa khale ho feta matsatsi a mararo, empa ha e e-s'o ntlafatsoe nako e telele, ebe e li ntlafatsa.
  3. Актор, который общается с телеграммом. Я всё-таки вынес парсинг сообщений полностью сюда. По-хорошему хочется разделить его на два — чтобы один парсил входящие сообщения, а второй занимался транспортными проблемами типа переотправки неотправившихся сообщений. Сейчас переотправки нет, и не дошедшее из-за ошибки сообщение просто потеряется (разве что в логах отметится), но пока что это не вызывает проблем. Возможно, проблемы возникнут, если на бота подпишется куча человек и я достигну лимита на отправку сообщений).

Что мне понравилось — благодаря akka падения акторов 2 и 3 в общем-то не влияют на работоспособность бота. Возможно, какие-то статьи не обновляются вовремя или какие-то сообщения не доходят до телеграмма, но акка перезапускает актор и всё продолжает работать дальше. Я сохраняю информацию о том, что статья показана пользователю только тогда, когда телеграм актор ответит, что он успешно доставил сообщение. Самое страшное, что мне грозит — отправить сообщение несколько раз (если оно доставится, но потверждение каким-то неведомым образом потеряется). В принципе, если бы первый актор не хранил состояние в себе, а общался с какой-нибудь бд, то он мог бы тоже незаметно падать и возвращаться к жизни. Ещё я мог бы попробовать akka persistance для восстановления состояния акторов, но текущая реализация меня устраивает своей простотой. Не то чтобы мой код часто падал — наоборот, я приложил довольно много усилий, чтобы это было невозможным. Но shit happens, и возможность разбить программу на изолированные кусочки-акторы показалась мне реально удобной и практичной.

Ke kentse circle-ci e le hore haeba khoutu e robeha, u tla tseba hang-hang ka eona. Bonyane, ho bolela hore khoutu e emisitse ho bokella. Qalong ke ne ke batla ho eketsa travis, empa e ne e bontša merero ea ka ntle le lifereko. Ka kakaretso, lintho tsena ka bobeli li ka sebelisoa ka bolokolohi libakeng tsa polokelo tse bulehileng.

Liphello

E se e le Pulungoana. Bot e ngotsoe, esale ke e sebelisa libeke tse peli tse fetileng mme ke e ratile. Haeba u na le maikutlo a ho ntlafatsa, ngola. Ha ke bone ntlha ea ho e etsa chelete - e ke e sebetse feela 'me e romelle lingoliloeng tse khahlisang.

Sehokelo sa Bot: https://t.me/HabraFilterBot
Github: https://github.com/Kright/habrahabr_reader

Liphetho tse nyane:

  • Esita le morero o monyenyane o ka nka nako e ngata.
  • Ha u Google. Ha ho na thuso ea ho thunya lirobele ka likanono. Tharollo e bonolo le eona e ka sebetsa.
  • Пэт-проекты очень хорошо подходят для экспериментов с новыми технологиями.
  • Telegraph bots e ngotsoe ka mokhoa o bonolo. Haeba e ne e se bakeng sa "tšebelisano" le liteko tsa theknoloji, bot e ka be e ngotsoe ka beke kapa tse peli.
  • Модель акторов — интересная штука, хорошо сочетающаяся с многопоточностью и отказоустойчивостью кода.
  • Ke nahana hore ke ile ka latsoa hore na ke hobane'ng ha sechaba se bulehileng se rata lifereko.
  • Базы данных хороши тем, что состояние приложения перестаёт зависеть от падений/перезапусков приложения, но работа с БД усложняет код и накладывает ограничения на структуру данных.

Source: www.habr.com

Eketsa ka tlhaloso