سال ۹۱

سالی که گذشت همانند سال قبلش بیشتر برای من به کار -در محل کار 😉 – گذشت:

لوح تقدیر پردازش موازی سامان در سال ۹۱

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

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

به امید سالهای بهتر برای خودم و برای همهٔ دوستان!

سبیت ۲۰۱۳

The only downer for Peter Schnautz is the non-participation of the Iranian partner Hoda Systems: “Throughout history vibrant trade relations were often the driving force for political changes – why should it not occur on this occasion?” remarks Peter Schnautz and continues: “technologically this is a great loss. Hoda Systems is one of the few suppliers in the market that offers a premiere ICR engine for Arabic characters. ”

منبع

یادگاریهای شرکت گاز

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

اتوران سی دی آت آشغال ۲

در هر حال، دیروز، برف ناگهانی باعث شد تا تصمیم بگیرم قید سر کار رفتن را -به هوای زحمت احتمالی مسیر طولانی برگشت- بزنم و در عوض، چرخی بین این انبارهای زباله بزنم! حاصل آن چرخ زدنها یافته‌هاییست که حدس می‌زنم قابل تحمل‌ترینشان این تصویر متحرک باشد:

یک رباعی مربوط به دورهٔ نوجوانیم با شعلهٔ آتش رقصان ;)

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

ادامه خواندن “یادگاریهای شرکت گاز”

گنجوروید

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

گنجوروید

لطفاً خودتان را تکرار نکنید!

Mr Smith In Matrix Reloaded : Repeated himself and failed!

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

این اصل که به طور خلاصه «DRY» خوانده می‌شود (و متضاد آن «WET» است! ؛ اولی مخفف Don’t Repeat Yourself و دومی مخفف Write Everything Twice) به طور ساده (به زبان برنامه‌نویسان) می‌گوید هر قسمتی از کدِ برنامه که ممکن است لازم باشد در جای دیگری مجدداً استفاده شود؛ لازم است به جای تکرار، به شکل یک کد قابل استفادهٔ مجدد (تابع، کلاس و …) درآید و هر جا لازم شد فراخوانی شود. البته این اصل تعریف پیچیده‌تر و دقیق‌تری هم دارد که درکش مستلزم سوزاندن فسفر بیشتری است: «هر بخشی از دانش در یک سیستم باید یک نمایش یکتا، غیر مبهم و معتبر داشته باشد».

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

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

Dexter

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

شأن نزول این مطلب آن بود که خود من مدتها است که دارم تاوان عمل نکردن به این قاعده را برای خطای متداولی روی گنجور رومیزی می‌پردازم:

ایمیلهایی که گزارش خطایی با راهکار یکسان برای رفع خطا را در گنجور رومیزی به من داده‌اند

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

در آستانهٔ سال نو

سال ۹۰ هم رو به پایان است، سالی که برای من توأم با تغییر محل کار و به تبع آن تغییرات دیگر بود. تغییراتی؛ عمدتاً ناخواسته که نهایتاً خوشایندم بود و باعث می‌شود که این سال را سالی توأم با اتفاقات خوب به حساب بیاورم. سالی که البته از کارهای فوق برنامه -گنجور و …- دور ماندم و از این لحاظ از این سال یادگاریهای زیادی ندارم. امیدوارم سال آینده سال پربارتری باشد.

لوح تقدیر تدبیر

سال نو پیشاپیش مبارک!

یاریگری هست؟

می‌دانید؟ اخیراً از جایی درخواست یک هدیه کردم (اینجا) و آن را تحویل گرفتم.

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

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

اما دومین و سومین مشکل را، اگر اولین مشکل را حل کردید، دنبالشان باشید: من اسکریپت ساده‌ای برای شماره‌گذاری ابیات در گنجور نوشته‌ام (اینجا را ببینید). این را برایم با جی‌کوئری بازنویسی کنید (اسکریپت را با بازبینی کد صفحات گنجور می‌بینید). مشکل سوم را البته اصراری روی حلش ندارم، احتمالاً سخت است ولی صورت مسأله‌اش این است که این مسأله را با استفاده از جی‌کوئری حل کنید.

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

برنامه‌نویسی با C++‎ آسان است؟!

البته که نه! برنامه‌نویسی با C#‎ و به کمک سکوی ‎.NET آسان‌تر است. بحث اینجا البته نه C++‎ است نه C#‎، نه سکوی ‎.NET و نه حتی برنامه‌نویسی.

خواستم نکته‌ای را که مدتی پیش یاد گرفته‌ام به شما هم یاد بدهم. سعی کنید عنوان این مطلب را در Notepad ویندوز تایپ کنید. ابتدا آن را راست به چپ کنید و تایپ کنید «برنامه‌نویسی با C++‎ آسان است.» چه اتفاقی می‌افتد؟

جهت C++‎ در جملهٔ تایپ شده درست نیست

چرا این اتفاق می‌افتد؟ آیا این ایراد نرم‌افزاری نوت‌پد است؟ من چنین تصوری داشتم و مطلب را در انجمن رایانش فارسی سؤال کردم (اینجا). پاسخ آن است که خیر این یک ایراد نیست. بر طبق الگوریتم دوسونویسی استاندارد یونیکد (UBA) نویسههایی مانند + و # کم‌توان محسوب می‌شوند و جهت آنها در متن توسط نویسهٔ پرتوان بعدی آنها تعیین می‌شود. به همین جهت اضافه کردن یک نویسهٔ پرتوان استاندارد غیرقابل مشاهده مثل نویسهٔ LRM (Left-to-Right Mark)‎ (قابل تایپ توسط Ctrl+Shift+3 در صفحه‌کلید استاندارد ویندوز در حالتی که صفحه‌کلید فارسی است) مشکل را حل می‌کند (برنامه‌نویسی با C++<LRM>‎ آسان است).

جهت C++‎ به کمک نویسهٔ LRM بعد از آن درست شده است.

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

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

دنبالهٔ ۱

پیرو بحث پاراگراف اول دربارهٔ تقابل C++‎ و C#‎، بارها دوستان تقاضا کرده‌اند گنجور رومیزی را روی لینوکس یا مک‌اوس بتوانند اجرا کنند. من پیشتر دنبال راه حلهایی مانند مونو بودم (اینجا را ببینید) که به نتیجه نرسید. با ویرایشهای جدیدتر مونو حتی در حد همان دلخوشکنک ابتدایی نمایش پنجرهٔ برنامه هم، برنامه اجرا نمی‌شود. آقای سیدرضی علوی‌زاده در حال تهیهٔ برنامه‌ای سازگار با پایگاه داده‌های گنجور رومیزی با استفاده از Qt هستند که تحت سه سیستم عامل ویندوز، لینوکس و مک اجرا می‌شود. اطلاعات بیشتر راجع به «ساغر» را اینجا بخوانید و تصاویری از آن را ببینید.

دنبالهٔ ۲

از آنجا که حدس می‌زنم عنوان نوشته اغواگر جستجوگران اینترنتی «C++‎ آسان» باشد سایت پی‌سی‌کدنویس را به این دسته از مشتریان نوشته توصیه می‌کنم.

دنبالهٔ ۳

در راستای دنبالهٔ ۱ و بر اساس دلایلی که در اینجا راجع به آن صحبت کرده‌ام صفحهٔ فیس‌بوک گنجور را راه‌اندازی کرده‌ام (http://www.facebook.com/ganjoor). اگر اهل فیس‌بوک هستید و به گنجور علاقه دارید سری به آن بزنید و آن را به دوستانتان بشناسانید.

صفحهٔ گنجور در فیس‌بوک

دنبالهٔ ۴

این نوشته را تقدیم می‌کنم به شیخنا.

Guugu Yimithirr

عنوان مطلب، اسم یک زبان است. زبانی مربوط به بومیان استرالیا که واژهٔ «کانگورو» از آن به انگلیسی و دیگر زبانها وارد شده و به استناد ویکی‌پدیا (ببینید: زبان گوگوییمیتیر) ۲۰۰ الی ۳۰۰ نفر کلاً وجود دارند که به این زبان صحبت می‌کنند.

چند وقت است که نیویورک‌تایمز مقاله‌ای روی سایتش گذاشته (اینجا) که موضوع آن تأثیر زبان مادری بر طرز تفکر آدمهاست. بحث از آنجا شروع می‌شود که در سال ۱۹۴۰ زبان‌شناسی به نام بنیامین ورف در مقاله‌ای ادعا کرد محدودیتهای زبان مادری می‌تواند باعث ایجاد محدودیت در توانایی درک و طرز تفکر انسانها شود. مثال ادعای او، سرخپوستها بودند که گویا در درک سیر زمانی وقایع یا تفاوت اشیاء با عمل منتسب به آنها (سنگ با افتادن سنگ) مشکل دارند و این معضل ناشی از آن است که در زبان مادری آنها این مفاهیم به گونه‌ای متفاوت با زبانهای دیگر بیان می‌شود یا اصلاً بیان نمی‌شود.

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

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

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

جمعهٔ متروک

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

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

میزبان گنجور این روزها دارد کمی اذیت می‌کند. بحث سر آپ‌تایم نیست. سر هزینهٔ پنهانی است که ماهیانه به خاطر GPU Overage دارد، روندش تصاعدی بوده، ماه اول سه دلار، ماه دوم سی دلار و این ماه نزدیک صد و پنجاه دلار! مطمئن نیستم جریان چیست، روند ترافیک بازدیدها تصاعدی به این شکل نبوده. تصمیم گرفته بودم از این ماه از این سرویسشان به یک سرویس میزبانی بالاتر (سرور مجازی) کوچ کنم که ابزار پرداخت فراهم نشد.

دوستی زحمت کشیده، اشعار فروغ را برای گنجور رومیزی آماده کرده، دوست داشتید سری بزنید به اینجا و دریافت کنید.

شعری از فروغ در گنجور رومیزی