گزیر

::گاهنوشتهای حمیدرضا محمدی::



دربارهٔ من:

آخرین نظردهندگان:

مشترک شوید:

ایمیل خود را در جعبهٔ زیر وارد کنید و دکمهٔ اشتراک را بزنید.

جستجو:

Valid XHTML 1.0 Transitional RSS Feed

نوار لغزان با لغزندگی پایین

۸۸/۰۹/۲۰

یکی از ایرادهای گزارش شده برای ویرایشهای قدیمی‌تر گنجور رومیزی این بود که نوارهای لغزان آن با کمک کلیدهای جهتی نمی‌لغزد. در واقع اگر ویرایش ۱.۶۳ و پایین‌تر آن را آزمایش بکنید می‌بینید که مثلاً نوار لغزان عمودی آن را، اگر کلید جهتی پایین را همینطور فشار دهید، بعد از سه چهار ثانیه بالاخره تسلیم می‌شود و راه می‌افتد اما خوب! سخت راه می‌افتد (دلیلش از لحاظ برنامه‌نویسی احتمالاً این است که کلید جهتی مزبور در واقع فوکوس را دارد بین کنترلها جابجا می‌کند و به هر کدام چند میلی ثانیه اجازهٔ مالکیت آن را می‌دهد تا آخر سر نوبت به نوار لغزان می‌رسد). توی ویرایش جدیدتر این مشکل را حل کردم.

اما «چطورش» شاید به درد برنامه‌نویسهای (احتمالاً تازه‌کار یا کم‌سواد مثل خودم) ویندوز فرمز بخورد (چون راه حلش را با جستجو پیدا نکردم): کنترل اصلی گنجور رومیزی یک User Control ساده است که نشانی شعرها یا دسته‌های شعرها و همینطور شماره بیتها با استفاده از کنترلهای LinkLabel و مصرعها با استفاده از یک کنترل مشتق از Label روی آن تعبیه شده و ویژگی AutoScroll آن فعال است. به این ترتیب، با توجه به جای پایین‌ترین و سمت چپ‌ترین کنترل، نوارهای لغزندهٔ آن به طور خودکار ظاهر می‌شوند. من برای این که بتوانم کلیدهای جهتی را برای حرکت دادن نوارهای لغزان دریافت کنم رویداد PreviewKeyDown را برای این کنترل به صورت زیر نوشتم:

private void GanjoorViewer_PreviewKeyDown(object sender, PreviewKeyDownEventArgs e)
        {
            bool isInputKey = true;
            switch (e.KeyCode)
            {
                case Keys.Down:
                    if (VerticalScroll.Value + VerticalScroll.SmallChange <= VerticalScroll.Maximum)
                        VerticalScroll.Value += VerticalScroll.SmallChange;
                    break;
                case Keys.Up:
                    if (VerticalScroll.Value – VerticalScroll.SmallChange >= VerticalScroll.Minimum)
                        VerticalScroll.Value -= VerticalScroll.SmallChange;
                    break;                   
                case Keys.PageDown:                   
                    for(int i=0; i<2; i++)//!?
                    if (VerticalScroll.Value + VerticalScroll.LargeChange <= VerticalScroll.Maximum)                       
                        VerticalScroll.Value += VerticalScroll.LargeChange;
                    else
                        VerticalScroll.Value = VerticalScroll.Maximum;
                    break;
                case Keys.PageUp:
                    for (int i = 0; i < 2; i++)//!?
                    if (VerticalScroll.Value – VerticalScroll.LargeChange >= VerticalScroll.Minimum)
                        VerticalScroll.Value -= VerticalScroll.LargeChange;
                    else
                        VerticalScroll.Value = VerticalScroll.Minimum;
                    break;               
                case Keys.Right:
                    if (HorizontalScroll.Value + HorizontalScroll.SmallChange <= HorizontalScroll.Maximum)
                        HorizontalScroll.Value += HorizontalScroll.SmallChange;
                    break;
                case Keys.Left:
                    if (HorizontalScroll.Value – HorizontalScroll.SmallChange >= HorizontalScroll.Minimum)
                        HorizontalScroll.Value -= HorizontalScroll.SmallChange;
                    break;
                default:
                    isInputKey = false;
                    break;
            }
            if (isInputKey)
                e.IsInputKey = true;
        }

در مورد حلقهٔ دوتایی کلیدهای PageDown و PageUp، دلیلش را نمی‌دانم ولی بدون اصرار 😉 کار نمی‌کرد! بعد این رویداد را علاوه بر UserControl اصلی، همه جا، پس از ایجاد و اضافه کردن زیرکنترلهایش به آنها هم نسبت دادم:

private void AssignPreviewKeyDownEventToControls()
        {
            foreach (Control ctl in this.Controls)
                ctl.PreviewKeyDown += GanjoorViewer_PreviewKeyDown;
        }

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

نوشته شده در ساعت ۱۲:۲۲

مشتمال ;)

۸۸/۰۸/۰۴

Get the Flash Player to see the wordTube Media Player.
نوشته شده در ساعت ۲۰:۴۷

مسیر دریایی شیراز به مشهد ;)

۸۸/۰۷/۲۸

سعدی:

قاصد رود از پارس به کشتی به خراسان

گر چشم من اندر عقبش سیل براند

نزدیک به همین مضمون: روز باران

پی‌نوشت: ایجاد یک راه آبی میان فارس و خراسان گویا از دغدغه‌های سعدی بوده 😉 . جای دیگری هم به این موضوع اشاره کرده:

شعرش چو آب در همه عالم چنان شده

کز پارس می‌رود به خراسان سفینه‌ای

نوشته شده در ساعت ۲۲:۰۸

ردگیری چشم

۸۸/۰۷/۱۷

احتمالاً در مقالات مربوط به کارآمدی صفحات وب، نقشه‌های گرمایی را دیده‌اید. در این نقشه‌ها نقاطی از صفحه که بیشتر در معرض دید بازدیدکننده‌ی سایت، قرار می‌گیرند با رنگهای گرم (زرد و قرمز) مشخص می‌شوند و نقاط کمتر دیده شده با رنگهای سرد (آبی). به عنوان نمونه این مقاله را در مورد نحوه‌ی حرکت چشم بر روی صفحات وب ببینید که در آن این مسأله طرح شده که بازدیدکنندگان، اغلب، مطالب صفحه را با الگویی شبیه حرف F مرور می‌کنند.

بازدیدکنندگان اغلب مطالب صفحه را با الگویی شبیه حرف F مرور می‌کنند

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

نقاط داغتر یک صفحه‌ی وب

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

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

صحنه‌ای از مستند BBC Life in Cold Blood

نوشته شده در ساعت ۲۱:۳۰

ویندوز واقعی را مجازی کنید

۸۸/۰۷/۱۷

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

دیروز وبلاگ لایف‌هکر چنین نرم‌افزاری را معرفی کرده: Disk2vhd. گفتم شاید بعداً دوباره موردش پیش بیاید، اگر اینجا بنویسمش راحت‌تر پیدایش می‌کنم. احتمالاً به درد شما هم می‌خورد.

disk2vhd

بحث حقیقت و مجاز شد 😉 ، این بیت حافظ را دیده‌اید که می‌شود آن را به دو صورت کاملاً متناقض خواند؟ (به محل ویرگول توجه کنید):

خمها همه در جوش و خروشند ز مستی

وآن می که در آنجاست حقیقت، نه مجاز است!

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

خمها همه در جوش و خروشند ز مستی

وآن می که در آنجاست حقیقت نه، مجاز است!

غزل کامل را اینجا بخوانید.

نوشته شده در ساعت ۱۹:۴۶

گنجور رومیزی تحت لینوکس

۸۸/۰۷/۱۷

چند روز پیش دوستی در مورد امکان ارائه‌ی نسخه‌ی مکینتاش گنجور رومیزی سؤال کرده بود.

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

ناسازگاریهای گنجور رومیزی با مونو

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

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

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

محیط برنامه‌نویسی مونو

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

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

هر چند، پروژه‌ی مونو هنوز گویا کار زیاد دارد. به عنوان نمونه، در صورتی که پنجره‌ی «تنظیمات» گنجور رومیزی را باز کنید و روی دکمه‌ی «تنظیمات پیش‌فرض» کلیک کنید، برنامه بلافاصله بسته می‌شود و در ترمینال چنین خطایی اعلام می‌شود:

خطای برنامه بعد از خروج ناخواسته

با این وصف، احتمالاً می‌توان به زودی مستقل بودن از سیستم عامل را به ویژگیهای برنامه‌های دات‌نتی اضافه کرد که پیش از این از جمله خاصیتهای منحصر به فرد برنامه‌های مبتنی بر جاوا بوده (و البته به دلیل نقائصش یا احتمالاً به دلیل حسادت برنامه‌نویسان سایر سکوها برایش جُکهایی مثل این ساخته‌اند: جاوا: یک بار بنویسید، همه جا اشکالش را بیابید!، یا این یکی).

پی‌نوشت: با لینوکس OpenSUSE نگارش ۱۱.۱ به صورت نصب کامل (که امکان تایپ عربی داشت) هم امتحان کردم. نتیجه همینی است که در تصاویر مشخص است. ضمن آن که برای اجرای برنامه‌ی دات‌نتی تحت مونو نیازی به کامپایل مجدد آن نیست و من بدون کامپایل مجدد و با استفاده از فایل اجرایی تولید شده توسط ویژوال استودیو، پس از جایگزینی اسمبلی مربوط به SQLite توانستم برنامه را به کمک فرمان mono اجرا کنم.

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

نوشته شده در ساعت ۱۷:۵۵

خط فارسی در کامپیوتر: انتخاب میان زیبایی و کارایی؟

۸۸/۰۷/۱۷

ه‌ی چسبان

در صفحه‌کلید پیش‌فرض فارسی ویندوز (XP، ویستا، ۷ و احتمالاً ۲۰۰۰) با کلید ترکیبی Shift+G می‌توانید نویسه‌ی «ۀ» را (برای فونت تاهوما) تایپ کنید. من تا مدتی «ه»های چسبان را بدون نوشتن کسره‌ی تبدیل شده به «ی» تایپ می‌کردم: «کسره اضافه». تا مدت نسبتاً زیادی هم این «ی» را به طور کامل در حالی که با نیم‌فاصله از کلمه‌ی اصلی جدا شده تایپ می‌کردم: «کسره‌ی اضافه». اما اخیراً با کشف نحوه‌ی تایپ «ۀ» (به یاد کتابهای درسی ابتدایی) خیلی جاها از این نویسه کمک گرفته‌ام: «کسرۀ اضافه». راه حل آخری (علی‌رغم زیبایی ظاهری) برای وب به نظرم اصلاً مناسب نیست (برای جستجو مشکل ایجاد می‌کند، علی‌رغم آن که برای چاپ راه حل خوبی است) و راه حل منطقی‌تر (کسره‌ی اضافه) به نظرم نازیباست.

پی‌نوشت: در صفحه‌کلید استاندارد ایران که با دریافت این برنامه و نصب آن در دسترس قرار می‌گیرد نویسهٔ «ٔ» را می‌توان با کلید ترکیبی Shift+N تای‍پ کرد که راه‌حل نهایی هٔ چسبان است، چون هم مشکل زیبایی را حل می‌کند و هم با توجه به این که یک نویسهٔ اضافی است برای جستجوپذیری متن مشکلی ایجاد نمی‌کند. نحوهٔ چینش حروف در این صفحه‌کلید را اینجا ببینید.

اعداد فارسی

ترجیح زیبایی نحوه‌ی نمایش بر جستجوپذیری و آسانی انتقال، در جای دیگری هم احتمالاً مشکلات زیادی برای خط فارسی در وب ایجاد کرده و آن نحوه‌ی تایپ اعداد است. بسیاری از وب‌نویسان به کمک ابزارهای موجود و در بعضی موارد -در مورد کسانی مانند من- به هر سختی که شده اعداد را به شکل فارسیشان تایپ می‌کنند (۰۱۲۳۴۵۶۷۸۹ به جای 0123456789، اگر شما هم به نوع مشابهی از این مازوخیسم مبتلا هستید توصیه می‌کنم این ابزار را امتحان کنید). مرورگرها و ابزارهای موجود، اغلب توانایی نمایش شکل درست اعداد در میانه‌ی متون فارسی را ندارند و استفاده از شکل یونیکد نویسه‌های عددی فارسی مشکل نازیبایی اعداد لاتین در متون فارسی را حل کرده. اما آیا این راه حل درست است؟ شما اگر بخواهید در متن صفحه‌ی وبی که اعداد آن با این شیوه تایپ شده اعداد را جستجو کنید در جعبه‌ی جستجو چگونه اعداد را تایپ می‌کنید؟ آیا می‌توان اعداد تایپ شده به این شیوه را از جداول به مایکروسافت اکسل برد و جمع ستونهای آنها را به راحتی به دست آورد. علی‌رغم این مشکلات بنیادی، من و احتمالاً بسیاری دیگر از طرفداران این شیوه به این کار خود ادامه می‌دهیم!

ایران نستعلیق

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

یکی از ایرادهای فونت ایران نستعلیق

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

نوشته شده در ساعت ۱۰:۵۲

تاریخ ادبیات به روایت خبرگزاری فارس

۸۸/۰۶/۲۲

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

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

فروغی بسطامی شاعر همدورۀ مشیری به روایت خبرگزاری فارس

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

نوشته شده در ساعت ۱۷:۲۶

The Big Picture

۸۸/۰۶/۱۳

The Big Picture (به فارسی احتمالاً «نمای کلی» یا «تصویر بیرونی») یک عکس‌بلاگ و زیرمجموعه‌ای از سایت روزنامۀ بوستون گلوب است. در این عکس‌بلاگ می‌توانید هر چند وقت یک بار معمولاً با توجه به مناسبتهای جاری مجموعۀ جالبی از عکسهای با اندازه و کیفیت بالا را مشاهده کنید. برای نمونه بد نیست سری به این آلبوم با عنوان رمضان ۲۰۰۹ بزنید که همین چند روز پیش به مناسبت آغاز رمضان در دسترس قرار گرفته است. آلبوم رمضان امسال این عکس‌بلاگ از ایران عکسی ندارد، اما آلبوم عکسهای رمضان پارسالش (در این نشانی) یک عکس از ایران و از فرایند پختن زولبیا دارد.

آلبوم عکس انتخابات ایران و همچنین سه آلبوم عکس مربوط به حوادث پس از انتخابات (این، این و این) نیز به نوبۀ خود جالبند (به خاطر انتشار همین عکسهاست که این سایت الان فیلتر شده است).

در حین مرور آلبومهای عکس این سایت، من تعدادی از عکسهای این سایت را گزینش کرده‌ام. ببینید:

معبدی در بوتان

معبدی در بوتان (مراسم تاجگذاری پادشاه بوتان)

مکه

نمایی از مکه (حج و عید قربان)

افغانستان

بزکشی (صحنه‌هایی از افغانستان)

ادامه »

نوشته شده در ساعت ۱۷:۵۳

فتوشاپ پیش از اختراع کامپیوتر ;)

۸۸/۰۶/۱۳

این تصویر را احتمالاً دیده‌اید: گوگل پیش از اینترنت یا گوگل ۱۹۶۰:

گوگل پیش از اینترنت

این یکی هم در همان مایه‌هاست: فتوشاپ واقعی یا فتوشاپ پیش از اختراع کامپیوتر (برای مشاهدۀ تصویر بزرگتر کلیک کنید):

فتوشاپ پیش از اختراع کامپیوتر

نوشته شده در ساعت ۱۶:۵۱