خط سفید، روی سیاه، واه واه واه!

امروز برای دومین بار پایگاه داده‌های کنتور را نابود کردم.

مدتهاست که درگیر مشکل حجم بالای اطلاعات درج شده در این پایگاه داده‌ها به خاطر بازدیدهای بالای گنجور بودم. اتفاقی که می‌افتاد این بود که با افزایش حجم داده‌ها گزارش‌گیری در آن به مشکل برمی‌خورد. برای حل مشکل تصمیم گرفتم ریز بازدیدها را در قالب گزارشات نهایی مورد نیازم جمع‌بندی کنم و بعد ریز بازدیدها را پاک کنم. منتهی مشکل به این راحتی قابل حل نبود. گزارشگیری و حذف اطلاعات از جدولی شامل نزدیک به سی میلیون رکورد برای همین کار هم زمانبر بود. تصمیم گرفتم داده‌های قدیمی را با اجرای یک پرس‌وجوی حذف به صورت دستی حذف کنم. این هم فکر خوبی نبود و بعد از گذشت نزدیک به دو ساعت -وقتی اجرای پرس‌وجوی حذف به پایان نرسید و تلاش من برای توقف آن ناکام ماند- سرویس پایگاه داده‌ها را راه‌اندازی دوباره کردم و بعد، من ماندم و یک پایگاه داده‌های گیر کرده در وضعیت بازیابی (recovery). درد سرتان ندهم: در غیاب چت‌جی‌پی‌تی کمی با نسخهٔ خنگ آفلاین دیپ‌سیک سر و کله زدم و وقتی به نتیجه نرسیدم به امید آن که با حذف فایل لاگ (log) و بارگذاری مجدد پایگاه داده (با ساخت مجدد این فایل) وضعیت اصلاح شود فایل لاگ را پاک کردم. نتیجه آن چیزی که فکر می‌کردم نبود و سرویس پایگاه داده‌ها دیگر این فایل را گردن نگرفت. این شد که مجبور شدم پایگاه داده‌های برنامه را از نو بسازم.

در این فرایند آمارهای سایتهای خودم آنقدرها اهمیتی نداشت. اما می‌دانم کنتور کاربران دیگری داشت که آمار سایتهای خودشان را از آن می‌گرفتند. غیر از آن که آمار آنها از دست رفته، حساب کاربریشان پاک شده و کدهای رهگیری که در سایتهایشان گذاشته‌اند هم خطا می‌دهد.

این اولین بار نیست که داده‌های کنتور را خراب می‌کنم. اگر این بار هوش مصنوعی کمکی به بازگرداندنش نکرد دفعهٔ قبل عامل اصلی خرابکاری بود.

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

در هر حال از جمله دستاوردهای خرابکاری اخیر شاید آزاد شدن ۲۵۰ گیگابایت فضا روی سرور باشد.

غیر از آن متوجه شدم که باز هنگام تلاش برای حل مشکلات رهگیری آمار بازدیدکنندگان نسکبان یکی از پیشنهادهای هوش مصنوعی را بدون بررسی جایگزین کرده بودم. پیشنهاد هوش مصنوعی فقط شامل بخشهای نیازمند تغییر کد بود و اشاره کرده بود که بقیهٔ بخش‌های کد باید دست نخورده بماند و من بدون دقت پیشنهاد ناقصش را جایگزین کد کامل کرده بودم.

نکتهٔ دیگری هم فهمیدم.

من فکر می‌کردم که با قطع اینترنت و از آنجا که سروری که کنتور روی آن راه‌اندازی شده داخلی است و از روی اینترنت دیده نمی‌شود آمار گنجور باید صفر یا نزدیک به صفر باشد (خود گنجور روی اینترنت در دسترس است). از بررسی آمار قبل از حذف اطلاعات و حتی بعد از آن متوجه شدم که آمار سیم‌کارتهای سفید (آنها که هم اینترنت دارند و گنجور را می‌بینند و هم اینترانت داخلی و کنتور را می‌بینند) خیلی بیشتر از آن چیزی است که تصور می‌کردم. چون روی کنتور عملاً آمار اینهاست که ثبت می‌شود و در آن حدی که تصور می‌کردم کم نیستند (آمارهای پاک شده که تا ۳۰ روز پیشتر را هم روی رابط کاربری نشان می‌داد مشخص می‌کرد که این نیست که یک دفعه و به دلیل عرضهٔ رسمی اینترنت طبقاتی آمار اینها افزایش پیدا کرده باشد و در طول مدت این قطعیِ حالا بیش از یک ماهه اینها به اینترنت دسترسی داشتند). نکتهٔ جالبش این است که در میان این دوستان علاقمندان گنجور هم کم نیستند!

این آمار مال همان چند ساعت دیروز است که پایگاه داده‌های کنتور را از نو ساختم:

سیم‌کارت‌های سفید بازدیدکنندگان گنجور

پیشتر این رباعی را خطاب به گروهی از میان اینان ساخته بودم که اهل سیاست و صاحب مقامند و تغییرات توییتر ایلان ماسک در نمایش موقعیت صاحب حساب کاربری رسوایشان کرد:

در فنّ سیاه‌بازی این صاحب جاه

بودی تو به خود غرّه که ایلان ناگاه

از بازی روزگار کردت آگاه

خطّ تو سفید گشت و روی تو سیاه!

پی‌نوشت: آمار یک روز کامل (۱۴ فروردین):

گزارش‌های دامنه - ganjoor.net - جدول کشورهای بازدیدکننده

این یکی هم نشان می‌دهد که این بازدیدها را حدود ۱۴۰۰ سفیدخط مجزا مرتکب شده‌اند:

گزارش‌های دامنه - ganjoor.net - آمار دیروز

و یادآور می‌شود که تعداد بازدیدکنندگان گنجور منطقاً درصد کوچکی از کل صاحبان این خطها باید باشد شاید اصلاً به درصد هم نرسد.

مورد عجیب فرانسه (و نروژ و …)

در ادامهٔ کار طراحی سیستم آمارگیری از بازدید وب‌سایتها و در درگیری با چالش داده‌های جغرافیایی بازدیدکنندگان چند باری به انحاء مختلف سرکار رفتم.

از آنجا که دیپ‌سیک سرویس آنلاین رایگان و نامحدودی برای استخراج اطلاعات جغرافیایی از روی آی‌پی نمی‌شناخت به دنبال سرویس‌های آفلاین رفتم (آنها که با یک دیتابیس آفلاین کار می‌کنند).

پیشنهاد اولیهٔ دیپ‌سیک GeoLite2 از مکس‌مایند بود که مزیت مهمی هم دارد و آن ارائهٔ یک نوگت برای برنامه‌نویسان دات‌نت (من‌جمله اینجانب) بود.

همان اول کار برای نام‌نویسی در سایت مکس‌مایند و دریافت فایل دیتابیس به مشکل برخوردم (نفهمیدم مشکل از من بود یا از ایرانی بودنم بود یا از خود مکس‌مایند).

سراغ گزینهٔ دوم پیشنهادی یعنی DB-IP رفتم و تصمیم گرفتم فایل اکسل (CSV) منتشر شده توسط این سرویس را وارد دیتابیس برنامه‌ام کنم و آی‌پی‌ها را در آن بگردم.

پیاده‌سازی این روش پیچیده و سخت بود. اما در نهایت اتفاقی که افتاد این بود که نتایج تبدیل آی‌پی به کشور با استفاده از این سرویس کاملاً پرت‌وپلا بود. با وجود آن که عمدهٔ بازدیدکنندگان گنجور از ایران می‌آیند، ایران حتی در فهرست ۱۰ کشور برتر خروجی این سرویس نبود.

به گزینهٔ اول برگشتم. خوشبختانه یک سطر اطلاعات ورود به سایت مکس‌مایند را در سایت باگ‌می‌نات پیدا کردم و با همان به آنچه می‌خواستم (آخرین دیتابیس شهرهای مکس‌مایند) دست پیدا کردم.

پیاده‌سازی پیدا کردن اطلاعات جغرافیایی از روی آی‌پی در این سرویس نسبتاً آسان بود و نتایج این بار معقول و نزدیک به واقعیت بودند.

گام بعدی که رابط کاربری نمایش اطلاعات جغرافیایی بود به کمک دیپ‌سیک به سرعت به نتیجه رسید.

به مشکل عجیبی سر فرانسه برخوردم که بعداً فهمیدم که همان مشکل برای معدودی از کشورهای دیگر مثل نروژ وجود دارد. با وجود آن که تعداد قابل توجهی از بازدیدکنندگان طبق محاسبات سرویس من از فرانسه آمده بودند روی نقشه فرانسه را بدون بازدید نشان می‌داد. بعداً متوجه شدم که در داده‌های نقشه‌ها به دلیلی که دنبالش نگشتم کد ایزوی دو رقمی فرانسه را FR نزده‌اند و برای پیدا کردن کشور از روی کد ایزو در سرویسی که من از آن استفاده کرده‌ام به جای مراجعه به فیلدی به نام ISO_A2 به فیلد دیگری به نام ISO_A2_EH باید مراجعه می‌کردم (این را خودم و به کمک یار قدیمی -گوگل- فهمیدم و دیپ‌سیک از یافتن و حل مشکل عاجز ماند).

خلاصه که فعلاً چالش استخراج داده‌های جغرافیایی از روی آی‌پی حل شده به نظر می‌رسد:

توزیع جغرافیایی بازدیدهای دیروز گنجور

دیپ‌سیک: طراح وب خوش‌سلیقه

چند وقت پیش به نظرم رسید که خیلی خوب است آمار مشارکت‌های کاربران در تصحیح متون و پیشنهاد محتوای مرتبط در گنجور را منتشر کنم. بعد از این که توابع سمت سرویس را آماده کردم به نظرم رسید دیپ‌سیک را برای آماده‌سازی یک رابط کاربری ابتدایی امتحان کنم. امتحانی که علی‌رغم این که چند باری کار خودش را خراب کرد و مجبور شدم دوباره به نقطهٔ درست برش گردانم به نظرم عالی جواب داد.

تصویر صفحهٔ آمار ویرایش‌های گنجور تولید شده توسط هوش مصنوعی دیپ‌سیک

اینطوری که از روی اسامی فیلدهای توابع API خودش متوجه شد که چه عناوینی را به فارسی باید انتخاب کند و حتی خودش داوطلبانه از فونت وزیرمتن استفاده کرد، تاریخ‌ها را تشخیص داد و خودش باز بدون دخالت و خواست من تاریخ‌ها را شمسی کرد.

در نهایت البته من باید کار را در قالب همخوان با گنجور در می‌آوردم و آنجاست که در مقایسه متوجه می‌شوید چقدر رنگ‌بندی و طراحی گنجور زشت است!

بعداً یک بار تلاش کردم CSS اصلی گنجور را به انواع هوش‌مصنوعی‌ها بدهم تا ببینم خودکار چه‌کارش می‌توانند بکنند که نتیجه قابل استفاده نبود.

در همین راستا، اخیراً سرویس گوگل‌آنالیتیکس حساب‌های کاربران ایرانی را حذف کرده است. من روی تقریباً تمام سرویس‌ها و کارهایم از آن استفاده می‌کردم، هر چند اخیراً توان درک اعداد و ارقام آن را از دست داده بودم و هر کس به طور جدی جویای آماری از گنجور می‌شد و به نظرم آدم موجهی می‌رسید دسترسی می‌دادم تا خودش برود نگاه کند ببیند سر در می‌آورد یا نه. کاربرد اصلی آن برای من این بود که بفهمم وضعیت گنجور با توجه به متوسط بازدیدها طبیعی است یا نه و احتمالاً مشکلی برای دسترسی به آن در داخل ایران -عموماً- پیش آمده یا خیر.

این داستان حذف حساب گوگل‌آنالیتیکس باعث شد که به این فکر کنم که حالا که هوش‌مصنوعی‌ها کمک بزرگی در تولید محصولات نرم‌افزاری هستند و زحمتش کمتر شده روی طراحی یک سیستم آمارگیری از بازدیدهای وب‌سایتها به طور خاص با هدف استفاده در گنجور وقت بگذارم. نسخهٔ اولیه‌ای از توابع سرویس آماده شده و یک دامنه هم برای آن گرفتم و خوشبختانه با توجه به بازدید زیاد گنجور خیلی زود توانستم نسخهٔ اولیه را با بازدیدهای واقعی آزمایش کنم. برای طراحی یک رابط کاربری اولیه با توجه به تجربهٔ موفق پیشین باز سراغ دیپ‌سیک رفتم و به نظرم این بار هم خیلی خوب از عهدهٔ کار برآمده.

آمار بازدید ganjoor.net

برای ادامهٔ کار با چالش‌هایی مواجه شده‌ام. اولاً در استخراج اطلاعات جغرافیایی از روی آی‌پی روی سرویس‌های رایگان پیشنهادی هوش مصنوعی به سرعت به مشکل محدودیت تعداد فراخوانی برمی‌خورم. باید بگردم و ببینم می‌توانم سرویس رایگان نامحدود یا راهکار آفلاینی را پیدا کنم یا خیر. ثانیاً حجم پایگاه داده‌های برنامه با توجه به حجم بالای مراجعات گنجور به سرعت زیاد می‌شود. برای این موضوع تصمیم گرفته‌ام بخش‌هایی از اطلاعات قابل جمع‌آوری را ذخیره نکنم یا راهکارهایی برای گروه‌بندی اطلاعات و حذف جزئیات پیاده‌سازی کنم.

فعلاً این برنامه در دست توسعه است و به صورت عمومی امکان نام‌نویسی و استفاده از آن وجود ندارد.

جورچین فانوس خیال

این فانوس خیال را که درست کردم به نظرم رسید که می‌توانم با زحمت کمی ازروی کد پیشتر نوشته‌شدهٔ کاشی‌چینی یک بازی جورچین آنلاین بر اساس آن درست کنم.

برای کاشی‌چینی من باید می‌گشتم، عکس‌ها را پیدا می‌کردم، با اندازهٔ خاصی می‌بریدم و داخل برنامه می‌گذاشتم. اینجا یک مجموعهٔ پانزده‌هزارتایی بدون نیاز به پیدا کردن و بریدن داشتم.

همانطور که فکر می‌کردم کار سختی نبود و با کپی کدها در یک پروژهٔ جدید و تغییر ارجاعات عکس‌ها از تصاویر تعبیه‌شده داخل برنامه به نشانی‌های اینترنتی کار آماده شد. اسمش را هم فانوس خیال گذاشتم.

مشکلی که داشتم اندازهٔ مربعی عکس‌ها بود که آن هم -خداخواسته- با یک آگهی به سایر برنامه‌ها و کارهایم پر شد و در عوض برنامه را به رایگان منتشر کردم. قابلیتی هم در آن گذاشتم -و بعداً آن را به کاشی‌چینی هم اضافه کردم- که کسی که علاقه به بازی کردن ندارد و فقط می‌خواهد از آن به عنوان یک گالری برای مرور تصاویر استفاده کند بتواند با فعال کردن یک گزینه در پیکربندی -کم و بیش- به آن برسد.

چون تصاویر را هوش مصنوعی تولید کرده شاید آن کارکردی که کاشی‌چینی برای کمک به دقت بیشتر در جزئیات تصاویر را در هنگام استفاده به عنوان یک پازل دارد نداشته باشد ولی با توجه به تعداد بی‌شمار تصاویر یک سرگرمی تمام‌نشدنی برای کسی است که اینجور پازل‌ها را دوست دارد.

هوش مصنوعی بازی

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

شاهنامه‌خوانی را به دلیل سرگرمی دیگری که تصادفاً به آن برخوردم رها کردم. داشتم در لینکدین پرسهٔ بیهوده می‌زدم که فراخوان شرکتی را دیدم که خواسته بود پروژه‌های بازمتن و شرکتها از اعتبار رایگان اعطاییشان برای استفاده از سرویس‌های هوش مصنوعی استفاده کنند. اول فکر کردم که خوب با آن چه کنم؟ بعد خاطرم آمد که چقدر در همان جریان شاهنامه‌خوانی، کار سختی است برگرداندن شعر به نثر سادهٔ امروزی و فکر کردم اگر یک پیش‌نویس اولیه -هر چند نادقیق و نادرست- آماده شده باشد کار چقدر راحت‌تر خواهد شد.

برای آن اعتبار داوطلب شدم و یکی دو روز بعد اعتبار را دادند. امتحان کردم و دیدم خروجی‌های هوش مصنوعی برای خلاصه کردن شعرها و همینطور برگردان ابیات به نثر ساده بد نیستند. این شد که به جای شاهنامه‌خوانی درگیر استفاده از هوش مصنوعی برای کارهای مختلف در گنجور شدم. خلاصه‌اش اینجا هست.

هوش مصنوعی و تعبیراتش از شعرها، خوب، همه جا خوب نیست. خیلی جاها به طنز شبیه شده و باعث خنده.

کاربران گنجور این چند وقت خیلی به آن اعتراض کرده‌اند. این اولین بار نیست که به گنجور اعتراض می‌کنند. آن اوایل به این که چرا مردم پای شعرها نظر می نویسند اعتراض می‌کردند. این اعتراض نسبتاً پرتکرار بود. به چیزهای دیگر هم اعتراض کرده‌اند. به این که چرا شعرا عکس دارند! به این که چرا زیر شعرها ترانه‌هایی هست که خوانندگان زن آنها را خوانده‌اند. به این که چرا از شاعران صوفی شعر در گنجور هست (من مطمئن نیستم معترض ما راجع به آمار صوفی‌های شاعر اطلاع درستی داشته باشد). به این خلاصه‌ها و متن‌های تولیدی هوش مصنوعی هم اعتراض کرده‌اند. البته بیشترشان مشکلشان آن است که فکر می‌کنند حاشیه‌های شعرها حذف شده و این جایگزین آن شده. در هر حال منطق من گوش کردن به حرف دیگران نیست، لجاجت و حماقت خاصی در من نهادینه شده که به خاطر ‌آن گوشم بدهکار آرای مردمی نیست! ایده‌ام این است که کاربر اصلی گنجور خودمم و این خود منم که باید از آن راضی باشم. در این مورد هم در اصل، من فکر می‌کنم که بودن این متون باعث می‌شود کاربران تحریک شوند که آنها را درست کنند. نبودنشان محرک هیچ چیز نیست. «من خوبم!»، انشاالله که خیر باشد!

برگردیم به مقدمهٔ ماجرا: من هوش مصنوعی را می‌خواستم که کار شاهنامه‌خوانیم را آسان کند و بعد شاهنامه‌خوانی را به خاطر هوش مصنوعی رها کردم! شد غلامی که آب جوی آرد، آب جوی آمد و غلام ببرد!

تصاویر تولید شده توسط هوش مصنوعی برای جورچین ایرانی

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

ببینید: