<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
    <channel>
        <title>نوشته های محمد رئوف زاهد</title>
        <link>https://virgool.io/feed/@mohammadraufzahed</link>
        <description>من محمدم یه برنامه نویسی که عاشق یادگرفتنه چیز های جدیده.</description>
        <language>fa</language>
        <pubDate>2026-06-16 19:19:41</pubDate>
        <image>
            <url>https://files.virgool.io/upload/users/88833/avatar/7tc2fw.png?height=120&amp;width=120</url>
            <title>محمد رئوف زاهد</title>
            <link>https://virgool.io/@mohammadraufzahed</link>
        </image>

                    <item>
                <title>آموزش مقدماتی Nginx - قسمت سوم</title>
                <link>https://virgool.io/@mohammadraufzahed/introduction-to-nginx-part-three-wza0vha6q2wx</link>
                <description>در این قسمت قراره با هم یک ساختار پایه تعریف بکنیم و ببینیم که با استفاده از Nginx چجوری میتونیم این ساختار رو گسترش بدیم و کاری کنیم که تعداد کاربران بیشتری بتوانند از سرویسی که ما ارائه میدیم استفاده کنند.در تصویر بالا مشاهده میکنید که ما یک سرویس داریم روی پورت 3000 که تمامی کاربران به صورت مستقیم بهش درخواست ارسال میکنند. اگه تعداد کاربران ما افزایش پیدا بکنه و این سرویس نتونه تمامی این درخواست ها رو مدیریت و پردازش کنه ما باید چه کاری انجام بدیم؟ما در این شرایط میتونیم چندین نسخه کپی (Replica) از این سرویس را اجرا کنیم که هر کدوم روی یک پورت خاصی اجرا خواهد شد و ما میتونیم آدرس این سرویس ها را به کاربران خود بدهیم.در تصویر بالا میتوانید مشاهده کنید که تمامی کاربران میتوانند به صورت دلخواه به کپی های سرویس درخواست ارسال کنند و این موضوع باعث کاهش بار روی سرویس ها خواهد شد، اما در همین حال باعث افزایش پیچیدگی استفاده برای کاربران خواهد شد چرا که تعداد آدرس های موجود زیاد خواهد بود و امکانش هست که هر لحظه یکی از این سرویس ها به مشکل بخوره و یا اینکه با بار زیادی داشته باشه که دوباره باعث ایجاد مشکل خواهد شد و همچنین درصورت استفاده از SSL شما مجبور خواهید شد برای هر آدرس یک گواهی جدا بسازید و هر کدوم رو به صورت جداگانه صدا کنید.در این مواقع ما از چیزی به نام پروکسی معکوس استفاده میکنیم که یکی از ویژگی هاش متعادل کردن بار هست و Nginx هم از این ویژگی به صورت کامل پشتیبانی میکنه. ما میتونیم Nginx رو به عنوان یک رابط استاندارد در این بین قرار بدیم و کاربران ما از این به بعد به یک سرویس درخواست ارسال میکنند و Nginx میتونه بر اساس الگوریتم هایی که داره تصمیم بگیره که کدوم درخواست به کدام سرویس ارسال بشه.همچنین با توجه به یکی شدن درخواست ها ما دیگه نیاز به ساخت تعداد بی شماری گواهی برای SSL نخواهیم داشت و میتونیم با استفاده از یک گواهی تمامی درخواست ها رو امن کنیم و از امکانات جالبی مانند HTTP/2 و .... استفاده کنیم.با توجه به عکس بالا از این به بعد کاربران ما از طریق Nginx به سرویس های ما درخواست ارسال خواهند کرد و Nginx هم از طرف کاربر به سرویس ها درخواست ارسال میکنه و جواب نهایی رو به کاربر نمایش میده. این موضوع باعث میشه که کاربر از مقصد نهایی درخواستش بی اطلاع باشه و همچنین سرویس ها هم از ارسال کننده درخواست بی اطلاع باشند زیرا که تمامی درخواست ها توسط Nginx انجام خواهد شد.امیدوارم که از خواندن این مطلب لذت برده باشید. لطفا اگه پیشنهاد و نکته ای دارید یا اینکه اشتباهی در مطالب بنده مشاهده کردید حتما از طریق نظرات با بنده به اشتراک بذارید.</description>
                <category>محمد رئوف زاهد</category>
                <author>محمد رئوف زاهد</author>
                <pubDate>Tue, 17 Jan 2023 11:14:02 +0330</pubDate>
            </item>
                    <item>
                <title>آموزش مقدماتی Nginx - قسمت دوم</title>
                <link>https://virgool.io/@mohammadraufzahed/introduction-to-nginx-part-two-knoc2rmgyroe</link>
                <description>با عرض سلام و خسته نباشید به شما دوستان عزیز، در این قسمت از آموزش قراره بفهمیم که Nginx چی هست و چه کارهایی ازش برمیاد.Nginx رو معمولا به عنوان یک وب سرور میشناسید که میدونه چجوری با پروتکل های مختلفی مانند HTTP ارتباط برقرار کنه. وب سرور معمولا محتوا های وب رو به کاربران ارائه میده که ممکن هست این محتوا استاتیک یا داینامیک باشد که در این صورت این محتوا ها با استفاده از تکنولوژی هایی مانند FastCGI و CGI پردازش خواهند شد.اما Nginx به عنوان یک پروکسی معکوس هم استفاده میشه که کاربرد های زیادی مانند متعادل کردن بار، آدرس دهی بک اند، کش کردن و..... داره که در زیر به صورت کامل درمورد هرکدوم صحبت میکنیم.1- متعادل کردن بارNginx میتواند زمانی که تعداد درخواست ها ورودی از سمت کاربران افزایش پیدا میکند و یک بک اند قابلیت جوابگویی به این درخواست ها را ندارد آن ها را بین چندین بک اند پخش کند که باعث کاهش فشار روی سرویس ها خواهد شد و به شما این اجازه رو میدهد که به محتوای خود را به کاربران بیشتری ارائه دهید.2- آدرس دهی بک اندNginx این اجازه رو به ما میده که ببینیم کاربران ما به چه آدرسی درخواست ارسال میکنند. این موضوع به ما این اجازه رو میده که محتوا های مختلفی بر اساس آدرسی که کاربر وارد کرده به آن ها نمایش بدیم.به عنوان مثال ما یک بک اند با دو ورژن v1 و v2 داریم و هر کدوم از این ها در سروری مختلف با آدرسی متفاوت در حال اجرا هستن و اگه ما بخوایم این آدرس ها رو به صورت جدا به کاربرانمان بدیم ممکنه باعث افزایش پیچیدگی آن بشه، اما میتونیم با استفاده از Nginx به کاربران خود این اجازه رو بدیم که اگه به آدرس /v1 ما درخواست ارسال کردند به ورژن 1 ما منتقل بشه و اگه به v2 به ورژن 2 ما یعنی به صورت زیر:www.api.example.com/v1 &gt;&gt; www.v1.api.example.comwww.api.example.com/v2 &gt;&gt; www.v2.api.example.comاین باعث میشه که کاربران از طریق یک رابط استاندارد با سرویس های مختلف ما ارتباط برقرار کنند.همچنین میتونیم درصورت به مشکل خوردن یکی از این بک اند ها درخواست رو به یک بک اند دیگه منتقل کنیم.3- کشNginx به ما کمک میکنه که تمامی سرویس ها و محتوا های خود را از طریق یک مسیر به کاربران خود ارائه دهیم.این موضوع به ما کمک میکنه که بعضی از درخواست ها رو کش کنیم که این موضوع بیشتر برای محتواهای استاتیک ما صدق میکند که باعث میشه محتوا های خود را با سرعت بیشتر به کاربران خود ارائه دهیم، همچنین ما میتونیم بعضی از درخواست های بک اند رو هم که اهمیت زیادی ندارند و نیازی به احراز هویت ندارند را کش کنیم که باز هم باعث افزایش سرعت سرویس دهی ما خواهد شد.امیدوارم که از خواندن این مطلب لذت برده باشید.</description>
                <category>محمد رئوف زاهد</category>
                <author>محمد رئوف زاهد</author>
                <pubDate>Mon, 16 Jan 2023 11:49:09 +0330</pubDate>
            </item>
                    <item>
                <title>آموزش مقدماتی Nginx - قسمت اول</title>
                <link>https://virgool.io/@mohammadraufzahed/introduction-to-nginx-part-one-bnejx1ifupig</link>
                <description>با سلام و خسته نباشید به شما دوستان عزیز. بنده محمد هستم و قرار هست در این سری مطالبی که قراره منتشر بشه درمورد Nginx صحبت کنیم و به شما دوستان یک دید خوبی از این وب سرور بدم.Nginx یکی از محبوب ترین وب سرور های موجود در بازار است که با زبان C نوشته شده و در زمینه هایی مانند متعال کننده بار (Load Balancer) یا پروکسی معکوس (Reverse Proxy) هم استفاده میشود.در این سری مطالب قراره درمورد مسائل زیر صحبت کنیم:1- Nginx چی هست و به عنوان یک وب سرور چه کارهای ازش بر میاد و چه استفاده ای میتونیم ازش داشته باشیم.2- درمورد کمکی که به ما خواهد کرد و مشکلی که حل میکنه صحبت خواهیم کرد.3- درمورد تفاوت های لایه 4 و 7 پروکسی کردن صحبت خواهیم کرد.4- درمورد TLS Terminations و TLS Passthrough صحبت خواهیم کرد.5- درمورد تایم اوت ها صحبت خواهیم کرد، دسته بندی هاشون و اینکه چه کمکی به ما خواهند کرد.6- نمونه هایی خواهیم داشت از تمامی مطالب.امیدوارم که از مطالب بنده لذت ببرید.</description>
                <category>محمد رئوف زاهد</category>
                <author>محمد رئوف زاهد</author>
                <pubDate>Sun, 15 Jan 2023 11:04:51 +0330</pubDate>
            </item>
                    <item>
                <title>dotfile های خودت رو با استفاده از گیت مدیریت کن</title>
                <link>https://virgool.io/@mohammadraufzahed/dotfile-%D9%87%D8%A7%DB%8C-%D8%AE%D9%88%D8%AF%D8%AA-%D8%B1%D9%88-%D8%A8%D8%A7-%D8%A7%D8%B3%D8%AA%D9%81%D8%A7%D8%AF%D9%87-%D8%A7%D8%B2-%DA%AF%DB%8C%D8%AA-%D9%85%D8%AF%DB%8C%D8%B1%DB%8C%D8%AA-%DA%A9%D9%86-kf9uplhbxdwx</link>
                <description>امروز داشتم دنبال راهی میگشتم تا بتونم dotfile های خودم رو با استفاده از گیت مدیریت کنم و هردفعه یه توزیع لینوکسی نصب میکنم نیاز نباشه تا دوباره همه این تنظیمات رو دوباره از اول بنویسم. بعد از حدود 1 ساعت جستجو به یه روش جالب برخوردم که قراره تو این مطلب با هم انجامش بدیم.ما در این آموزش از ریپازیتوری bare استفاده میکنیم. این روش به ما اجازه میدهد تا دایرکتوری خاصی را برای Working Tree درنظر نگیریم و بتونیم به راحتی فایل های سیستمی رو دنبال کنیم و تغیرات رو به راحتی ثبت کنیم.ایجاد ریپازیتوری برای نگه داری فایل هااول از همه باید در دایرکتوری خانه خود یک پوشه به نام dotfiles ایجاد بکینم.$ mkdir ~/dotfilesبعد از این که پوشه رو ایجاد کردیم میریم سراغ ایجاد ریپازیتوری.$ git init --bare ~/dotfilesخب الان ریپازیتوری ما ساخته شد و میتونیم از اون استفاده کنیم. در مرحله بعد این کار رو انجام خواهیم داد.شروع کار با ریپازیتوریبرای استفاده از این ریپازیتوری باید از دستور زیر برای هر دفعه اضافه کردن فایل و .... استفاده بکنیم.$ git --git-dir=$HOME/dotfiles/ --work-tree=$HOMEکه سخته استفاده ازش ولی ما میتونیم با اضافه کردن کد زیر به فایل bashrc یا هر فایلی که شل شما برای تنظیمات استفاده میکنه،‌این دستور رو ساده بکنیم.alias dotfiles=&amp;quotgit --git-dir=$HOME/dotfiles/ --work-tree=$HOME&amp;quotخب ما الان میتونیم با استفاده از دستور dotfiles فایل هامون رو مدیریت کنیم و به راحتی از آن ها پشتیبانی بگیریم.البته برای اینکه وقتی git status میزنیم کل فایل هایی که داریم رو بهمون نمایش نده دستور زیر رو وارید میکنیم.$ dotfiles config --local status.showUntrackedFiles noاضافه کردن ریپازیتوری گیت هابمونخب ما میتونیم الان با دستور زیر ادرس ریپازیتوری گیت هاب خودمون یا هر آدرس دیگه ای که پوشه رو در اون نگه میداریم به این اضافه کنیم.$ dotfiles remote add origin &lt;repository_link&gt;اضافه کردن فایل هاالان با هم به عنوان مثال فایل .bashrc خود رو به این ریپازیتوری اضافه میکنیم و آن را به گیت هاب خود منتقل میکنیم$ dotfiles add ~/.bashrc
$ dotfiles commit -m &amp;quotAdd the .bashrc&amp;quot
$ dotfiles pushخب الان اولین فایلمون رو ذخیره کردیم و میتونیم ادامه بدیم.اگه این مطلب براتون مفید بود خوشحال میشم لایک کنید و کامنت بزارید.</description>
                <category>محمد رئوف زاهد</category>
                <author>محمد رئوف زاهد</author>
                <pubDate>Thu, 28 Oct 2021 15:59:37 +0330</pubDate>
            </item>
                    <item>
                <title>آموزش Nodejs - قسمت اول</title>
                <link>https://virgool.io/@mohammadraufzahed/%D8%A2%D9%85%D9%88%D8%B2%D8%B4-nodejs-%D9%82%D8%B3%D9%85%D8%AA-%D8%A7%D9%88%D9%84-qi1pxlermnul</link>
                <description>در این قسمت قرار هست با Node.js آشنا بشیم و  کمی هم در مورد تاریخچه این ابزار محبوب صحبت کنیم.همینطور با چند روش پر استفاده و معمول نصب این ابزار آشنا خواهیم شد.معرفی Node.jsNode.js یک محیط متن باز و چند سکویی برای اجرای زبان جاوااسکریپت در سمت سرور است، و همینطور یک ابزار محبوب برای توسعه تقریبا تمامی پروژه ها است.Node.js از موتور V8 کروم برای اجرای جاوااسکریپت در بیرون از مرورگر استفاده میکند که همین موضوع باعث کارآمدی این ابزار قدرتمند میشود.نرم افزار هایی که بر پایه Node.js توسعه داده میشوند بر روی یک پروسه اجرا خواهند شد و برای هر درخواست یک Thread جدید ایجاد نمیکنند.Node.js مجموعه ای از I/O های ناهنگام(Asynchronous) اولیه رو در کتابخانه های استاندارد خود ارائه میدهد، که همین موضوع از مسدود شدن کدهای جاوااسکریپت جلوگیری میکند. به طور کلی، کتابخانه های Node.js بر اساس پارادایم Non-blocking توسعه داده شده اند که باعث میشود که رفتار مسدود کننده تبدیل به یک استثناء بشوند تا یک هنجار.زمانی که Node.js یک عملیات I/O را انجام میدهد، مانند خواندن از شبکه، دسترسی به دیتابیس یا فایل سیستم، به جای این که یک Thread را مسدود کند و چرخه انتظار CPU را هدر بدهد، عملیات را زمانی که جواب برگشت ادامه میدهد. همین موضوع به Node.js این امکان رو میدهد که هزاران درخواست و ارتباط همزمان را مدیریت کند، بدون اینکه نیازی باشد تا بار مدیریت همزمان Thread ها را بر روی دوش توسعه دهنده بیندازد که میتواند تبدیل به منبع قابل توجهی از مشکلات باشد.Node.js یک مزیت منحصر به فرد دارد که اونم وجود میلیون ها توسعه دهنده فرانت اند هست که با کمک جاوااسکریپت نرم افزار های وب توسعه میدهند و الان با کمک Node.js میتوانند کد های سمت سرور بنویسند، بدون این که نیازی به یادگیری زبان دیگری داشته باشند.Node.js به ما این امکان را میدهد که از جدید ترین استاندارد های ECMAScript استفاده بکنیم بدون اینکه به مشکلی برخورد بکنیم، زیرا نیاز نیست که منتظر بمونیم تا کاربران ما مرورگر های خودشان را بروز رسانی کنند. حتی میتوانیم بر اساس نیاز خود، از نسخه خاصی از استاندارد ECMAScript با تغیر نسخه Node.js استفاده بکنیم. Node.js به ما این امکان را میدهد که به استفاده از پرچم ها از ویژگی های تجربی خاصی استفاده کنیم.تعداد بیشماری از کتابخانه هاNPM یک مدیریت بسته محبوب برای Node.js است که با ساختار ساده ای که دارد، به تکثیر اکوسیستم Node.js کمک زیادی کرده است. در حال حاظر ریجستری NPM میزبان بیش از ۱ میلیون بسته متن باز است که میتوان آزادانه از آن استفاده کرد.کمی از تاریخچه Node.jsجاوااسکریپت یک زبان برنامه نویسی است که توسط Netscape ساخته شد و هدف از ساخت آن این بود که به توسعه دهنده های وب این امکان رو بدهد که صفحات وب را به صورت مستقیم از مرورگر دستکاری کنند.جالبه بدونید که در قسمتی از مدل تجاری Netscape، فروش وب سرور بودش که شامل یک محیط توسعه به نام Netscape Livewire بود که به توسعه دهنده های جاوااسکریپت این اجازه رو میداد که صفحاتی داینامیک با استفاده از جاوااسکریپت سمت سرور بسازند، که متاسفانه این پروژه خیلی موفقیت آمیز نبود.یکی از فاکتور های کلیدی که باعث رشد Node.js شد، زمان بندی بود. چند سال قبل از این که Node.js منتشر شود،جاوااسکریپت داشت به سمتی پیش میرفت که توسعه دهندگان داشتند به چشم یک زبان برنامه نویسی جدی تری به آن نگاه میکردند. با تشکر به نرم افزار های &quot;Web 2.0&quot; (مانند Gmail, Flicker, .....) که تونستند به دنیا نشون بدن وب مدرن به چه صورت خواهد بود.موتور های جاوااسکریپت هم در این رقابت مرورگر های مختلف با هم برای ارائه عملکرد بهتر به کاربران خود،‌پیشرفت قابل توجهی داشته اند. تیم های توسعه ای که پشت مرورگر های اصلی (مانند Google Chrome, Firefox, ...) هستند،‌سخت تلاش کرده اند تا پشتیبانی بهتری برای جاوااسکریپت داشته باشند و راهی برای افزایش سرعت اجرای جاوااسکریپت پیدا کنند.در این رقابت،‌موتور V8 گوگل کروم که به عنوان موتور اصلی Node.js استفاده شده، پیشرفت خیلی خوبی داشته است.Node.js در زمان و مکان مناسبی ساخته شد، ولی شانس تنها عامل موفقیت و محبوبیت این ابزار قدرتمند نبود. Node.js تفکرات و رویکرد های ابتکاری زیادی را برای توسعه جاوااسکریپت سمت سرور معرفی کرد که تونستد به تعداد زیادی از توسعه دهندگان کمک بکند.چگونه Node.js رو نصب بکنیم؟روش های مختلفی برای نصب Node.js وجود دارد که ما میتونیم توسط یکی از این روش ها آن را نصب کنیم. در ادامه چندین روش پر استفاده و معمول رو معرفی میکنیم.بسته های رسمی که در وب سایت Node.js موجود است.با استفاده از مدیریت بسته ای که سیستم عامل شما پشتیبانی میکند.NVM هم یک مدیرت بسته برای Node.js هست که از محبوبیت خوبی برخوردار است و این اجازه رو میده به ما تا نسخه های مختلف Node.js را در سیستم خود نصب بکنیم و به راحتی از همه آن ها بدون ایجاد خطا استفاده بکنیم.نکته:‌ اگه Node.js را به درستی نصب کرده باشید میتوانید با دستور node در محیط ترمینال خود به آن دسترسی داشته باشید.چه پیشنیاز هایی برای یادگیری Node.js نیاز داریم ؟به عنوان یه تازه کار،‌ مسیری که باید طی کنید تا به نقطه ای برسید که اعتماد به نفس کافی در مهارت های خودتون داشته باشید، خیلی سخته و نیاز به پشتکار زیادی داره.زمانی هم که مشغول یادگیری هستید،‌ممکنه گیج بشید که کجا جاوااسکریپت شروع و کی تموم میشه یا برعکس.من پیشنهاد میکنم که قبل از شروع Node.js، سعی کنید ار مفاهیم اصلی جاوااسکریپت یه درک خوبی داشته باشید.اگه این مطلب براتون مفید بود به اشتراک بذارید و اگه پیشنهادی دارید خوشحال میشم در قسمت نظر ها بزارید تا بتونم قسمت های بعدی این آموزش رو بهتر آماده بکنم.منبع:‌ Node.js Dev</description>
                <category>محمد رئوف زاهد</category>
                <author>محمد رئوف زاهد</author>
                <pubDate>Wed, 27 Oct 2021 13:20:58 +0330</pubDate>
            </item>
                    <item>
                <title>آموزش شی گرایی در پایتون - قسمت دوم</title>
                <link>https://virgool.io/coderlife/%D8%A2%D9%85%D9%88%D8%B2%D8%B4-%D8%B4%DB%8C-%DA%AF%D8%B1%D8%A7%DB%8C%DB%8C-%D8%AF%D8%B1-%D9%BE%D8%A7%DB%8C%D8%AA%D9%88%D9%86-%D9%82%D8%B3%D9%85%D8%AA-%D8%AF%D9%88%D9%85-j9leay2iwol6</link>
                <description>در این قسمت قراره با هم درمورد پیش نیاز های این دوره صحبت کنیم و چند لینک به مطالبی برای راه اندازی محیط توسعه پایتون در سیستم خودتون بزارم.پیش نیاز هاخب ما قبل از این که آموزش رو ادامه بدیم، بهتر هست درمورد پیش نیاز های این دوره صحبت کنیم.پس پیشنهاد میکنم به این پیش نیاز ها توجه کنید:نصب بروز ترین نسخه پایتون بر روی سیستم خود.نصب یک IDE یا یک ویرایشگر کد.آشنایی با مباحث پایه پایتون.اگه شما با موارد بالا آشنایی ندارید میتونید از لینک های زیر مباحث پایه پایتون رو یاد بگیرید تا در ادامه این آموزش به مشکل نخورید.آموزش مقدماتی پایتون(انگلیسی)اموزش راه اندازی محیط توسعه پایتون</description>
                <category>محمد رئوف زاهد</category>
                <author>محمد رئوف زاهد</author>
                <pubDate>Sat, 19 Jun 2021 14:18:40 +0430</pubDate>
            </item>
                    <item>
                <title>آموزش شی گرایی در پایتون - قسمت اول</title>
                <link>https://virgool.io/@mohammadraufzahed/%D8%A2%D9%85%D9%88%D8%B2%D8%B4-%D8%B4%DB%8C-%DA%AF%D8%B1%D8%A7%DB%8C%DB%8C-%D8%AF%D8%B1-%D9%BE%D8%A7%DB%8C%D8%AA%D9%88%D9%86-%D9%82%D8%B3%D9%85%D8%AA-%D8%A7%D9%88%D9%84-dwmfnmitfue7</link>
                <description>۱- مقدمه شی گرایی در پایتونزبان های برنامه نویسی به صورت متداول در حال ظاهر شدن هستند و هر کدام از آن ها اصول خاص خودشان را دارند. برنامه نویسی شی گرا یکی از همین اصول است که تو این چند سال محبوبیت بالایی رو برای خودش در بین توسعه دهنده ها به دست آورده.ما در این قسمت از آموزش های شی گرایی در پایتون، قرار هست در مورد ویژگی هایی در زبان برنامه نویسی پایتون صحبت کنیم که این زبان رو تبدیل به یک زبان شی گرا کرده.۲- طبقه بندی زبان های برنامه نویسیما میتونیم زبان برنامه نویسی پایتون رو یک زبان برنامه نویسی شی گرا بدونیم.در جدول زیر ما زبان های برنامه نویسی رو بر اساس ویژگی های خودشون طبقه بندی کردیم. به ویژگی های زبان پایتون دقت کنید:۳- زبان برنامه نویسی شی گرا چیست؟طراحی زبان برنامه نویسی پایتون بر اساس رویکرد های شی گرایی بود.مزایای برنامه نویسی شی گرا :به برنامه ما یک ساختار تمیز میدهد که در حل مسئله و توسعه آن کمک میکند.نگه داری و تغیر کد ها رو آسان میکند.به ماژولار بودن نرم افزار ما کمک میکند و به این ویژگی رو میدهد که هر قسمت رو به صورت شی مستقل بنویسیم که این هم به افزودن و ویرایش ویژگی ها کمک میکند.به ما برای نوشتن کد های کتابخانه ها یک چارچوب مناسب ارائه میدهد که این امکان رو به ما میدهد که بتونیم اجزای متفاوت رو به آسانی تطبیق بدهیم و آن ها را تغیر دهیم.به ما امکان نوشتن کد هایی با قابلیت استفاده دوباره رو میدهد.۴- مقایسه برنامه نویسی شی گرا با رویه ایبرنامه نویسی رویه ای از برنامه نویسی ساختار یافته مشتق میشود و مفاهیم اساسی آن را توابع - رویه و روال تشکیل میدهند.در برنامه نویسی رویه ای تغیر و دسترسی به داده ها کاری بسیار ساده است، ولی از طرف دیگر برای تغیر و دسترسی به داده در برنامه نویسی شی گرا ما باید از اشیاء و متد های آن ها استفاده بکنیم و همه این ها باید در شی پیاده سازی بکنیم. این روش بیشتر بر روی داده ها تمرکز دارد تا بر روی عملکردها یا روش ها. همچنین در برنامه نویسی شی گرا بیشتر داده ها پنهان هستند و ما نمیتوانیم به آن ها به صورت مستقیم در بیرون شی دسترسی پیدا کنیم.میتونید در جدول زیر اکثر تفاوت های بین Procedural Oriented Programming(POP) و Object-Oriented Programming (OOP) را مشاهده کنید:۵- اصول برنامه نویسی شی گرابرنامه نویسی شی گرا برپایه مفاهیم شیء‌ به جای اقدمات، و داده به جای منطق بنا شد. برای اینکه بتونیم یک زبان برنامه نویسی رو شی گرا بدونیم، باید بدونیم که ایا این زبان سازوکاری برای کار با اشیاء‌ و کلاس ها دارد یا خیر، همچنین باید ببینیم که امکان پیاده سازی و استفاده از مفاهیم پایه شیء گرایی مانند ارث بری، انتزاع، کپسوله سازی و چند شکلی را داشته باشد.مفاهیم پایه های اصلی شی گرایی در زیر نوشته شده است:کپسوله سازی: این مفهوم به ما کمک میکند تا خصوصیاتی که غیرضرروری هستند رو مخفی کنیم کنیم که این کار مدیریت نرم افزار رو آسان میکند. این مفهوم به ما کمک میکند تا خصوصیات مهم شی رو در پشت مرز هایی مشخص مخفی کنیم و متد های امنی برای ارتباط با آن ها رائه بدهیم که یکی از این روش ها استفاده از Private است.ارث بری:مفهوم ارث بری به ما کمک میکند تا یک رابطه سلسه مراتبی بین اشیاء و کلاس ها ایجاد کنیم. به عنوان مثال میوه نمای کلی پرتقال است. این مفهوم به ما در نوشتن کد هایی با قابلیت استفاده دوباره کمک زیادی میکند.انتزاع:این ویژگی به ما کمک میکند که بتونیم جزئیات رو مخفی کنیم و متد هایی برای ارتباط با آن ها ارائه بدهیم. به عنوان مثال کسی که اسکوتر سوار میشود میداند که اگه دکمه زنگ رو بزنه یک صدایی پخش خواهد شد، ولی از این که این صدا چجوری تولید و پخش می شود هیچ اطلاعی ندارد.چند شکلی:مفهوم چند شکلی به معنی اشکال مختلف است. یعنی یک چیز یا روش میتواند با روش های مختلف استفاده شود. مانند متد سازنده در کلاس ها.۶- شیء گرایی در پایتونقلب زبان برنامه نویسی پایتون اشیاء هست،‌ ولی با این حال اجباری برای اینکه شما از شیء‌ گرایی برای سازماندهی کد های خود استفاده کنید نیست. شی گرایی در کل فلسفه طراحی پایتون وجود دارد.۷- مقایسه ماژول ها و کلاس ها و اشیاء۷.۱- ماژول ها شبیه به Dictionaries هستند.زمانی که ما با ماژول ها کار میکنیم،‌ باید به نکات زیر توجه کنیم:ماژول پایتون یک بسته برای کپسوله سازی کدهایی با قابلیت استفاده دوباره است.ماژول ها در یک پوشه و در کنار فایل __init__.py قرار میگیرند.ماژول ها شامل توابع و کلاس ها هستند.ماژول ها توسط کلمه کلیدی import وارد کد میشوند.یاد آوری کنم که Dictionaries ها جفت key-value هستند. یعنی به عنوان مثال ما یک Dictionary داشته باشیم که حاوی کلیدی به اسم EmployeId باشد و بخواهیم به داده ای که دارد دسترسی پیدا کنیم باید به صورت زیر عمل کنیم.employee = {&#039;EmployeId&#039;: &#039;Employee Unique Id&#039;}
print(employee[&#039;EmployeId&#039;])
برای اینکه بتونیم ار ماژول ها استفاده بکنیم باید مسیر زیر رو طی کنیم:داشتن ماژولی که حاوی توابع یا کلاس باشد.وارد کردن ماژول توسط کلمه کلیدی importالان میتونیم با استفاده از نام ماژول به همراه یک نقطه در اخرش به تمامی کلاس ها و توابعی که در آن موجود است دسترسی پیدا کنیم.به مثال زیر توجه کنیدemployee.py:def employee():    print(&amp;quotHi Employees&amp;quot) main.py:import employee
employee.employee()
ماژول ها و dictionary ها رو وقتی با هم مقایسه بکنیم میبینیم که در بیشتر موارد شبیه هم هستند به جز موارد زیر:در dictionary ها کلید ها string هستند و برای دسترسی به آن ها باید به صورت زیر عمل کرد:myDict[&amp;quotkey&amp;quot]در ماژول ها، کلید ها یک علامت هستند مانند زیر:myModule.Key۸- کلاس ها شبیه ماژول ها هستندماژول ها نسخه پیشرفته dictionaries هستند که این امکان رو دارند که در خود کد های پایتون رو نگه داری کنند و ما از طریق آن ها به آن کد ها دسترسی پیدا کنیم.کلاس ها هم روش هایی هستند که به ما کمک میکنند تا کد هایی که به هم ربط دارند رو یک جا نگه داریم و بتونیم با نام کلاس و نقطه به ان ها دسترسی پیدا کنیم.به عنوان مثال اگه بخوایم یک کلاس برای employee بسازیم باید به صورت زیر عمل کنیم:class Employee:    def __init__(self):        self.Age = &amp;quotEmployee Age&amp;quot    def EmployeId(self):        print(&amp;quotThis is Employee Unique id&amp;quot)
منبع: کتاب Object Oriented Pythonآموزش شی گرایی در پایتون - قسمت دوم</description>
                <category>محمد رئوف زاهد</category>
                <author>محمد رئوف زاهد</author>
                <pubDate>Fri, 18 Jun 2021 14:58:13 +0430</pubDate>
            </item>
                    <item>
                <title>توزیع های لینوکسی</title>
                <link>https://virgool.io/@mohammadraufzahed/linux-distribution-sdlrtmrnp27m</link>
                <description>توزیع در سیستم عامل لینوکسنسخه های متفاوتی از لینوکس وجود داره و دلیلش اینه که افراد و شرکت ها میتونن اونو تغیر بدن و نسخه خود رو روانه بازار کنند و به هر یک از این نسخه ها توزیع یا Distribution از لینوکس گفته میشود.اما واقعا منظور ما از یه توزیع لینوکسی چیه؟ Gnu/Linux یک سیستم عامل آزاد و رایگان هست که هر کسی بخواهد میتونه سیستم عامل Gnu/Linux رو جمع اوری و به نام خودش به صورت رایگان یا تجاری منتشر کنه. خب حتما میگید که این کار چه دلیلی داره وقتی سیستم عامل رایگان و آزاد وجود داره؟ خب علتش اینه که سیستم عامل Gnu/Linux از قسمت های مختلفی تشکیل شده که هر کدومشون توسط عده خاصی توسعه داده میشه و هر کدوم از این افراد در قسمت مختلفی از دنیا هستند. اگه بخوایم ساده ترش کنیم میشه این مثال که میگه Gnu/Linux مثل یه هواپیما هست که هر قسمتش رو یک کشور تولید کرده که این موضوع برای Gnu/Linux یک امتیاز محسوب میشه. خب وقتی شما بخواید این سیستم عامل رو نصب کنید باید هر کدوم از این قسمت ها رو جمع کنید و بعد از کامپایل کردن از آن ها استفاده کنید. درواقع هر کسی نمیتونه این کار رو انجام بده که این موضوع کار رو سخت میکنه. خب برای حل این مشکل افزاد و شرکت ها تمامی این قسمت ها رو جمع کردند و کنار هم گذاشتن و نرم افزار های برای ساده کردن نصب کردن آن و مدیریت سیستم نوشتند تا کار با لینوکس رو راحت تر کنند. به این مجموعه هایی که توسط افراد و شرکت ها جمع آوری میشه توزیع یا Distribution از Gnu/Linux میگویند. در واقع به سیستم عاملی که از هسته لینوکس استفاده میکنه توزیع لینوکسی میگن که معمولا شامل ابزار های برنامه نویسی ، پایگاه های داده ، سرویس دهنده های وب مثل Apache و ….. هستند.تنوع توزیع های لینوکسیمعمولا توزیع های لینوکسی برای هدفی خاص یا برای برطرف کردن یک نیاز طراحی و توسعه داده میشوند. به عنوان مثال تسخه های از لینوکس وجود دارد که برای نصب بر روی سرور و انجام پردازش های سنگین وب ساخته شده اند یا توزیعی که برای محیط شبکه و یا توزیعی که برای جاهایی که امنیت در الویت قرار داره طراحی شده.همچنین یکی از جاهایی که لینوکس کاربرد زیادی داره Device ها یا تجهیزات شبکه هست. برای مثال در Router ها ، switch ها ، سیستم های تلفن و چیزهایی شبیه این کاربرد داره و هسته این ها رو تشکیل میده. حتی نامگذاری توزیع های لینوکسی جذاب و جالب هست به عنوان مثال توزیعی داریم که اسمش SAMURAI هست. توزیع هایی داریم که برای PC ها طراحی شدن.خب احتمالا این سوال براتون پیش اومد که باید کدوم از این ها رو انتخواب کنیم؟ خب این سوال یک جواب داره و اونم اینه که باید بر اساس نیاز و انتظاراتی که از لینوکس دارید توزیع مناسب رو انتخواب کنید.هر کدوم از توزیع های Gnu/Linux ویژگی های خاصی دارند که اون ها رو از بقیه توزیع ها متمایز میکنه. مثلا امکان داره نرم افزاری که برای نصب توزیع استفاده شده فرق داشته باشد و یا از نرم افزار های متفاوتی برای مدیریت سیستم استفاده شده باشه یا نسخه نرم افزار هایی که توزیع استفاده میکنه قدیمی یا بروز باشه و…. .توزیع های Gnu/Linux به دو صورت رایگان یا تجاری ارائه میشوند. یعنی برای دریافت توزیع یا دریافت پشتیبانی شما باید هزینه ای پرداخت کنید یا برعکس میتونید به صورت رایگان توزیع رو دریافت کنید و از پشتیبانی آن که به صورت انجمن است استفاده کنید. البته شما میتونید هر توزیع Gnu/Linux ی رو به تعداد نامحدود کپی و توزیع کنید و فرقی نمیکنه که تجاری هست یا رایگان مگر اینکه تولید کننده شما رو محدود کرده باشه.البته اگر Gnu/Linux رو یاد بگیرید دیگه به اون صورت مهم نیست که از چه توزیعی استفاده میکنید همه توزیع ها از باطن شبیه هم دیگه هستند و شما میتونید هرکاری که در یه توزیع انجام میدید به کمی تغیر یا بدون تغیر در توزیع دیگری هم انجامش بدید.بعضی از توزیع ها هم هستن که با بهینه کردن و تغیر یک توزیع دیگه ایجاد میشوند که به این توزیع ها توزیع مبتنی بر گفته میشه. به عنوان مثال Ubuntu یک توزیع مبتنی بر Debian است.خب به پایان مطلب رسیدیم. ممنونم از شما که نوشته بنده رو مطالعه کردید.خوشحال میشم که درصورت دیدن مشکلی در مطلب یا پیشنهاد در نظر ها اون رو با من به اشتراک بزارید.منبع :‌ وبلاگ شخصیم</description>
                <category>محمد رئوف زاهد</category>
                <author>محمد رئوف زاهد</author>
                <pubDate>Fri, 09 Oct 2020 18:59:12 +0330</pubDate>
            </item>
                    <item>
                <title>Gnu/Linux چیست و چرا به این نام میشناسیمش؟</title>
                <link>https://virgool.io/@mohammadraufzahed/gnulinux-%DA%86%DB%8C%D8%B3%D8%AA-%D9%88-%DA%86%D8%B1%D8%A7-%D8%A8%D9%87-%D8%A7%DB%8C%D9%86-%D9%86%D8%A7%D9%85-%D9%85%DB%8C%D8%B4%D9%86%D8%A7%D8%B3%DB%8C%D9%85%D8%B4-qnb3pumoiijk</link>
                <description>اگه تاحالا از سیستم عامل لینوکس استفاده کرده باشید به احتمال زیاد کلمه Gnu/Linux برخوردید و شنیده اید که فلان نرم افزار تحت لایسنس گنو هست و فلان نرم افزار نیست. خب این گنو چیه ؟همانطور که میدانیم لینوکس یک سیستم عامل هست و سیستم عامل هم به معنی مجموعه ای از نرم افزار ها گفته میشود که با سخت افزار ارتباط برقرار میکنند و بعضی وقت ها بعضی از این نرم افزار ها پیش نیاز نرم افزار دیگری میشود که در این بین لینوکس نقش هسته (Kernel) رو بازی میکنه. سیستم عامل به این نرم افزار ها برای اجرای دستورات کاربران نیاز دارد.در سیستم عامل Gnu/Linux لینوکس نقش هسته(Kernel) را دارد و بقیه نرم افزار ها که بقیه قسمت های سیستم عامل رو تشکیل میدن بیشترش یا تحت لایسنس گنو هست یا از قوانین گنو پیروی میکنند.دلیل اینکه ما به این مجموعه میگیم Gnu/Linux میگیم اینه که لینوکس فقط یک هسته (Kernel) هست و بدون نرم افزار هایی که پروژه گنو توسعه میده غیر قابل استفاده است و هیچ کاربردی نداره. پس ما لینوکس رو با ابزار های گنو جمع میکنیم و نتیجه اون میشه سیستم عامل Gnu/Linux. بزار یه مثال ساده بزنم. شما ویندوز رو فرض کنید که ویندوزی که همه استفاده میکنن بدون نرم افزار هایی مثل Notepad یا IE و ….. که باعث کارآمدی ویندوز میشه باشه باعث میشه ویندوز دیگه قابل استفاده نباشه و نشه باهاش کاری مفید کرد. همین اتفاق با لینوکس میفته اگه نرم افزار هایی که پروژه گنو توسعه میده رو نداشته باشه.خب این پروژه گنو این همه درموردش حرف زدیم در سال ۱۹۸۳ توسط ریچارد استالمن پایه گذاری شده و هدفش توسعه یک سیستم عامل آزاد برای جایگزینی ان با سیستم عامل های غیر آزاد و ترویج فلسفه نرم افزار آزاد بوده.امیدوارم که از خواندن این مطلب لذت برده باشید. اگه نقدی به این مطلب دارید خوشحال میشم نظرتون رو در قسمت نظرات برای بنده بنویسید.منبع :‌ وبلاگ شخصیم</description>
                <category>محمد رئوف زاهد</category>
                <author>محمد رئوف زاهد</author>
                <pubDate>Thu, 08 Oct 2020 11:54:01 +0330</pubDate>
            </item>
                    <item>
                <title>لینوکس چیه و چی شد که به دنیا اومد؟</title>
                <link>https://virgool.io/@mohammadraufzahed/%D9%84%DB%8C%D9%86%D9%88%DA%A9%D8%B3-%DA%86%DB%8C%D9%87-%D9%88-%DA%86%DB%8C-%D8%B4%D8%AF-%DA%A9%D9%87-%D8%A8%D9%87-%D8%AF%D9%86%DB%8C%D8%A7-%D8%A7%D9%88%D9%85%D8%AF-znjcq6htaabl</link>
                <description>با سلام به دوستان عزیزخب اول از همه لینوکس یه سیستم عامل شبه یونیکس هست که بر پایه استاندارد های پازیکس نوشته شده. لینوکس در سال ۱۹۹۱ توسط یه دانشجوی 21 ساله در دانشگاه هلسینکی به نام لینوس توروالدز نوشته شد.در آن زمان یونیکس قدرمتندی وجود نداشت که به صورت ازاد در دسترس باشه و همین لینوس توروالدز رو ا‌‌ذیت میکرد. لینوس آن زمان از سیستم عاملی به نام Minix که توسط اندرو تننبام نوشته شده بود برای اهداف آموزشی که کد منبع آن هم موجود بود ولی اجازه تغیر کد منبع رو نداشتن استفاده میکرد . همین شد که لینوس تصمیم گرفت سیستم عامل خودش رو بنویسه.سال 1991 بود که لینوس توروالدز اولین نسخه لینوکس رو با لایسنس GPL در اینترنت منتشر کرد که به این دلیل که این امکان رو به برنامه نویسانی دوست داشتن تو توسعه لینوکس همکاری داشته باشن گذاشته بود با استقبال خوبی رو به رو شد. ولی کرنل یه واسط بین نرم افزار و سخت افزاره یا به زبان ساده کرنل به CPU کامپیوتر شما که کامپیوتر شما رو مدیریت میکنه میگه که نرم افزار قراره چیکار کنه. لینوس نرم افزاری ننوشته بود که بتونه در لینوکس استفاده کنه ولی نرم افزاری ننوشته بود برای لینوکس. خب بریم یه عقب گردی بکنیم قبل از این که لینوس توروالدز لینوکس رو منتشر کنه و ببینیم چطور این مشکل حل شد.حدودا 6 سال ریچارد استالمن جنبش نرم افزار ازاد و Gnu ایجاد و شروع کرده بود نرم افزار های جایگزین نرم افزار های تجاری Unix نوشتن که تا سال 1991 تقریبا تمامی نرم افزار ها رو نوشته بودن.در سال 1991 یه اتفاق خیلی جالبی افتاد و اون اتفاق این بود که لینوس توروالدز یک کرنل نوشته بود و نرم افزار نداشت. ریچارد استالمن تقریبا تمامی نرم افزار ها رو نوشته بود ولی کرنل نداشت که همین باعث شد این ها بر روی بستر اینترنت با هم ترکیب بشن که سیستم عامل لینوکس یا گنو/لینوکس که شامل کرنل لینوکس و ابزار های گنو بود.این شد که گنو/لینوکس یا لینوکس متولد شد.ممنونم که وقت گذاشتید و نوشته بنده رو مطالعه کردید. این اولین نوشته بنده بود. اگه کسری و اشتباه داشت خوشحال میشم بهم در نظر ها بگید تا بتونم مطالب بهتری بنویسم.منبع : وبلاگ شخصیم</description>
                <category>محمد رئوف زاهد</category>
                <author>محمد رئوف زاهد</author>
                <pubDate>Mon, 05 Oct 2020 19:51:45 +0330</pubDate>
            </item>
                    <item>
                <title>اینترنت چجوری کار میکنه؟</title>
                <link>https://virgool.io/coderlife/%D8%A7%DB%8C%D9%86%D8%AA%D8%B1%D9%86%D8%AA-%DA%86%D8%AC%D9%88%D8%B1%DB%8C-%DA%A9%D8%A7%D8%B1-%D9%85%DB%8C%DA%A9%D9%86%D9%87-fqjcvdgjf2pz</link>
                <description>با سلام به دوستان عزیز. من این مطلب رو از یک مطلب انگلیسی ترجمه کردم و اولین تجربم از ترجمس. امیدوارم تونسته باشم کاملش کنم. منبع در اخر پست درج میشه.1- مقدمهاینترنت چجوری کار میکنه؟ سوال خیلی خوبیه. رشد اینترنت در جهان تبدیل به یک بمب بارانی شده که هیچ کسی نمیتونه ازش فرار کنه. اینترنت در تلویزیون،رادیو و در مجله ها هم دیده میشه. اینترنت تو این چند سال تبدیل شده به یک قسمت بزرگی از زندگی ما که اگه بخوایم از آن نهایت استفاده مفید رو ببریم باید از آن شناخت کافی داشته باشیم.تو این مطلب قراره درمورد زیر ساخت ها و تکنولوژی هایی که باعث کار کردن اینترنت میشه حرف میزنیم. ما قرار نیست به عمق مفاهیم بریم، به اندازه کافی توضیح داده میشه که شما بتونید درک درستی از مفاهیم پایه رو داشته باشید.2- از کجا شروع کنیم؟؟ آدرس های اینترنتیبه این دلیل که اینترنت یک شبکه جهانی تشکیل شده از کامپیوتر هاست، هر کامپیوتری که میخواد به اینترنت متصل بشه باید یه ادرس منحصر به فرد داشته باشه. ادرس های اینترنتی که به قالب متنی مثل nnn.nnn.nnn.nnn استفاده میکنند که به جای nnn باید عددی از 0 تا 255 قرار بگیره. به این نوع آدرس میگن IP(که مختصر Internet Protocol هست که درمورد این بعدا توضیح خواهیم داد).عکس زیر که دو کامپیوتر متصل به اینترنت رو نشون میده. کامپیوتر شما با آدرس 1.2.3.4 و کامپیوتری دیگر با ادرس 5.6.7.8 . اینترنت به عنوان واسط عمل میکنه.Diagram 1اگه شما توسط یک ISP به اینترنت متصل شده باشید، به شما یک آدرس یک بار مصرف میده که تا وقتی شما به اینترنت متصل باشید معتبره و وقتی شما اینترنت رو قطع و دوباره وصل شید آدرس جدیدی به شما میده.3- پروتکل ها و بسته هابنابراین کامیپیوتر شما به اینترنت متصل شده و یک آدرس منحصر به فرد داره. حالا یه سوال جدیدی پیش میاد که این کامپیوتر هایی که به اینترنت متصل هستند چجوری با هم صحبت میکنند؟ به عنوان مثال کامپیوتر شما با آدرس 1.2.3.4 میخواهد پیامی به کامپیوتری به آدرس 5.6.7.8 ارسال کند. به عنوان مثال شما میخواهید که پیام &quot;سلام به تو&quot; را ارسال کنید.مشخص هست که باید این پیام بین هر نوع سیمی که کامپیوتر شما رو به اینترنت متصل کرده منتقل شود. فرض بر اینکه شما توسط ISP به اینترنت وصل شدید و پیام شما باید به خط تلفن منتقل شود. اینجاست که پیام شما باید از حروف الفبا به سیگنال های الکترونیکی تبدیل بشن، منتقل شن به کامپیوتر هدف توسط اینترنت و بعد دوباره تبدیل به حروف الفبا بشن. چجوری این ها اتفاق میفتن؟ از طریق استفاده از لایه های پروتکل. همه کامپیوتر ها به یک پروتکل نیاز دارن تا بتوانند با اینترنت ارتباط برقرار کنند که معمولا هر سیستم عاملی درون خودش داره(Windows , Mac , Linux و ....) لایه پروتکل توسط اینترنت به خاطر دو پروتکل ارتباطی اصلی استفاده میکند که به نام TCP/IP شناخته میشوند. که لایه TCP/IP شبیه زیر هست:TCP/IP Stackحالا اگه ما بخوایم پیام &quot;سلام به تو&quot; رو ارسال کنیم و مسیری که طی میکنه تا به کامپیوتر مورد نظر برسه رو دنبال کنیم به همچین چیزی بر میخوریم :ِDiagram 21 - پیام شما از بالای لایه پروتکل شروع میکند و کار خود را به سمت پایین ادامه میدهد.2 - اگه پیامی که شما ارسال کردید طولانی باشد، پیام هر لایه ای که ازش عبور میکنه اون لایه ممکنه پیام رو بشکنه و به تکه های کوچک تر داده ها تبدیل کند. این که کار به این خاطره که هر چیزی که بین اینترنت منتقل میشه(و بیشتر شبکه های کامپیوتری) رو از طریق تکه های قابل کنترل میفرسته. توی اینترنت این تکه ها رو به عنوان بسته ها(Packets) میشناسند.3 - بسته ها از لایه نرم افزار(Application) عبور میکنند و به لایه TCP میرسند. تو این قسمت به هر بسته یک پورت اختصاص داده میشه. پورت ها رو بعدا توضیح خواهیم داد، ولی کافیه که اینجا بدونید که ممکنه  بیشتر نرم افزار ها از لایه TCP/IP برای ارسال پیام استفاده کنند. ما باید بدونیم که کدوم نرم افزار روی کامپیوتر مقصد پیام رو دریافت میکنه چون که این برنامه روی یک پورت خاصی در حال گوش دادنه.4 - بعد از این که بسته  لایه TCP رو رد میکنه میرسه به لایه IP که در این لایه بسته ها آدرس مقصد خود رو دریافت میکنند.5 - حالا بسته ها آدرس و پورت رو دارن و آماده هستن تا به اینترنت فرستاده بشن. لایه سخت افزار(Hardware) بسته ها رو تبدیل به سیگنال های الکترونیکی میکنه و میفرستدشون به خط تلفن.6 - در آخر خط تلفن ISP ها ارتباط مستقیم به اینترنت دارند. روتر ISP ها بسته ها رو دریافت میکنند و آدرس های بسته ها رو بررسی میکنند و تصمیم میگیرند که هر بسته رو به کجا بفرستند. غالبا جای دیگری بسته ها به آن میرسند روتر دیگر هست(روتری که کامپیوتر مقصد از طریق آن به اینترنت متصل شده).7 - در نهایت، بسته ها به کامپیوتر 5.6.7.8 میرسند. اینجا بسته ها شروع میکنند از پایین به سمت بالا از لایه های پروتکل رد میشوند.8 - وقتی بسته ها از لایه ها رد میشند برچسب هایی که در مراحل اول به این ها زده بودند مثل آدرس IP و... برداشته میشوند.9 - وقتی داده ها به کامپیوتر میرسند منتاژ مجدد میشوند و به حالت اولیش برمیگرده،&quot;سلام به تو&quot;. :)4- زیرساخت های شبکهخب الان شما میدونید که چجوری اطلاعات از یه کامپیوتر به کامپیوتر دیگه از طریق اینترنت سفر میکنه. ولی این بین چه اتفاقی میفته؟ چه چیزی دقیقا اینترنت رو سر پا نگه میداره؟ بیاید به این عکس زیر یه نگاهی بندازیم :Diagram 3خب ما تو این تصویر دیاگرام اول رو با جزئیات بیشتری میبینیم. اتصال فیزیکی بین خط تلفن به ISP رو میتونید به سادگی حدس بزنید. اما بازم چیزایی برای تعریف کردن هستش.ارائه دهنده های اینترنت(ISP) از استخر های مودم نگهداری میکنند برای مشتری هاشون که توسط کامپیوتر ها مدیریت میشوند که هر کدام داده ها را کنترل میکنند و بعد آن ها را به ستون فقرات  یا به روتر خط اختصاصی میفرستند. به این راه اندازی معمولا سرور پورت گفته میشود زیرا دسترسی به شبکه را فراهم میکند. اطلاعات صورت حساب و استفاده معمولا از اینجا جمع اوری میشود.بعد از این که بسته هاتون از خط تلفن و ISP رد شد به ستون فقرات سرویس دهنده اینترنت میرسه یا همون (ISP Backbone). از همین جا سفر بسته هامون شروع میشود و بسته ها از چندید روتر، ستون فقرات ISP، خطوط اختصاصی و شبکه های دیگر حرکت میکنند تا به مقصد خود یعنی کامپیوتر 5.6.7.8 برسند. ولی اگه ما میدونستیم که بسته ها چه مسیری رو طی کردند تا به مقصدشون برسند جالب نیست؟ در واقع برای این سوال هم راه حل وجود داره و اون هم traceroute نام دارد و میتونید این را در ویندوز با دستور tracert google.com و در خانواده یونیکس از traceroute google.com استفاده کنید.اگه شما از  traceroute استفاده کرده باشید باید دیده باشید که بسته ها به آدرس های زیادی فرستاده میشند تا به مقصدشون برسند. به احتمال باید به ادرس های عجیبی مثل sjc2-core1-h2-0-0.atlas.digex.net و fddi0-0.br4.SJC.globalcenter.net. اینها آدرس روتر هایی هستند که بسته ها به آن ارسال میشود تا درمورد مسیر بسته ها تصمیم بگیرند. چندین روتر در دیاگرام 3 نشان داده شده، اما فقط تعداد معدودی هستند. منظور از دیاگرام 3 نشون دادن ساختار شبکه به صورت ساده است. شبکه اینترنت پیچیده تر است.5- زیر ساخت شبکهستون فقرات اینترنت که از تعداد زیادی از شبکه های بزرگ که با هم در ارتباط هستند تشکیل شده، که این شبکه های بزرگ رو به نام Network Service Providers یا به اختصار NSPs میشناسند که UUNet, CerfNet, IBM, BBN Planet, SprintNet, PSINet نام تعدادی از این شبکه های بزرگ هستند. این شبکه ها برای تبادل بسته ها با هم همکاری میکنند. هر NSP نیاز داره تا به سه عدد نقاط دسترسی به شبکه(NAP) متصل باشه. در NAP ها ممکن است بسته ها از یک ستون فقرات NSP به یکی دیگه از ستون فقرات بپرند.همچنین NSP ها در MAE ها به هم متصل هستند.MAE ها هم همان کار NAP رو انجام میدن ولی با این تفاوت که متعلق به بخش خصوصی هستند. NAP ها نقاط اصلی اتصال اینترنت هستند. درواقع NAP ها و MAE ها به عنوان نقاط تبادیل اینترنت شناخته میشوند یا به اختصار IXs. همچنین NSP ها پهنای باند را به شبکه های کوچک مانند ISP ها ارائه دهنده های پهنای باند کوچک تر میفروشند. عکس زیر, زیر ساخت سلسله مراتبی این روند رو نشون میده.Diagram 4 این در واقع نمای واقعی از قطعه واقعی اینترنت نیستش. دیاگرام ۴ فقط منظورش این است که NSP ها چگونه باید با یکدیگر و دیگر ISP های کوچک ارتباط برقرار کنند. شما میتونید نقشه کامل این رو در اینترنت پیدا بکنید.۶- سلسله مراتب مسیریابی اینترنتخب حالا بسته ها چجوری مسیر خودشونو توی این اینترنت پیدا میکنند؟ آیا هر کامپیوتری که به اینترنت متصل هست میدونه که بقیه کامپیوتر ها کجا هستند؟ آیا هر بسته به راحتی در هر رایانه ای در اینترنت پخش میشود؟ جواب هر دو سوال &#x27;نه&#x27; هستش. هیچ کامپیوتری از محل کامپیوتر دیگه خبر نداره, بسته ها هم به هر کامپیوتری ارسال نمیشوند. اطلاعات مورد نیاز برای دسترسی هر بسته به مقصد در جداول مسیریابی وجود دارد که توسط روتر های متصل به اینترنت نگهداری میشوند.روتر ها سوئیچ های بسته هستند. معمولا روتر ها مابین شبکه ها قرار میگیرند تا بسته های بین انها را مسیریابی کنند. هر روتر از شبکه های فرعی آن و کدام آدرسهای IP استفاده می کند خبر دارد. روتر ها معمولا آدرس IP بالای خود را نمیدانند. نمودار ۵ در زیر رو بررسی کنید. جعبه های سیاه که به ستون فقرات متصل هسنتد روتر نام دارند. ستون فقرات NSP بزرگتر در بالا به NAP متصل شده است. زیر آن ها چند شبکه فرعی وجود دارد و زیر آن ها شبکه های فرعی بیشتری وجود دارد. در زیر همه آن ها دو شبکه محلی وجود دارد که چندین کامپیوتر به آن ها متصل شده اند.Diagram 5وقتی یکی از بسته ها به روتر میرسد, روتر آدرس IP که توسط لایه پروتکل IP بر روی بسته زده شده رو بررسی میکنه. در صورت پیدا شدن شبکه حاوی آدرس IP ، بسته به ارسال میشود و اگه پیدا نشه روتر بسته ها رو به شبکه پیشفرض ارسال میکنه، معمولا به صورت سلسله مراتبی به روتر بعدی. به این امید که روتر بعدی بدونه که بسته رو باید به کجا بفرسته.اگه ندونه بسته به مسیر خودش ادامه میده تا به ستون فقرات NSP برسه. روترهای متصل به ستون فقرات NSP بزرگترین جداول مسیریابی را در خود جای می دهند و در اینجا بسته به ستون فقرات صحیح هدایت می شود ، جایی که سفر خود را از طریق شبکه های کوچکتر و کوچکتر شروع می کند تا جایی که مقصد خود را پیدا کند.۷- نام دامنه و وضوح آدرسخب اگه آدرس IP کامپیوتری که میخواید بهش وصل شید رو ندونید چی میشه؟ اگه شما نیاز داشتید به وب سروری که آدرسش www.anothercomputer.com بود دسترسی داشته باشید؟ مرورگر شما باید از کجا بدونه کامپیوتر مورد نظر  شما کجای اینترنت هست؟ جواب تمام این سوال Domain Name Service یا به اختصار DNS است. DNS یک پایگاه داده توزیع شده است که پیگیر نام کامپیوتر ها و آدرس IP آن ها هست.تعداد زیادی از کامپیوتر های متصل به اینترنت میزبان بخشی از پایگاه داده DNS و نرم افزاری است که به دیگران امکان دسترسی به آن  را میدهد. اسم این کامپیوتر ها DNS سرور نام دارند. هیچ کدوم از DNS سرور ها شامل کل بانک اطلاعاتی نیستند؛  آنها فقط شامل زیر مجموعه ای از آن هستند. اگه DNS سرور نام دامنه درخواست شده توسط کامپیوتر رو پیدا نکنه اون رو به یک DNS سرور دیگه ارسال میکنه.Diagram 6سرویس DNS به عنوان سلسله مراتب شبیه به سلسله مراتب مسیریابی IP ساخته شده است. وقتی کامپیوتری درخواست خودش رو میفرسته؛ درخواست به صورت سلسله مراتبی بالا میره تا یک DNS سرور بتونه پیداش کنه. شکل ۶ بخشی از سلسله مراتب را نشان می دهد. در بالای درخت ریشه های دامنه قرار دارد. بعضی از دامنه های قدیمی تر و متداول در نزدیکی بالا دیده میشوند. چیزی که نشون داده نشده تعداد زیادی از DNS سرور ها در سراسر جهان است که بقیه سلسله مراتبی را تشکیل میدهند.وقتی یک اتصال به اینترنت راه اندازی میشود(مثلا شبکه LAN یا Dial-up در ویندوز)، معمولا یک DNS سرور اصلی و یک یا چند DNS سرور ثانویه به عنوان قسمتی از نصب تنظیم میشوند. به این صورت، هر برنامه ای که نیاز به ارسال نام دامنه دارند میتونند به راحتی درخواست خودشون رو ارسال کند و جواب درستی دریافت کند. به عنوان مثال، شما وقتی یک آدرس رو در مرورگر خود وارد میکنید، ابتدا مروگر به DNS سرور اصلی متصل میشود و بعد از این که آدرس مورد نظر رو پیدا کرد به کامپیوتر مورد نظر وصل میشود و صفحه وب مورد نظر رو درخواست میکنه.۸- بررسی دوباره پروتکل های اینترنتیهمانطور که قبلاً در بخش مربوط به پشته های پروتکل اشاره شده بود، به احتمال تصور میکنید که پروتکل های زیادی وجود دارد که اینترنت از آن استفاده میکند. که دقیقا درسته. پرتکل های ارتباطی زیادی وجود دارد که اینترنت برای اینکه به درستی عمل کنه به آن ها نیاز داره. که شامل پروتکل TCP و IP، پروتکل مسیریابی، پروتکل مدیریت دسترسی، پروتکل سطح برنامه و.... .منبع</description>
                <category>محمد رئوف زاهد</category>
                <author>محمد رئوف زاهد</author>
                <pubDate>Mon, 27 Jul 2020 14:17:51 +0430</pubDate>
            </item>
                    <item>
                <title>لینوکس چیست؟</title>
                <link>https://virgool.io/@mohammadraufzahed/%D9%84%DB%8C%D9%86%D9%88%DA%A9%D8%B3-%DA%86%DB%8C%D8%B3%D8%AA-jshafprbqwdu</link>
                <description>خیلی وقت بود که می خواستم هر چی که یاد میگیرم رو جایی منتشر کنم که امروز عملی شد و تصمیم گرفتم این ها رو در ویرگول منتشر کنم. سعی میکنم در نوشته های دیگم بهتر عمل کنم و مطالب رو ساده و کامل تر بنویسم :)لینوکس یک کلون از سیستم عامل یونیکس هست که توسط لینوس توروالدز نوشته شده و در سال ۱۹۹۱ اولین نسخه از آن را در اینترنت منتشر کرد و سال هاست که در محیط های دانشگاهی و کسب و کار مشهور است.لینوکس بر خلاف مینیکس که از معماری ریز هسته استفاده میکرد. با ایده هسته یک پارچه طراحی شده بود. هسته لینوکس رو میتونید در بسیاری از توزیع های گنو/لینوکس پیدا کنید که این توزیع ها دارای کرنل خاص که پشتیبانی خاصی از نرم افزار ها دارند. از توزیع های پر طرفدار گنو/لینوکس میتوان اوبونتو و فدورا و اپن سوزه رو نام برد.</description>
                <category>محمد رئوف زاهد</category>
                <author>محمد رئوف زاهد</author>
                <pubDate>Thu, 21 May 2020 11:01:15 +0430</pubDate>
            </item>
                    <item>
                <title>فتوشاپ در لینوکس !</title>
                <link>https://virgool.io/@mohammadraufzahed/%D9%81%D8%AA%D9%88%D8%B4%D8%A7%D9%BE-%D8%AF%D8%B1-%D9%84%DB%8C%D9%86%D9%88%DA%A9%D8%B3-sfv6mm8l4yey</link>
                <description>با سلام دوستان عزیز من امروز در حال گشت گذار در گیتهاب بودم که به اسکریپتی برخوردم که خیلی جالب بود.https://github.com/Gictorbit/photoshopCClinuxاین اسکریپت به راحتی نرم افزار فتوشاپ رو بر روی توضیع های لینوکسی نصب میکنه و تازه نیاز به کرک دوباره فتوشاپ نداره و دلیل خوبیه که دوباره برگردم به لینوکس.امیدوارم به دردتون بخوره این اسکریپت.</description>
                <category>محمد رئوف زاهد</category>
                <author>محمد رئوف زاهد</author>
                <pubDate>Sun, 17 May 2020 17:02:15 +0430</pubDate>
            </item>
                    <item>
                <title>شروع کار با Gitlab pages</title>
                <link>https://virgool.io/@mohammadraufzahed/start-with-gitlab-pages-vak3zznvcq88</link>
                <description>با سلام به دوستان عزیزی که دارن این مطلب رو میخونن.من چند وقتی بود میخواستم وب سایتم رو روی گیت لب بارگزاری کنم و از pages استفاده کنم و متاسفانه تو اینترنت با اموزش های مواجه شدم که سر ادم رو درد میاورد پس تصمیم گرفتم که یه آموزش ساده برای بارگزاری و راه اندازی یه سایت ساده استاتیک با Gitlab pages رو بنویسم که شاید در آینده یه ویدیویی هم درست کنم. خب سرتونو درد نیارم بیشتر از این.خب ما برای شروع اول باید وارد گیت لب بشیم.بعد از اینکه وارد شدیم یه پروژه جدید باز میکنم و نام اون پروژه رو مثل این نام زیر بزاریدusername.gitlab.ioشما باید به جای username نام کاربری خودتون رو بزارید و بعد پروژه رو ایجاد کنید.خب شما حالا پروژتون رو ایجاد کردید و ما باید بریم وب سایتمون رو اماده کنیم.خب حالا ما باید تو پوشه روت سایتمون یه پوشه به نام public بسازم و همه فایل های سایت رو توی اون بریزم. به مثال زیر توجه کنید.ما باید همه فایل ها که نیاز هست تا سایت اجرا شه به پوشه public ببریم.بعد از اون وارد پوشه روت میشیم نه پویشه public و فایلی ایجاد میکنیم به نام:.gitlab-ci.ylmبعد باید یه چند خط کد توی این بزنید.خب شما بعد از این که فایل رو سیو کردید کافیه که پروژه رو push کنید تا سایتتون درست بشه.شما میتونید از گزینه Pages تو Setting پروژتون ادرس های سایت رو مدیریت کنید.خب کارمون دیگه تمونه و سایت هم ایجاد شده و الان انلاینه.ممنونم بابت وقتی که گذاشتید که این مطلب رو بخونید.</description>
                <category>محمد رئوف زاهد</category>
                <author>محمد رئوف زاهد</author>
                <pubDate>Sun, 22 Mar 2020 16:42:54 +0430</pubDate>
            </item>
            </channel>
</rss>