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

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

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

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

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

 

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

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

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

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

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

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

ساختن فرم فرزند 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

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

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

 

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

رَندی پاش

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

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

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

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

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

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

گفتاورد:

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

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

خودت را ببخش

با الهام از این پست وبلاگ سپهر...

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

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

شنبه، تیر ۲۲، ۱۳۸۷

جوان و پیر کدام است؟

زمان نمی‌گذرد، عمر ره نمی‌سپُرَد!
صدای ساعت شمّاطه، بانگ تکرار است.
نه شنبه هست و نه جمعه!
                                     نه پار و پیرار است!
جوان و پیر کدام است؟ زود و دیر کدام؟

اگر هنوز جوان مانده‌ای به آن معناست،
که عشق را به زوایای جان صلا زده‌ای.
ملال پیری اگر می‌کُشد تو را، پیداست؛
که زیر سیلی تکرار،
                           دست و پا زده‌ای!

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

فریدون مشیری

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

ذهن‌های ویروسی و ویروس‌های ذهنی

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

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

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

 

گفتاورد:

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

مارک تواین