بایگانی

بایگانی برای دسته ی ‘برنامه‌نویسی’

مسئله اینشتین : آیا جزو ۲ درصد مردم هوشمند جهان هستید ؟!!

۲۰ بهمن ۱۳۸۸ بهرام ۴ دیدگاه

این ترم برای هوش مصنوعی ، استادمون چندتا مسئله داده بود که یکیشون مسئله‌ی اینشتین (Einstein) بود. اینشتین ادعا کرده که ۹۸ درصد مردم جهان نمی‌تونن این مسئله رو حل کنن! حالا صرف‌نظر از روش‌های حل مسئله در هوش مصنوعی اگه می‌خواید هوش خودتون رو آزمایش کنید ، بفرمایید. البته من تا حالا افراد زیادی رو دیدم که این مسئله رو حل کردن و تا جایی که علمم قد بده ، بیشتر از ۲ درصد میشن (!!). به هر حال اگر کامپیوتر رو با انسان مقایسه کنیم و اون رو یک عامل هوشمند در نظر بگیریم ، پس باید بتونه اون رو حل بکنه ( چون به قدر کافی سریع و با دقت هست و هوش رو هم ما که هوشمند‌ترین عامل‌ها هستیم ، بهش داده‌ایم )

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

راهنمایی‌ها :

۱- مرد بریتانیایی در خانه قرمز زندگی می‌کند.

۲- مرد سوئدی سگ نگه می‌دارد.

۳- دانمارکی چای می‌نوشد.

۴- خانه سبز در سمت چپ خانه سفید قرار دارد.

۵- صاحب خانه سبز قهوه می‌نوشد.

۶- مردی که سیگار PallMall می‌کشد ، پرنده نگه می‌دارد.

۷- صاحب خانه زرد رنگ سیگار DunHill می‌کشد.

۸- مردی که در خانه وسطی زندگی می‌کند ، شیر می‌نوشد.

۹- مرد نروژی در خانه اول زندگی می‌کند.

۱۰- مردی که سیگار Blends می‌کشد در کنار مردی که گربه نگه می‌دارد زندگی می‌کند.

۱۱- مردی که اسب نگه می‌دارد ، در کنار مردی که سیگار DunHill می‌کشد زندگی می‌کند.

۱۲- صاحب خانه‌ای که سیگار BlueMaster می‌کشد ، آبجو می‌نوشد.

۱۳- مرد آلمانی سیگار Prince می‌کشد.

۱۴- مرد نروژی در کنار خانه‌ی آبی زندگی می‌کند.

۱۵- مردی که سیگار ‌Blends می‌کشد ، همسایه‌ای دارد که آب می‌نوشد.

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

( حل مسئله و توضیحات در ادامه‌ی نوشته )

ادامه ی نوشته

انتشار نسخه‌ی ۳٫۰٫۲ سیستم نظرسنجی آنلاین ITLPoll

۸ بهمن ۱۳۸۸ بهرام ۲ دیدگاه

بعد از حدود ۲ روز کار بر روی نسخه‌ی ITLPoll 3.0.1 حالا این نسخه‌ رو به همراه ویژگی‌های بسیار جدید تقدیمتان می‌کنم. تمام شدن ترم هم مزیت‌های خوبی داره که از جمله‌ی آن انتشار این نسخه از ITLPoll هست.

ویژگی‌ها و تغییرات اصلی در این نسخه به صورت زیر هستند :

۱- امکان انتخاب چندین گزینه به طور همزمان برای هر نظرسنجی

۲- کنترل بیشتر بر روی کوکی‌ها و امکان شرکت در نظرسنجی‌های جدید

۳- اصلاح مشکل لینکر صفحه‌ی خانگی (include_itlpoll.php)

۴- بهبود سازی قالب‌ها و پالایش بهتر بر روی متغیرهای ورودی و خروجی

توضیحی مختصر :

مورد اول که روشنه. مدیر سیستم می‌تونه در قسمت مدیریت برای هر نظرسنجی گزینه‌ی « نظرسنجی چندگانه » رو انتخاب کنه تا هر کاربر در هر بار شرکتش در نظرسنجی بتواند به جای تنها یک گزینه ، چند گزینه ( یک ، چند و یا همه‌ی گزینه‌ها ) را انتخاب کند.

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

مورد سوم مشکلی بود که دوستان بهم اطلاع دادن ( متاسفانه خودم متوجهش نشده بودم ! ) وقتی که کاربر سیستم را از طریق لینکر صفحه‌ی خانگی (include_itlpoll.php) در صفحه‌ی اول سایتش قرار می‌داد ، لینک‌های نتایج و آرشیو و کلید ثبت نتایج به همین صفحه‌ی جاری خانگی ( به جای پوشه‌ی اصلی ITLPoll ) اشاره می‌کردند که در این صورت در صفحه‌ی Pop-Up بازشده کل Home Page باز می‌شد که در این نسخه رفع شد.

(لینک دانلود در ادامه نوشته ) ادامه ی نوشته

مقدمه‌ای بر OpenGL در ++C

۱۱ دی ۱۳۸۸ بهرام بدون دیدگاه

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

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

نتیجه شد این که ۳۰ صفحه در مورد راه‌اندازی OpenGL و شروع برنامه‌نویسی در ویندوز XP به همراه Visual Studio 2005 . درسته ! خودمم خیلی دوست نداشتم روی این پلتفرم بنویسم ولی پیش خودم فکر کردم که اول باید چند فصل بنویسم که بچه‌ها کار با گنو/لینوکس رو یاد بگیرن. ولی خوشبختانه در این جزوه از کتابخانه‌ی قابل انتقال GLUT استفاده شده که کدها را بدون هیچ‌گونه تغییری می‌توانید در گنو/لینوکس به کار ببرید.

تنها چیزی که برای برنامه‌نویسی OpenGL بوسیله‌ی ++C در گنو لینوکس دارید این است که بسته‌ی freeglut را دانلود و نصب کنید. برای دبیان یا ابونتو کافی است که از سایت مخازن اون رو جستجو کنید تا به نام دقیق برسید ( برای مثال هم‌اکنون برای آخرین نسخه‌ی ابونتو باید این پکیج را نصب کنید freeglut3 و به همراه freeglut3-dev )

دلیل اینکه در گنو/لینوکس GLUT اصلی را نداریم ، آزاد نبودن کد اصلی آن است. ( این قضیه برای خود OpenGL هم صدق می‌کند که در گنو/لینوکس شبیه‌سازی آن یعنی Mesa 3D را داریم )

این جزوه به طور کامل تست شده و برای هر کدی که قرار داده شده ، خروجی آن نیز به صورت شکل آمده است.

شما را به خواندن مقدمه‌ی آن جلب می‌کنم :

ادامه ی نوشته

دسته هابرنامه‌نویسی, گرافیک برچسب ها:

بیایید با هم سوال برنامه‌نویسی حل کنیم و خوشحال شویم !!!

۳۰ آبان ۱۳۸۸ بهرام ۷ دیدگاه

اگر از خوانندگان وبلاگ این حقیر باشید ، حتما با مسابقه‌ی ACM آشنا هستید. ( اگر نیستید این پست را ببینید ) یه سایتی هست به اسم داور آنلاین Baylor ! که مربوط به برگزار کننده‌ی اصلی این مسابقات هست. این داور آنلاین شامل آخرین مسائل تمامی مناطق قاره‌ها هست. به طوری که می‌توانید آخرین سوالات سایت تهران را در آن ببینید.

اما نکته‌ی جالب این سایت امکان ارسال سوالات به داور آنلاین هست که پس از چند ثانیه ( گاهی چند صدم ثانیه !! ) بهتون میگه که برنامه‌تون درست هست یا نه !

برای این کار ابتدا باید در داور آنلاین ثبت نام کنید. سپس ایمیل فعال‌سازی دارید که (قطعا!) باید کلیک کنید تا اشتراک شما فعال بشود. سپس مسئله‌ی موردنظرتون رو جستجو کنید. و یا اینکه به ترتیب قاره‌ها اون‌ها رو انتخاب کنید.

پس از خواندن و حل مسئله باید در این صفحه شماره‌ی مسئله و کد کاربری خودتون رو وارد کنید و زبان برنامه‌نویسی که اون رو حل کردید انتخاب کنید. و فایل sourceتون رو انتخاب و submit رو بزنید. با زدن لینک View your submissions می‌تونید ببینید که درست حل کردید و یا اینکه چه Errorی گرفتید.

نکته‌ی دیگه در مورد زبان‌های برنامه‌نویسی هست که داور استفاده می‌کنه که جاوا مشکل زیادی داره. و خیلی از کتابخانه‌ها ( مثل java.util رو پشتیبانی کامل نمی‌کنه ) و همون طور که خودتون حدس زدید بدون اون هیچ‌کاری نمی‌تونید بکنید ( مثل map و stack و queue و … ! ) و همچنین فایل سورستون باید فقط یک کلاس داشته باشه و اگه شما بخواید که یک ساختار با یک کلاس تعریف کنید هیچ راهی ندارید !!!

پس با توجه به این موارد بنده ترجیح دادم در طول این یک سال آمادگی برای ACM سال بعد ، Java رو کنار بزارم و دوباره به ++C برگردم. و هم اکنون دارم با ++C کد می‌زنم.

ادامه ی نوشته

دسته هااخبار جدید, برنامه‌نویسی برچسب ها:

مسابقه اینترنتی برنامه نویسی ACM در دانشگاه ما

۲ آبان ۱۳۸۸ بهرام ۶ دیدگاه

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

در دانشگاه ما هم همین پنج شنبه مسابقه ی اینترنتی رو با حضور ۸ تیم ( ۳ نفره ) برگزار کردیم ( اولین دوره ی برگزاری مسابقات برنامه نویسی دانشجویی در کل استان ! برای ACM ) که برای بار اولمون خوب بود. بیشتر کار آماده سازی روی دوش تیم ما بود ( یعنی همون تیمی که پارسال هم رفته بودیم!) طوری که چهارشنبه ( روز قبل از مسابقه ) به طور کامل در سایت IT بودیم و مشغول آماده کردن سیستم ها . که این آماده کردن سیستم ها هم داستان جالبی داره. چهارشنبه صبح رفتیم که IDE ها و کامپایلرها رو روی سیستم های سایت IT نصب کنیم که دیدیم همه ی سیستم ها پر از ویروس بودن طوری که بعد از چند ثانیه وصل شدن به اینترنت سیستم ها Restart می شدند ( در حالی که برای مسابقه ی اینترنتی باید تا آخر مسابقه به اینترنت وصل باشید تا هرگونه تغییر و یا وقتی که سوال رو حل کردید ، بلافاصله اون رو بفرستید ) پس ما هم از مدیر سایت اجازه گرفتیم و تصمیم گرفتیم که روی سیستم ها Linux نصب کنیم. اونم چه لینوکسی … اوبونتو (Ubuntu). به طور آزمایشی روی یکی از سیستم ها نصب کردم و نتیجه ی خوبی گرفتیم. پس دست به کار شدیم و ۷ سیستم رو ( با کمک دوستان ) لینوکسی کردیم.

ادامه ی نوشته

دسته هااخبار جدید, برنامه‌نویسی برچسب ها:

تفاوت بین برنامه‌های Platform-Independent و Cross-Platform و نحوه‌ی پیدایش آن‌ها در سیر تکاملی برنامه‌نویسی

۱ مهر ۱۳۸۸ بهرام بدون دیدگاه

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

اگر تا کنون خودتان تعدادی برنامه‌ی متن‌باز دانلود کرده باشید ( و یا حتی بعضی برنامه‌های Closed Source نیز !) با این دو نوع برنامه مواجه شده‌اید. در صورتی که برنامه‌نویس هستید بایستی تفاوت این دو را به خوبی درک کرده باشید و در صورتی که هنوز درک نکرده‌اید هم اکنون دست به‌کار شوید (!).

زبان‌های قدیمی اکثرا به گونه‌ای بودند که امکان انتقال از یک بستر (Platform) به بستر دیگر را به برنامه‌نویس نمی‌دادند. دلیل آن هم وجود تعداد محدودی سیستم‌عامل انحصاری و همچنین برنامه‌های انحصاری برای آن‌ها بود. اما در دهه‌ی ۱۹۹۰ با آغاز جنبش نرم‌افزاری متن‌باز و GNU توسط ریچارد استالمن و تولد سیستم‌عاملی ( هم اکنون ) قدرتمند به نام Linux در آن زمان ، دیگر بستر و نرم‌افزارهای انحصاری کم کم محبوبیت خود را از دست دادند. چرا که برنامه‌نویسان سیستم‌عامل گنو/لینوکس تفاوت قابل ملاحظه‌ای با برنامه‌نویسان دیگر سیستم‌عامل‌های انحصاری ( مانند ویندوز و مک ) داشتند : « آنها برنامه‌هایی می‌نوشتند که تنها محدود به لینوکس نبود بلکه در اکثر بسترهای نرم‌افزاری و سخت‌افزاری بدون تغییر چندانی در کد ، اجرا می‌شدند »

ادامه ی نوشته

دسته هابرنامه‌نویسی برچسب ها:

آموزش نمایش تصاویر مستقل از فایل تصویری در PHP

۲۴ شهریور ۱۳۸۸ بهرام بدون دیدگاه

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

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

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

برای این کار ابتدا یک فایل تصویری ( ترجیحا PNG چون کد PHP را متناسب آن نوشته‌ایم ) را انتخاب کنید. سپس یک فولدر در وب سرور خود درست کنید. و فایلی با نام createcode.php را بسازید. در این فایل می‌خواهیم محتویات فایل تصویری را خوانده و سپس آن را با استفاده از تابع base64_encode رمزنگاری کنیم. چرا که اگر از این تابع استفاده نکنید ، در هنگام ذخیره کردن فایل PHP با encoding فایلتان مشکل پیدا خواهید کرد.

ادامه ی نوشته

دسته هابرنامه‌نویسی, وب برچسب ها:

تفاوت بین برنامه‌نویسی و اسکریپت‌نویسی

۲۴ شهریور ۱۳۸۸ بهرام ۴ دیدگاه

اولا اینکه آیا این موضوع اصلا اهمیت دارد ؟!! و همچنین ارزش گرفتن وقت ارزشمند شما را ؟!

پاسخ اینکه : « در صورتی که به خود برنامه‌نویس می‌گویید و تا کنون تفاوت این دو را درک نکرده‌اید ، یا هم اکنون این مقاله را بخوانید و یا اینکه بیخیال برنامه‌نویسی شوید ! »

قبل از شروع بحث در مورد تفاوت این دو در مورد ضعف زبان فارسی بگم (!)‌ اینکه باعث میشه که خیلی از کلمات انگلیسی رو غلط تلفظ کنیم. مثلا همین Script رو باعث می‌شه که به‌جای تلفط “سکریپت” ، “اسکریپت” تلفظ می‌شود. این اشتباه رو خیلی از فارسی زبانان مرتکب می‌شوند و دلیلش هم نبود واج صامت در ابتدای هیچ کدام از کلمات موجود در زبان فارسی هست که مجبوریم مصوتی مانند « إ » رو به ابتدای آن‌ها اضافه کنیم. ( به هر حال ما هم مجبوریم همین کار رو بکنیم ! )

به احتمال زیاد با زبان‌های اسکریپت‌نویسی زیادی تاکنون اسکریپت‌نویسی کرده‌اید که مشهورترین آن‌ها همان JavaScript است و در صورتی که هنوز به دنیای وب وارد نشده‌اید ( که خیلی بعید است ) حداقل یک اسکریپت پوسته‌ای نوشته‌اید. و همچنین در طرف دیگر حتما یک برنامه (Program) را نوشته‌اید. اگر هر دوی این کارها را کرده‌اید پس بایستی تفاوتی بین آن‌ها قایل باشید. نظر کلی در مورد تفاوت این دو رویه به این صورت قابل بیان است :

« در یک زبان برنامه‌نویسی شروع کننده ، کنترل کننده و در واقع خدای برنامه‌تان شما هستید و بیشتر برنامه را شما می‌نویسید ، اما در یک زبان اسکریپت‌نویسی به احتمال زیاد شروع‌کننده شما نیستید (!) شما تنها کاری که می‌کنید قطعه‌هایی از کد را می‌نویسید و مفسر آن‌ها را برای شما متصل می‌کند »

ادامه ی نوشته

دسته هابرنامه‌نویسی برچسب ها:

معجزه‌ی دیگر PHP سیستم‌عامل مبتنی بر وب eyeOS

۹ شهریور ۱۳۸۸ بهرام بدون دیدگاه

eyeOSlogo

با سلام ( برگشتی دوباره بعد از امتحانات ! )‌

قبل از هرچیز این ScreenShot رو ببینید ( لطفا ! )

بار دیگر PHP قابلیت و کارایی خود را در معجزه‌ای و در واقع سیستم‌عاملی به‌نام eyeOS نشان می‌دهد. برخلاف تحلیل‌های ( نه‌چندان ) علمی مایکروسافت‌زدگان ( همان غرب زدگان ! )‌ که PHP به خاطر نداشتن فضای نام (Name Space) و نداشتن فایل باینری جهت کاهش سربار سیستم ( و … ) (اینجا را ببینید ) پروژه‌ای بزرگ به نام eyeOS با مجوز AGPL نسخه سوم منتشر شده است. این سیستم‌عامل تحت وب تمامی آنچه از یک سیستم‌عامل قابل دسترس از همه‌جا ( ازطریق اینترنت ) انتظار دارید را فراهم می‌کند. از نرم‌افزار اداری Office گرفته تا Widget های دسکتاپ !

ادامه ی نوشته