سفر زمان در وب

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

sensisoft.com

کمیک بلاگ

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

theoatmealیک نمونهٔ جالب (انگلیسی) از این نوع را چند روز پیش پیدا کردم که به نظرم اگر به اینجور وبلاگها علاقه دارید بد نیست سری به آن بزنید: The Oatmeal. از آنجا که صاحبش -گویا- طراح وب است، مطالبش کم و بیش مزهٔ کامپیوتر و وب می‌دهد. مثلاً این کمیک را با عنوان «چطور می‌شود که یک پروژهٔ طراحی وب، مستقیماً به ته چاه ویل سقوط می‌کند؟» ببینید. کمیکهایی با موضوعات دیگر هم دارد مثل این با عنوان «پانزده نکته دربارهٔ قهوه». اگر فرصت سر زدن به این کمیک‌بلاگ را پیدا کردید به نظرم این کمیک را در مورد خدمات پس از فروش شرکتها حتماً ببینید.

نوزادان به زبان مادریشان گریه می‌کنند!

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

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

لیستهای مرتب با اعداد فارسی

تگ ol (لیست مرتب) در html در CSS ویرایش ۲ توانایی نمایش اعداد به صورت فارسی را ندارد (از اعداد لاتین، رومی و ارمنی(!) پشتیبانی می‌کند اما اعداد را به صورت عربی یا فارسی نمی‌تواند نشان دهد). استایلهای انواع لیستها را در این استاندارد اینجا می‌توانید ببینید. در استاندارد جدیدتر گویا قرار است پشتیبانی از شکل اعداد فارسی هم اضافه شود.

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

ادامه خواندن “لیستهای مرتب با اعداد فارسی”

خط نشانه‌ای چینی و گویش الویری

در خط چینی -گویا- برای هر کلمه یک نشانهٔ یکتا و تجزیه‌ناپذیر به الفبا وجود دارد مثلاً کلمهٔ «زن» را اینطور می‌نویسند:

زن به چینی

و کلمهٔ «نهمین ماه» را اینطوری (فکرش را بکنید: برای «نهمین ماه» یک نشانهٔ جدا دارند! برای اولین، دومین، …، بیستمین ماه چطور؟!):

نهمین ماه به چینی

فکر می‌کنید چنین خطی چند نشانهٔ یکتا دارد؟ پاسخ چیزی حدود چند ده هزار است (به گفتهٔ ویکیپدیا ۴۷۰۳۵ نشانه)! از کسانی که با این خط آشنایی دارند هم گویا انتظار نمی‌رود که تمام نشانه‌های آن را بشناسند. اما آیا چند ده هزار نشانه برای نوشتن تمام کلمات یک زبان کافی است؟ مسلماً نه! مگر آن که با ترکیب آنها نشانه‌های جدید ساخته شود. چینیها گویا از همین روش استفاده می‌کنند و عملاً با ترکیب این نشانه‌ها در جهتهای مختلف نشانه‌های جدید می‌سازند. البته این که ترکیب دو کلمه چه معنایی خواهد داد ،گویا، تا حدود زیادی وابسته به فرهنگ چینی است. مثلاً ترکیب دو کلمهٔ بالا در کنار هم نشانه‌ای را می‌سازد که معنیش «حاملگی» است (خط اول تصویر)!

نمونه‌های ترکیب نشانه‌ها در خط چینی

نمونه‌های دیگری هم هستند. مثلاً چینیها برای «سر و صدا» هم نشانهٔ جداگانه ندارند و نشانهٔ آن را از ترکیب چند نشانهٔ دیگر می‌سازند. فکر می‌کنید از ترکیب چه نشانه‌هایی؟ مثال سوم تصویر پایینی را ببینید:

زن + زن + زن = سر و صدا!

در هر حال، این مطلب را حین مرور سرسری این کتاب دیدم (صفحات ۱۵۱ و ۱۵۲). به نظرم جالب آمد.

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

گویش الویری

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

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

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

[code lang=”c#”]
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;
}
[/code]

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

[code lang=”c#”]
private void AssignPreviewKeyDownEventToControls()
{
foreach (Control ctl in this.Controls)
ctl.PreviewKeyDown += GanjoorViewer_PreviewKeyDown;
}
[/code]

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

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

سعدی:

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

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

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

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

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

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

ردگیری چشم

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

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

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

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

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

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

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

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

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

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

disk2vhd

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

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

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

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

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

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

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