ቴሌግራም ቦት ለግል የተበጁ መጣጥፎች ከሀብር

እንደ "ለምን?" ለሚሉት ጥያቄዎች አንድ የቆየ ጽሑፍ አለ - ተፈጥሯዊ Geektimes - ቦታን የበለጠ ንጹህ ማድረግ.

ብዙ መጣጥፎች አሉ, ለትክክለኛ ምክንያቶች አንዳንዶቹን አልወድም, እና አንዳንዶቹ, በተቃራኒው, መዝለል በጣም ያሳዝናል. ይህን ሂደት ለማመቻቸት እና ጊዜ ለመቆጠብ እፈልጋለሁ.

ከላይ ያለው መጣጥፍ የአሳሽ ስክሪፕት አቀራረብን ሀሳብ አቅርቧል፣ ነገር ግን በእውነት አልወደድኩትም (ከዚህ በፊት የተጠቀምኩት ቢሆንም) በሚከተሉት ምክንያቶች።

  • በኮምፒተርዎ/ስልክዎ ላይ ለተለያዩ አሳሾች ከተቻለ እንደገና ማዋቀር አለብዎት።
  • በደራሲዎች ጥብቅ ማጣሪያ ሁልጊዜ ምቹ አይደለም.
  • በዓመት አንድ ጊዜ ቢታተሙም ጽሑፎቻቸው እንዳያመልጡዎት የማትፈልጓቸው ደራሲዎች ችግር አልተፈታም።

በአንቀፅ ደረጃዎች ላይ በመመስረት በጣቢያው ውስጥ የተሰራ ማጣራት ሁል ጊዜ ምቹ አይደለም ፣ ምክንያቱም ልዩ ልዩ ጽሑፎች ምንም እንኳን ዋጋ ቢኖራቸውም ፣ ይልቁንም መጠነኛ ደረጃን ሊያገኙ ይችላሉ።

መጀመሪያ ላይ፣ የአርኤስኤስ ምግብን (ወይም ብዙ እንኳን) ማመንጨት እፈልግ ነበር፣ እዚያም አስደሳች ነገሮችን ብቻ ትቼ ነበር። ግን በመጨረሻ ፣ RSS ን ማንበብ በጣም ምቹ አይመስልም ነበር-በማንኛውም ሁኔታ ፣ ለአንድ ጽሑፍ አስተያየት / ድምጽ ለመስጠት / ወደ ተወዳጆችዎ ለመጨመር ፣ በአሳሹ ውስጥ ማለፍ አለብዎት። ለዛም ነው በግል መልእክት የሚስቡ መጣጥፎችን የሚልክልኝ የቴሌግራም ቦት የፃፍኩት። ቴሌግራም እራሱ ውብ ቅድመ-እይታዎችን ያዘጋጃል, ይህም ከፀሐፊው / ደረጃ / እይታዎች መረጃ ጋር ተደምሮ, በጣም መረጃ ሰጭ ይመስላል.

ቴሌግራም ቦት ለግል የተበጁ መጣጥፎች ከሀብር

ከመቁረጥ በታች እንደ የሥራው ገፅታዎች, የአጻጻፍ ሂደት እና ቴክኒካዊ መፍትሄዎች ያሉ ዝርዝሮች ናቸው.

ስለ ቦት በአጭሩ

ማከማቻ፡ https://github.com/Kright/habrahabr_reader

በቴሌግራም ውስጥ: https://t.me/HabraFilterBot

ተጠቃሚው ለታጎች እና ደራሲዎች ተጨማሪ ደረጃን ያዘጋጃል። ከዚያ በኋላ ማጣሪያ በአንቀጾቹ ላይ ይተገበራል - የጽሁፉ ደረጃ በሀበሬ ላይ ፣ የደራሲው የተጠቃሚ ደረጃ እና አማካይ የተጠቃሚ ደረጃዎች በመለያ ተጨምረዋል። መጠኑ በተጠቃሚ ከተገለጸው ገደብ በላይ ከሆነ፣ ጽሑፉ ማጣሪያውን ያልፋል።

ቦት የመፃፍ የጎን ግብ አዝናኝ እና ልምድ ለማግኘት ነበር። በተጨማሪም ፣ ያንን አዘውትሬ እራሴን አስታውሳለሁ። እኔ ጎግል አይደለሁም።, እና ስለዚህ ብዙ ነገሮች በተቻለ መጠን ቀላል እና እንዲያውም ጥንታዊ ናቸው. ሆኖም ይህ ቦት የመፃፍ ሂደት ሶስት ወር እንዳይወስድ አላገደውም።

ውጭ ክረምት ነበር።

ጁላይ እያለቀ ነበር፣ እና ቦት ለመጻፍ ወሰንኩ። እና ብቻውን አይደለም፣ ነገር ግን ስካላ ከሚመራው ጓደኛ ጋር እና የሆነ ነገር መጻፍ ከፈለገ። አጀማመሩ ተስፋ ሰጪ መስሎ ነበር - ኮዱ በቡድን ይቆረጣል ፣ ስራው ቀላል መስሎ ነበር እና በሁለት ሳምንታት ወይም በአንድ ወር ውስጥ ቦቱ ዝግጁ ይሆናል ብዬ አስቤ ነበር።

ምንም እንኳን እኔ ራሴ ላለፉት ጥቂት ዓመታት ከጊዜ ወደ ጊዜ በዓለት ላይ ኮድ እየጻፍኩ ቢሆንም ፣ ማንም ሰው ይህንን ኮድ አይመለከትም ወይም አይመለከትም-የቤት እንስሳት ፕሮጀክቶች ፣ አንዳንድ ሀሳቦችን መሞከር ፣ መረጃን በማስቀደም ፣ ከ FP አንዳንድ ጽንሰ-ሀሳቦችን ማወቅ። በቡድን ውስጥ የአጻጻፍ ኮድ ምን እንደሚመስል ለማወቅ በጣም ፍላጎት ነበረኝ, ምክንያቱም በሮክ ላይ ያለው ኮድ በተለያየ መንገድ ሊጻፍ ይችላል.

ምን ሊሄድ ይችል ነበር። እንደዚህ? ይሁን እንጂ ነገሮችን አንቸኩል።
የተፈጸመው ነገር ሁሉ የቁርጥ ታሪክን በመጠቀም መከታተል ይቻላል።

አንድ የማውቀው ሰው በጁላይ 27 ማከማቻ ፈጠረ ፣ ግን ሌላ ምንም አላደረገም ፣ ስለዚህ ኮድ መጻፍ ጀመርኩ ።

30 ሐምሌ

ባጭሩ፡ የሀብር አርኤስኤስ መጋቢ ትንታኔ ጻፍኩ።

  • com.github.pureconfig የ typeafe ውቅሮችን ለማንበብ በቀጥታ ወደ መያዣ ክፍሎች (በጣም ምቹ ሆኖ ተገኝቷል)
  • scala-xml xml ን ለማንበብ፡- መጀመሪያ ላይ የራሴን አተገባበር ለ rss ምግብ ለመጻፍ ስለፈለግኩ፣ እና RSS ምግብ በ xml ቅርጸት ስለሆነ፣ ይህንን ቤተ-መጽሐፍት ለመተንተን ተጠቀምኩት። በእውነቱ፣ RSS መተንተንም ታየ።
  • scalatest ለፈተናዎች. ለጥቃቅን ፕሮጀክቶች እንኳን, ሙከራዎችን መፃፍ ጊዜን ይቆጥባል - ለምሳሌ, xml ን መገምገም ሲፈታ, ወደ ፋይል ማውረድ, ሙከራዎችን መጻፍ እና ስህተቶችን ማስተካከል በጣም ቀላል ነው. በኋላ ላይ አንዳንድ እንግዳ ኤችቲኤምኤልን ልክ ባልሆኑ utf-8 ቁምፊዎች በመተንተን አንድ ስህተት ሲከሰት ፋይል ውስጥ ለማስቀመጥ እና ሙከራ ለመጨመር የበለጠ አመቺ ሆኖ ተገኝቷል።
  • ተዋናዮች ከአካ. እንደ እውነቱ ከሆነ, በጭራሽ አያስፈልጉም ነበር, ነገር ግን ፕሮጀክቱ የተፃፈው ለደስታ ነው, እነሱን ለመሞከር ፈልጌ ነበር. በውጤቱም, እንደወደድኩት ለመናገር ዝግጁ ነኝ. የ OOP ሀሳብ ከሌላኛው ወገን ሊታይ ይችላል - መልእክት የሚለዋወጡ ተዋናዮች አሉ። በጣም የሚያስደንቀው ነገር መልእክቱ እንዳይደርስ ወይም እንዳይሰራ በሚያስችል መንገድ (እና) ኮድ መፃፍ ይችላሉ (በአጠቃላይ, መለያው በአንድ ነጠላ ኮምፒዩተር ላይ ሲሰል, መልዕክቶች መጥፋት የለባቸውም). መጀመሪያ ላይ ጭንቅላቴን እየቧጭኩ ነበር እና ተዋናዮች እርስ በርሳቸው የሚመዘገቡበት ኮድ ውስጥ ቆሻሻ ነበር ፣ ግን በመጨረሻ ቀለል ያለ እና የሚያምር አርኪቴክቸር መፍጠር ቻልኩ። በእያንዳንዱ ተዋንያን ውስጥ ያለው ኮድ ነጠላ-ክር ተደርጎ ሊወሰድ ይችላል ፣ ተዋናዩ ሲወድቅ ፣ አካሉ እንደገና ያስጀምረዋል - ውጤቱ በትክክል ስህተትን የሚቋቋም ስርዓት ነው።

9 ነሐሴ

ወደ ፕሮጀክቱ ጨምሬያለሁ scala-scrapper የኤችቲኤምኤል ገፆችን ከሀብር ለመተንተን (እንደ የጽሑፍ ደረጃ፣ የዕልባቶች ብዛት፣ ወዘተ ያሉ መረጃዎችን ለማውጣት)።

እና ድመቶች. በዐለት ውስጥ ያሉት።

ቴሌግራም ቦት ለግል የተበጁ መጣጥፎች ከሀብር

ከዚያ ስለ ተከፋፈሉ የውሂብ ጎታዎች መጽሐፍ አነበብኩ ፣ የCRDT ሀሳብ ወድጄዋለሁ (ከግጭት ነፃ የሆነ የተባዛ የውሂብ ዓይነት ፣ https://en.wikipedia.org/wiki/Conflict-free_replicated_data_type, ሀብር), ስለዚህ ስለ Habré መጣጥፍ መረጃ ለማግኘት የኮሚቴቲቭ ከፊል ቡድን ዓይነት ክፍል ለጥፌያለሁ።

እንደ እውነቱ ከሆነ, ሀሳቡ በጣም ቀላል ነው - በነጠላነት የሚቀይሩ ቆጣሪዎች አሉን. የማስተዋወቂያዎች ቁጥር ቀስ በቀስ እያደገ ነው, እንዲሁም የፕላስ ቁጥር (እንዲሁም የመቀነስ ብዛት). ስለ አንድ መጣጥፍ ሁለት የመረጃ ስሪቶች ካሉኝ ፣ ከዚያ “ወደ አንድ ማዋሃድ እችላለሁ” - ትልቅ የሆነው የቆጣሪው ሁኔታ የበለጠ ጠቃሚ እንደሆነ ይቆጠራል።

ከፊል ቡድን ማለት ስለ መጣጥፍ መረጃ ያላቸው ሁለት ነገሮች ወደ አንድ ሊዋሃዱ ይችላሉ ማለት ነው። መግባባት ማለት ሁለቱንም A + B እና B + A ማዋሃድ ይችላሉ, ውጤቱም በትእዛዙ ላይ የተመሰረተ አይደለም, እና በመጨረሻ አዲሱ ስሪት ይቀራል. በነገራችን ላይ, እዚህ ተጓዳኝነትም አለ.

ለምሳሌ፣ እንደታቀደው፣ rss ከመተንተን በኋላ ስለ ጽሑፉ በትንሹ የተዳከመ መረጃ አቅርቧል - እንደ የእይታዎች ብዛት ያለ መለኪያዎች። አንድ ልዩ ተዋናይ ከዚያም ስለ ጽሑፎቹ መረጃ ወስዶ ለማዘመን እና ከአሮጌው ስሪት ጋር ለማዋሃድ ወደ html ገጾቹ ሮጠ።

በአጠቃላይ፣ እንደ akka ውስጥ፣ ይህ ምንም አያስፈልግም ነበር፣ በቀላሉ ለጽሁፉ UpdateDate ን ማከማቸት እና ያለ ምንም ውህደት አዲስ መውሰድ ትችላላችሁ፣ ነገር ግን የጀብዱ መንገድ መራኝ።

12 ነሐሴ

የበለጠ ነፃነት ይሰማኝ ጀመር እና፣ ለመዝናናት ብቻ፣ እያንዳንዱን ውይይት የተለየ ተዋናይ አድርጌዋለሁ። በንድፈ ሀሳብ, ተዋናይ እራሱ ወደ 300 ባይት ይመዝናል እና በሚሊዮኖች ሊፈጠሩ ይችላሉ, ስለዚህ ይህ ሙሉ በሙሉ የተለመደ አካሄድ ነው. መፍትሄው በጣም አስደሳች ሆኖ ታየኝ፡-

አንድ ተዋናይ በአካ ውስጥ በቴሌግራም አገልጋይ እና በመልእክት ስርዓት መካከል ድልድይ ነበር። በቀላሉ መልዕክቶችን ተቀብሎ ወደሚፈለገው የውይይት ተዋናይ ላከ። የውይይት ተዋናዩ በምላሹ የሆነ ነገር ሊልክ ይችላል - እና ተመልሶ ወደ ቴሌግራም ይላካል። በጣም ምቹ የሆነው ይህ ተዋናይ በተቻለ መጠን ቀላል ሆኖ ለመልእክቶች ምላሽ የመስጠት ሎጂክን ብቻ የያዘ መሆኑ ነው። በነገራችን ላይ ስለ አዳዲስ መጣጥፎች መረጃ ወደ እያንዳንዱ ውይይት መጣ, ግን እንደገና በዚህ ውስጥ ምንም ችግር አይታየኝም.

በአጠቃላይ ቦት ቀድሞውንም እየሰራ ነበር ለመልእክቶች ምላሽ በመስጠት ለተጠቃሚው የተላኩትን መጣጥፎች ዝርዝር እያከማቸሁ ነበር እና ቦትው ዝግጁ ነው ብዬ አስቤ ነበር። የደራሲ ስሞችን እና መለያዎችን መደበኛ ማድረግ ("sd f"ን በ"s_d_f" በመተካት) ቀስ በቀስ ትንሽ ባህሪያትን ጨምሬያለሁ።

አንድ ነገር ብቻ ቀረ ትንሽ ግን - ግዛቱ የትም አልዳነም።

ሁሉም ነገር ተሳስቷል።

ቦት በብዛት ብቻዬን እንደጻፍኩ አስተውለህ ይሆናል። ስለዚህ ፣ ሁለተኛው ተሳታፊ በእድገቱ ውስጥ ተሳተፈ ፣ እና የሚከተሉት ለውጦች በኮዱ ውስጥ ታዩ ።

  • MongoDB ሁኔታን ለማከማቸት ታየ። በተመሳሳይ ጊዜ, በፕሮጀክቱ ውስጥ ያሉት ምዝግብ ማስታወሻዎች ተሰብረዋል, ምክንያቱም በሆነ ምክንያት ሞንጋ አይፈለጌ መልእክት መላክ ጀመረ እና አንዳንድ ሰዎች በቀላሉ በዓለም አቀፍ ደረጃ አጥፍቷቸዋል.
  • በቴሌግራም ውስጥ ያለው የድልድይ ተዋናይ ከማወቅ በላይ ተለወጠ እና መልእክቶችን እራሱ መተንተን ጀመረ።
  • የቻት ተዋናዮች ያለ ርህራሄ ተቆርጠዋል፣ እና በምትኩ በአንድ ተዋናይ ተተኩ ሾለ ሁሉም ቻቶች ሁሉንም መረጃዎች በአንድ ጊዜ ደበቀ። ለእያንዳንዱ ማስነጠስ ይህ ተዋናይ ችግር ውስጥ ገባ። ደህና ፣ አዎ ፣ ልክ እንደ አንድ መጣጥፍ መረጃን ሲያዘምኑ ፣ ለሁሉም የውይይት ተዋናዮች መላክ ከባድ ነው (እኛ እንደ ጎግል ነን ፣ በሚሊዮኖች የሚቆጠሩ ተጠቃሚዎች በቻቱ ውስጥ አንድ ሚሊዮን መጣጥፎችን እየጠበቁ ናቸው) ፣ ግን ቻቱ በተዘመነ ቁጥር ፣ ወደ ሞንጋ መግባት የተለመደ ነው። ብዙ ቆይቶ እንደተረዳሁት፣ የቻቶቹ የስራ አመክንዮ እንዲሁ ሙሉ በሙሉ ተቆርጧል እና በእሱ ቦታ አንድ የማይሰራ ነገር ታየ።
  • ከክፍሎቹ ዓይነት የቀረ ምንም ዱካ የለም።
  • አንዳንድ ጤናማ ያልሆነ አመክንዮ ተዋናዮቹ እርስ በርስ በመመዝገባቸው ወደ ዘር ሁኔታ ታይተዋል።
  • የመረጃ አወቃቀሮች ከዓይነት መስኮች ጋር Option[Int] እንደ -1 ባሉ አስማታዊ ነባሪ እሴቶች ወደ ኢንት ተለወጠ። በኋላ ላይ mongoDB jsonን እንደሚያከማች ተገነዘብኩ እና እዚያ ማከማቸት ምንም ችግር የለበትም Option ደህና፣ ወይም ቢያንስ -1 እንደ የለም፣ ግን በዚያን ጊዜ ይህንን አላውቅም እና “እንዲህ ነው መሆን ያለበት” ብዬ ቃሌን ወስጄ ነበር። ያንን ኮድ አልጻፍኩም, እና ለጊዜው ለመለወጥ አልተቸገርኩም.
  • ይፋዊ አይፒ አድራሻዬ የመቀየር አዝማሚያ እንዳለው እና በእያንዳንዱ ጊዜ ወደ ሞንጎ የተፈቀደላቸው ዝርዝር ውስጥ መጨመር እንዳለብኝ ተረድቻለሁ። ቦቱን በአካባቢው ጀመርኩ፣ ሞንጋ እንደ ኩባንያ በሞንጋ አገልጋዮች ላይ የሆነ ቦታ ነበር።
  • በድንገት፣ ለቴሌግራም የመለያዎች እና የመልእክት ቀረጻ መደበኛነት ጠፋ። (ሃም ፣ ለምን ይሆናል?)
  • የቦት ሁኔታ በውጫዊ የውሂብ ጎታ ውስጥ መከማቸቱን ወድጄ ነበር፣ እና እንደገና ሲጀመር ምንም እንዳልተፈጠረ መስራቱን ቀጥሏል። ሆኖም ፣ ይህ ብቸኛው ተጨማሪ ነበር።

ሁለተኛው ሰው ምንም የተለየ ቸኩሎ አልነበረም፣ እና እነዚህ ሁሉ ለውጦች በሴፕቴምበር መጀመሪያ ላይ በአንድ ትልቅ ክምር ውስጥ ታዩ። የሚያስከትለውን ውድመት መጠን ወዲያውኑ አላደነቅኩም እና የመረጃ ቋቱን ሥራ መረዳት ጀመርኩ ፣ ምክንያቱም… ከዚህ በፊት ከእነሱ ጋር ተገናኝቼ አላውቅም። በኋላ ብቻ ምን ያህል የስራ ኮድ እንደተቆረጠ እና በእሱ ቦታ ምን ያህል ሳንካዎች እንደታከሉ ገባኝ።

ሴፕቴምበር

መጀመሪያ ላይ ሞንጋን በደንብ ማወቁ ጠቃሚ ነው ብዬ አስቤ ነበር። ከዛም ከመረጃ ቋቱ ጋር መግባባትን ማደራጀት ብዙ ዘሮችን የምትሰራበት እና ስህተት የምትሰራበት ጥበብም መሆኑን ቀስ ብዬ ገባኝ። ለምሳሌ, ተጠቃሚው እንደ ሁለት መልዕክቶች ከተቀበለ /subscribe - እና ለእያንዳንዳቸው ምላሽ በሠንጠረዡ ውስጥ ግቤት እንፈጥራለን, ምክንያቱም እነዚያን መልዕክቶች በሚሰራበት ጊዜ ተጠቃሚው አልተመዘገበም. አሁን ባለው መልኩ ከሞንጋ ጋር የሚደረግ ግንኙነት በተሻለ መንገድ የተጻፈ አይደለም የሚል ጥርጣሬ አለኝ። ለምሳሌ የተጠቃሚው ቅንጅቶች በተመዘገቡበት ቅጽበት ተፈጥረዋል። ከደንበኝነት ምዝገባው እውነታ በፊት እነሱን ለመለወጥ ከሞከረ ... ቦት ምንም ምላሽ አልሰጠም, ምክንያቱም በተዋናይ ውስጥ ያለው ኮድ ለቅንብሮች የውሂብ ጎታ ውስጥ ገብቷል, አላገኘውም እና ተሰናክሏል. እንደ አስፈላጊነቱ ለምን መቼት አልፈጠርም ተብሎ ሲጠየቅ ተጠቃሚው ካልተመዘገበ መለወጥ እንደማያስፈልግ ተረዳሁ… የመልእክት ማጣሪያ ስርዓቱ በሆነ መንገድ የተደረገው ግልፅ ያልሆነ ነው ፣ እና ኮዱን በደንብ ከተመለከትኩ በኋላ እንኳን ማድረግ እችላለሁ ። መጀመሪያ ላይ በዚህ መንገድ ታስቦ እንደሆነ ወይም እዚያ ስህተት እንዳለ አልገባኝም።

ለቻት የቀረቡ መጣጥፎች ዝርዝር አልነበረም፤ ይልቁንስ እኔ ራሴ እንድጽፋቸው ተጠቆመ። ይህ በጣም አስገረመኝ - በአጠቃላይ ሁሉንም አይነት ነገሮች ወደ ፕሮጀክቱ መጎተትን አልተቃወምኩም ነገር ግን እነዚህን ነገሮች አምጥቶ ለበጠበጠ ሰው ምክንያታዊ ይሆናል. ግን አይሆንም፣ ሁለተኛው ተሳታፊ ሁሉንም ነገር የተተወ ይመስላል፣ ነገር ግን በቻቱ ውስጥ ያለው ዝርዝር መጥፎ መፍትሄ ነው ተብሎ ስለሚገመት እንደ “የተላከው ጽሑፍ ለተጠቃሚ x” ያሉ ክስተቶችን ምልክት ማድረግ አስፈላጊ ነበር ብሏል። ከዚያም ተጠቃሚው አዲስ መጣጥፎችን ለመላክ ከጠየቀ ወደ ዳታቤዝ ጥያቄ መላክ አስፈላጊ ነበር, ይህም ከተጠቃሚው ጋር የተዛመዱ ክስተቶችን ከክስተቶች ይመርጣል, እንዲሁም የአዳዲስ መጣጥፎችን ዝርዝር ያገኛል, ያጣራል, ወደ ተጠቃሚው ይላካል. እና ስለዚህ ጉዳይ ክስተቶችን ወደ የውሂብ ጎታ መልሰው ይጣሉት።

ሁለተኛው ተሳታፊ ቦት መጣጥፎችን ከሀብር ሲቀበል እና ወደ ቴሌግራም ብቻ ሳይሆን ሲላክ ወደ አንድ ቦታ ተወስዷል።

እኔ እንደምንም ለሴፕቴምበር ሁለተኛ አጋማሽ ክስተቶችን በተለየ ምልክት መልክ ተግባራዊ አድርጌያለሁ። በጣም ጥሩ አይደለም, ነገር ግን ቢያንስ ቦት መሥራት ጀመረ እና ጽሑፎችን እንደገና መላክ ጀመረ, እና በኮዱ ውስጥ ምን እየሆነ እንዳለ ቀስ ብዬ አወቅሁ.

አሁን ወደ መጀመሪያው ተመለስ እና ማከማቻው መጀመሪያ በእኔ እንዳልተፈጠረ አስታውስ። ምን እንደዚህ ሊሄድ ይችል ነበር? የመጎተት ጥያቄዬ ተቀባይነት አላገኘም። የቀይ አንገት ኮድ እንዳለኝ ተገለጠ፣ በቡድን ውስጥ እንዴት እንደምሰራ አላውቅም፣ እና አሁን ባለው የአተገባበር ኩርባ ላይ ሳንካዎችን ማስተካከል ነበረብኝ እና ወደሚቻልበት ሁኔታ አላጣራው።

ተበሳጨሁ እና የተፈፀመውን ታሪክ እና የተጻፈውን ኮድ መጠን ተመለከትኩ። መጀመሪያ ላይ በጥሩ ሁኔታ የተፃፉ እና ከዚያም ወደ ኋላ የተሰበሩ አፍታዎችን ተመለከትኩ…

F*rk ያድርጉት

ጽሑፉን አስታወስኩት ጎግል አይደለህም።.

ያለ ትግበራ ማንም ሰው በእውነት ሀሳብ አያስፈልገውም ብዬ አሰብኩ። በአንድ ኮምፒዩተር ላይ እንደ ቀላል የጃቫ ፕሮግራም በአንድ ነጠላ ኮፒ የሚሰራ የሚሰራ ቦት እንዲኖረኝ እፈልጋለሁ ብዬ አሰብኩ። ቀደም ሲል እንደዚህ ያሉ ቦቶችን ስለጻፍኩ የእኔ ቦት እንደገና ሳይጀመር ለወራት እንደሚሰራ አውቃለሁ። በድንገት ወድቆ ለተጠቃሚው ሌላ ጽሑፍ ካልተላከ ሰማዩ መሬት ላይ አይወድቅም እና ምንም አስከፊ ነገር አይከሰትም.

ኮዱ በቀላሉ የማይሰራ ከሆነ ወይም ጠማማ የሚሰራ ከሆነ Docker፣ mongoDB እና ሌሎች የካርጎ አምልኮ “ከባድ” ሶፍትዌር ለምን እፈልጋለሁ?

ፕሮጀክቱን ሹካ አደረግሁ እና የፈለግኩትን ሁሉ አደረግሁ።

ቴሌግራም ቦት ለግል የተበጁ መጣጥፎች ከሀብር

በዚያው ሰዓት አካባቢ ሥራ ቀይሬ ነፃ ጊዜ በጣም እጦት ሆንኩ። ጠዋት ላይ በባቡር ውስጥ ከእንቅልፌ ነቃሁ፣ ምሽት ላይ ዘግይቼ ተመለስኩ እና ምንም ማድረግ አልፈልግም። ለተወሰነ ጊዜ ምንም ነገር አላደረኩም, ከዚያም ቦቱን ለመጨረስ ያለው ፍላጎት በረታብኝ, እና ጠዋት ወደ ሥራ እየነዳሁ እያለ ኮዱን ቀስ ብዬ መፃፍ ጀመርኩ. ፍሬያማ ነበር አልልም፡ በሚንቀጠቀጥ ባቡር ላይ ተቀምጦ ላፕቶፕ ጭንዎ ላይ ተቀምጦ ከስልክዎ ላይ የተደራረበ ቁልል መመልከት በጣም ምቹ አይደለም። ሆኖም ኮድ በመጻፍ ያሳለፈው ጊዜ ሙሉ በሙሉ ሳይታወቅ በረረ እና ፕሮጀክቱ ቀስ በቀስ ወደ የስራ ሁኔታ መሄድ ጀመረ።

በአእምሮዬ ጀርባ የሆነ ቦታ mongoDB ን ለመጠቀም የሚፈልግ የጥርጣሬ ትል ነበረ፣ ነገር ግን ከ"አስተማማኝ" የግዛት ማከማቻ ጥቅሞች በተጨማሪ የሚታዩ ጉዳቶች እንዳሉ አስቤ ነበር።

  • የመረጃ ቋቱ ሌላ የውድቀት ነጥብ ይሆናል።
  • ኮዱ ይበልጥ ውስብስብ እየሆነ መጥቷል፣ እና እሱን ለመፃፍ ብዙ ጊዜ ይወስድብኛል።
  • ኮዱ ቀርፋፋ እና ቀልጣፋ አይሆንም፤ በማህደረ ትውስታ ውስጥ ያለውን ነገር ከመቀየር ይልቅ ለውጦቹ ወደ ዳታቤዝ ይላካሉ እና አስፈላጊም ከሆነ ወደ ኋላ ይጎተታሉ።
  • በተለየ ሰንጠረዥ ውስጥ በክስተቶች የማከማቻ አይነት ላይ ገደቦች አሉ, ይህም ከመረጃ ቋቱ ልዩ ባህሪያት ጋር የተቆራኘ ነው.
  • የሞንጋ የሙከራ ስሪት አንዳንድ ገደቦች አሉት፣ እና ወደ እነሱ ከገቡ፣ በአንድ ነገር ላይ ሞንጋን ማስጀመር እና ማዋቀር ይኖርብዎታል።

ሞንጋውን ቆርጬዋለሁ, አሁን የ bot's ሁኔታ በቀላሉ በፕሮግራሙ ማህደረ ትውስታ ውስጥ ተከማችቷል እና ከጊዜ ወደ ጊዜ በ json መልክ ፋይል ውስጥ ይቀመጣል. ምናልባት በአስተያየቶቹ ውስጥ እኔ ተሳስቻለሁ ፣ የውሂብ ጎታው ጥቅም ላይ መዋል ያለበት እዚህ ነው ፣ ወዘተ ብለው ይጽፋሉ ። ግን ይህ የእኔ ፕሮጀክት ነው, ከፋይሉ ጋር ያለው አቀራረብ በተቻለ መጠን ቀላል እና ግልጽ በሆነ መንገድ ይሰራል.

እንደ -1 ያሉ አስማታዊ እሴቶችን ጣለው እና የተለመዱትን መለሱ Option፣ የተላኩ መጣጥፎች ከውይይት መረጃ ጋር ወደ ዕቃው የተላኩ የሃሽ ጠረጴዛ ማከማቻ ታክሏል። ሁሉንም ነገር ላለማከማቸት ከአምስት ቀናት በላይ ስለቆዩ ጽሑፎች መረጃ መሰረዝ ታክሏል። ምዝግብ ማስታወሻን ወደ ሥራ ሁኔታ አመጣሁ - ምዝግብ ማስታወሻዎች በፋይሉ እና በኮንሶሉ ላይ በተመጣጣኝ መጠን ተጽፈዋል። እንደ ሁኔታን ማስቀመጥ ወይም እንደ የተጠቃሚዎች እና ጽሑፎች ብዛት ያሉ ስታቲስቲክስን ማግኘት ያሉ ብዙ የአስተዳዳሪ ትዕዛዞችን ታክሏል።

የተስተካከሉ ጥቃቅን ነገሮች፡ ለምሳሌ ለጽሁፎች የተጠቃሚውን ማጣሪያ በሚያልፉበት ጊዜ የእይታዎች፣ የተወደዱ፣ የማይወዱ እና አስተያየቶች ብዛት አሁን ተጠቁሟል። በአጠቃላይ, ምን ያህል ጥቃቅን ነገሮች መስተካከል እንዳለባቸው የሚያስገርም ነው. ዝርዝሩን አስቀምጫለሁ, እዚያ ያሉትን ሁሉንም "ህገ-ወጥ ድርጊቶች" አስተውዬ እና በተቻለ መጠን አስተካክላቸው.

ለምሳሌ፣ ሁሉንም ቅንጅቶች በአንድ መልእክት ውስጥ በቀጥታ የማዘጋጀት ችሎታ አክያለሁ፡-

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

እና ሌላ ቡድን /settings በትክክል በዚህ ቅጽ ውስጥ ያሳያቸዋል ፣ ጽሑፉን ከእሱ መውሰድ እና ሁሉንም መቼቶች ለጓደኛ መላክ ይችላሉ።
ትንሽ ነገር ይመስላል, ግን በደርዘን የሚቆጠሩ ተመሳሳይ ጥቃቅን ነገሮች አሉ.

በቀላል መስመራዊ ሞዴል መልክ የተተገበረ መጣጥፎችን ማጣራት - ተጠቃሚው ለደራሲዎች እና መለያዎች ተጨማሪ ደረጃን እንዲሁም የመነሻ እሴት ማዘጋጀት ይችላል። የጸሐፊው ደረጃ ድምር፣ የመለያዎች አማካኝ ደረጃ እና የጽሁፉ ትክክለኛ ደረጃ ከመነሻ እሴቱ የሚበልጥ ከሆነ ጽሑፉ ለተጠቃሚው ይታያል። ወይ ቦት መጣጥፎችን በትእዛዙ/አዲስ መጠየቅ ወይም ለቦቱ ደንበኝነት መመዝገብ ይችላሉ እና በማንኛውም ሰዓት ጽሁፎችን በግል መልእክት ይልካል።

በአጠቃላይ ለእያንዳንዱ መጣጥፍ ተጨማሪ ባህሪያትን (ማዕከሎች፣ የአስተያየቶች ብዛት፣ ዕልባቶች፣ የደረጃ ለውጦች ተለዋዋጭነት፣ የጽሁፍ መጠን፣ በአንቀጹ ውስጥ ያሉ ምስሎች እና ኮድ፣ ቁልፍ ቃላት) ለማውጣት እና ለተጠቃሚው ok/ ለማሳየት ሀሳብ ነበረኝ። አይደለም ok በእያንዳንዱ መጣጥፍ ስር ድምጽ መስጠት እና ለእያንዳንዱ ተጠቃሚ ሞዴል ማሰልጠን, ነገር ግን እኔ በጣም ሰነፍ ነበር.

በተጨማሪም የሥራው አመክንዮ በጣም ግልጽ አይሆንም. አሁን እኔ እጄ የ +9000 ደረጃን ለታካሚ ዜሮ ማቀናበር እችላለሁ እና በ +20 የመጀመሪያ ደረጃ ደረጃ ሁሉንም ጽሑፎቹን ለመቀበል ዋስትና እሰጣለሁ (በእርግጥ ፣ ለአንዳንድ መለያዎች -100500 ካላስቀመጥኩ በቀር)።

የመጨረሻው ሥነ ሕንፃ በጣም ቀላል ሆነ-

  1. የሁሉንም ውይይቶች እና መጣጥፎች ሁኔታ የሚያከማች ተዋናይ። ሁኔታውን በዲስክ ላይ ካለው ፋይል ይጭናል እና ከጊዜ ወደ ጊዜ በእያንዳንዱ ጊዜ ወደ አዲስ ፋይል ያስቀምጣል።
  2. አርኤስኤስ ምግብን አልፎ አልፎ የሚጎበኝ፣ ስለ አዳዲስ መጣጥፎች የሚማር፣ ማገናኛዎችን የሚመለከት፣ የሚተነተን እና እነዚህን መጣጥፎች ለመጀመሪያው ተዋናይ የሚልክ ተዋናይ ነው። በተጨማሪም, አንዳንድ ጊዜ ከመጀመሪያው ተዋናይ የጽሁፎችን ዝርዝር ይጠይቃል, ከሶስት ቀናት በላይ ያልሞሉትን ይመርጣል, ግን ለረጅም ጊዜ ያልተዘመኑትን ይመርጣል እና ያዘምናል.
  3. ከቴሌግራም ጋር የሚገናኝ ተዋናይ። አሁንም መልእክቱን ሙሉ በሙሉ መተንተን ወደዚህ አመጣሁ። በሰላማዊ መንገድ፣ ለሁለት መክፈል እፈልጋለሁ - አንዱ ገቢ መልዕክቶችን እንዲተነተን፣ ሁለተኛው ደግሞ ያልተላኩ መልዕክቶችን እንደገና መላክን የመሳሰሉ የትራንስፖርት ችግሮችን ይመለከታል። አሁን እንደገና መላክ የለም, እና በስህተት ምክንያት ያልደረሰው መልእክት በቀላሉ ይጠፋል (በምዝግብ ማስታወሻዎች ውስጥ ካልተጠቀሰ በስተቀር), ግን ይህ እስካሁን ምንም ችግር አላመጣም. ምናልባት ብዙ ሰዎች ለቦቱ ከተመዘገቡ እና መልዕክቶችን ለመላክ ገደብ ላይ ከደረስኩ ችግሮች ሊፈጠሩ ይችላሉ).

እኔ የወደድኩት ለአክካ ምስጋና ይግባውና የተዋንያን 2 እና 3 መውደቅ በአጠቃላይ የቦት አፈጻጸም ላይ ተጽእኖ አያሳድርም። ምናልባት አንዳንድ መጣጥፎች በሰዓቱ አልተዘመኑም ወይም አንዳንድ መልዕክቶች ወደ ቴሌግራም አይደርሱም ፣ ግን መለያው ተዋናዩን እንደገና ያስጀምረዋል እና ሁሉም ነገር መስራቱን ይቀጥላል። ጽሑፉ ለተጠቃሚው የሚታየውን መረጃ የማስቀመጥ የቴሌግራም ተዋናይ መልእክቱን በተሳካ ሁኔታ ማድረሱን ሲመልስ ብቻ ነው። የሚያስፈራራኝ በጣም መጥፎው ነገር መልእክቱን ብዙ ጊዜ መላክ ነው (ከተላለፈ ግን ማረጋገጫው በሆነ መንገድ ጠፍቷል)። በመርህ ደረጃ ፣ የመጀመሪያው ተዋናይ ግዛቱን በራሱ ውስጥ ካላከማች ፣ ግን ከአንዳንድ የውሂብ ጎታ ጋር ከተገናኘ ፣ እሱ በማይታወቅ ሁኔታ ወድቆ ወደ ሕይወት ሊመለስ ይችላል። የተዋንያንን ሁኔታ ወደነበረበት ለመመለስ Akka ጽናት መሞከርም እችል ነበር፣ ነገር ግን አሁን ያለው ትግበራ በቀላልነቱ ይስማማኛል። የእኔ ኮድ ብዙ ጊዜ የሚበላሽ አይደለም - በተቃራኒው፣ የማይቻል ለማድረግ ብዙ ጥረት አድርጌያለሁ። ግን መጥፎ ነገር ይከሰታል ፣ እና ፕሮግራሙን ወደ ገለልተኛ ቁርጥራጮች - ተዋናዮች የመከፋፈል ችሎታ ለእኔ በጣም ምቹ እና ተግባራዊ መሰለኝ።

ክብ-ci ጨምሬ ኮዱ ከተሰበረ ወዲያውኑ ስለሱ ማወቅ ይችላሉ። ቢያንስ ኮዱ ማጠናቀር አቁሟል ማለት ነው። መጀመሪያ ላይ ትራቪስን መጨመር እፈልግ ነበር, ነገር ግን ፕሮጀክቶቼን ያለ ሹካዎች ብቻ ነው ያሳየው. በአጠቃላይ እነዚህ ሁለቱም ነገሮች በክፍት ማከማቻዎች ውስጥ በነፃነት ጥቅም ላይ ሊውሉ ይችላሉ.

ውጤቶች

ቀድሞውኑ ህዳር ነው። ቦቱ ተጽፏል፣ ላለፉት ሁለት ሳምንታት እየተጠቀምኩበት ነው እና ወድጄዋለሁ። የማሻሻያ ሀሳቦች ካሎት ይፃፉ። ገቢ መፍጠር ፋይዳው አይታየኝም - እንዲሰራ እና አስደሳች መጣጥፎችን ይላኩ።

የቦት ማገናኛ፡ https://t.me/HabraFilterBot
Github፡ https://github.com/Kright/habrahabr_reader

አነስተኛ መደምደሚያዎች;

  • አንድ ትንሽ ፕሮጀክት እንኳን ብዙ ጊዜ ሊወስድ ይችላል.
  • ጎግል አይደለህም። ድንቢጦችን ከመድፍ መተኮሱ ምንም ፋይዳ የለውም። ቀላል መፍትሔ እንዲሁ ሊሠራ ይችላል.
  • የቤት እንስሳት ፕሮጀክቶች አዳዲስ ቴክኖሎጂዎችን ለመሞከር በጣም ጥሩ ናቸው.
  • የቴሌግራም ቦቶች በቀላሉ የተፃፉ ናቸው። "የቡድን ሾል" እና የቴክኖሎጂ ሙከራዎች ባይኖሩ ኖሮ ቦት በአንድ ወይም በሁለት ሳምንት ውስጥ ይጻፍ ነበር.
  • የተዋናይ ሞዴል ከብዙ-ክር እና ስህተት-ታጋሽ ኮድ ጋር የሚስማማ አስደሳች ነገር ነው።
  • ክፍት ምንጭ ማህበረሰቡ ሹካዎችን ለምን እንደሚወድ የቀመስኩ ይመስለኛል።
  • የመረጃ ቋቶች ጥሩ ናቸው ምክንያቱም የመተግበሪያው ሁኔታ ከአሁን በኋላ በመተግበሪያ ብልሽቶች/ዳግም ማስጀመር ላይ የተመካ አይደለም፣ነገር ግን ከዳታ ቤዝ ጋር መስራት ኮዱን ያወሳስበዋል እና በውሂብ መዋቅር ላይ ገደቦችን ይጥላል።

ምንጭ: hab.com

አስተያየት ያክሉ