Archive for the 'آکادمیا' Category



چی شد؟ این‌جا کجاست؟ من کیم؟

Published on مارس 2, 2010

اندر مصائب کار کردن در یک موضوع بین رشته‌ای و سر و کله زدن با دو فروند استاد نابغه با حوزه‌ها کاری متفاوت این است که امکان داره توی کامنت‌های مقاله‌ات که ۳ هفته‌ی پیش بهشون دادی، همچین جمله‌هایی را ببینی:

Why the following equations are part of the problem? What are all these equations?

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


کار و کاسبی من

Published on دسامبر 10, 2009

Trillions from MAYAnMAYA on Vimeo.

چند ماهی است که زمینه‌ی کاری‌ام را عوض کرده‌ام. تا وقت بشود و در موردش بنویسم به ویدئوی بالا نگاه کنید تا حدی گویای قضیه هست


نابغه‌ی بزرگ

Published on نوامبر 12, 2009

آقا یک ایده‌ای داشتیم ماه بود به خدا. یعنی یک چیزی من می‌گوم یک چیزی شما می‌شنوید. قرار بود پیاده‌سازیش کنم و بعد مقالش را بنویسم. و بعد هم که چاپ شد و  ملت مقاله‌ش را ‌خواندند همچین انگشت به دهان  بماندند که این نابغه تا به حال کجا بود، این خورشید تابان علم پس چرا نیومد توی دانشگاه ما توی آزمایشگاه ما کار کنه ( این آخریه را مخصوصا دلم می‌خواست که اون استاد بی‌ادب استنفورد که بهم پذیرش نداد می‌گفت). آره سرتون را درد نیارم یک هفته‌ای توی کف ایده‌ی خودم بودم. ۲-۳ روزی هم آمدم پیاده‌اش کنم و سرانجام امروز با دیدن نتایج دیدم که ای دل غافل، جواب این ایده‌ی ما با بهترین الگوریم موجود (از سال ۲۰۰۴) کاملا معادل از آب در در آمد :(

خلاصه این دفعه که نشد یک شبه و بدون دود چراغ خوردن آدم مشهوری بشویم و چشم ۳-۴ تا آدم خاص را از حسادت بترکونیم. خلاصه ما رفتیم تا ایده‌ی شهر آشوب بعدی را پیدا کنیم …


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

Published on نوامبر 10, 2009

فرض کنید N نفر از نخبگان گالیگولا (+ و +) (مثلا ۱۰ نفر) قرار است که در جلسه‌ی دیدار با نخبگان پادشاه گالیگولا شرکت کنند. قبل از ورود هر فرد به مکان جلسه به دستور پادشاه، کلاهی بر روی سر او گذاشته می‌شود، که این کلاه یا سفید است و یا سیاه. و البته این کلاه‌ گذاشتن‌ها به نحوی است که هیچ کس رنگ کلاه خودش را نمی‌فهمد ولی به همه‌ی افراد گفته می‌شود که حداقل یکی  از افراد حاضر در جلسه با کلاه سفید حاضر خواهد شد.

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

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

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

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

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

پس نوشت: در حل این مساله نه قرار نیست کسی تقلب بکنه و یا یواشکی کاری انجام دهد. در ضمن دوستی تذکر داد که این مساله با این فرضیات جواب قطعی ندارد. برای رفع این مشکل لازم است که یک مجموعه فرض به صورت زیر به مساله اضافه کنیم

۱-هر فرد شرکت کننده در جلسه به اندازه‌ی کافی باهوش است
۲- هر فرد شرکت کننده در جلسه می‌داند که سایر افراد شرکت کننده هم باهوش هستند.
۳- هر فرد شرکت کننده در جلسه می‌داند که سایر افراد شرکت کننده هم می دانند که سایر افراد شرکت کننده می‌دانند که سایر افراد شرکت کننده هم باهوش هستند
۴- هر فرد شرکت کننده در جلسه می‌داند که سایر افراد شرکت کننده هم می دانند که سایر افراد شرکت کننده می‌دانند که سایر افراد شرکت کننده می‌دانند هم باهوش هستند
۵- …


با حال‌ترین استاد دنیا!

Published on اکتبر 1, 2009

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

Hi everyone,

… I shall be away from campus from Oct. 1 to Dec. 31, 2009, (with the possible exception of Oct. 29 and 30).  In October …
Take care!

ostad dovomi.

کلا به نظر می‌رسه قراره که در ۴ سال آینده با باحال‌ترین استادهای روی زمین کار کنم.


بهینه‌سازی سرعت اجرای برنامه‌ها در Matlab -قسمت اول

Published on سپتامبر 13, 2009

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

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

موارد ۱ و ۲ را که در پست قبلی نوشته بودم. پس حالا می‌رویم سراغ مورد سوم:

۳- مشخص کردن گلوگاه‌های برنامه را می‌توان به عنوان گام بعدی برای هر گونه بهینه‌سازی بیان کرد. زیرا معمولا در هر برنامه یک یا چند نقطه‌ی گلوگاهی وجود دارد که باعث می‌شوند بهینه‌سازی سایر نقاط تاثیر چندانی بر عملکرد برنامه نداشته باشند.  به عنوان مثال، تصور کنید که برنامه‌ی شما ۲  تابع داشته باشد. که یکی ۹۸% زمان اجرا را به خود اختصاص بدهد و دیگری فقط ۲%. اگر شما حدس بزنید که با یک ساعت کلنجار رفتن با کد تابع اول می‌توانید آن را ۲ برابر سریع‌تر کنید و یا با صرف همین زمان بر روی تابع دوم  می‌توانید آن را ۲۰ برابر سریع‌تر کنید، ترجیح می‌دهید بر روی بهینه‌سازی کدام تابع کار کنید؟ ( بهینه‌سازی تابع اول زمان کلی را تفریبا نصف می‌کند ولی بهینه‌سازی تابع دوم تقریبا تاثیری روی زمان اجرای برنامه ندارد). وقتی شما یک تکه کد نوشته شده و آماده دارید دستور profiler در matlab می‌‌تواند بسیار کارگشا باشد. روش کار هم بسیار ساده است.

ابتدا در خط دستور بنویسید

>>profiler on
>>profiler clear

سپس برنامه‌ی خودتان را اجرا کنید و پس از اجرای آن بنویسید

>>profiler view

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

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

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

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

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

*قسمت بعدی احتمالا قسمت آخر این مجموعه می‌باشد.


بهینه‌سازی سرعت اجرای برنامه‌ها در Matlab -مقدمه

Published on سپتامبر 3, 2009

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

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

حالا از این حرف و حدیث‎ها که بگذریم و بیاییم سر اصل مطلب:

۱-  قبل از هر کاری، سعی کنید که دستورات matlab را به خوبی یاد بگیرید. عموما دستورات built-in بسیار بهینه نوشته شده‌اند و به درستی عملکردشان هم به خوبی می‌توان اعتماد کرد. پس گاهی بد نیست به جای اینکه سریع مشغول کد زدن بشویم، در ابتدای کار کمی هم وقت به یادگیری بیشتر matlab اختصاص بدهیم.

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

ادامه دارد …

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


تموم شد

Published on آگوست 19, 2009

تزم را دفاع کردم و تموم شد.


خداحافظ MCL

Published on آگوست 17, 2009

یارب مرا یاری بده تا خوب آزارش کنم

هجرش دهم، زجرش دهم ،خوارش کنم ،زارش کنم … +

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

از بوسه های آتشین ، وز خنده های دل نشین

صد شعله در جانش زنم،صد فتنه در کارش کنم

در پیش چشمش ساغری گیرم ز دست دلبری

از رشک آزارش دهم ،از غصه بیمارش کنم


اندر احوالات پت

Published on آگوست 12, 2009

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

قضیه از این قراره که بنده ۱۹ آگوست دفاع می‌کنم و بعد از دفاع اصولا باید اول یک دوش بگیرم تا رنگ قهوه‌ای ناشی از سوال و جواب‌های اعضای کمیته پاک بشود و بعد هم اصلاحات تز را انجام بدهم و تز را بدهم به کتابخانه. بعد هم از ۷ سپتامبر باید کارم را با ۲ تا استاد جدیدم شروع کنم. با خودم گفتم کمی جل بازی بد نیست و بهتره برای خود شیرینی هم که شده، کمی زودتر بهشون یک سری بزنم. به این بندگان خدا ای‌میل زدم که آره من می‌خوام خدمتان شرفیاب بشوم. و اما جواب استاد سخت کوبنده بود و فریاد از نهاد ما در آورد و آسمان را لرزاند.  فکرش را بکنید استاد آدم یادش رفته باشه که به آدم پذیرش داده ! و در جواب بگه که شرمنده و دانشجوی جدید نمی‌خواهم! حالا من نمی‌دونستم که گریه کنم و یا خنده.  البته چند ساعت بعد مشکل حل شد. (ولی  مت می‌گه بعید می‌دونم، این تازه اولشه ;) )  ولی خداییش داره جنسمون جور می‌شه تا حالا پت و مت داشتیم، ولی از امروز پت و مت و پنوس