منبع اصلی نوشتار زیر در این لینک قرار دارد

چرا دیگر لینوکس را دوست ندارم؟!

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

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

تصویر: مهاجرت از لینوکس به ویندوز

برخی از دلایل من برای رجوع دوباره به سیستم‌عامل محبوب مایکروسافت به قرار ذیل هستند:

ادامه مطلب

ادامه مطلب

منبع اصلی نوشتار زیر در این لینک قرار دارد

نصب شبیه‌ساز شبکه ns2 از سورس

نرم‌افزار ns یک شبیه‌ساز برای شبکه‌های کامپیوتری با قابلیت پشتیبانی از انواع شبکه‌های سیمی و بی‌سیم است که در نسخه‌های ns2، ns1 و ns3 توسعه و منتشر شده. نسخه‌ی ۱ این شبیه‌ساز خیلی وقت هست که توسعه و نگهداری نمی‌شه. نسخه ۲ هم دیگه توسعه داده نمی‌شه اما به‌خاطر اینکه کدهای زیادی روی اون هست که روی نسخه ۳ اجرا نمیشه؛ هنوز نگهداری و استفاده می‌شه. توی دانشگاه‌ها هم معمولا از ns2 استفاده می‌شه. ادامه مطلب

منبع اصلی نوشتار زیر در این لینک قرار دارد

نصب آخرین نگارش فایرفاکس روی اوبونتو

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

منبع اصلی نوشتار زیر در این لینک قرار دارد

نصب پیام رسان تلگرام برای اوبونتو

قطعا تا الان اسم پیام رسان تلگرام به گوش همه خورده است که کاربران ان هم کم نیستند. ادامه مطلب

منبع اصلی نوشتار زیر در این لینک قرار دارد

نسخهٔ جدید Foxit PDF منتشر شد

نرم‌افزار Foxit PDF بعد از مدت‌ها که نسخهٔ جدیدی برای س […] ادامه مطلب

منبع اصلی نوشتار زیر در این لینک قرار دارد

آشنایی با اسنپی (Snappy)، مدیر بسته آینده لینوکس اوبونتو

مطابق اعلام کنونیکال، مدیر بسته‌های تمام نسخه‌های توزیع لینوکسی اوبونتو به مدیر بسته جدیدی به نام اسنپی (Snappy) تغییر خواهد کرد.

پیش از این، اسنپی در اوبونتو پایه (Ubuntu Core) که نسخه‌ای مینیمال از لینوکس اوبونتو برای استفاده در فضای ابری، ابزارهای همراه، و سیستم‌های توکار یا نهفته (Embeded Systems) می‌باشد ارائه شده است.

ادامه مطلب
ادامه مطلب

منبع اصلی نوشتار زیر در این لینک قرار دارد

راهنمای تکمیلی گیت (Git)

Git - گیت

مقدمه

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

مهم‌ترین کارها بعد از نصب گیت

قبل از هر چیز اگر راهنمای کاربردی git را تاکنون مطالعه نکرده‌اید، مطالعه نمایید!

ثبت مشخصات فردی

قبل از شروع به فعالیت و کامیت کردن کدها لازم است تا مشخصات فردی خود را در گیت لوکال خود ثبت نمایید. برای ذخیره نمودن نام و ایمیل خود از دستورات زیر استفاده نمایید. فراموش نکنید که مقادیر صحیح را جایگزین مقادیر پیش‌فرض نمایید:
$ git config --global user.name "YOUR NAME"
$ git config --global user.email YOUR_EMAIL
این مقادیر در فایلی با نام .gitconfig در پوشه خانگی شما ذخیره می‌شوند.

تغییر ویرایشگر متن پیش‌فرض

ویرایشگر پیش‌فرض متن برای ثبت پیام‌های commit در محیط اوبونتو، ویرایشگر nano است. شما می‌توانید هر ویرایشگر متنی را جایگزین ویرایشگر پیش‌فرض نمایید. دستور زیر، ویرایشگر قدرتمند vim به عنوان ویرایشگر پیش‌فرض پیام‌های گیت ذخیره میکند:
$ git config --global core.editor vim

تنظیم عمومی برای عدم کامیت کردن فایل‌های متفرقه

فایل‌هایی وجود دارند که شما هرگز نیاز به کامیت کردن آن‌ها ندارید. به عنوان مثال فایل .DS_Store که توسط سیستم‌عامل Mac OS به صورت خودکار بعد از مشاهده هر دایرکتوری ایجاد می‌شود. یا فایل‌های نسخه پیشتیبان که معمولا به کاراکتر ~ ختم می‌شوند. برای جلوگیری از کامیت شدن اینگونه فایل‌ها، ابتدا باید یک فایل .gitignore عمومی ایجاد نموده و نام فایل‌ها (یا قالب نام) را در آن ذخیره نموده و در نهایت آدرس آن را با دستور git config در تنضیمات گیت ذخیره نمایید.
$ touch ~/.gitignore_global
$ echo ".DS_Store" > ~/.gitignore_global
$ echo "*~" > ~/.gitignore_global
$ git config --global core.excludesfile ~/.gitignore_global

فعال کردن امکان نمایش رنگی خروجی‌های گیت

دستور زیر را برای فعال کردن نمایش رنگی و خواناتر خروجی های گیت (مانند دستور git log) در محیط خط فرمان اجرا نمایید:
$ git config --global color.ui true
در نهایت و بعد از انجام تنظیمات مورد نظر خود، می‌توانید با استفاده از دستور زیر فهرست تمامی تنظیمات ذخیره شده را مشاهده نمایید:
$ git config --list

معرفی چند مخزن رایگان برای آپلود پروژه‌ها

پیشنهاد می‌کنم تا جای ممکن پروژه‌های خود را (به صورت خصوصی یا عمومی) بر روی مخازن در وب آپلود نمایید. این مخازن می‌توانند بر روی سرور شخصی شما بوده و یا از سرویس های همگانی استفاده نمایید. شخصا پروژه‌های خصوصی خود را بر روی سایت bitbucket.org آپلود می‌نمایم. در زیر تعدادی از محبوب‌ترین سایت‌هایی را که سرویس همگانی برای git دارند را فهرست کرده‌ام:

ابزارهای گرافیکی برای کار با git

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

منابع

ادامه مطلب

منبع اصلی نوشتار زیر در این لینک قرار دارد

راهنمای کاربردی git

مقدمه

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

git چیست؟

git یک نرم‌افزار آزاد و متن‌باز برای بازنگری کد منبع توزیع شده و مدیریت منبع کد است. گیت ابتدا برای توسعهٔ لینوکس توسط لینوس تروالدز به وجود آمد و اکنون پروژه‌های فراوانی از آن الهام گرفته‌اند. هر دایرکتوری کاری در گیت یک مخزن کامل با تاریخچهٔ کامل تغییرات و قابلیت بازنگری تغییرات است و برای کار با آن نیازی به دسترسی به شبکه یا سرور مرکزی وجود ندارد. گیت یک نرم‌افزار آزاد است که تحت عنوان جی‌پی‌ال نسخه ۲ توزیع شده است.
در پوشهٔ پایهٔ هر پروژه که با استفاده از گیت مدیریت می‌شود پوشه‌ای با نام git. (نقطه git) وجود دارد که تمامی اطلاعات مربوط به پروژه (تاریخچه، برچسب‌ها، …) را در خود نگه می‌دارد. این ساختار بر خلاف ساختار سابورژن است که در هر زیرشاخه یک پوشهٔ svn. (نقطه svn) دارد. از جمله پرونده‌هایی که در پوشهٔ git. وجود دارند، config است که تنظیمات مخزن را در خود نگه می‌دارد.

اصطلاحات و لغات در git

در زیر مهم‌ترین اصطلاحات گیت را مشاهده می‌فرمایید:

مخزن (repository)

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

کامیت (commit)

منظور از کامیت، نسخه‌ای از تغییرات صورت گرفته بر روی اطلاعات و کدهای پروژه است. دستور commit در گیت،  نسخه‌ی از تغییرات در برنامه را ذخیره می‌کند.

شاخه (branch)

منظور از branch، سیر خطی توسعه است. هر پروژه می‌تواند چندین خط توسعه داشته باشد. 

برچسب (tag)

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

مَستر (master)

به صورت پیش فرض، master یک شاخه در مخزن گیت بوده و در بیشتر موارد خط توسعه اصلی مخزن است.تصویر زیر به صورت گویاتر مفهوم مَستر، برچسب و شاخه  را ارائه کرده است:

برچسب‌ها و شاخه‌ها در گیت
مَستر، برچسب‌ها و شاخه‌ها در گیت

هِد (HEAD)

HEAD مشخص کننده checkout فعلی صورت گرفته در پروژه است.

دستور checkout

برای رجوع به برچسب، شاخه و هر وضعیت مشخصی در پروژه باید checkout نمایید.

دستور pull

دستور pull برای گرفتن آخرین تغییرات و وضعیت مخزن از سرور استفاده می‌شود.

دستور push

دستور push تغییرات و کامیت‌های ذخیره شده بر روی محیط لوکال را به سرور منتقل می‌کند.

سناریوهای کاربردی برای git

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

۱- یک پروژه در بر روی سیستم خودم دارم. چطور گیت را به آن اضافه کنم؟

بر روی کامپیوتر کلاینت خود، دستورات زیر را در محیط خط فرمان وارد نمایید:
$ cd my_project
$ git init
$ git add *
$ git commit -m "My initial commit message"
  • دستور git init یک مخزن برای گیت در دایرکتوری جاری ایجاد می‌نماید.
  • دستور git add فایل‌های مورد نظر را به مخزن گیت اضافه می‌کند.
  • دستور git commit، نسخه‌ای از تغییرات صورت گرفته را بر روی شاخه جاری ذخیره می‌کند.

۲- یک پروژه شامل گیت بر روی محیط کلاینتم دارم، چطور آن را به سرور منتقل نمایم؟

ابتدا باید یک مخزن گیت برای پروژه خود بر روی سرور ایجاد نمایید:
$ ssh git@example.com
$ git init --bare --shared my_project.git
$ chgrp -R devteam my_project.git
$ exit
  • دستور ssh برای اتصال سرور و ورود به محیط خط فرمان سرور مورد نیاز است.
  • دستور git init –bare –shared و پارامترهای استفاده شده، یک مخزن برای پروژه‌ای که توسط گروهی از افراد توسعه می‌شود، بر روی سرور ایجاد می‌کند.
  • دستور chgrp، مالکیت گروه دایرکتوری پروژه و محتوای آن را به اعضای گروه devteam منتقل می‌کند.
  • دستور exit برای خروج از سرور و بازگشت به محیط خط فرمان کلاینت مورد نیاز است.
در مرحله بعد با استفاده از دستورات زیر مخزن سرور را به پروژه اضافه نموده و اطلاعات لوکال را به سرور منتقل نمایید:
$ git remote add origin git@example.com:my_project.git
$ git push -u origin master

۳- چطور یک پروژه را از مخزن سرور دریافت کنم؟

روش‌ها و فرمت‌های مختلفی برای گرفتن یک پروژه از مخزن سرور وجود دارد. دستورات زیر روش گرفتن پروژه با استفاده از ssh را نمایش می‌دهد:
$ git clone git@example.com:my_project.git
$ cd my_project

  • دستور git clone یک نسخه از مخزن سرور را به محیط لوکال و سیستم شما منتقل می‌نماید.

۴- پروژه را تغییر داده ام (فایل‌هایی اضافه، حذف یا ویرایش کرده‌ام). چطور به مخزن سرور منتقل نمایم؟

قبل از انتقال تغییرات به سرور، ابتدا تغییرات صورت پذیرفته بر روی پروژه را بررسی نمایید:
$ git ls-files --deleted
$ git ls-files --modified
$ git diff
  • دستور git ls-files برای فهرست کردن فایل‌ها مورد استفاده قرار می‌گیرد. این دستور فیلترهایی برای محدودکردن بر اساس نوع تغییرات صورت گرفته دارد.
  • دستور git diff تغییرات فایل‌ها نسبت به آخرین کامیت را نمایش می‌دهد.
برای کامیت کردن تغییرات و ارسال تغییرات به سرور دستورات زیر را اجرا نمایید:
$ git add .
$ git commit
$ git pull
$ git push
  • دستور git add فایل‌ها جدید ویا تغییر پیدا کرده را برای کامیت کردن، اضافه می‌کند.
  • دستور git commit، نسخه‌ای از تغییرات صورت گرفته را بر روی شاخه جاری ذخیره می‌کند.
  • دستور git pull آخرین تغییرات مخزن سرور را به مخزن لوکال منتقل می‌کند. اجرای این دستور قبل از push کردن کد، در صورتیکه آخرین کامیت سرور بر روی مخزن لوکال وجود نداشته باشد، الزامی است.
  • دستور git push برای ارسال تغییرات از مخزن لوکال به سرور استفاده می‌شود.

۵- چطور یک شاخه (branch) بسازم و آن را در کنار شاخه‌های دیگر توسعه بدهم؟

دستور زیر یک شاخه جدید شامل آخرین تغییرات (حتی کامیت نشده ها) ساخته و آن را شاخه فعال (خط توسعه جاری) قرار می‌دهد:
$ git checkout -b [name_of_your_new_branch]
برای انتقال این شاخه به مخزن سرور دستور زیر را در سیستم لوکال اجرا نمایید:
$ git push -u origin [name_of_your_new_branch]
برای مشاهده تمامی شاخه‌ها می‌توانید از دستور git branch استفاده کنید. شاخه فعال در مخزن با یک * مشخص شده است. همچنین دستور git fetch، آخرین اطلاعات ساختار مخزن و شاخه‌های موجود را از سرور به مخزن لوکال منتقل می‌کند:
$ git branch
$ git fetch
$ git branch -a #show all remote and local branches
برای checkout کردن یک شاخه از سرور از دستور checkout استفاده نمایید. ممکن است قبل از دستور checkout، نیاز به اجرای دستور git fetch داشته باشید:
$ git checkout [branch_name]

۶- من و همکارم همزمان فایلی را ویرایش کرده و بعد از کامیت، در pull و push به مشکل برخورده‌ایم. چطور Conflict ها را رفع کنیم؟

در نمونه زیر، بعد از کامیت و pull کردن از مخزن سرور، git در ترکیب کردن (merge) فایل README.md با مشکل مواجه شده و از کاربر می‌خواهد که بعد از رفع تضادها (Conflict)، کد را دوباره کامیت و سپس push نماید:
$ git pull
remote: Counting objects: 5, done.
remote: Compressing objects: 100% (2/2), done.
remote: Total 3 (delta 1), reused 0 (delta 0)
Unpacking objects: 100% (3/3), done.
From repo:/opt/repositories/my_project
   c3e5e32..d773d5d  master       -> origin/master
Auto-merging README.md
CONFLICT (content): Merge conflict in README.md
Automatic merge failed; fix conflicts and then commit the result.
$ vim README.md #edit the file to fix conflicts
$ git add *
$ git commit -m "fix conflicts"
$ git push

  • در نمونه بالا بعد از ویرایش فایل README.md و رفع conflict ها کد را دوباره کامیت و سپس push کرده‌ایم.

۷- چطور دو شاخه را با هم ترکیب کنم؟

برای merge کردن دو شاخه باید از دستور git merge استفاده کنید. در زیر ابتدا به شاخه اصلی (master) رفته و سپس شاخه فرعی quickfix را با آن ترکیب کرده‌ایم:
$ git checkout master
$ git merge quickfix

۸- چطور یک شاخه را از مخزن لوکال ویا سرور حذف کنم؟

سه نوع شاخه مختلف برای حذف وجود دارد: شاخه لوکال (local branch)، شاخه سرور (remote branch) و شاخه سرور موجود بر روی لوکال (local remote-tracking branch). در زیر دستورات مرتبط برای حذف هر کدام از انواع شاخه‌ها را مشاهده می‌فرمایید.

حذف شاخه لوکال (local branch)

$ git branch --delete <branch> # delete local branch
$ git branch -d <branch> # shorter version
$ git branch -D <branch> # force delete un-merged branches

حذف شاخه سرور (remote branch)

$ git push origin --delete <branch> # git version 1.7.0 or newer
$ git push origin :<branch> # git versions older than 1.7.0

حذف شاخه سرور موجود بر روی لوکال (local remote-tracking branch)

$ git branch --delete --remotes <remote>/<branch>
$ git branch -dr <remote>/<branch> # shorter 
$ git fetch <remote> --prune # delete multiple obsolete tracking branches 
$ git fetch <remote> -p # shorter

۹- از تغییراتی که انجام داده‌ام پشیمان شده‌ام. چطور به آخرین نسخه برگردم؟

به منظور حذف تغییرات و بازگشت به آخرین نسخه کامیت شده بر روی مخزن، کافیست از دستور git reset به صورت زیر استفاده نمایید:
$ git reset --hard

۱۰- چطور تاریخچه کامیت‌ها و تغییرات فایل‌ها را مشاهده کنم؟

دستور git log برای مشاهده تاریخچه مخزن، یک فایل و یا نمایش تغییرات یک فایل به صورت زیر استفاده می‌شود:
$ git log # show all commit logs
$ git log [file_path] # show commit logs of the file
$ git log -p [file_path] # show history of the patches of the file

۱۱- چطور یک tag ثبت کنم؟

دستور git tag برای ذخیره برچسب‌ها استفاده می‌شود. git از دو نوع برچسب lightweight و annotated پشتیبانی می‌کند. نوع lightweight یک اشاره‌گر ساده به کامیتی مشخص است و هیچ اطلاعات دیگری مانند ایجادکننده tag را ذخیره نمی‌نماید. نوع annotated همانند یک کامیت عمل کرده و برخلاف نوع lightweight اطلاعات فرد ثبت کننده را ذخیره می‌نماید. در زیر نمونه ای از تعریف برچسب annotated و نحوه انتقال آن از مخزن لوکال به مخزن سرور را مشاهده می‌فرمایید:
$ git tag -a [tag name or version]
$ git show [tag name or version]
$ git push origin [tag name or version] # or git push origin --tags
برای ایجاد یک شاخه براساس یک tag باید از دستور checkout استفاده نمایید. در مثال زیر یک شاخه بر اساس برچسب v2.0.0 ایجاد کرده ایم:
$ git checkout -b version2 v2.0.0
Switched to a new branch 'version2' 

بروزرسانی

مطلب دیگری با عنوان راهنمای تکمیلی گیت (Git) نیز در وبلاگ منتشر کرده‌ام که پیشنهاد می‌کنم آن را نیز مطالعه فرمایید.

ادامه مطلب

منبع اصلی نوشتار زیر در این لینک قرار دارد

با BOINC در پیشبرد علم سهیم شوید

شاید شما هم دوست داشته باشید تا در پروژه‌های علمی سهیم شوید اما فرصتی برای اینگونه کارها ندارید؛ با توجه به کامپیوتری شدن بخش زیادی از زندگی، چرا این کار را نیز بر عهده رایانه‌مان نگذاریم؟

ادامه مطلب
ادامه مطلب

منبع اصلی نوشتار زیر در این لینک قرار دارد

چگونه باگ‌ها را گزارش دهیم؟

باگ چیست؟

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

ادامه مطلب
ادامه مطلب