ویکی‌پدیا:سیاست ربات‌رانی/درخواست مجوز/HujiBot/وظیفه ۱۰

HujiBot (وظیفه ۱۰) ویرایش

ربات‌ران: Huji (بحثمشارکت‌هاانتقال‌هابسته شودبسته‌شدن‌هااختیاراتآمارآمار پیشرفته)

خودکار، مدیریت‌شده یا دستی: خودکار

کد ربات: ردهٔ همسنگ جدید

جزئیات عملکرد: با استفاده از این کد ردهٔ همسنگ را به صفحه‌ها اضافه می‌کند.

تناوب اجرا: مداوم

تخمین تعداد صفحه‌هایی که ویرایش می‌شوند: بی‌انتها

گذر از الگوی {{nobots}} (بله/خیر): خیر

آیا در ویکی دیگری پرچم دارد (بله/خیر): خیر

شرح روش اجرا: صفحهٔ نظیر را در ویکی‌پدیای انگلیسی پیدا می‌کند (اگر موجود باشد). رده‌های آن صفحه را می‌گیرد و اگر آن رده‌ها معادل فارسی داشتند، این معادل‌های فارسی را به صفحهٔ اصلی در ویکی‌پدیای فارسی می‌افزاید (مگر آن که صفحهٔ اصلی از قبل در ردهٔ مذبور باشد).

بحث ویرایش

چون حدس می‌زدم که درخواست چند ویرایش آزمایشی خواهد شد، به ربات دستور دادم تمام صفحه‌هایی که به ایران پیوند دارند را بررسی کند و رده‌های همسنگ را بیفزاید. فعالیت‌های ربات را در ویژه:مشارکت‌ها/HujiBot می‌توانید مشاهده کنید. با تشکر قبلی — حجت/بحث ‏۵ نوامبر ۲۰۱۶، ساعت ۰۴:۱۸ (UTC)[پاسخ]

چون تعداد ویرایش‌ها بیشتر از آنی شد که معمولاً برای آزمایش انجام می‌دهیم متوقفش کردم. در این بین یک مشکل از ربات هم پیدا و رفع کردم (رده‌های خرد را نباید بیفزاید که در تغییر کد اصلاحش کردم. منتظر پرچم می‌مانم — حجت/بحث ‏۶ نوامبر ۲۰۱۶، ساعت ۰۰:۵۷ (UTC)[پاسخ]
@Darafsh و Ladsgroup: توجه شما را خواهانم — حجت/بحث ‏۶ نوامبر ۲۰۱۶، ساعت ۰۰:۵۷ (UTC)[پاسخ]
همانطور که در وپ:فنی نوشتم ربات رضا بارها توسط کاربران بررسی شد و باگ‌های زیادی از آن گرفته شد. الگوریتم بسیار پیچیده‌ای دارد تا خطاهایش به حداقل برسد. حواستان به آن باید باشد. :)امیرΣυζήτηση ‏۶ نوامبر ۲۰۱۶، ساعت ۱۴:۴۷ (UTC)[پاسخ]
@Ladsgroup: چشم، حواسم هست. سعی می‌کنم تا حد امکان خوبی‌های کد ربات نسل اول را در نسل دوم وارد کنم. مجوز دارم؟ — حجت/بحث ‏۶ نوامبر ۲۰۱۶، ساعت ۱۶:۲۸ (UTC)[پاسخ]
من عضو گمر نیستم متاسفانه. :)امیرΣυζήτηση ‏۶ نوامبر ۲۰۱۶، ساعت ۲۰:۳۹ (UTC)[پاسخ]
@Ladsgroup: حالا هستید!حجت/بحث ‏۱۸ نوامبر ۲۰۱۶، ساعت ۱۸:۴۸ (UTC)[پاسخ]
@Ladsgroup: پیرو ویژه:تفاوت/18643457 ممکن است مجوز بدهید تا برای آن مقاله‌های جا مانده از قبل، رباتم را برانم؟ — حجت/بحث ‏۳ ژانویهٔ ۲۰۱۷، ساعت ۱۷:۲۳ (UTC)[پاسخ]
متوجه نشدم. برای ربات رده همسنگ جدید مجوز می‌خواهید یا برای ربات بروزرسانی آمار؟ :)امیرΣυζήτηση ‏۳ ژانویهٔ ۲۰۱۷، ساعت ۱۷:۲۶ (UTC)[پاسخ]
@Ladsgroup: برای راندن ربات ردهٔ همسنگ روی آن صفحه‌هایی که در غیبت ربات رضا، دست نخورده ماندند — حجت/بحث ‏۳ ژانویهٔ ۲۰۱۷، ساعت ۱۷:۵۴ (UTC)[پاسخ]
حال که خود رضا بازگشته مدتی صبر می‌کنم تا نظرش را بدهد اگر نظری نداشت. مجوز می‌دهم. کاربر:Yamaha5 :)امیرΣυζήτηση ‏۴ ژانویهٔ ۲۰۱۷، ساعت ۰۹:۴۹ (UTC)[پاسخ]
چند روز فرصت دهید کد را بررسی می‌کنم. یاماها۵ / ب ‏۴ ژانویهٔ ۲۰۱۷، ساعت ۱۰:۰۲ (UTC)[پاسخ]
کد نکات زیادی را رعایت نکرده‌است ۱-رده پدر/مادر را تشخیص نمی‌دهد ۲-رده پنهان را هم به مقاله می‌افزاید ۳- کد به رده‌های حذف شده حساس نیست ۴- کد میان‌ویکی‌های اشتباه رده‌ها را چک نمی‌کند ۴-فضاهای نام فیلترشده توسط کد کامل نیستند و...
به نظر به جای نوشتن از نو اگر علاقه‌مند به همکاری هستید می‌توانیم کد قدیمی را به صورت بخش به بخش بازنویسی کنیمیاماها۵ / ب ‏۶ ژانویهٔ ۲۰۱۷، ساعت ۰۵:۵۸ (UTC)[پاسخ]
موافق که کد قبلی را بازنویسی کنیم. اما به چند شرط:
  1. واقعاً رویش کار کنیم نه این که پش گوش بیفتد.
  2. تمام استثناها و شرایطی که در نظر می‌گیرد (از جمله چهارتایی که بالا شمردید) مستندسازی شود
  3. کاملاً مبتنی بر API شود و از SQL استفاده نکند
  4. ماژولار شود (یعنی یک کد دیگر بتواند این کد را صدا بزند و براند
  5. ارتباطش با کد cosemtics قطع شود (اختیاری شود، اجباری نباشد که با هم رانده شوند)
  6. پارامترهای استاندارد pywikibot را بپذیرد (بشود برای یک صفحه اجرایش یا کرد، یا برای همه صفحه‌هایی که به یک صفحه پیوند دارند، یا همه صفحه‌هایی که جایی فهرست شده‌اند و الی آخر)
  7. نام همه متغیرها با چیزی معنا دارد جایگزین شود
  8. کد با PEP8 سازگار شود
  9. محلی‌سازی و بین‌المللی‌سازی شود (وابسته به ویکی‌پدیای فارسی نباشد، اگر کسی خواست بتواند در ویکی‌واژهٔ آلمانی هم اجرایش کند)
من حاضرم تک تک این‌ها را کمک کنم اما کد شما پیچیده‌تر از آن نوشته شده که خودم بتوانم تمام این‌ها را بفهمم. اگر حاضرید تمام این‌ها را انجام بدهیم، من مشکلی ندارم — حجت/بحث ‏۶ ژانویهٔ ۲۰۱۷، ساعت ۱۴:۱۹ (UTC)[پاسخ]
مگر برجام است که پیش‌شرط می‌گذارید :) روی هر کدام از پیشنهادهای شما به تنهایی می‌شود بحث کرد هر کدام منطقی بود قبول می‌کنیم هر کدام نادرست بود رد می‌کنیم. من کمک می‌کنم چون علاقه دارم کاری که چندین سال برایش زحمت کشیدیم بهتر شود.
ابتدا باید دید مشکلات کنونی کد چیست؟ آیا باگ وحشتناکی دارد؟ آيا قابلیت جدیدی مدنظرتان است؟ اگر گسترش چند خط کد اضافه نشود چه مشکلی پیش می‌آید؟
وقتی یک کد سال‌هاست ربات درست کار می‌کند و طی ۸ ماه اخیر، شبانه روز کار کرده حتی یک ویرایش هم در کد پایتون انجام نشده و گزارش باگ هم نداشته پس تغییر ساختار کنونی‌اش و زمان گذاشتن برای تغییر آن چه ارزشی دارد؟ مگر آنکه قصد گسترش عملکرد ربات را داشته باشیم و کد کنونی خوانا نباشدیاماها۵ / ب ‏۷ ژانویهٔ ۲۰۱۷، ساعت ۰۵:۵۸ (UTC)[پاسخ]
برجامتان خنده به لبم آورد!
هدف این است که کد را بتوانیم گسترش بدهم. مثلاً ماژولارش کنیم. باگ اصلی‌اش دو تاست: یکی وابستگی‌اش به یک کد دیگر (زیباسازی) است که باید اختیاری باشد نه اجباری، دومی این که پارامترهای pagegenerator پای‌ویکی‌بوت را نمی‌پذیرد (مثلاً نمی‌شود گفت برو تمام صفحه‌هایی که فلانجا لینک شده را بگیر و روی تک‌تکشان ردهٔ همسنگ اجرا کن).
خلاصه من حاضرم کد را تدریجاً از rade.py به categorize.py ببرم. اما به شرط آن که شما هم انعطاف نشان بدهید. — حجت/بحث ‏۷ ژانویهٔ ۲۰۱۷، ساعت ۰۶:۱۸ (UTC)[پاسخ]
قبلا هم گفتم با همکاری مشکلی ندارم پس با چند سوال ادامه می‌دهیم:
همین الان کد را در ربات‌های دیگر فراخوانی می‌کنم فقط کافی‌ست متغییرهایی که مورد نیازش است را با تابعش فراخوانی کنیم.
در مورد وابستگی به زیباسازی. این کار را بی‌دلیل انجام ندادم
۱-باگ‌هایی گزارش می‌شد که به دلیل وجود فاصله مجازی یا موارد مشابه مانند [ [ به جای [[ در متن کار ربات مختل می‌شد و به خطا می‌افتاد در نتیجه تمیزکاری را جزو کارهایش گذاشتم.
۲- بعد از مدتی که کد زیباسازی ویکی‌فا توسعه یافت به دلیل آنکه آن کد هم از API های مشابه رده همسنگ استفاده می‌کرد و راندنش هم خیلی برای ویکی‌فا مهم بود حتی مهمتر از زبان‌های دیگر در نتیجه برای صرفه‌جویی در منابع سیستم تصمیم گرفتم با یک تیر دو نشان زده شود و از خروجی یک API دو ربات همزمان رانده شود.
۳-متن و زبان فارسی چون فاصله مجازی و کاراکترهای اشتباه (مثلا ۶-۷ کاراکتر ی داریم) دارد میزان کثیف‌کاری متنی‌اش چند برابر انگلیسی و زبان‌های مشابه است چون در آن زبان‌‌ها راحت فاصله مجازی را حذف می‌کنند ولی در فارسی چنین نیست در نتیجه راندن ربات زیباسازی روی کل مقالات جزو واجبات است.
۴-بعضی از مقالات رده آخرین بخششان نیست که اشتباه است ولی چاره‌ای جز تمیزکاریشان وجود ندارد. مثلاً در یک مقاله {{خرد}} یا {{ناوباکس}} در پایین‌ترین بخش صفحه قرار دارد و رده جدید را که ربات می‌خواهد بیافزاید باید زیر آن قرار دهد بعد از مدتی که ربات چند بار روی یک مقاله کار کند (رده‌های جدید به مرور ترجمه و در ویکی‌انگلیسی افزوده شوند) مقاله تبدیل به اسپاگتی می‌شود که رده هر جای متن آن قرار می‌گیرد (نمونه‌اش را قبلا دیده بودم که رده در ۳ بخش متفاوت مقاله دیده می‌شد) در نتیجه لازم است از کد زیباسازی استفاده شود (که خودش برای این مرتب‌سازی‌ها از زیباسازی کور استفاده می‌کند) تا مقاله بعد از ویرایش ربات رده همسنگ نابود نشود.
استفاده از sql:
اگر دقت کنید کد برای پاسخ دادن به پارامتر خاصی از sql استفاده می‌کند که دلیلش سرعت دادن و کم کردن میزان استفاده از API است. در نتیجه وجود sql برای آن پارامتر خاص لازم و اجباری‌ست. قبلا کد sql نداشت به دلیل کندی بیش از حد مجبور شدم آن را در کد بگنجانم.
در انتها
قضیه رده همسنگ برای خیلی از زبان‌ها پاسخ نمی‌دهد مانند فرانسوی و عربی و گاهی باگ هم دارد چون انگلیسی در فعل مونث، مذکر ندارد ولی آنها دارند و گاهی همسنگ بودن برایشان مشکل‌ساز می‌شود از سویی وقتی دیگر ویکی‌ها مانند آلمانی به کل فلسفه رده همسنگ را زیر سوال می‌برند و اعتقادی به زیاد رده‌بندی کردن در ویکی‌انگلیسی ندارند پس ایجاد کد برایشان معنایی ندارد.
نتیجه:
کد برای فارسی نوشته شده است و هر ویکی‌ای که خواست با تغییر آن برای خودش بومی کند.یاماها۵ / ب ‏۷ ژانویهٔ ۲۰۱۷، ساعت ۰۶:۳۲ (UTC)[پاسخ]
پاسخ بنده:
  1. این که در برخی شرایط خاص تمیزکاری انجام دادن به همراه ردهٔ همسنگ مفید است، دلیل نمی‌شود که به صورت اجباری با هم باشند. یک پارامتر برایش می‌سازیم (اگر دوست داشتید مقدار پیش‌فرض پارامتر را چنان می‌گذارید که تمیزکاری هم بکند، اما اجازه می‌دهیم بدون تمیزکاری هم اجرا شود). در نهایت هر ربات باید مستقل از دیگری قابل استفاده باشد.
  2. دومی را هم با همان پیشنهاد من در بند ۱ حل می‌شود. اگر دوست داشته باشید، می‌توانید کماکان زیباسازی را همزمان برانید.
  3. موافقم که راندن کد زیباسازی جزو واجبات است. اما این چیزی است که نباید فقط محدود به ربات ردهٔ همسنگ باشد. همهٔ ربات‌های دیگرمان هم باید بتوانند از آن استفاده کنند. اگر کد زیباسازی به صورت یک کلاس تعریف می‌شد، بقیهٔ ربات‌ها هم به آسانی می‌توانستند از آن استفاده کنند؛ الان نمی‌توانند. آن کد هم باید بازنویسی شود تا ماژولار شود.
  4. باز با همان پاسخی که به اولی دادم حل می‌شود.
در کل، ما باید کد تمیزکاری (یا به قول شما زیباسازی) را خیلی بیشتر از آنچه الان می‌کنیم، برانیم.
تجربه‌ای که من با API دارم نشان می‌دهد که سرعتش کافی است. شاید با SQL بتوان قدری سرعت را زیاد کرد، اما یک ربات معقول نباید بیشتر از پانزده تا بیست ویرایش در دقیقه بکند و این با همان API شدنی است.
نکته‌ای که راجع به زبان‌ها گفتید هم درست است. اما دلیل نمی‌شود که ما کد را بهتر نکنیم و کار آیندگان را ساده‌تر نکنیم. — حجت/بحث ‏۷ ژانویهٔ ۲۰۱۷، ساعت ۱۹:۲۳ (UTC)[پاسخ]
گویا منظورم را درست نرساندم
۱- کد زیباسازی برای رده همسنگ واجب است اگر غیرفعال کنید چندین باگ بروز می‌کند مثلا وارد کردن رده‌‌های تکراری و موارد دیگر که دلیلش را در بالا نوشتم.
۲- همین الان تقریبا همهٔ کدهای فعال من ربات زیباسازی را به همراه دارند از خلاصه ویرایششان کاملا مشخص است. ربات نگهبان ویکی‌فا ۱۵۰۰ مقاله تازه‌ساز اخیر را اگر روز قبلش بررسی نکرده باشد، ربات زیباسازی را رویشان می‌راند.
۳-با فراخوانی تابع هم همانند کلاس می‌شود کار کرد همانطور که الان ربات رده‌همسنگ با زیباسازی کار می‌کند.
۴-درخواست sql برای یک مورد نیست. مساله: در ویکی‌انگلیسی تمام صفحاتی که در رده:فلان هستند و میان‌ویکی فارسی دارند را برایم لیست کن: این درخواست یا سوال فقط با sql انجام می‌شود و گفتم فقط برای آرگومان encat از آن استفاده می‌شود یک بار ویکی‌پدیا:درخواست‌های ربات/رده همسنگ را مطالعه کنید. ربات چندین روش دریافت دارد که sql فقط برای تهیه خوراک برای ۱-۲ مورد آنها کاربرد دارد. قبل از sql ربات تمام اعضای رده مثلا ۲۰۰ مقاله را باید تک تک بررسی می‌کرد که آیا پیوند به فارسی دارند یا نه یعنی ۲۰۰ درخواست از api ولی الان با sql تعداد مقالات به ۳ مورد تقلیل می‌یابد و ربات فقط آن سه مورد را بررسی می‌کند.یاماها۵ / ب ‏۸ ژانویهٔ ۲۰۱۷، ساعت ۰۶:۵۳ (UTC)[پاسخ]
نکته نهایی: رباتی که به صورت خودکار ۲۴ ساعته کار می‌کند باید خیلی خیلی بیشتر از کدهای عادی که یک بار اجرا می‌شوند امن باشد در نتیجه برای جلوگیری از هر گونه خرابکاری در اثر اشتباه کاربران، باید پیش از راندن ربات یا پس از راندن ربات کد زیباسازی یا مشابه آن اجرا شود. مثلا کاربر در مقاله براکت را نمی‌بندد و این باعث می‌شود ریجکس‌هایی که با دو براکت کار می‌کنند به مشکل بخورند (البته بعضی از آنها). این احتمال هم کم نیست تا جایی که قبلا بررسی کردم خطای کاربر بیش از ۲-۳ درصد است که در میزان بالای ویرایش ربات برای یک بعدازظهر می‌شود ۲۰-۳۰ باگ! مسلما چنین رباتی باید تعمیر شود هرچند که خطا از خودش نبوده.یاماها۵ / ب ‏۸ ژانویهٔ ۲۰۱۷، ساعت ۰۷:۰۴ (UTC)[پاسخ]
@Yamaha5: خوب شما به این ربات فقط از زاویهٔ یک کاربرد خاصش (اجرای ۲۴ ساعته) نگاه می‌کنید. من برایش کاربردهای موردی هم متصورم. باز هم می‌گویم می‌شود پیش‌فرض را چنان قرارداد که زیباسازی را براند؛ اما باید اجازه داد بدون آن هم کار کند — حجت/بحث ‏۸ ژانویهٔ ۲۰۱۷، ساعت ۱۵:۲۱ (UTC)[پاسخ]
@Yamaha5: عجالتاً به کد من (که در گیت‌هاب هم هست) با مسئولیت خودم مجوز می‌دهید که در صورت لزوم برانمش؟ — حجت/بحث ‏۱۳ ژانویهٔ ۲۰۱۷، ساعت ۲۲:۴۱ (UTC)[پاسخ]
الان ربات شما اگر رده فرزند در مقاله باشد رده مادر را می‌افزاید مثلا اگر رده:شیراز در مقاله باشد رده:استان فارس را می‌افزاید همچنین رده پنهان را هم می‌افزاید در بالاتر مشکلاتش را گفتم لطفاً آنها را رفع کنیدیاماها۵ / ب ‏۱۴ ژانویهٔ ۲۰۱۷، ساعت ۱۲:۰۸ (UTC)[پاسخ]
ربات مشکل دارد نمونه یاماها۵ / ب ‏۱۲ آوریل ۲۰۱۷، ساعت ۱۴:۳۴ (UTC)[پاسخ]
  درخواست پس گرفته شد — حجت/بحث ‏۱۷ مارس ۲۰۱۸، ساعت ۰۱:۴۶ (UTC)[پاسخ]

دنباله ویرایش

پیرو بحثی که در بحث ویکی‌پدیا:سیاست ربات‌رانی/درخواست مجوز/HujiBot/وظیفه ۱۰ انجام شد، به شرط برنداشتن ردهٔ مادر در زمان افزودن ردهٔ دختر، جناب کاربر:Yamaha5 گفتند   مجوز دارد. — حجت/بحث ‏۸ اکتبر ۲۰۲۱، ساعت ۱۵:۱۱ (UTC)[پاسخ]