• Code.org

    24 Mar 2015

    به نام خدا

    شاید اسم برنامه‌ی «ساعتی با کد» یا "Hour of Code" رو شنیده باشید. هدف این برنامه اینه که در طی یک ساعت، تجربه‌ی ایجاد برنامه رو به افراد مختلف ارائه بکنه.
    سایت Code.org که موسس آن هادی پرتوی هست، مجری این برنامه در جهان هست. در این سایت افراد می‌تونن در قالب کاراکترهای مشهوری مانند پرنده‌های بازی Angry Birds یا کاراکترهای انیمیشن Frozen تکه‌کدهایی بنویسن و تجربه‌ی برنامه‌نویسی رو داشته باشن. دوره‌ی اول کدنویسی در این سایت که حداکثر شاید یک ساعت طول بکشه یک برنامه‌ی مفرح و شاد هست که فرد در طی اون در قالب یک محیط بازی، حرکت کاراکتر رو با استفاده از بلوک‌های اجرایی به عنوان تکه‌های کد، ایجاد می‌کنن. در این محیط فرد با استفاده از برنامه‌نویسی بلوکی، به جای نوشتن کد به صورت متن، با استفاده از کدهایی منطق بازی رو پیاده‌سازی می‌کنه. در طی این یک ساعت مفاهیمی مثل خط‌به‌خط اجرا شدن کد، تکرار در کد (loop) و همچنین شرط در اجرای کد آموزش داده میشن. بدلیل سادگی محیط، تموم‌کردن ساعتی با کد حتی برای بچه‌ها هم ممکنه و فکر می‌کنم براشون لذت‌بخش باشه. نکته‌ی جالبی که در مورد این برنامه هست اینه که نزدیک 108 میلیون نفر که بیشتر دانش‌آموز هستن تا به حال این برنامه رو انجام دادن و این برنامه از طرف افراد مهمی در تکنولوژی مثل بیل گیتس، استیو بالمر و مارک زاکربرگ تبلیغ و حمایت میشه. افراد مختلفی از قشرهای مختلف هم در فیلم‌های آموزشی این برنامه وجود دارن. مثلاً آموزش اولیه رو یک خانم مدل که برنامه‌نویس هم هست میده، یا شرط‌ها رو یک بسکتبالیست تدریس می‌کنه. این عمومیتی که در آموزش‌ها نمایش داده میشه به مردم نشون میده که هر کسی می‌تونه کد بنویسه و کسایی که کد می‌زنن آدمای عجیب‌غریبی نیستن. این بخصوص می‌تونه به دانش‌آموزها دید خوبی بده تا شاید حاضر بشن در آینده به علوم کامپیوتر بپردازن. با توجه به سیر تغییر دنیا، به نظر میرسه که آینده به مهندسان کامپیوتر بیش‌ازپیش نیاز خواهد داشت. حتی اگر کسی مهندس کامپیوتر هم نشد، باید حداقل سواد و شناختی در مورد سیستم‌های کامپیوتری که در همه‌جا وجود دارن داشته باشن.

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

    Code.org Hour of Code certificate

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

    یک نکته‌ی مثبت دیگه هم اینه که این سایت نسخه‌ی فارسی هم داره. یادتون باشه از پایین صفحه زبان رو فارسی انتخاب کنید تا همه‌ی نوشته‌های سایت فارسی بشن. همچنین در این صورت زیرنویس ویدیوها هم فارسی میشه.

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


  • OpenCV آسان در ویندوز با استفاده از Ceemple

    به نام خدا

    OpenCV

    یکی از مهم‌ترین کتابخانه‌های پردازش تصویر و بینایی ماشین، کتابخانه‌ی OpenCV هست. این کتابخانه که با استفاده از C/C++ نوشته شده و بسیاری از الگوریتم‌های مورد نیاز برای پردازش تصویر، بینایی ماشین و یادگیری ماشین رو پیاده‌سازی کرده. این کتابخانه از بسیاری از سیستم‌های عامل و معماری‌های سخت‌افزاری پشتیبانی می‌کنه و تقریباً همه جا می‌تونید ازش استفاده بکنید. همچنین اگر با زبان C++ راحت نباشید، این کتابخانه رو میشه به راحتی از زبان‌های جاوا و پایتون هم صدا زد و استفاده کرد.

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

    Ceemple OpenCV for Visual Studio

    دریافت این افزونه

    Ceemple OpenCV for Visual Studio

    Ceemple یک راه‌حل مناسب برای این مشکل ارائه داده. اونا یک extension برای ویژوال استودیو ارائه دادن که شامل OpenCV 3.0 کامپایل‌شده و آماده‌ی استفاده به همراه کتابخانه‌های جانبی مهمی مثل CUDA، OpenCL، OpenMP و IPP هست. شاید اطلاع داشته باشید که خود OpenCV هم DLLهای از پیش‌ساخته‌شده‌ی کتابخانه رو برای ویندوز ارائه میده. ولی این فایل‌ها، با حداقل استفاده از کتابخانه‌های جانبی بخصوص CUDA و IPP ارائه میشن که این موضوع باعث میشه این کتابخانه از تمام امکانات سخت‌افزاری برای پردازش بهره نبره. ولی در نسخه‌ای که Ceemple ارائه میده، این کتابخانه‌های مهم جانبی وجود دارن و شما می‌تونید از سرعت بیشتر اجرای کد بر روی پردازنده‌ یا پردازنده‌ی گرافیکی خودتون استفاده کنید.

    همچنین با نصب این افزونه، امکان ساخت پروژه‌های OpenCV به صورت مستقیم از درون ویژوال استودیو ایجاد میشه. به این ترتیب خیلی سریع و بدون نیاز به تنظیم دسترسی پروژه به فایل‌های header و dll و lib مربوط به OpenCV و کتابخانه‌های جانبی، می‌تونید شروع به کد زدن بکنید و به تولید برنامه بپردازید.

    New OpenCV project dialoge in VS

    علاوه بر نکات مثبت گفته شده، با نصب این افزونه، افزونه‌ی Image Watch هم بر روی ویژوال استودیو نصب میشه. این افزونه‌ی بسیار مفید به شما در هنگام debug کردن برنامه در ویژوال استودیو کمک می‌کنه. با استفاده از این افزونه، در هنگام debug کردن، می‌تونید تصاویری که در کدتون استفاده می‌کنید و بر روی حافظه هستن رو ببینید و به راحتی به جریان کدتون پی ببرید و مشکلات احتمالی رو به راحتی پیدا و رفع کنید. این افزونه بسیار افزونه‌ی مفیدیه و برای کارهای پردازش تصویر و بینایی ماشین بسیار توصیه میشه. (توضیح بیشتر در مورد Image Watch)

    Image Watch VS extension

    توجه: تصاویر برگرفته از سایت ceemple هستند.

    به‌روزرسانی 1

    با استفاده از biicode هم می‌تونید به سادگی از OpenCV استفاده کنید. در این لینک در این مورد توضیح داده شده.


  • نصب کتابخانه‌ی Theano در ویندوز

    به نام خدا

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

    یکی از حوزه‌هایی که از این مورد مستثنی نیست، موضوع کتابخانه‌های مربوط به یادگیری عمیق یا Deep Learning هست. از روی مشاهداتم می‌تونم بگم که بیشترین کتابخانه‌ها برای اینکار رو زبان پایتون داره و حتی اگر کتابخانه‌ای مثلاً در زبانی مثل C++ نوشته شده باشه، به احتمال زیادی یک پوشش (wrapper) برای زبان پایتون داره.

    یک منبع مناسب که تعدادی از کتابخانه‌های مربوط به یادگیری عمیق رو با هم مقایسه کرده، soumith/convnet-benchmarks هست. در اینجا می‌تونیم ببینیم که سهم زبان‌های Python و Lua در کنار زبان C++ از کتابخانه‌های با کیفیت و مطرح بالا است.

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

    معرفی Theano

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

    Theano is a Python library that allows you to define, optimize, and evaluate mathematical expressions involving multi-dimensional arrays efficiently.

    از ویژگی‌های این کتابخانه میشه به تعامل با کتابخانه‌ی NumPy (استفاده از numpy.ndarray)، استفاده از واحد پردازش گرافیکی برای تسریع عملیات، مشتق‌گیری سریع عبارت‌های ریاضی و همچنین تولید پویای کد به زبان C اشاره کرد. این کتابخانه توسط آزمایشگاه LISA دانشگاه مونترال کانادا تهیه میشه و معمولاً شامل جدیدترین الگوریتم‌ها و معماری شبکه‌های عمیق از جدیدترین مقالات هست.

    نصب Theano

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

    git clone https://github.com/Theano/Theano
    

    بعد از گرفتن کد مربوط به این کتابخانه، در مسیر کاربری خودم در ویندوز، یعنی C:\Users\<username>\، یک فایل با نام .theanorc ایجاد کردم تا بتونم در این فایل تنظیماتی رو به این کتابخانه بدم. تنظیمات مربوط به طور کامل در این آدرس نوشته شده. بعد از اینکه فایل تنظیمات مورد نظر رو تکمیل کردم (تنظیمات مربوط به CUDA رو هم اعمال کردم) با دستور زیر کتابخانه ساخت و نصب شد، به همین سادگی

    cd theano
    python setup.py install
    

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

    cd theano\misc
    python check_blas.py
    

    Pylearn2

    کتابخانه‌ی Pylearn2 یک کتابخانه‌ی یادگیری ماشین هست که بر روی کتابخانه‌ی Theano توسط آزمایشگاه LISA ایجاد شده. این کتابخانه به سرعت در حال تغییره و الگوریتم‌های بسیاری بهش اضافه میشن. به نظر میومد که نصب این کتابخانه چون وابسته به theano بود خیلی سخت نباشه، ولی اینطوری نبود. طبق معمول بقیه‌ی کتابخانه‌ها، کد این کتابخانه رو از روی گیت‌هاب گرفتم. بعد که خواستم نصبش کنم، با این خطا مواجه شدم که نمی‌تونست کامپایلر Microsoft Visual C++ 2008 یا همون VC90 رو پیدا بکنه. قبلاً هم این مشکل رو داشتم ولی تونسته بودم حلش کنم (در اینجا توضیح دادم چطوری)،ولی این بار متاسفانه مشکل به این راحتی حل نشد.

    با وجود اینکه تنظیمات رو تغییر دادم تا از کامپایلر Microsoft Visual C++ 2013 یا همون VC120 استفاده بشه، ولی باز درخواست کامپایر قدیمی رو می‌کرد. چاره‌ای نداشتم جز اینکه این کامپایلر رو نصب کنم. خوشبختانه برای حل این مشکل مایکروسافت یک دانلود کم حجم از این نسخه از کامپایلر برای پایتون 2.7 قرار داده. از این آدرس میشه این نسخه از کامپایلر رو دانلود کرد. بعد از نصب این نسخه‌ی قدیمی از کامپایلر مشکل پیدا کردنش حل شد، ولی در کل استفاده از چنین نسخه‌ی قدیمی مشکل‌سازه. از توی کد کتابخانه نتونستم چیزی پیدا کنم که مربوط به محدودیت استفاده از این نسخه از کامپایلر باشه، بنابراین حدس می‌زنم که مشکل از setuptools پایتون هست. بعد از کمی جستجو و پیدا کردن پروژه‌ای موسوم به Python Wheels حدسم قوت گرفت. فکر می‌کنم مشکل از همین باشه و این پروژه سعی داره این مشکل رو حل بکنه. فعلاً که خیلی از کتابخانه‌های مطرح پایتون از این پروژه پشتیبانی نمی‌کنن، چه برسه به پروژه‌ای مثل Pylearn2. خلاصه در نهایت مجبور به استفاده از همین نسخه از کامپایلر شدم.

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

    python setup.py develop
    

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

    LINK : fatal error LNK1181: cannot open input file 'Vault\Github\pylearn2\pylearn2\utils\_window_flip.pyd'
    error: Command "C:\Users\Erfan\AppData\Local\Programs\Common\Microsoft\Visual C++ for Python\9.0\VC\Bin\amd64\link.exe /DLL /nologo /INCREMENTAL:NO /LIBPATH:C:\Anaconda\libs /LIBPATH:C:\Anaconda\PCbuild\amd64 /EXPORT:init_window_flip build\temp.win-amd64-2.7\Release\pylearn2/utils\_window_flip.obj /OUT:E:\Code Vault\Github\pylearn2\pylearn2\utils\_window_flip.pyd /IMPLIB:build\temp.win-amd64-2.7\Release\pylearn2/utils\_window_flip.lib /MANIFESTFILE:build\temp.win-amd64-2.7\Release\pylearn2/utils\_window_flip.pyd.manifest" failed with exit status 1181
    

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

    python setup.py install
    

    بعد از این کار و نصب ظاهراً موفق این کتابخانه، با اجرای دستور import pylearn2، پیام اخطاری مشاهده نشد. بنابراین احتمالاً بدون خطا نصب شده. البته باید بیشتر از کتابخانه استفاده بکنم تا بفهمم که آیا درست نصب شده یا نه.

    Lasagne, blocks

    این دو کتابخانه به طور خاص برای ساخت شبکه‌های عصبی و بخصوص شبکه‌های عمیق ساخته شدن. هر دو مبتنی بر Theano هستن و هدف هر دو ساده‌تر کردن و ماژولار کردن ساخت این شبکه‌ها و پیاده‌سازی یادگیری این شبکه‌ها است.

    نصب این دو کتابخانه هم خیلی ساده بود. بعد از این که کد هر کدوم رو از گیت‌هاب گرفتم، با دستور python setup.py install هر دو به سادگی نصب شدن.

    جمع‌بندی

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

    لازم هست بگم که از Windows 8.1 Pro x64 و CUDA 6.5 بر روی nVidia Quadro K1100M استفاده می‌کنم. همچنین پایتون رو با استفاده از Anaconda روی ویندوز نصب کردم؛ نسخه‌ی 2.7.6 پایتون بر روی Anaconda نسخه‌ی 2.0 به طور دقیق‌تر. نصب پایتون رو از این طریق خیلی پیشنهاد می‌کنم. چون بسیاری از کتابخانه‌های مهم پایتون همراه باهاش نصب میشن و یه IDE خوب به نام Spyder هم نصب میشه که خیلی می‌تونه کمک دست خوبی باشه.

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

    در آینده، انشالله، بیشتر در موردشون خواهم نوشت.


  • کامپیوترهایی که یاد می‌گیرند

    به نام خدا

    امروز یک ویدیو بسیار جالب از TEDxBrussels میدیدم در مورد کامپیوترهایی که می‌توانند یاد بگیرند. جای تعجب نداره که صحبت در مورد پیشرفت‌هایی بود که از طریق به کارگیری چارچون یادگیری موسوم به یادگیری عمیق (Deep Learning) به دست آمده. باز صحبت در مورد این بود که کامپیوترها قراره بسیاری از شغل‌های انسانی رو در اختیار بگیرن. ولی در این صحبت روی دو جنبه‌ی دیگه هم بحث کوتاهی شد که کمتر قبلاً دیده بودم.

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

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

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

    این هم ویدیویی که در موردش گفتم، با سخنرانی آقای Jeremy Howard


  • سال 2014 با پاکت

    17 Dec 2014

    به نام خدا

    امروز ایمیلی از طرف پاکت بهم رسید که در اون نوشته شده بود من جزو Top 5% readers پاکت شدم.

    Year in Pocket total stats

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

    My 2014 Year in Pocket

    Year in Pocket weekly stats

    امیدوارم در سال بعد، یعنی سال 2015، بیشتر مطالعه داشته باشم، هم با استفاده از این سرویس، هم به طرق دیگه.


  • 1024 vs. 1000

    07 Dec 2014

    به نام خدا

    راستش رو بخوایید من هم هنوز دقیق نمی‌دونم وقتی به مدل‌های مختلفی می‌نویسن منظور کدومه.

    1024 vs. 1000


  • دومین سالگرد وبلاگ :)

    17 Oct 2014

    به نام خدا

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

    البته نوشتن که چه عرض کنم، بیشتر با چند تا عدد بازی کنم و یه چندتایی نمودار بکشم. هدف بیشتر کار با matplotlib بود تا کار مهم دیگه‌ای.

    تو این مدت دو ساله، 77 پست رو ارسال کردم تو اون یکی بلاگم

    Timeline post distribution

    Timeline post distribution

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

    از نظر زمانی فکر می‌کردم بیشتر پست‌هام رو در روزهای آخر هفته می‌نوشتم. ولی این نمودار چیز دیگه‌ای رو نشون میده

    Weekly post distribution

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

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

    Daily post distribution

    البته خیلی هم مطابقت نداره با حدسم. بیشترین پست‌ها رو ساعت 20 شب منتشر کردم. در حالی که من حدس می‌زدم زمان ارسال‌هام چند ساعتی دیرتر باشن. این نکته هم جالبه که ساعت 2 و 3 بامداد و همچنین نیمه‌ی روز هیچوقت ارسال پست نداشتم.

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

    نمودار پایین هم توزیع پست‌ها بر اساس طولشون رو نشون میده. هر دسته بازه‌ای به طول 400 کلمه است.

    Daily post distribution

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

    Post length vs. Publishing time scatter plot

    یا اگر جور دیگه‌ای بهش نگاه کنیم، اینطوری:

    Post length vs. Publishing time hex plot

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

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

    Post Similarity Matrix

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

    برای نمایش مطلب باید رمز عبور را وارد کنید

    و اینطوری بود که از راز شباهت این سه پست هم پرده برداشته شد :دی

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

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


  • حل مشکل درایورها پس از ایجاد مشکل توسط Windows Update

    به نام خدا

    چند روز پیش سری به قسمت آپدیت‌های ویندوز آپدیت زدم. من خودم نصب آپدیت‌های ویندوز را در حالت خودکار گذاشتم ولی هر از چند گاهی به قسمت آپدیت‌های ویندوز سر می‌زنم تا ببینم آپدیت‌های اختیاری جدیدی وجود دارند یا نه. این با که به این قسمت سر زدم، با آپدیت جدیدی برای درایور Intel HD Graphics مواجه شدم. اینتل از چند نسل قبل در پردازنده‌های خود یک پردازنده‌ی گرافیکی نیز تعبیه کرده است. این پردازنده‌ی گرافیکی با اینکه در ابتدا توان بسیاری نداشت، ولی در نسل‌های اخیر پردازنده‌های اینتل به پردازنده‌ی بسیار قدرتمندی تبدیل شده است. همچنین به دلیل یکپارچه بودن با پردازنده، ویندوز بسیاری از پردازش‌های گرافیکی را توسط این پردازنده‌ی گرافیکی انجام می‌دهد. در این صورت بار محاسباتی بر روی پردازنده‌ی اصلی کمتر شده و همچنین مصرف برق نیز کاهش میابد. به همین خاطر است که بروزرسانی درایور این پردازنده‌ی گرافیکی در بهتر کردن تجربه‌ی کاربری ویندوز مفید است. البته این بار بعد از به روزرسانی درایور پردازنده‌ی گرافیکی اینتل از طریق Windows Update مشکلی رخ داد. اولین مشکل عمده این بود که امکان تغییر روشنایی نمایشگر از بین رفت و نمایشگر در روشن‌ترین حالت خود قرار گرفت و این آزاردهنده بود. مشکل دوم این بود که کیفیت تصویر به میزان بسیار قابل توجهی کاهش یافت و این مشکل، حتی بیشتر آزاردهنده بود. پس از نصب چندین و چند باره‌ی انواع درایور دیگر که اتفاقاً جدیدترین درایورها از طرف اینتل و همچنین Lenovo بودند، باز این مشکل برطرف نشد.

    در نهایت به راه‌حل جالب دیگری دست یافتم. البته این راه‌حل، دست‌مایه‌ی جستجوهای فراوان در اینترنت است.

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

    (اگر آپدیتی از طرف Windows Update مشکلی ایجاد کرد، راه‌حل کلی این است که آپدیت مورد نظر را پاک کنید، ولی کاهی امکان پاک‌کردن بعضی آپدیت‌ها وجود ندارد؛ مورد اخیر نیز از این دسته آپدیت‌ها بود)

    راه حل

    1. به Device Manager بروید. در ویندوز 8 می‌توان با جستجوی این عبارت به مکان مورد نظر رفت. در ویندوزهای قبلی نیز می‌توان با راست‌کلیک بر روی آیکون My Computer و انتخاب Manage، به Device Manager رفت.
    2. از لیست سخت‌افزارها، سخت‌افزار مورد نظر که درایور آن مشکل پیدا کرده است را پیدا کنید.
    3. بر روی نام درایور راست‌کلیک کنید و گزینه‌ی

      Update Driver Software...

      را انتخاب کنید.

    4. در صفحه‌ای که باز می‌شود گزینه‌ی

      Browse my computer for driver software

      را انتخاب نمایید.

    5. در صفحه‌ی بعدی که باز می‌شود، گزینه‌ی

      Let me pick from a list of device drivers on my computer

      را انتخاب کنید.

    6. در نهایت، در صفحه‌ای که باز می‌شود، از لیست موجود، درایوری از تاریخی گذشته را که سخت‌افزار بدون مشکل عمل می‌کرد انتخاب نمایید. توجه کنید که تیک قسمت Show Compatible Hardware زده شده باشد.

    Device Manager - Revert to old driver software

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


  • Ray Kurzweil on Singularity 1 on 1

    22 Aug 2014

    به نام خدا

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


  • OpenCV Python Starter Code

    به نام خدا

    معمولاً رسم هست که اولین کد در هر زبان برنامه‌نویسی رو با چاپ کردن عبارت Hello World در خروجی شروع می‌کنند.

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

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

    نمونه کد

    import numpy as np
    import cv2
    
    # Open the webcam to grab frames and display them
    cap = cv2.VideoCapture(0)
    
    while(True):
        ret, frame = cap.read()
        gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)
        cv2.imshow('frame',gray)
        if cv2.waitKey(1) & 0xFF == ord('q'):
            break
    
    # When everything done, release the capture
    cap.release()
    cv2.destroyAllWindows()
    

    Sample code source: [OpenCV-Python-Tutorials]

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