در ایدهپردازی برای داستان گنجنامهٔ حاجی جلال در توجیه آن که کسی گنجی را در خانهاش پنهان کند به این فکر کرده بودم که بخواهد فرزندانش با انگیزهٔ رمزگشایی شعر گنج اهل ادب و فرهنگ بار بیایند.
امروز خبری را در کانال تلگرام بیبیسی فارسی دیدم (اینجا):
ایدهای هوشمندانه برای فروش یک کتاب! این گنج که پیدا شده اما طبق خبر دیگری در سایت بیبیسی این ایده مقلدانی هم داشته که گنجهای آنها هنوز پیدا نشده (داستان کامل آن کتاب را در این صفحهٔ ویکیپدیا بخوانید).
چند وقت پیش جایی -که حالا پیدایش نمیکنم- در مورد این خواندم که یک فرد یا گروه ترانهساز (خارجی) معروف، برای ساختن ترانههایشان از تکنیک قطع و برش استفاده میکردهاند به این صورت که خطوط بریده شدهٔ متون روزنامهها را به شکل تصادفی کنار هم میگذاشتهاند تا آن که متن حاصل فرم شعرگونه پیدا کند. چیزی شبیه خطوط شعر نو که در بسیاری موارد بدون هیچ زمینهٔ قبلی (انگارکن که ما مقدمهٔ متن را نخواندهایم) با یک جملهٔ بیربط و روی هوا شروع میشوند و در ادامه باز با جملاتی بیربط ما را در فضای شعری قرار میدهند:
سلام ای شب معصوم!
میان پنجره و دیدن همیشه فاصلهایست.
چرا نگاه نکردم؟ مانند آن زمانی که مردی از کنار درختان خیس گذر میکرد …
نه این که منظورم این باشد که فروغ از این تکنیک استفاده میکرده، خواستم مثال آورده باشم برای همان خطوط شعر نو که گفتم.
در سریال مرد هزار چهره به یاد دارید که چطور یک لیست خرید مایحتاج میتواند در فضایی متفاوت در قالب یک شعر بدیع و ناب و استعاری ارائه شود (قسمت نهم).
نمونه خروجیهای چنین تکنیکی را به کمک چتجیپیتی بخوانید:
نمونه ۱ — از کتاب Minutes to Go (اثر گیسن، باروز، بایلِس و سومِرز)
متن اصلی (انگلیسی) با بریدن و چسباندن از مقالات روزنامهها ساخته شد. ترجمهٔ آزاد فارسی:
متن بریده و چسباندهشده: “ساعتها درون دیوارها نفس میکشند. خطوط روزنامهها صدای بمبها را میبلعند. نامها به عقب میچرخند، جهان بر میگردد به زبانهای بیصاحب.”
— دقیقههایی تا رفتن، ۱۹۶۰
نمونه ۲ — از رمان The Soft Machine (ویلیام باروز)
“خون زمان در خیابانهای سایبری جریان دارد، و کلمات مثل حشرات کوچک در سیمکشی مغز میخزند. هر واژه یک در است، هر در به فاجعهای دیگر باز میشود.”
نمونه ۳ — از The Third Mind (اثر باروز و گیسن)
“کتابها خواب میبینند. گاه بیدارشان کن، با تیغ، با قیچی، با نوار ضبطصوت. از رویاهاشان چیزی تازه بساز، چون ذهن سوم همیشه میان دو ذهن زاده میشود.”
به نظرم نکته اینجاست که ابزارهای کمکی تولید شعر جدید نیستند. قافیه در شعر و متون مصنوع و وزن سنتی و نیمایی علیرغم آن که محدودکنندهٔ زبان و کلمات قابل استفاده برای شاعر هستند به او برای ساخت شعر کمک میکنند. و در ارزیابی قدرت نظم شاعران میتوانیم به این توجه کنیم که مثلاً در قالبی مثل مثنوی آیا مصرع دوم هر بیت از نظر معنایی زاید نیست و فقط برای تکمیل مصرع اول و بر اساس قافیهٔ آن سروده نشده؟ آیا در قالبی مثل رباعی مصرعهای قبل از مصرع اصلی (به فرض آن که مصرع چهارم شاهمصرع رباعی باشد) فقط برای تکمیل آن سروده نشدهاند و در توضیح معنایی میتوان یکی دو تا از آنها را حذف کرد یا نه. و در قالبهای دیگر به همین صورت: شاهبیتها و شاهمصرعها را اگر جدا کنیم آیا این نیست که باقی مصاریع و ابیات برای تکمیل فرم و قالب شعری اضافه شدهاند؟ وقتی شاعری این آزمون را با موفقیت از سر میگذارند تازه بر قدرت نظم او صحه گذاشتهایم. یعنی فهمیدهایم که بیشتر مصاریع و ابیات او به طور مستقل ارزش زبانی دارند. در گام بعدی میتوانیم زبان شعری او را ارزیابی کنیم که آیا شعرگونگی زبان او، آن بخشی که ذهن از آن لذت میبرد هم قوی و متمایز است؟ بدیهی است که شاعری میتواند زبان و نظم ضعیفی داشته باشد اما زبان شعری متمایز و قابل قبولی داشته باشد.
برگردیم به تکنیک قطع و برش. چیزی که خروجیهای این تکنیک را زیبا و واجد زبان شعری میکند -به نظر من- این است که ذهن بین این جملات بیربط ارتباط میسازد و جالبیش این است که ذهنهای آدمهای متفاوت ارتباطات شبیه به همی برای آنها میسازد. به نوعی این ارتباطات را به شکل یکسان کشف میکند و از همین کشف لذت میبرد. شاید به نوعی شبیه حدس کلمهٔ قافیهٔ بیت بعدی یک شعر کهن که باز در آن حس کشف به ذهن مخاطب لذت میدهد.
در گذشتهٔ ما، کلماتی که میتوانستند با هم قافیه شوند در گام اول و کلماتی که میتوانستند در فاصلهٔ شروع و پایان یک مصرع بنشینند به نوعی بریدههای روزنامه هستند و حالا جاهایی که اسیر تکرار شدهایم استفاده از تکنیکهایی مثل قطع و برش در ترکیب با تکنیکهای قدیمیتر شاید کمک کنند تا بتوانیم از تکرار گذشتگان و گذشتهها خلاص شویم و مرزهای هنر سرودن را گستردهتر کنیم.
من تقریباً به این نتیجه رسیده بودم که خاطرهای که از تصویر در تصویر یوتیوب روی ویندوز داشتم توهمی بیش نبوده! چون توی مکاوس هر وقت روی علامت تصویر در تصویر یوتیوب میزدم به جای این که ویدیوی در حال پخش، آزادنه روی کل فضای مک و خارج از مرورگر قابل جابجا شدن باشد و بشود حتی در حین کار دیگر، آن را گوشهٔ صفحه قابل مشاهده داشت فقط در فضای خود صفحهٔ جاری قابل مشاهده بود.
یک بار هم به طور جدی دنبالش افتادم که با استفاده از چتجیپیتی یا موتور هوش مصنوعی دیگر راه حل انتقال آزادانهٔ تصویر کوچک را پیدا کردم نشد و هوش مصنوعی قانعم کرد که آنچه دنبالش هستم ممکن نیست!
از آنجا که دیپسیک سرویس آنلاین رایگان و نامحدودی برای استخراج اطلاعات جغرافیایی از روی آیپی نمیشناخت به دنبال سرویسهای آفلاین رفتم (آنها که با یک دیتابیس آفلاین کار میکنند).
همان اول کار برای نامنویسی در سایت مکسمایند و دریافت فایل دیتابیس به مشکل برخوردم (نفهمیدم مشکل از من بود یا از ایرانی بودنم بود یا از خود مکسمایند).
سراغ گزینهٔ دوم پیشنهادی یعنی DB-IP رفتم و تصمیم گرفتم فایل اکسل (CSV) منتشر شده توسط این سرویس را وارد دیتابیس برنامهام کنم و آیپیها را در آن بگردم.
پیادهسازی این روش پیچیده و سخت بود. اما در نهایت اتفاقی که افتاد این بود که نتایج تبدیل آیپی به کشور با استفاده از این سرویس کاملاً پرتوپلا بود. با وجود آن که عمدهٔ بازدیدکنندگان گنجور از ایران میآیند، ایران حتی در فهرست ۱۰ کشور برتر خروجی این سرویس نبود.
به گزینهٔ اول برگشتم. خوشبختانه یک سطر اطلاعات ورود به سایت مکسمایند را در سایت باگمینات پیدا کردم و با همان به آنچه میخواستم (آخرین دیتابیس شهرهای مکسمایند) دست پیدا کردم.
پیادهسازی پیدا کردن اطلاعات جغرافیایی از روی آیپی در این سرویس نسبتاً آسان بود و نتایج این بار معقول و نزدیک به واقعیت بودند.
گام بعدی که رابط کاربری نمایش اطلاعات جغرافیایی بود به کمک دیپسیک به سرعت به نتیجه رسید.
به مشکل عجیبی سر فرانسه برخوردم که بعداً فهمیدم که همان مشکل برای معدودی از کشورهای دیگر مثل نروژ وجود دارد. با وجود آن که تعداد قابل توجهی از بازدیدکنندگان طبق محاسبات سرویس من از فرانسه آمده بودند روی نقشه فرانسه را بدون بازدید نشان میداد. بعداً متوجه شدم که در دادههای نقشهها به دلیلی که دنبالش نگشتم کد ایزوی دو رقمی فرانسه را FR نزدهاند و برای پیدا کردن کشور از روی کد ایزو در سرویسی که من از آن استفاده کردهام به جای مراجعه به فیلدی به نام ISO_A2 به فیلد دیگری به نام ISO_A2_EH باید مراجعه میکردم (این را خودم و به کمک یار قدیمی -گوگل- فهمیدم و دیپسیک از یافتن و حل مشکل عاجز ماند).
خلاصه که فعلاً چالش استخراج دادههای جغرافیایی از روی آیپی حل شده به نظر میرسد:
چند وقت پیش به نظرم رسید که خیلی خوب است آمار مشارکتهای کاربران در تصحیح متون و پیشنهاد محتوای مرتبط در گنجور را منتشر کنم. بعد از این که توابع سمت سرویس را آماده کردم به نظرم رسید دیپسیک را برای آمادهسازی یک رابط کاربری ابتدایی امتحان کنم. امتحانی که علیرغم این که چند باری کار خودش را خراب کرد و مجبور شدم دوباره به نقطهٔ درست برش گردانم به نظرم عالی جواب داد.
اینطوری که از روی اسامی فیلدهای توابع API خودش متوجه شد که چه عناوینی را به فارسی باید انتخاب کند و حتی خودش داوطلبانه از فونت وزیرمتن استفاده کرد، تاریخها را تشخیص داد و خودش باز بدون دخالت و خواست من تاریخها را شمسی کرد.
در نهایت البته من باید کار را در قالب همخوان با گنجور در میآوردم و آنجاست که در مقایسه متوجه میشوید چقدر رنگبندی و طراحی گنجور زشت است!
بعداً یک بار تلاش کردم CSS اصلی گنجور را به انواع هوشمصنوعیها بدهم تا ببینم خودکار چهکارش میتوانند بکنند که نتیجه قابل استفاده نبود.
در همین راستا، اخیراً سرویس گوگلآنالیتیکس حسابهای کاربران ایرانی را حذف کرده است. من روی تقریباً تمام سرویسها و کارهایم از آن استفاده میکردم، هر چند اخیراً توان درک اعداد و ارقام آن را از دست داده بودم و هر کس به طور جدی جویای آماری از گنجور میشد و به نظرم آدم موجهی میرسید دسترسی میدادم تا خودش برود نگاه کند ببیند سر در میآورد یا نه. کاربرد اصلی آن برای من این بود که بفهمم وضعیت گنجور با توجه به متوسط بازدیدها طبیعی است یا نه و احتمالاً مشکلی برای دسترسی به آن در داخل ایران -عموماً- پیش آمده یا خیر.
این داستان حذف حساب گوگلآنالیتیکس باعث شد که به این فکر کنم که حالا که هوشمصنوعیها کمک بزرگی در تولید محصولات نرمافزاری هستند و زحمتش کمتر شده روی طراحی یک سیستم آمارگیری از بازدیدهای وبسایتها به طور خاص با هدف استفاده در گنجور وقت بگذارم. نسخهٔ اولیهای از توابع سرویس آماده شده و یک دامنه هم برای آن گرفتم و خوشبختانه با توجه به بازدید زیاد گنجور خیلی زود توانستم نسخهٔ اولیه را با بازدیدهای واقعی آزمایش کنم. برای طراحی یک رابط کاربری اولیه با توجه به تجربهٔ موفق پیشین باز سراغ دیپسیک رفتم و به نظرم این بار هم خیلی خوب از عهدهٔ کار برآمده.
برای ادامهٔ کار با چالشهایی مواجه شدهام. اولاً در استخراج اطلاعات جغرافیایی از روی آیپی روی سرویسهای رایگان پیشنهادی هوش مصنوعی به سرعت به مشکل محدودیت تعداد فراخوانی برمیخورم. باید بگردم و ببینم میتوانم سرویس رایگان نامحدود یا راهکار آفلاینی را پیدا کنم یا خیر. ثانیاً حجم پایگاه دادههای برنامه با توجه به حجم بالای مراجعات گنجور به سرعت زیاد میشود. برای این موضوع تصمیم گرفتهام بخشهایی از اطلاعات قابل جمعآوری را ذخیره نکنم یا راهکارهایی برای گروهبندی اطلاعات و حذف جزئیات پیادهسازی کنم.
فعلاً این برنامه در دست توسعه است و به صورت عمومی امکان نامنویسی و استفاده از آن وجود ندارد.
چند باری برایم پیش آمده که یک یا چند سایت 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
داشتم اعداد لاتین را با صفحهکلید فارسی دوباره تایپ میکردم. نوتپد ویندوز آرم تحت ماشین مجازی مک. بعد از بستن و باز کردن نوتپد همهچیز درست است و متن به درستی ذخیره شده.
امروز دامنهٔ hamireza.ir را گرفتم. این اسم (همیرضا) یادگار دورهٔ دبستان و راهنمایی است که همکلاسیها عموماً اسمم را با انداختن دال وسطش صدا میکردند. دامنهٔ قبلی (hrmoh.ir) را هنوز هم دارم و تمام لینکهایش قرار است به این دامنهٔ جدید ریدایرکت بشوند. پیشتر از آن هم که دامنهٔ اینجا گزیر (gozir.com) بود که در اصل برای پیادهسازی یک ایدهٔ استارتاپی ثبتش کرده بودم و وقتی کار پیش نرفت تبدیل به دامنهٔ وبلاگم شد و با افزایش شدید چند سال اخیر هزینهٔ تمدید دامنههای بینالمللی از خیرش گذشتم، البته در کل خیلی هم دوستش نداشتم.
اخیراً روی سروری با ویندوز سرور ۲۰۲۵ با این مشکل مواجه شدم که اگر با ریموت دسکتاپ به آن وصل میشدم و بدون لاگاوت قطع میشدم در هنگام تلاش برای اتصال مجدد ویندوز روی صفحهٔ ورود به حالتی شبیه قفل شده (فریز) باقی میماند و هیچ اتفاقی نمیافتاد. راه حل را در تصاویر بعدی نشان دادهام. ابتدا Group Policy را با اجرای gpedit.msc بالا بیاورید و طبق تصویر این تنظیم را فعال کنید.
مشکل دیگری که روی این ویندوز -که تحت ویرچوال و با نرمافزار QEMU بالا آمده بود- میدیدم کندی و لختی نسبی اجرا بود. مثلاً کلیکها با کندی باز میشدند و یک کوئری SQL که روی ویندوز دیگری در کمتر از ۱ ثانیه اجرا میشد روی دیتابیس مشابه بیشتر از ۶ ثانیه طول میکشید تا اجرایش تمام شود. آن را هم جستجو کردم و مشخص شد که در رولهای سرور میبایست Hypervisor را فعال کنم (این رول که همان Hyper V است در اصل برای اجرای یک ماشین مجازی داخل خود ویندوز کاربرد دارد). بعد از نصب این role مشکل لختی و کندیی که از آن صحبت میکردم مستند به زمان اجرای همان اسکریپت حل شد.
پینوشت: روی این سرور در نهایت دلم با ویندوز ۲۰۲۵ صاف نشد. هم هنوز یک لختی محسوسی داشت و هم رابط کاربریش نچسب بود به نظرم. با ویندوز ۲۰۲۲ جایگزینش کردم.
من چند وقت یک بار مجبور میشوم روی سرورهای جدیدی که برای کارهای شخصی یا کاری میگیرم یک ایمیلسرور روی ویندوز راه بیندازم. همیشه میخواستهام روال کار را یک جا مستند کنم تا برای دفعهٔ بعد به آن مراجعه کنم فرصت نمیشده. این بار فرصت شد و گام به گام مراحل را مستند میکنم.
تذکر مهم: من تنها نیاز داشتهام و دارم که ایمیل ارسال کنم (ایمیلهای تأییدیهٔ نامنویسی کاربران) و هیچگاه علاقمند به دریافت ایمیل نبودهام! دریافت ایمیل قطعاً مراحل بیشتری مانند باز کردن پورتهای ورودی روی دیوارهٔ آتش سرور دارد که من تجربهٔ آن را ندارم.
۰. اولین گام، اگر سرور را تازه در اختیار گرفتهاید این است که آیپی آن را در سرویسهای لیست سیاه ارسال ایمیل مثل این جستجو کنید و مطمئن شوید که آیپی تمیز است. اگر بعداً متوجه شوید که آیپی سرور در این لیستها قرار دارد نیز میتوانید برای حذف از آنها درخواست بدهید اما فرایند حذف از این لیستها زمانبر است. اگر همان ابتدا متوجه بشوید بدون صرف وقت برای گامهای بعدی میتوانید مسئله را با ارائهکنندهٔ سرور در میان بگذارید که آیپی دیگری روی سرور تنظیم کنند.
۱. گام اول تنظیم رکوردهای dns دامنهٔ ارسال ایمیل است. در پیشخان DNS یک رکورد از نوع A با نام mail میسازیم (یا اگر وجود دارد مقدار آن را ویرایش میکنیم) و در مقدار آن IP سرور مقصد را میگذاریم:
سپس برای آن یک رکورد از نوع MX درست میکنیم و مقدار آن را mail.domainname.com میگذاریم، مثلاً برای مثال تصویر بالا مقدار آن باید مطابق تصویر بعدی باشد.
۲. اچمیلسرور (hMailServer) را دریافت و روی سرور نصب میکنیم. این نرمافزار مبتنی بر داتنت ۲ است و از این جهت باید روی ویندوزهای سرور از طریق سرورمنیجر رل مربوط به NET 3.5. را هم نصب کرده باشید. برای ذخیرهٔ اطلاعات من از SQL Server که پیشتر روی سرور استفاده کردهام استفاده میکنم:
برای hMailServer لازم است یک رمز ادمین تعیین کنید. در مراحل تنظیم نحوهٔ اتصال به SQL Server تعیین کنید که میخواهید پایگاه دادههای جدیدی ایجاد شود. اتصال به SQL Server با Windows Authentication کار نمیکند و با این خطا مواجه میشود:
به جایش مجبورید روی SQL Server کاربر با دسترسی کافی بسازید تا hMailServer بتواند پایگاه دادههایش را بسازد.
لازم است سرویس SQL Server را هم برایش مشخص کنید که هر گاه سرویس اس.کیو.ال ریاستارت شد این سرویس هم ریاستارت شود.
در صورت بروز مشکل در مراحل پیکربندی برنامه را پاک کنید و سرور را ریاستارت کنید و مجدداً آن را نصب کنید.
۳. مرحلهٔ بعد اجرای hMailServer Administrator و اضافه کردن نام دامنه و ایجاد رکورد DKIM در DNS برای اعتبارسنجی دامنه و اسپم نشدن آن در جیمیل است. ابتدا دامنه را در برنامه اضافه میکنیم.
در تنظیمات SMTP هم در قسمت نام سرور محلی نام دامنه را میزنیم (اگر این کار را نکنیم در ارسال ایمیل نام کامپیوتر سرور گذاشته میشود و در بررسی میزان اعتبار ایمیل ارسال شده این خطا ظاهر میشود: We check if there is a server (A Record) behind your hostname).
برای رکورد DKIM طبق این راهنمایی به این نشانی میرویم و فرم را مطابق شکل زیر پرمیکنیم (selector یک رشتهٔ دلخواه است که بعداً باید هر چه اینجا وارد کردیم را داخل نرمافزار هم وارد کنیم):
بعد از تولید کلید خصوصی تولید شده را در یک فایل متنی با پسوند pem ذخیره میکنیم و روی سرور در مسیر ثابتی که بدانیم فایل از آنجا پاک نمیشود کپی میکنیم -کلیدی که من در تصویر نشان دادهام واقعاً استفاده نشده وگرنه کلید واقعی را باید خصوصی نگه دارید- (من معمولاً آن را در پوشهای در مسیر نصب اچمیلسرور کپی میکنم).
و سپس در اچمیلسرور آن را انتخاب میکنیم و selector را هم مطابق همان چیزی که وقت تولید کلید وارد کردهایم وارد میکنیم.
طبق راهنمای تولید در تصویر یکی قبلتر یک رکورد DNS هم از نوع TXT به این صورت ایجاد میکنید:
۴. برای دامنهٔ مد نظر باید کلید متنی SPF را هم در DNS بسازید. ساخت این کلید آسان است و طبق الگوی تصویر بعد نام دامنه و آی.پی را با مقادیر مربوط به خودتان جایگزین کنید:
v=spf1 ip4:1.2.3.4 include:domain.com ~all
۵. رکورد DMARK هم مثل SPF با یک الگو ساخته میشود:
۶. در hMailServer زیر دامنهٔ مد نظر در قسمت Accounts ایمیل مد نظر خود را بسازید. سپس نرمافزاری را برای ارسال ایمیل پشت سرور نصب کنید. من از تاندربرد استفاده میکنم. از POP3 با پورت ۱۱۰ برای دریافت و از SMTP با پورت ۲۵ به صورت ناامن برای اتصال استفاده کنید و مطمئن شوید پشت سرور با نرمافزار به میلسرورتان وصل میشوید.
۷. بهتر است دیاناس معکوس آیپی ارسال کنندهٔ ایمیل (reverse dns یا rDns) برابر با دامنهٔ ارسال ایمیل (mail.domainname.com) باشد. در سرورهایی که من تا به حال در اختیار داشتهام انجام این تنظیم در اختیار سرویسدهنده است و برای این کار برایشان تیکت میزنم. اگر این کار انجام نشود یا مثلاً به لحاظ آن که سرویسدهنده میزبان چند دامنهٔ ارسال ایمیل باشد و فقط برای یکی بتواند انجام شود مشکل جدی ایجاد نمیشود.
۸. به سایت mail-tester.com بروید و با تاندربرد به ایمیل پیشنهادی آن یک ایمیل بزنید: