پشت درهای بسته

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

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

پیشتر در این نوشته دربارهٔ فلسفهٔ پشت سرور خارجی برای گنجور اشاره‌ای کرده بودم. فکرم این بوده که من و کسانی مثل من که اجباری برای استفاده از میزبانی سرورهای داخلی ندارند -درگاه پرداخت ندارند، کار تجاری نمی‌کنند و لازم نیست برای مجوزهای لازمه داخل میزبانی بشوند و …- اگر بودجه‌اش را بتوانند فراهم کنند بهتر است با انتقال میزبانی سایتهای مهم خودشان به خارج از ایران هزینهٔ قطع اینترنت را بالا ببرند.

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

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

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

بازدیدهای گنجور

بعد از راه‌اندازی راهکار دوسروره با احتساب بازدیدهای خارجی:

بازدیدهای خارجی گنجور

و بازدیدهای داخلی:

بازدیدهای داخلی گنجور

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

برنامه‌نویسی بدون اینترنت

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

آن دوران گذشته و الان همهٔ ابزارهای برنامه‌نویسی به‌روز به اینترنت وابسته هستند.

من این روزها عمدتاً در سمت سرور (backend) با NET. و در سمت کلاینت با فلاتر و گاهی با vue.js برنامه‌نویسی می‌کنم که همه برای ساخت یک برنامهٔ کامل به اینترنت نیاز دارند.

اما موضوع این روزهای من ساخت یک برنامه از اول نیست و عمدتأ نگهداری و به‌روزرسانی برنامه‌های موجود است.

به نظرم رسید با توجه به عدم دسترسی به هوش مصنوعی‌ها و جستجو و اینترنت نکته‌هایی که این روزها کارم را راه انداخته مستند کنم بلکه -خدای نکرده- بعداً باز به درد خودم یا به درد دیگران بخورد.

اولین مورد ساخت برنامه‌های وبی مبتنی بر فلاتر بدون اتکا به اینترنت جهانی است. وقتی یک برنامهٔ فلاتری مبتنی بر وب می‌سازید عمدتاً منابعی مانند اسکریپتهای اساسی (canvaskit.js) و همینطور فونتها را از روی CDNها دریافت می‌کند. برای جلوگیری از این کار اولاً تمام فونتهای مورد نیاز (به طور خاص Roboto که برای نمایش متون لاتین از آن استفاده می‌شود) را داخل pubspec.yaml بگنجانید. نکته‌ای که در مورد VS Code به آن باید توجه کنید که تغییر و ذخیرهٔ این فایل باعث تلاش برای دریافت بسته‌های مورد نیاز می‌شود. برای جلوگیری از این کار آن را خارج از VS Code ویرایش کنید و پس از باز کردن پروژه با VS Code تمایل به دریافت مجدد بسته‌ها را تأیید نکنید. سپس در هنگام ساخت نسخهٔ وب از سوییچ عدم استفاده از cdnها استفاده کنید مثل این:

flutter build web --no-pub --no-web-resources-cdn

به این ترتیب خروجی نهایی مراجعه به cdnهای جهانی نخواهد داشت. این دو آرگومان اضافه را می‌توانید در launch.json بگنجانید تا در ساخت نسخهٔ اشکالزدایی هم دچار مشکل نشوید.

launch.json

سوییچ no-pub– روی ساخت خروجی اندروید هم کار می‌کند.

روزهای انقطاع

بی‌اینترنتی خصوصاً عدم دسترسی به یوتیوب و پادکستهای روزمره باعث شده به سرگرمی‌های قدیمی برگردم.

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

مستند Wild wild country دربارهٔ دار و دستهٔ اوشو را هم دیدم و پسندیدم. دربارهٔ یک گروه شبه‌مذهبی (هر چند در اصول عقاید ضدمذهبی) و تقابل جامعهٔ مسلط (بیشتر در آمریکا و کمتر در هند) با تابوشکنی‌های آنهاست.

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

با توجه به این که حتی دیتاستترها اینترنت ندارند کم کم دارد زمان اعتبار گواهینامه‌های ssl سایتهایی که از آنها نگهداری می‌کنم تمام می‌شود. باید شروع کنم نسخه‌های http آنها را اولویت بدهم. احتمال دارد برای بعضی برنامه‌هایی که از آنها نگهداری می‌کنم و پشتشان ارتباط اینترنتی دارند مشکل پیش بیاید. باید نسخه‌های وب مبتنی بر IP با ارتباط رمزگذاری نشده از آنها درست کنم. امکان ساخت بیلد جدید از آنها (که تقریباً همه با فلاتر درست شده‌اند) به دلیل عدم دسترسی به مخازن برنامه‌نویسی که هنگام نسخه‌گذاری مورد نیاز است وجود ندارد.

گنجور را از ابتدای قطع اینترنت دیگر ندیده‌ام و نمی‌دانم که سرپاست یا نه.

حاجی جلال زمانه‌ات را بشناس!

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

امروز خبری را در کانال تلگرام بی‌بی‌سی فارسی دیدم (اینجا):

یک خرگوش طلای ۱۸ عیار که در دهه ۱۹۸۰ موضوع یک شکار گنج معروف بود، در حراجی سادبیز با قیمت بیش از ۸۲ هزار پوند فروخته شد.

این جواهر را کیت ویلیامز، هنرمند بریتانیایی، در سال ۱۹۷۹ در پارک امپت‌هیل دفن کرد و کتابی پر از معما به نام «ماسکرید» منتشر کرد که سرنخ‌های محل دفن را در خود داشت و شکارچیان گنج را از سراسر جهان جذب کرد. 

یک شرکت هواپیمایی که در دو سوی اقیانوس اطلس پرواز داشت، حتی بلیت‌هایی برای «تورهای ۱۰ روزه شکار گنج ماسکرید» می‌فروخت که در آن به مسافران بیل و نقشه بریتانیا داده می‌شد.
ارزش این جواهر دست‌ساز در آن زمان ۵ هزار پوند بود. این گنج در سال ۱۹۸۲ توسط مردی به نام دوگالد تامپسون پیدا شد. این جواهر داخل یک صندوقچه سفالی در پارک امپت‌هیل دفن شده بود و مهر و موم شده بود تا دستگاه‌های فلزیاب نتوانند آن را شناسایی کنند. 

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

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

جوشش شعر

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

سلام ای شب معصوم!

میان پنجره و دیدن
همیشه فاصله‌ایست.

چرا نگاه نکردم؟
مانند آن زمانی که مردی از کنار درختان خیس گذر میکرد …

چرا نگاه نکردم؟
انگار مادرم گریسته بود آن شب

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

در سریال مرد هزار چهره به یاد دارید که چطور یک لیست خرید مایحتاج می‌تواند در فضایی متفاوت در قالب یک شعر بدیع و ناب و استعاری ارائه شود (قسمت نهم).

نمونه خروجی‌های چنین تکنیکی را به کمک چت‌جی‌پی‌تی بخوانید:

نمونه ۱ — از کتاب Minutes to Go (اثر گیسن، باروز، بایلِس و سومِرز)

متن اصلی (انگلیسی) با بریدن و چسباندن از مقالات روزنامه‌ها ساخته شد.
ترجمهٔ آزاد فارسی:

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

دقیقه‌هایی تا رفتن، ۱۹۶۰

نمونه ۲ — از رمان The Soft Machine (ویلیام باروز)

“خون زمان در خیابان‌های سایبری جریان دارد،
و کلمات مثل حشرات کوچک در سیم‌کشی مغز می‌خزند.
هر واژه یک در است،
هر در به فاجعه‌ای دیگر باز می‌شود.”

نمونه ۳ — از The Third Mind (اثر باروز و گیسن)

“کتاب‌ها خواب می‌بینند.
گاه بیدارشان کن،
با تیغ، با قیچی، با نوار ضبط‌صوت.
از رویاهاشان چیزی تازه بساز،
چون ذهن سوم همیشه میان دو ذهن زاده می‌شود.”

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

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

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

تصویر در تصویر یوتیوب در مک

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

تصویر در تصویر یوتیوب در مک
تصویر در تصویر یوتیوب در مک

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

اما این بار با جستجویی ساده به جواب رسیدم.

برای آزاد کردن تصویر یوتیوب از فضای مرورگر کافی است روی آن دو بار کلیک راست کنید و آنجا تماشای تصویر در تصویر را انتخاب کنید.

تصویر در تصویر یوتیوب در مک
تصویر در تصویر یوتیوب در مک

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

تصویر در تصویر یوتیوب در مک

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

راهکار استارت نبودن سایت IIS

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

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

۱. گام اول آن است که پوشهٔ IIS را پیدا کنیم. خط فرمان ویندوز (cmd) را در حالت ادمینی اجرا می‌کنیم و به این پوشه می‌رویم:

cd %windir%\system32\inetsrv

۲. اگر مشکل یک Application Pool است این فرمان را اجرا می‌کنیم تا وضعیت آن را متوجه بشویم:

appcmd list apppool /name:"apppoolname" /text:autoStart

خروجی این فرمان باید true باشد اگر false بود یعنی مشکل همین است. با اجرای این فرمان آن را true می‌کنیم:

appcmd set apppool "apppoolname" /autoStart:true

۳. برای سایتها هم روند مشابه است. دریافت وضعیت:

appcmd list site /name:"sitename" /text:serverAutoStart

فعالسازی:

appcmd set site /site.name:"sitename" /serverAutoStart:true