Tremulous را با bot ها آفلاین بازی کنید.

این چند وقت خبری از من نبود (چه بهتر :mrgreen: ) در واقع با بازی Tremulous سروکله می‌زدم! بازی Tremulous را حتماً می‌شناسید، بازی تحت شبکه‌ای که انسان‌ها و بیگانه‌ها بصورت گروهی با یکدیگر مبارزه می‌کنند، سبک بازی از نوع استراتژیک – اکشن (strategic – action) محسوب می‌شود.

قبل از هر چیز واژه bot را برای دوستان تعریف کنم، bot چیست؟ در بازی‌های چند نفره، شما نمی‌توانید به تنهایی بازی کنید زیرا این نوع بازی‌ها نیازمند به تعداد افراد زیادی است، مثلاً ۱۰ نفر باید همگی از طریق شبکه به یکدیگر وصل شده و با همدیگر بازی کنند. بازی Tremulous نیز یک بازی چند نفره محسوب می‌شود و شما به تنهایی نمی‌توانید آن را بازی کنید. bot چیزی است که در اینجا سودمند است، bot بازیکنی است که توسط کامپیوتر (رایانه) کنترل می‌گردد و به عبارتی، bot یک حریف یا یک هم تیمی کامپیوتری و از پیش برنامه‌نویسی‌شده است. بنابراین در صورت عدم وجود اتصال به شبکه و یا در صورت نبودن سایر افراد، شما می‌توانید بدون نیاز به اتصال به شبکه و بدون نیاز به سایر افراد، به تنهایی با bot ها بازی کنید. bot ها هم می‌توانند در گروه دشمن باشند و برای کشتن شما یورش ببرند و هم می‌توانند هم تیمی شما باشند و به شما در کشتن و پیروزی بر دشمن کمک کنند. بطور خلاصه، bot ها جای انسانهای زنده (سایر افراد و کاربرها) را می‌گیرند و نیاز اتصال به شبکه را از بین می‌برند. می‌توانید bot ها را بازیکن‌های کامپیوتری نام ببرید.

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

بنابراین در حالت عادی و بدون استفاده از bot، همه نیازمند به اینترنت پرسرعت هستند تا بتوانند بازی Tremulous را به خوبی تحت شبکه و با سایر کاربران بازی کنند. متاسفانه سرویس‌های ISP در ایران که خدمات اتصال به اینترنت را از طریق ADSL ارائه می‌کنند دارای زمان ping ضعیفی هستند. زمان ping هر چه کمتر باشد بهتر است، زمان ping برای سایت‌ها و سرورهای مختلف متفاوت است، مثلاً زمان ping اتصال اینترنت من برای ارتباط با سایت yahoo.com در حدود ۳۵۰ میلی‌ثانیه است در حالی که این زمان برای شخصی که از اروپا بازی می‌کنند می‌تواند در حدود ۵۰ باشد. زمان ping اتصال اینترنت من حدود ۳۵۰ است یعنی ۳۵ صدم ثانیه (یا ۳۵۰ هزارم ثانیه) طول می‌کشد تا من بتوانم بفهمم که یک نفر به طرف من شلیک می‌کند.

زمانیکه بدور از اتصال شبکه و به تنهایی با bot ها بازی می‌کنید، ۳ مزیت را احساس خواهید کرد:

  • یک سرور شخصی برای بازی Tremulous با تمام امکانات خواهید داشت و می‌توانید تجربه‌های خوبی را کسب کنید.
  • زمان ping شما در بازی بسیار بسیار کم خواهد بود، زیرا سرور بازی بر روی سیستم خود شماست بطوریکه زمان ping من در این حالت فقط ۷ میلی‌ثانیه است، در حالیکه قبلاً ۳۵۰ میلی‌ثانیه بود!
  • به راحتی می‌توانید تمرین کنید و بازی خود را بهبود ببخشید و یا اینکه حتی می‌توانید با دوستان خود در کنار bot ها بصورت چندنفره بازی کنید، bot ها جای خالی افراد را پر می‌کنند.

این یک مقدمه ساده از bot ها بود. شاید اسم TremFusion را نیز شنیده باشید، TremFusion جدیدتر از Tremulous (که به همراه توزیع‌های گنو/لینوکس عرضه می‌شود) بوده و امکانات بیشتری نسبت به آن دارد. برای استفاده از bot ها بهتر است که از TremFusion استفاده کنید، البته با Tremulous هم می‌شود ولی نیاز به کارهای بیشتری است. بنابراین در ابتدا TremFusion را نصب کنید، روند نصب آن را در ادامه خواهم گفت. سپس باید bot ها را آماده کنید. روند توسعه bot برای بازی Tremulous به اینصورت بوده است که ابتدا فردی به نام امین (یک ایرانی) اولین bot را برای Tremulous نوشت و کد منبع آن را به نام AmineBot به صورت آزاد در اختیار دیگران قرار داد، AmineBot جالب بود و به محض دیدن دشمن به سمت آن شکلیک می‌کرد یا ضربه می‌زد و به سمت آنها می‌رفت و می‌جنگید. اما به عنوان یک bot برای بازی Tremulous کافی نبود، سپس اشخاص دیگری AmineBot را توسعه دادند تا در نهایت شخصی PathBot را عرضه کرد. PathBot یا به اختصار PBot، این امکان را به bot ها می‌داد تا بر اساس مسیرها کار کنند و در نقشه بازی حرکت کنند و به سمت دشمن و ابزارهای دفاعی آنها حمله کنند. bot ها می‌توانند ارتقاء پیدا کنند، بیگانه‌ها به موجودات قوی‌تر تبدیل می‌شوند و انسان‌ها نیز زره و اسلحه خود را ارتقاء می‌دهند. bot ها در PBot توانایی‌های زیر را دارند:

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

در حال حاضر جدیدترین نسخه PBot 3.0 است و در صورتی که از آن استفاده کنید، دستورات جدیدی را می‌توانید در کنسول وارد کنید (برای دسترسی به کنسول، کلید ~ را فشار دهید). متاسفانه PBot 3.0 بیش‌ازحد بر روی Game Play تغییرات اعمال کرده است ولی خوشبختانه چون کد منبع آن باز و آزاد است، براحتی می‌توانید این تغییرات را به حالت پیش‌فرض و عادی بازگردانید، من نیز چنین کردم و تغییراتی که اعمال کرده‌ام را نیز در اختیار شما قرار خواهم داد.

این یک مقدمه بود در نوشته بعدی، روش انجام کارها را خواهم گفت…

دبیان Testing، دبیان پایدار آینده

بعد از مدت‌ها خودم را از شر زورگویی‌های اینترنت Dial-up رها کردم و دنیا ترکید تا من هم مودم ADSL بگیرم. جداً تبریک می‌گویم به این سنت‌شکنی دیرینه :grin: سریعاً هم فایل ISOی کم حجم سیستم‌عامل دبیان Testing را از این لینک گرفتم تا در حین نصب، بسته‌های مورد نیاز را از اینترنت نصب کند که با توجه به انتخاب‌های من، حدوداً 1GB دانلود شد! خلاصه چند نکته جالب (بعد از اتمام نصب) توجه من را به خودش جلب کرد. اول از همه GRUB 2 بود که تصویر (کارتونی) سفینه‌ای که از کره زمین خارج می‌شود، برای پیش‌زمینهٔ آن انتخاب شده و در کنارش نوشته بود: «The Universal Operating System» که بهترین جمله برای معرفی دبیان بود. من در این نسخه از دبیان به راحتی می‌توانم سیستم را به حالت تعلیق (Stand by یا Suspend) در بیاورم، کاری که هیچوقت در گنو/لینوکس موفق به انجام آن نشده بودم و این بسیار خوشحال‌کننده بود. قالب پارتیشن‌های HDD را همگی از نوع ext4 انتخاب کردم (به عبارتی دل به دریا زدم با توجه به جدیدالورود بودن این File System). یک هدفون هم دارم که تاحالا موفق نشدم چه در دبیان پایدار (Lenny) و چه در ویندوز ۷ راه‌اندازیش کنم، فکر می‌کردم مشکل سخت‌افزاری دارم :smile: اما حالا به خوبی مثل ساعت در دبیان Testing کار می‌کند. کارت TV هم که مثل همیشه به خوبی در دبیان کار می‌کند، متاسفانه من هیچوقت نتوانستم در ویندوز به راحتی با کارت TV کار کنم، بطوریکه در ویندوز ۷ حتی نتوانستم راه‌انداز (driver) آن را پیدا کنم. در گنو/لینوکس برنامه XDTV برای معماری ۶۴بیت (یعنی amd64) آماده نیست پس برای ضبط تصویر از روی کارت TV باید به فکر گزینه‌های دیگری همچون mencoder باشم! همچنین در دبیان Testing از نسخه سوم GDM برای صفحه Login استفاده شده و نسخه هسته (kernel) نیز 2.6.32 است. راه‌انداز رسمی کارت گرافیک NVIDIA را هم از سایتش گرفتم و به جای ماژول Nouveau قرار دادم، ماژول Nouveau که قرار است در آینده جای راه‌اندازهای رسمی کارت گرافیک NVIDIA را بگیرد متاسفانه هم‌اکنون از شتاب‌دهنده سه‌بعدی پشتیبانی نمی‌کند و در وضعیت exprimental به سر می‌برد.

ابزار Disk Utility که توسط شرکت RedHat نوشته شده، بطور پیش‌فرض همراه با دبیان Testing نصب می‌شود، این ابزار به جای GParted قرار گرفته است و به نظر من ابزار بسیار خوبی برای پارتیشن‌بندی HDD است. برای کار با برنامه و خواندن اطلاعات نیاز به دسترسی کاربر root نیست ولی برای اعمال تغییرات اساسی باید دسترسی کاربر root را فراهم سازید. برنامه Iceweasel (نسخه دبیانی و آزادتر از برنامه FireFox) نیز بطور پیش‌فرض نصب می‌شود و سرعت اجرای اولیه (یا بالا آمدن) آن بالاست. البته اینها برای حالتی است که من دبیان Testing را با میزکار گنوم نصب کرده‌ام، احتمالاً برای میزکار KDE ابزارهای وابسته به کتابخانه Qt به جای آنها قرار می‌گیرد. من هیچوقت دلیل واقعی نصب خودکار محیط TWM را نفهمیدم، بله در دبیان Testing نیز میزکار (در حقیقت، مدیر پنجره TWM) بطور خودکار به عنوان یک نان اضافه :!: همراه با میزکار انتخابی شما نصب می‌شود.

متاسفانه، متاسفانه، متاسفانه برنامه Tomboy هم بطور پیش‌فرض نصب شد، Tomboy به محیط Mono وابسته است، بنابراین Mono هم بطور پیش‌فرض نصب شد و دیگر هیچ! بهرحال در خبر منتشر شده در سایت دبیان به گوش می‌رسد که همه firmwareهای non-free از هسته (لینوکس) جدا خواهند شد و در بسته‌های مجزا در مخزن non-free قرار خواهند گرفت، طبق خبر منتشرشده، همه مشکلاتی که بر سر این راه قرار داشتند، حل شده‌اند و برای داشتن یک هستهٔ کاملاً آزاد در انتشار دبیان Squeeze (نسخه بعدی دبیان پایدار)، فقط مرحله جداسازی firmwareهای non-free از هسته (kernel) و قراردادن آنها در مخزن non-free باقی‌مانده تا بالاخره دبیان با یک هسته کاملاً آزاد منتشر گردد. بنابراین فکر می‌کنم احتمالاً برنامه Tomboy نیز در نسخه بعدی دبیان پایدار قرار نگیرد (ساده‌لوحانه).

همچنین برنامه مدیر فایل Nautilus پیشرفت‌های قابل توجهی داشته، علاوه بر قابلیت‌های کنونی‌اش همانند دسترسی از طریق SSH و کار با Samba و … از مهمترین آنها می‌توان به هوشمندترشدن آن اشاره داشت. من از افزونه‌های nautilus-gksu و nautilus-open-terminal برای Nautilus استفاده می‌کنم. افزونه nautilus-sendto هم بصورت خودکار نصب شده بود، از این افزونه برای فرستادن فایل‌ها از طریق بلوتوث و Email و همچنین برای نوشتن فایلها بر روی CD و DVD استفاده می‌شود (برای مشاهده لیست فایلهای در حال انتظار برای نوشتن بر روی CD و DVD در برنامه Nautilus از منوی Go گزینه CD/DVD Creator را انتخاب کنید). بطور خلاصه، Nautilus به کمک افزونه‌هایش، یکپارچه‌تر عمل می‌کند. ساعت قرارگرفته بر روی پنل گنوم نیز قابلیت نمایش وضعیت هوا و دما را نیز دارد، کافی است آن را برای محل زندگی خود (شهر محل اقامت) تنظیم کنید و به اینترنت دائمی (همان ADSL) متصل باشید. از همه مهمتر، بازی Secret Maryo Chronicles (یا به اختصار: SMC) بالاخره از روی بسته‌های دبیان قابل اجرا است و خطای معروف Segfault را نخواهید دید (زیرا مشکل عدم سازگاری بسته کتابخانه CEGUI حل شده است) جالب اینجاست که من قبلاً در دبیان پایدار، SMC و کتابخانه CEGUI را از روی مخزن دبیان Testing نصب کرده بودم ولی همچنان خطای Segfault را می‌داد! بطور خلاصه اگر کاربر اوبونتو، فدورا یا غیره باشید، احتمالاً قبلاً تجربه رویارویی با برخی از آنها را داشته‌اید ولی اگر مثل من از دبیان پایدار استفاده می‌کردید، پیشنهاد می‌کنم از دبیان Testing استفاده کنید تا نه تنها سیستم‌عامل پایداری داشته باشید، بلکه همانند کاربرهای سایر توزیع‌های گنو/لینوکسی به روز باشید و استفاده از مخزن دبیان Testing در دبیان پایدار، کافی نیست (کاری که من قبلاُ انجام می‌دادم).

چطور مشکلات خود با گنو/لینوکس را حل کنیم؟

مشکلات چه هستند؟ «کار خاصی را می‌خواهید انجام دهید اما نمی‌دانید از کجا شروع کنید.» یا «از ابزار خاصی استفاده می‌کنید اما برخلاف انتظار شما کار می‌کند یا اصلاً کار نمی‌کند.» هر یک از اینها یک مشکل (problem) هستند و یک یا چند راه حل (solution) نیز دارند. در اینجا می‌خواهم روش‌های یافتن راه حل‌ها را با هم مرور کنیم، زمانیکه با یک مشکل خاص روبرو می‌شوید؛ ابزارهای خوبی برای یافتن راه حل‌ها موجود است. معمولاً مشکلات ما بخاطر نداشتن آگاهی کافی است و نمی‌توانیم به درستی از یک برنامه، دستور یا کتابخانه استفاده کنیم؛ پس برای یافتن راه حل در ابتدا باید بیشتر بیاموزیم.

می‌توانید در لیست راهنماها جستجو کنید. توسط دستور apropos می‌توانید برای نیاز خود جستجو کنید، بطور مثال می‌خواهید یک فایل ناقص را کپی کنید اما نمی‌دانید با چه ابزاری این کار امکان‌پذیر است، پس دستور زیر را وارد کنید:

$ apropos -a copy file

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

برای خواندن مستنداتی که همراه با هر برنامه یا ابزار توزیع شده است، از دستور man و info می‌توان استفاده کرد. قالب مستندات ارائه شده برای دستور man و info متفاوت است، بعضی از ابزارها و برنامه‌ها، مستندات خود را برای دستور man و بعضی دیگر برای دستور info آن را مهیا دیده‌اند، در بعضی موارد نیز هر دو حالت مهیا شده است، همچنین از قالب HTML نیز برای ارائه مستندات استفاده می‌شود. مستندات ابزارهایی که برای دستور man مهیا شده را می‌توانید با دستور زیر مرور کنید:

$ man PROGRAM

که PROGRAM نام برنامه یا دستور یا کتابخانه‌ای است که می‌خواهید مستندات آن را بخوانید. همچنین مستندات ابزارهایی که برای دستور info مهیا شده را می‌توانید با دستور زیر مرور کنید:

$ info PROGRAM

در اینحالت نیز PROGRAM نام برنامه یا دستور یا کتابخانه‌ای است که می‌خواهید مستندات آن را بخوانید. مستنداتی که بدین روش ارائه می‌شوند، بصورت یک کتابچهٔ کوچک قابل استفاده هستند، مکان‌نمای صفحه‌کلید را بر روی گزینه‌ها (که با علامت * مشخص شده‌اند) ببرید و کلید Enter را فشار دهید تا به مطالب زیرشاخه دسترسی داشته باشید. برای رفتن به شاخهٔ بالاتر، کلید U را فشار دهید. مستنداتی که در قالب HTML ارائه می‌شوند را می‌توانید در دایرکتوری‌های مشابه زیر، بیابید:

/usr/share/doc/PACKAGE/html

به جای PACKAGE نام بسته‌ای که مستندات آن را می‌خواهید، بنویسید، معمولاً مستنداتی که در قالب HTML ارائه می‌شوند در چنین دایرکتوری‌ای وجود دارد. توسط مرورگر وب فایرفاکس (یا Iceweasel) می‌توانید آنها را مشاهده کنید. خواندن فایل‌های HTML را برای مستندات طولانی و تودرتو پیشنهاد می‌کنم.

بستهٔ راهنما یا مستندات را نصب کنید.
اگر در حالات قبل، نتوانستید مستندات مورد نیاز را بیابید، پس احتمالاً مستندات مورد نظر هنوز نصب نشده اند. هر بستهٔ نرم‌افزاری را که بر روی سیستم نصب می‌کنید، معمولاً بستهٔ دیگری شامل مستندات آن است. بطور مثال، بستهٔ libstdc++6-4.3-doc که مرجع مستندات کتابخانهٔ استاندارد زبان ‪C++‬ است. همهٔ چنین بسته‌هایی که حاوی راهنما و مستندات هستند، در بخش doc قرار می‌گیرند، بنابراین برای جستجو در میان آنها دستور زیر را وارد کنید:

$ aptitude search '?section(doc)PACKAGE'

به جای PACKAGE قسمتی از نام بسته‌ای را بنویسید که می‌خواهید بستهٔ مستندات آن را بیابید. سپس لیست بسته‌های مستندات مرتبط نمایش داده می‌شود، آنهایی که در ابتدای خط حرف i نوشته شده است، یعنی در حال حاضر بر روی سیستم نصب هستند و آنهایی که در ابتدای خط حرف p نوشته شده، یعنی بر روی سیستم نصب نیستند و به مستندات آن، دسترسی ندارید، پس قبل از استفاده از آنها، باید آنها را با دستور apt-get نصب کنید.

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

$ aptitude search '?description(SEARCH)'

در اینجا SEARCH کلمه‌ای است که در رابطه با نیاز شما است، بطور مثال اگر در جستجوی یافتن یک برنامهٔ نظارت‌کننده (monitor) هستید، به جای آن کلمهٔ monitor را بنویسید، یا اگر در جستجوی یک برنامهٔ نظارت‌کننده شبکه (network monitor) هستید، دستور زیر را وارد کنید:

$ aptitude search '?description(network)?description(monitor)'

قبلاً در رابطه با نحوهٔ جستجو توسط aptitude خلاصه نوشته بودم، می‌توانید آن را نیز بخوانید. به جای aptitude می‌توانید برای جستجو از synaptic نیز استفاده کنید که یک ابزار گرافیکی برای نصب، حذف، جستجو و مدیریت بسته‌ها است.

هیچ سرنخی ندارید، در اینحالت بهترین کار همان جستجو توسط گوگل است. تأثیر گوگل را نمی‌توان نادیده گرفت، این موتور جستجوگر اینترنتی، بهترین روش برای یافتن راه حل مشکلاتی است که قبلاً توسط سایر افراد حل و مستندسازی شده است. گوگل دوست شماست، از این هدیهٔ بزرگ استفاده کنید، اگر راه حل شما در سایت‌های «فارسی» نبود، ناامید نشوید، احتمال اینکه راه حل خود را در سایت‌های «انگلیسی‌زبان» بیابید، چندین برابر بیشتر است. برای یافتن صفحه‌های مرتبط توصیه می‌کنم که «کلمات کلیدی» بسیار مرتبط را مورد جستجو قرار دهید.

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

ویرایش: یک دوست گرامی (Saman) در بخش دیدگاه‌ها برای راحت‌تر خواندن این مستندات به روشهای خوبی اشاره کرده‌اند.

گنو/لینوکس، مناسب برای چه کسی؟

اگر قصد استفاده از گنو/لینوکس را دارید یا اگر به تازگی قدم در این راه گذاشته‌اید، به شما توصیه می‌کنم قبل از ادامه، دست نگهدارید! ابتدا مطمئن شوید گنو/لینوکس برای شما مناسب است. گنو/لینوکس برای چه افرادی مناسب است؟

  • کسانی که برای نرم‌افزار آزاد، ارزش قائل هستند و اهمیت آن را درک می‌کنند، کسانی که از کرک‌کردن روزانهٔ نرم‌افزارهای انحصاری خسته شدند و استفادهٔ غیر قانونی از نرم‌افزارها را دوست ندارند، کسانی که جهانی فکر می‌کنند.
  • کسانی که از ورود به یک دنیای جدید و از مقابله با تفاوت‌ها هراسی ندارند، کسانی که می‌توانند عادت‌هایشان را تغییر دهند، کسانی که وجود تفاوت‌ها را درک می‌کنند و می‌توانند متفاوت بیاندیشند.
  • کسانی که کشته‌مردهٔ شرکت مایکروسافت و محصولاتش نیستند، کسانی که خود را مدیون «بیل گیتس» و شرکتش (مایکروسافت) نمی‌دانند و اهمیت وجود شخصیت‌های تأثیرگذاری همچون «ریچارد استالمن» و «لینوس تروالدز» و سایر شخصیت‌های بزرگ را درک می‌کنند.
  • کسانی که نرم‌افزارهای رایگان را نسبت به نرم‌افزارهای تجاری ترجیح می‌دهند. کسانی که نرم‌افزارهای تجاری را فاقد عیب و نقص نمی‌دانند و کسانی که انتظارهای غیر معقولی از گنو/لینوکس ندارند.
  • کسانی که نوشتن چند خط دستور (یا اسکریپت) آنها را عذاب نمی‌دهد، کسانی که با صفحه‌کلید دوست هستند و همه چیز را در کلیک‌کردن و حرکت ماوس نمی‌بینند، کسانی که می‌توانند دلیل ویرایش فایل‌های متنی را درک کنند.
  • کسانی که دوست‌دارند هر چه بیشتر یاد بگیرند، یادگیری برای آنها جذاب‌تر از این است که کسی کارها را بجای آنها انجام دهد، کسانی که کارهای مورد نیازشان را خود باید انجام دهند. کسانی که ماهیگری را دوست دارند.
  • کسانی که در انجام‌دادن کارها در خود احساس ضعف و ناتوانی نمی‌کنند. در غیر اینصورت یا مجبورند این احساس را فراموش کنند یا باید با گنو/لینوکس خداحافظی کنند. اگر نمی‌توانید کار مورد نیاز را در گنو/لینوکس انجام دهید، سعی کنید با راهنمایی دیگران آن را یاد بگیرید و انجام دهید، در غیر اینصورت بی‌خیالش شوید ولی احساس ضعف و ناتوانی نکنید.
  • کسانی که احساس غرور نمی‌کنند، کسانی که پذیرفته‌اند در گنو/لینوکس یک کاربر newbie هستند، کسانی که بخاطر برخورد با هر مشکلی، تقصیر آن را به گردن گنو/لینوکس نمی‌اندازند. کسانی که واقعیت‌ها را درک می‌کنند.
  • کسانی که گنو/لینوکس را جزئی از دارائی‌های خود می‌دانند، پس مطمئناً از چنین چیزی مأیوس نخواهند شد.
  • کسانی که آینده‌نگر هستند. نیازهای آینده را می‌خواهند از امروز تأمین کنند.
  • کسانی که با رایانه در تعامل هستند، پیغام‌های صادر شده را می‌خوانند به درستی جواب می‌دهند، کسانی که قبل از انجام‌دادن هر کاری فکر می‌کنند. کسانی که بطور صحیح کار می‌کنند.
  • کسانی که انگیزهٔ لازم برای استفاده از گنو/لینوکس را دارند، اگر انگیزهٔ خاصی ندارید، هیچگاه به سراغش نیائید! چون فکر و ذهن شما معطوف به آن نیست، پس نمی‌خواهید خود را درگیر کنید و چیزی هم یاد نخواهید گرفت.
  • کسانی که فقط بخاطر بازی‌کردن با رایانه کار نمی‌کنند، کسانی که کارهای مهم دیگری را می‌توانند با رایانه انجام دهند.

در یک کلام؛ برای کار با گنو/لینوکس، باید یک گنو/لینوکسی باشید. :wink:

۱۱ باور غلط دربارهٔ زبان سی++

  1. ‪C++‬ کندتر از زبان C است.
    لیست قابلیت‌های زبان ‪C++‬ که در زبان C نیست را می‌توان در سه دسته قرار داد:

    1. قابلیت‌هائی که می‌توانند موجب افزایش کارآیی برنامه شوند.
      مثل template meta-programming و inline function (که در C99 بعداً به زبان C نیز اضافه شد)
    2. قابلیت‌هائی که تأثیری بر روی کاهش کارآیی برنامه ندارند.
      مثل non-virtual inheritance و encapsulation و function overloading و reference type
    3. قابلیت‌هائی که تأثیر ناچیزی بر روی کاهش کارآیی برنامه دارند.
      مثل virtual inheritance و virtual function و exception handling
      مادامیکه از این قابلیت‌ها استفاده نمی‌کنید، برنامهٔ شما کاهش کارآیی نخواهد داشت، حتی می‌توانید توسط کامپایلر، آنها را کاملاً غیر فعال کنید.
  2. ‪C++‬ نسخهٔ جدیدی از زبان C است.
    خیر، ‪C++‬ سازگار با استاندارد C89 طراحی شده است اما نسخهٔ جدیدی از زبان C نیست. کمیتهٔ استاندارد ‪C++‬ و کمیتهٔ استاندارد C همکاری بسیار مشترکی با یکدیگر دارند و در اغلب موارد به آنها کمیتهٔ استاندارد C/‪C++‬ گفته می‌شود. اگر ‪C++‬ نسخهٔ جدیدی از زبان C است، پس چرا استاندارد جدید زبان C یعنی C99 چندین سال پس از ابداع زبان ‪C++‬ معرفی شد؟ و چرا ‪C++‬ با استاندارد C99 در مواردی ناسازگار است؟ جواب: چون ‪C++‬ و C دو زبان جدا از هم هستند.
  3. تفاوت C و ‪C++‬ تنها در شیئ‌گرائی است.
    در ‪C++‬ همه چیز فقط در شیئ‌گرائی خلاصه نشده است، در واقع روش generic programming با کمک abstraction و encapsulation بیشتر از شیئ‌گرائی مورد توجه قرار می‌گیرد (با توجه به اینکه برای شیئ‌گرا بودن باید از polymorphism نیز استفاده کرد؛ یعنی باید تابع مخرب کلاس‌ها virtual باشد). روش template meta-programming هم چیزی است که (تنها) در ‪C++‬ معرفی شده است. به عبارت ساده‌تر، ‪C++‬ یک زبان کاملاً hybrid است، شما به هر روشی که بخواهید می‌توانید در آن برنامه بنویسید حتی به روش functional programming (بخصوص به کمک استاندارد جدید زبان ‪C++‬ موسوم به C++0x که قابلیت توابع بی‌نام نیز اضافه شده است).
  4. برای یادگیری ‪C++‬ ابتدا باید زبان X را آموخت.
    من یک کتاب آموزشی ‪C++‬ را ندیده‌ام که در ابتدای آن و در مقدمه گفته باشد که ابتدا باید زبان X را یاد گرفته باشید. بله، اگر از قبل با زبان X آشنا باشید، می‌تواند یادگیری ‪C++‬ را تسهیل کند اما نه تنها ‪C++‬ بلکه این مورد برای سایر زبان‌های برنامه‌نویسی هم صادق است.
  5. کدهای نوشته‌شده در ‪C++‬ ناخوانا است و امنیت کمی دارد.
    متاسفانه نمی‌دانم این بحث از کجا ناشی می‌شود، اما نوشتن برنامه‌هایی با امنیت کم، ارتباط خاصی با زبان برنامه‌نویسی ندارد، این برنامه‌نویس است که باید وظیفهٔ خود را در قبال تأمین امنیت برنامه انجام دهد. زبان برنامه‌نویسی نمی‌تواند امنیتی که بطور معمول همه در جستجوی آن هستند را به برنامه‌نویس هدیه کند. در مورد نوشتن کدهای ناخوانا، رک حرف می‌زنم، سورس کد برنامه‌های نوشته‌شده در ‪C++‬ ناخوانا می‌شود اگر شما کدهایتان را کثیف بنویسید!
  6. زبان ‪C++‬ منسوخ شده و برای رایانه‌های نسل قدیم است.
    زبان ‪C++‬ همواره با زمان پیشرفت خواهد کرد، استاندارد جدید این زبان موسوم به C++0x نیز به زودی فراگیر خواهد شد و قابلیت‌های بسیار بیشتری را به این زبان قدرتمند اضافه خواهد نمود. در ادامه برای جواب به این مورد، هیچ چیز بهتر از آمارهای سال جاری نیست: آمار شماره یک، آمار شماره دوم.
  7. برای هر سیستم‌عاملی باید کدهای متفاوتی در ‪C++‬ نوشت.
    اگر از کتابخانه‌های cross-platform یا از کتابخانهٔ استاندارد زبان استفاده شود (کتابخانه‌هایی مثل Standard Template Library و GTK و POSIX و Boost و Qt و SDL و OpenGL و …)، تنها با نوشتن یک سورس کد، برنامهٔ مورد نظر در هر سیستم‌عاملی کامپایل و اجرا خواهد شد. همچنین برای سادگی بیشتر می‌توانید از GNU Autotools بهره بگیرید.
  8. با زبان ‪C++‬ نمی‌توان هستهٔ سیستم‌عامل (kernel) نوشت.
    این تفکر نیز اشتباه است، همانطور که می‌دانید برای نوشتن هستهٔ سیستم‌عامل نباید به محیط نرم‌افزاری خاصی وابسته بود، پس چه در زبان C و چه در زبان ‪C++‬ نباید از کتابخانه‌ها (حتی کتابخانهٔ استاندارد) استفاده کرد، اما در ‪C++‬ بعضی قابلیت‌های ذاتی زبان مثل RTTI و exception handling و کلمات کلیدی مثل new و delete و dynamic_cast را یا باید غیر فعال کنید یا باید خود شما آنها را پیاده‌سازی کنید. زیرا این قابلیت‌ها به کد run-time احتیاج دارند (همچنان یک کتابخانه؛ در زبان ‪C++‬ کلمه‌کلیدی new برای اخذ حافظهٔ پویا استفاده می‌شود و در زبان C از تابع malloc برای انجام اینکار استفاده می‌شود، پس در ‪C++‬ همانند C نباید از این قابلیت استفاده کرد، یا آنکه خود شما باید آن را پیاده‌سازی کنید). در اینترنت جستجو کنید، مطمئن هستم kernelهائی را خواهید یافت که تنها توسط ‪C++‬ نوشته شده‌اند.
  9. زبان ‪C++‬ برای نوشتن برنامه‌های عادی، مناسب نیست.
    نوشتن یک برنامه عادی در سی++ با وجود ابزارهای فراوانی که دارد، سهل است. منظور از برنامهٔ عادی چیست؟ بهرحال اگر منظور از مناسب نبودن، همان سخت بودن برای یک برنامه‌نویس مبتدی است، درست است، در غیر اینصورت غلط است.
  10. در ‪C++‬ همواره باید نگران memory leak باشیم.
    خوشبختانه به کمک زبان ‪C++‬ می‌توان از الگوی طراحی RAII استفاده برد و در این مورد، حافظه بطور کامل و بطور خودکار مدیریت می‌گردد (همچون اشیاء تعریف شده در STL)، البته تا زمانیکه بطور مستقیم از new و delete استفاده نکنید.
  11. ‪C++‬ باید زبان X را جایگزین می‌کرد.
    ‪C++‬ لزوماً نباید هیچ زبان دیگری را جایگزین کند، ‪C++‬ راه‌حل‌های خاص خود را ارائه کرده است، در ابتدا هم ‪C++‬ ابداع نشده بود که زبان خاصی را جایگزین کند، بلکه ‪C++‬ ابداع شده بود که راه‌حل مناسبی را برای مسائل موجود ارائه کند. ‪C++‬ یک زبان همه‌منظوره است، برای هر مسئلهٔ خاصی یک یا چندین راه‌حل ارائه کرده است، لزوماً نباید به خاطر وجود چنین راه‌حل‌هایی، سایر زبان‌هایی را جایگزین کند که راه‌حل‌های مشابه (و گاهاً ساده‌تر یا بهتری) را برای آن مسئلهٔ خاص ارائه کرده‌اند.
دنبال‌کردن

هر نوشتهٔ تازه‌ای را در نامه‌دان خود دریافت نمایید.