پنجشنبه، آبان ۰۹، ۱۳۸۷

کینه‌ای‌ترین بخشنده

اگر بخشش را به زبان آوردن عبارت «بخشیدم» بدانیم، من بخشنده‌ترین آدم‌ها هستم.

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

دوشنبه، آبان ۰۶، ۱۳۸۷

کلاس شلوغ

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

چهارشنبه، مهر ۱۰، ۱۳۸۷

برترین دانایی

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

پ.ن.
۱. مخاطب اصلی این نوشته خودم هستم.
۲. عمل کردن به جمله‌ی زیر برایم بسیار سخت بود.

گفتاورد:

برترین دانایی، مهربانی است.
ضرب المثل عبری

دوشنبه، شهریور ۱۸، ۱۳۸۷

تعمیم‌ها همیشه اشتباه نیستند!

توضیحی در مورد این پست...

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

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

 

جمعه، شهریور ۱۵، ۱۳۸۷

درد داری؟ داد بزن.

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

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

هدفم از این حرف‌ها این است که اول از همه به خودم حالی کنم که فیلم، فیلم است؛ واقعیت، واقعیت. آخر من خیلی وقت‌ها این دو را با هم مخلوط می‌کنم و اشتباه می‌گیرم. ابدا منظورم این نیست که «شیدا»، فیلم بدی است یا داستان بدی دارد. دقیقا برعکس. ۹ سالی است که از ساخت این فیلم می‌گذرد و من بارها دیدمش. با تمام ایرادهایی که این به ظاهر عقل من از اجزای داستان فیلم می‌گیرد؛ باز هم این عاشقانه‌ی آرام به نرمی بر این به ظاهر قلب من می‌نشیند و آرامم می‌کند.

شنبه، مرداد ۲۶، ۱۳۸۷

ساختن فرم فرزند MDI تک نمونه‌ای در دات نت

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

۱. چگونه ببینیم فرم فرزند باز است یا خیر

فرم والد خصیصه‌ای دارد به نام MdiChildren که آرایه‌ای است از Form ها. برای این که ببینیم فرمی قبلا باز بوده در برنامه یا خیر باید این آرایه را جستجو کنیم. برای این منظور تابعی نوشتم به نام IsChildFormLoaded که نوع فرم مورد نظر را بگیرد و به دلایلی که بعدا توضیح داده خواهد شد اشاره‌گری به فرم فرزند، چنان‌چه یافت شود برمی‌گرداند.

C#
  01:   
  02:   
  03:   
  04:   
  05:   
  06:   
  07:   
  08:   
  09:   
  10:   
  11:   
  12:   
  13:   
private bool IsChildFormLoaded(Type formType, out Form frmChild)
{
    frmChild = null;
    foreach (Form frm in this.MdiChildren)
    {
        if (frm.GetType().Name == formType.Name)
        {
            frmChild = frm;
            return true;
        }
    }
    return false;
}

۲. چگونه فرم فرزند را نمایش دهیم

در حالت عادی برای نمایش یک فرم به عنوان فرزند یک فرم والد MDI چند خط زیر کافیست

C#
  1:   
  2:   
  3:   
SomeFormType frm = new SomeFormType();
frm.MdiParent = this;
frm.Show();

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

C#
  01:   
  02:   
  03:   
  04:   
  05:   
  06:   
  07:   
  08:   
  09:   
  10:   
  11:   
  12:   
  13:   
  14:   
  15:   
  16:   
private void ShowOrActivateMDIChildForm(Type formType)
{
    Form frmChild;
    if (IsChildFormLoaded(formType, out frmChild))
    {
        frmChild.Activate();
        if (frmChild.WindowState == FormWindowState.Minimized)
            frmChild.WindowState = FormWindowState.Normal;
    }
    else
    {
        Form frm = (Form)formType.InvokeMember("", System.Reflection.BindingFlags.CreateInstance, nullnullnew object[0]);
        frm.MdiParent = this;
        frm.Show();
    }
}

خط ۱۲ صرفا یک شی از نوع فرم مورد نظر می‌سازد. علت ظاهر غیرعادی آن این است که ما در این تابع اطلاعی از فرم نداریم بجز شی‌ءای از نوع Type برای فرم مورد نظر. وظیفه‌ی این خط فراخوانی سازنده‌ی کلاس مرتبط با آن نوع و برگرداندن شی‌ء ساخته شده از این طریق می‌باشد.

در انتها فرض کنید پس از انتخاب منویی به نام mnuShowCustomers ما قصد داریم فرمی که اسم کلاسش FormCustomers است را به همین طریق فعال بکنیم:

C#
  1:   
  2:   
  3:   
  4:   
private void mnuShowCustomers_Click(object sender, EventArgs e)
{
    ShowOrActivateMDIChildForm(typeof(FormCustomers));
}

پ.ن.:

۱. MDI مخفف Multiple Document Interface می‌باشد و به مدلی گفته می‌شود که در آن یک پنجره والد است و مابقی پنجره‌های برنامه فرزند آن پنجره‌ی والد خواهند بود و داخل مرزهای آن نمایش داده می‌شوند. در این مدل نوار منو و نوار ابزار بین والد و فرزندان به اشتراک گذاشته می‌شود. برای نمونه محیط برنامه نویسی ویژوال استودیو و برنامه‌های مایکروسافت آفیس چنینند.

 

جمعه، مرداد ۱۸، ۱۳۸۷

آرزوی پاک

پرواز دسته‌جمعی مرغابیان شاد،
بر پرنیان آبی روشن،
در صبحِ تابناکِ طلایی.

آه،
ای آرزوی پاکِ رهایی.

فریدون مشیری

پ.ن.
۱. به نظرم آمد عکس اول بیشتر با توصیف ابتدای شعر جور در می‌آید و عکس دوم بیشتر با ... رهایی.
۲. دوست داشتم انتهای شعر را به قالب زیر می‌نوشتم:

آاااااااااه،
ای آرزویِ
            پاکِ
                 رهایی.

]و مقدار زیادی سکوت[

یکشنبه، مرداد ۱۳، ۱۳۸۷

چگونه بوت لودر سیستم‌عامل خود را ترمیم کنیم

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

ترمیم بوت لودر ویندوز XP

با دیسک نصب ویندوز بالا بیایید، وارد setup شوید و گزینه‌ی repair را انتخاب کنید. در کنسولی که باز می‌شود (recovery console) دستورات زیر را وارد کنید:

  1:   
  2:   
FixMBR
FixBoot

دستور FixMBR کل Master Boot Record را پاک می‌کند و با مقادیر اولیه در BIOS دوباره پر می‌کند. بنابراین با این دستور تمامی بوت‌لودرهایی که قبلا نصب شده بودند از بین می‌روند.

دستور FixBoot موجب نصب بوت‌لودر ویندوز (NTLDR) می‌شود. بنابراین ترتیب استفاده از این دو دستور مهم است.

ترمیم بوت‌لودر ویندوز Vista

با دیسک نصب ویندوز بالا بیایید، وارد setup شوید و گزینه‌ی repair را انتخاب کنید، در پنجره‌ی جدید آخرین گزینه را انتخاب کنید تا برنامه یک کنسول در اختیار شما قرار دهد. سپس دستور زیر را وارد کنید:

  1:   
BootRec.exe /FixMbr /FixBoot

توجه کنید که دستوراتی که در مورد ویندوز XP گفته شد، در Vista دیگر وجود ندارند.

ترمیم بوت‌لودر Grub در لینوکس

برای این مرحله باید یک محیط لینوکسی بالا بیاورید و پارتیشنی که /boot لینوکس معیوب در آن قرار دارد را در جایی mount کنید. برای انجام این کار چند راه وجود دارد. اکثر دیسک‌های نصب کننده‌ی لینوکس گزینه‌ی repair دارند که با انتخاب آن وارد یک محیط لینوکسی می‌شوید که خودش پارتیشن‌های لینوکس معیوب را mount کرده است. راه دیگر استفاده از دیسک‌های لینوکس Live هست.

فرض کنید پارتیشن root لینوکس (یا /boot چنان‌چه پارتیشن‌اش جدا باشد) را mount کرده باشیم در /mnt/oldlinux . با دستور زیر root را به مسیر ذکر شده تغییر می‌دهیم:

  1:   
  2:   
  3:   
[sudo] chroot /mnt/oldlinux
# use sudo in debian based linuxes
# use su -c  or  su -  in red-hat based linuxes if needed

سپس دستورات زیر را اجرا می‌کنیم:

  1:   
  2:   
  3:   
  4:   
  5:   
  6:   
  7:   
  8:   
  9:   
[sudo] grub
# opens a grub shell
find /boot/grub/stage1
# returns the partition location in the form of (hd?, ?)
root (hd??)
# replace question marks with the exact values returend by the previous statement
setup (hd0)
# installs the Master Boot Record
quit

در دستورات بالا عباراتی که بعد از علامت #‌ می‌آیند توضیح هستند.

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

 

شنبه، مرداد ۰۵، ۱۳۸۷

رَندی پاش

من تا کنون «رَندی پاش» را نمی‌شناختم، تا این که در روز گذشته متوجه شدم بسیاری از وبلاگ‌های دنیا (بخصوص وبلاگ‌های کامپیوتری) از او صحبت می‌کنند و از سخنرانی معروفش در دانشگاه «کارنِگی ملون» آمریکا که در هجدهم سپتامبر ۲۰۰۷ انجام شده بود. عنوان سخنرانی‌اش این بود: «واقعا به رویاهای کودکی‌تان برسید» یا «آخرین سخنرانی». چون که حجم فیلم سخنرانی زیاد بود (۲۲۰ مگابایت) دودل بودم که آن را دانلود کنم یا نه. الآن، بعد از دیدن سخنرانی، بسیار خوشحالم که دانلودش کردم و آن را از خوش‌اقبالی‌های زندگی‌ام می‌دانم. این سخنرانی یک تراژدی پر از شور زندگی است. خیلی کم پیش آمده بود از ته دل بگویم به کسی حسودیم شده، اما من به «رندی پاش» حسودیم شد.

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

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

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

در بیست و پنجم جولای ۲۰۰۸ (یک روز قبل از تاریخ این پست)، «رندی پاش» در سن ۴۷ سالگی، در خانه‌ی خودش و در کنار همسر و سه فرزندش در گذشت.

لینک‌ها:
صفحه‌ی «آخرین سخنرانی»
«آخرین سخنرانی» در یوتیوب (حجم بالای فیلم، یک دیوار آجری است)
متن «آخرین سخنرانی»
«رندی پاش» در ویکیپدیا

گفتاورد:

دیوارهای آجری بی‌دلیل آن‌جا نیستند. دیوارهای آجری برای عقب نگه داشتن ما نیستند؛ دیوارهای آجری آن‌جا هستند تا به ما این امکان را بدهند تا بفهمیم به چه شدت چیزی را می‌خواهیم. دیوارهای آجری آن‌جا هستند تا کسانی را عقب نگه دارند که به اندازه‌ی کافی آن چیز را نمی‌خواهند. آن‌جا هستند تا جلوی آن «دیگران» را بگیرند!