<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
    <channel>
        <title>نوشته های مبین آقاشاهی اردستانی</title>
        <link>https://virgool.io/feed/@mobin.aghashahi</link>
        <description>یک آسیایی قضا و قدری که به کامپیوترها دستور میده ? گاهی عکس میگیرم چون کامپیوترهارو نمی‌فهمم و گاهی مینویسم چون دنیا رو نمیفهم</description>
        <language>fa</language>
        <pubDate>2026-06-16 01:37:53</pubDate>
        <image>
            <url>https://files.virgool.io/upload/users/72100/avatar/NVG6gg.jpg?height=120&amp;width=120</url>
            <title>مبین آقاشاهی اردستانی</title>
            <link>https://virgool.io/@mobin.aghashahi</link>
        </image>

                    <item>
                <title>تانل (Tunnel) چیست؟ چرا؟ و چگونه؟</title>
                <link>https://virgool.io/@mobin.aghashahi/%D8%AA%D8%A7%D9%86%D9%84-tunnel%DA%86%DB%8C%D8%B3%D8%AA-%DA%86%D8%B1%D8%A7-%D9%88-%DA%86%DA%AF%D9%88%D9%86%D9%87-gle9bf4a8ltc</link>
                <description>خب امروز میخوایم راجبع تانل و انواع تانل صحبت کنیم. این که تانل چیه؟ کاربردش چیه؟ و خب چجوری خودمون تانل بزنیم؟تانل رو به چشم لوله کشی ببینید :)خب چیزی که درک تانل و تانل زدن رو برای من راحت کرد، این بود که تانل زدن رو دقیقاً به چشم لوله‌کشی نگاه کردم. اگه شما هم بتونید موضوع رو دقیقاً شبیه لوله‌کشی تصور کنید، کمتر گیج می‌شید.شما کامپیوتر خودتون رو از طریق یه تانل به کامپیوتر A وصل می‌کنید، بعد همون رو به کامپیوتر B وصل می‌کنید و در نهایت با IP کامپیوتر B توی اینترنت کارهاتون رو انجام می‌دید.می‌بینید؟! موضوع دقیقاً شبیه لوله‌کشیه؛ ترافیک شما از طریق لوله‌هایی که به هم وصل کردید منتقل می‌شه.کاربرد تانل چیه و به چه دردی می‌خوره؟خب، برای اینکه موضوع روشن‌تر بشه، اجازه بدید با یه سناریو شروع کنیم.فرض کنید چنین شبکه‌ای داریم؛ شبکه‌ای که شامل دو تا کامپیوتر می‌شه که از طریق ADSL به اینترنت متصل هستن و IP داینامیک (Dynamic IP) دارن.همون‌طور که می‌دونید، داخل ایران و خیلی از جاهای دیگه، ISPها به دلایل امنیتی تمام پورت‌های ورودی شبکه شما رو می‌بندن و شما اجازه ندارید از بیرون به شبکه خودتون دسترسی داشته باشید.همچنین داخل شبکه‌ای که کشیدیم، یک سرور با IP استاتیک (Static IP) داریم که به‌راحتی از هر جای اینترنت می‌شه بهش دسترسی داشت و اون رو دید.تعریف صورت مسئله اول:حالا اگه بخوایم از کامپیوتر A به کامپیوتر B ریموت بزنیم، باید چیکار کنیم؟ اصلاً همچین چیزی شدنی هست؟قبل از اینکه ادامه مطلب رو بخونید، یه کم به جواب این سوال فکر کنید و بعد برید سراغ قسمت بعدی.راه حل کلی برای حل مسئله اول:یک همچین چیزی میشه عزیزانمخب همون‌طور که بهتون گفتم، به دلیل محدودیت ISPها، نمی‌تونیم پورت 3389 رو روی IP داخلی 192.168.1.2 (همون کامپیوتر خودمون) فوروارد کنیم.پس بیاید یه جور دیگه به مسئله نگاه کنیم.اگه بتونیم از پورت 3389 کامپیوتر خودمون، به پورت 3389 سرورمون یه ارتباط بزنیم چی؟!بعد به جای اینکه مستقیم به IP داینامیک کامپیوتر B ریموت بزنیم، به IP داینامیک سرور خودمون ریموت می‌زنیم و سرور، ترافیک رو می‌فرسته سمت کامپیوتر B.اینجا از مفهوم تانل استفاده می‌کنیم.ولی چون محدودیت داریم و نمی‌تونیم از سرور به کامپیوتر B تانل بزنیم، میایم یه Reverse Tunnel می‌زنیم؛ یعنی کامپیوتر B خودش به سرور وصل می‌شه و می‌گه:«پورت 3389 من رو به پورت 3389 سرور وصل کن.»اینجوری هرکی به IP سرور (مثلاً 188.136.196.2) ریموت بزنه، سرور اون رو منتقل می‌کنه به کامپیوتر B.قشنگ نیست؟ 😄اگه از من بپرسید، می‌گم زندگی یعنی همین...اینا که گفتیم، چجوری انجام میشه؟مسئله اینه که این موضوع از دور خیلی ترسناک به نظر میاد، ولی ابزارهایی وجود دارن که پیچیدگی‌ها رو برای ما حل می‌کنن و ما فقط باید به سناریومون فکر کنیم.ما می‌تونیم از طریق SSH به سرورمون یه لوله‌کشی کنیم (بخونید: تانل بزنیم) و این کار با دستور SSH و سوئیچ -R انجام می‌شه.CMD رو باز کنید و این دستور رو وارد کنید:ssh -R 3389:localhost:3389 root@188.136.196.2راهنما:ssh -R serverPort:localhost:computerPort userNameServer@IpAddressServerببا این دستور می‌تونید هر پورتی رو به هر پورت دیگه‌ای به صورت Reverse روی سرور وصل کنید.کار تموم شد؟! 😄بلهههههه، به همین راحتی شما پورت 3389 کامپیوتر خودتون رو به سرور وصل کردید و از این به بعد هرکی به IP سرور ریموت بزنه، انگار داره به کامپیوتر خونه‌تون وصل می‌شه.تعریف صورت مسئله دوم:خب برای روشن‌تر شدن موضوع، اجازه بدید یه مسئله دیگه هم مطرح کنیم و با تانل‌ها حلش کنیم.فرض کنید اینترنت شما به دلایلی با محدودیت روبه‌رو شده و نمی‌تونید به اینترنت آزاد دسترسی داشته باشید. ولی یه سرور دارید در جایی که اینترنت آزاد داره و خودتون هم بهش دسترسی دارید.حالا سوال اینه: چجوری می‌تونیم اینترنت اون سرور رو به کامپیوتر خودمون «لوله‌کشی» کنیم؟یه کم فکر کنید روی مسئله و بعد برید سراغ ادامه مطلب.راه حل کلی برای صورت مسئله دوم:چیزی که مشخصه اینه که جواب این سوال هم با تانل‌ها حل می‌شه، ولی چجوری؟ بریم با هم جلو.ببینید شما می‌تونید از طریق همین SSH که واقعاً یه شاهکار مهندسیه، یه تانل بزنید به سرور و بگید این تانل از پورت مثلاً 1020 روی کامپیوتر من به یه پورت روی سرور وصل باشه.بعد می‌تونید با ابزارهای پراکسی روی ویندوز یا لینوکس این پورت رو به سیستم خودتون وصل کنید و بگید هر ترافیکی که از کامپیوتر من می‌خواد بره بیرون، از این مسیر و از طریق سرور رد بشه.اینا که گفتیم، چجوری انجام میشه؟مثل قبل باید بگم شاید ترسناک به نظر بیاد، ولی همین چیزایی که گفتیم هم خیلی عجیب و سخت نیست. فقط باید بدونید SSH یه سوئیچ داره به اسم -D که میاد یه پورت روی کامپیوتر شما رو به یه SOCKS proxy روی سرور وصل می‌کنه.کافیه با این دستور به سرورتون SSH بزنید:ssh -D 1020 root@188.136.196.2راهنما:ssh -D computerPort userNameServer@IpAddressServerحالا شما یه «لوله» دارید که روی localhost شما و پورت 1020 باز شده.سوال اینجاست: حالا چجوری هر برنامه‌ای روی سیستم رو به این لوله وصل کنیم؟مراحل زیر رو دنبال کنید که کل ویندوز به این لوله متصل بشه.اول Control Panel رو باز کنید و برروی Internet Option کلیک کنید.در پنجره باز شده روی گزینه Connections کلیک کنید.در پنجره باز شده برروی گزینه LAN Settings کلیک کنید.در این مرحله تیک Use a proxy server for your LAN ... رو بزنید و برروی گزینه Advanced کلیک کنید.در این مرحله چون پراکسی یا تانلی که ما ساختیم از نوع socks میشه باید فقط فیلد مربوط به socks رو با مقادیری که گفتم پر کنید. این شکلی لوله ای که شما کشیدید به کامپیوترتون وصل میشه. :))))))سخن پایانی:این دو سناریویی که گفتم، فقط بخش کوچیکی از کارهایی هستن که می‌تونید با تانل زدن انجام بدید. اگه یه کم باهاش ور برید و ایده‌هایی که تو ذهنتونه رو امتحان کنید، می‌تونید کارهای خیلی خفنی باهاش انجام بدید.اگه سوالی داشتید می‌تونید زیر همین پست ازم بپرسید یا ایمیل بزنید.یادتون نره که یکی از راه‌های کم کردن رنج دنیا، یادگیری مداومه؛ وقتی که مدام یاد می‌گیریم و می‌سازیم :))محمد مبین آقاشاهی اردستانی</description>
                <category>مبین آقاشاهی اردستانی</category>
                <author>مبین آقاشاهی اردستانی</author>
                <pubDate>Thu, 04 Jun 2026 18:42:36 +0330</pubDate>
            </item>
                    <item>
                <title>رفع ارور 403 (Forbidden) در EXPO</title>
                <link>https://virgool.io/@mobin.aghashahi/%D8%B1%D9%81%D8%B9-%D8%A7%D8%B1%D9%88%D8%B1-403-forbidden-%D8%AF%D8%B1-expo-iavy60jkgcto</link>
                <description>سلام. شماهم اگه داخل ایران زندگی می کنید احتمالا این ارور رو باهاش مواجه شدید! اروری که دلیلش تحریم هاییه که بر ما تحمیل شده.راهی که برای دور زدن این تحریم وجود داره اینه که از قندشکن استفاده کنیم ولی مشکلی که وجود داره اینه که CDM جدای از پراکسی ویندوز عمل میکنه و حتی بعد از اتصال قندشکن، پکت هاتون از پروکسی رد نمیشه و به صورت مستقیم ارسال میشه.ولی نگران نباشید، CMD یک سری متغییر محلی داره که بعد از set کردن اون متغییرها می‌تونید CMD خودتون رو به پروکسی ای که دارید متصل کنید و به راحتی ازش استفاده کنید.برای این کار کافیه بدونید پروکسی ای که ساختید روی چه پورتی به شما گوش میده. برای این کار وارد Internet Option شوید و از منوی بالا گزینه Connections رو انتخاب کنید.در پنجره باز شده می‌تونید ببینید پروکسی شما روی چه آی پی ای و روی چه پورتی ایجاد شده.که ما در اینجا آدرس پروکسیمون http://127.0.0.1 هست و پورتی که به این پروکسی گوش میده 10809 هست.این پورت میتونه برای هرشخصی متفاوت باشه.بعد از پیدا کردن پورت و آدرس باید اون رو درون CMD تعریف کنید تا CMD بدونه پکت هاش رو باید به کجا بفرسته.برای این کار در CMD دستور زیر را وارد می‌کنم.set HTTPS_PROXY=http://127.0.0.1:10809حالا می‌تونید با خیال راحت دستوراتتون رو اجرا کنید و به قول نامجو به این فکر کنید که &quot;چرا شتر رنج همیشه اینجا خوابید...&quot;</description>
                <category>مبین آقاشاهی اردستانی</category>
                <author>مبین آقاشاهی اردستانی</author>
                <pubDate>Wed, 15 Oct 2025 13:31:55 +0330</pubDate>
            </item>
                    <item>
                <title>آموزش راه اندازی ورژن کنترلر SVN</title>
                <link>https://virgool.io/@mobin.aghashahi/%D8%A2%D9%85%D9%88%D8%B2%D8%B4-%D8%B1%D8%A7%D9%87-%D8%A7%D9%86%D8%AF%D8%A7%D8%B2%DB%8C-%D9%88%D8%B1%DA%98%D9%86-%DA%A9%D9%86%D8%AA%D8%B1%D9%84%D8%B1-svn-jgqmmbwahoxa</link>
                <description>اگه برنامه نویس باشید و در تیم های برنامه نویسی کار کرده باشید، به احتمال خیلی زیاد با مفهوم ورژن کنترلر در دنیای نرم افزار آشنا هستید و میدونید موضوع ورژن تا چه اندازه در پروژه هایی که آدم های مختلفی روی اون کار میکنن مهمه.خب حالا مسئله کجاست؟! شاید با خودتون بگید: گیت هاب عزیزمون که هست و میتونیم ازش استفاده کنیم پس دیگه چه نیازی به ورژن کنترلر دیگه ای مثل SVN هست؟!و جواب اینه که، امکان داره جایی که دارید کار می‌کنید به ورژن کنترلر نیاز داشته باشید ولی این اجازه رو نداشته باشید که کدهاتون رو در جایی خارج از شرکتتون نگهداری کنید. در اینجور مواقع راه حلی که وجود داره اینه که یک سرور ورژن کنترلر از خودتون داشته باشید.راه اندازی و استفاده از ورژن کنترل SVN ساده تر از چیزی هست که فکرش رو می‌کنید. پس بیاید باهم و قدم به قدم کار رو پیش ببریم.راهنمای نصب VisualSVN:ابتدا وارد سایت visualsvn شوید و VisualSVN Server مناسب با معماری خودتون رو دانلود کنید. من چون معماری کامپیوتری که میخوام svn رو راه اندازی کنم 64 بیتی هست، 64 بیت رو دانلود میکنم.بعد از دانلود نرم افزار اونو اجرا می‌کنیم.همونجور که در تصویر بالا میبینید، در این صفحه چاره ای جز زدن دکمه Next نداریم. پس برروی Next کلیک می‌کنیم.در صفحه بعد تیک گزینه I accept the terms in the License Agreement را میزنیم و برروی Next کلیک می‌کنیم.تیک گزینه اول رو میزنیم و اگه میخوایم بعد از نصب شدن svn server ابزار استفاده از اون در command line رو هم داشته باشید، گزینه آخر رو هم فعال کنید. منظور از ابزار ها همون دستورات svn checkout و svn commit و از این قبیل دستورات برای کار با svn است.تقریبا این قسمت از نصب svn server مهم ترین قسمت در نصب این نرم افزاره. گزینه Location از شما مسیر نصب نرم افزار svn server رو میخواد. قسمت دوم یعنی Repositories محل ذخیره شدن Repository های شمارو میخواد که بهتره جایی به جز درایوی که ویندوز روی اون نصب هست انتخاب بشه، چون در صورت خراب شدن ویندوز، ریپازیتوری های شماهم ممکنه پاک بشه. در قسمت سوم یعنی Server Port مشخص میکنه که برای دسترسی به svn server از طریق چه پورتی متصل بشید. و Backups هم که همونجور که از اسمش مشخصه، محل ذخیره سازی بکاپ های ریپازیتوری ها برروی سرور رو مشخص میکنه. بعد از انجام تنظیمات بالا، برروی گزینه Next کلیک کنید.در اینجاهم تیک Enable search indexing for repositories رو نمیزنیم چون index گزاری repository ها به درد جاهایی میخوره که قراره در مقیاس بزرگ از این SVN استفاده شود و همچنین برای فعال کردن این گزینه نیاز به لایسنس دارید که خب ما نمی‌خوایم لایسنس بخریم و می‌خوایم از امکانات رایگان اون استفاده کنیم.در این قسمت هم مشخص میکنیم که اهراز حویت کاربرانی که میخوان از این سیستم استفاده کنند باید به چه صورتی باشه که ما گزینه اول رو انتخاب میکنیم که بتونیم داخل SVN یوزرهای مختلف رو خودمون برای کاربرها تعریف کنیم و بعد بروی گزینه Next کلیک میکنیم.اگه از تنظیماتی که انجام دادید مطمئن هستید، بروری Install کلیک کنید تا SVN Sever شما به راحتی هرچه تمام تر نصب شود.بعد از نصب شدن پنل مدیریتی SVN به شما نمایش داده خواهد شد. که پنجره سمت راست قسمت Status باید شما HTTP service is running را مشاهده کنید. به این معنا که SVN Server شما درحال اجرا است.حالا میمونه تعریف Users و Repositories که در ادامه برای شما توضیح میدیم که چجوری باید این کاررو انجام بدید.ایجاد Users:برای ایجاد User، از پنجره سمت چپ برروی Users کلیک راست میکنیم و در پنجره باز شده برروی Create User... کلیک میکنم.در پنجره باز شده در قسمت User name، نام کاربری ای رو انتخاب میکنیم که میخوایم User مورد نظر از طریق آن لاگین رو انجام بده. و در قسمت Password و Confirm password، رمز عبور و تکرار رمز عبوری که کاربر قراره با اون لاگین رو انجام بده رو وارد میکنیم.بعد از ایجاد User، شما باید User ایجاد شده رو مشاهده کنید.ایجاد Repository جدید:بروی Repositories کلیک راست می‌کنیم و گزینه Create New Repository... را انتخاب می‌کنیم.در این قسمت چون نیازی به سیستم های Distributed نداریم و صرفا یک Repository ساده میخوایم، تیک گزینه اول رو میزنیم و برروی Next کلیک می‌کنیم.در فیلد Repository name، نامی که میخوایم به Repository مون بدیم رو مینویم و برروی Next کلیک می‌کنیم.گزینه Empty repository رو تیک میکنیم تا یک Repository خالی برای ما ایجاد بشه و بعد برروی Next کلیک می‌کنیم.این قسمت یکی از مهمترین قسمت ها در ساخت Repository هست. در این قسمت ما تعیین میکنیم به Repository مورد نظر چه اشخاصی میتونن دسترسی داشته باشن.گزینه اول Nobody has access میگه که هیچ شخصی به این Repository دسترسی نداشته باشه.گزینه دوم میگه که همه User ها به این Repository دسترسی خواندن و نوشتن داشته باشن.در گزینه سوم Custom... شما میتونید از بین User ها مشخص کنید که چه کاربری به Repository دسترسی داشته باشه.بعد از تعیین دسترسی ها برروی گزینه Next کلیک می‌کنیم.در این قسمت اگه میخواید این Repository قابلیت Index شدن در سرچ هارو داشته باشه، تیکش رو بزنید و برروی Next کلیک کنید.در اینجا، به شما یک Repository URL به شما میده که از این به بعد میتونید از طریق این URL به Repository مورد نظرتون دسترسی داشته باشید. حالا برروی Finish کلیک کنید و خلاصصصصصصصصصص.چجوری میشه Repository هایی که بهشون دسترسی داریم رو ببینیم؟برای دسترسی به Repository هامون کافیه IP سروری که برروی اون SVN Server ما نصب هست رو داخل مرورگرمون وارد کنیم تا بتونیم با User و Password مون لاگین کنیم و لیست Repository هایی که بهش دسترسی داریم رو ببینم و حتی Repository مورد نظرمون رو Checkout کنیم و روی پروژه مورد نظرمون کار کنیم.به امید روزهایی که بیشتر سر ذوق هستیم و میتونیم جایی که هستیم رو به جای بهتری تبدیل کنیم چون به قول شاملو &quot;که حضور انسان آبادانی است&quot;....</description>
                <category>مبین آقاشاهی اردستانی</category>
                <author>مبین آقاشاهی اردستانی</author>
                <pubDate>Thu, 24 Jul 2025 13:10:21 +0330</pubDate>
            </item>
                    <item>
                <title>کریستال چیست؟! برای معتادان تکنولوژی!</title>
                <link>https://virgool.io/@mobin.aghashahi/%DA%A9%D8%B1%DB%8C%D8%B3%D8%AA%D8%A7%D9%84-%DA%86%DB%8C%D8%B3%D8%AA-%D8%A8%D8%B1%D8%A7%DB%8C-%D9%85%D8%B9%D8%AA%D8%A7%D8%AF%D8%A7%D9%86-%D8%AA%DA%A9%D9%86%D9%88%D9%84%D9%88%DA%98%DB%8C-ojrla34yslux</link>
                <description>به من گوش کنید. من یک کریستال اوسیلاتور هستم.خب همونجور که از متن پیداس میخوایم در مورد کریستال صحبت کنیم. این سوال خیلی قبل ترها برای من پیش اومده بود، زمانی که شروع کردم با بردهای AVR و Arduino کار کنم. کریستال چیه؟! چرا اینقدر اهمیت داره؟! چرا وقتی داخل مدارهامون استفاده نمیکنم، مدارها به درستی کار میکنن!! ولی گاهی به مشکل میخورن!!پس با ادامه متن همراه باشید تا کریستال رو به ساده ترین حالت ممکن براتون شرحه شرحه کنم و توضیح بدم.یک کریستال اوسلاتور 12 مگاهرتزیکریستال چیه؟به نظر من برای اینکه بدونیم وظیفه یک شخص، یک قطعه و یا هرچیز دیگه ای چیه؛ اول باید بفهمیم اون چیز به چه شکلی کار میکنه. و اگه بدونیم اون چیز به چه شکلی کار میکنه مسیر هموارتری برای فهمیدن چیزها بعدش رو خواهیم داشت. پس اول اجازه بدید یک تاریخچه مختصری راجبع کشف کریستال‌ها بهتون بگم. قضیه بر میگرده به سالیان قبل؛ جایی در قرن هجدهم. جایی که دوتا برادر کنجکاو به چیزی پی بردن. اونا فهمیدن که بعضی از مواد خاصیت عجیبی دارن!! و اون خاصیت عجیب اینه که وقتی تحت فشار قرار میگیرن تولید الکتریسته میکنن!! میتونید حدس بزنید چقدر خوشحال بودن از این که چیزی رو در این جهان فهمیدن.ولی کار به همینجا ختم نشد و یک سال بعد شخصی به اسم گابریل لیپمان فهمید که این خاصیت یعنی تبدیل انرژی مکانیکی به انرژی الکتریکی، برگشت پذیر هست. یعنی چی؟ یعنی اگه ما به اون مواد الکتریسیته بدیم هم به ما ارتعاشات کاملا منظم و پایدار میده. که این پدیده رو پدیده پیزوالکتریکی نام گذاری کردن.تولید ولتاژ توسط یک کریستالحالا تمام این ها به ما چه ربطی داره؟! باید بهتون بگم که کریستال کوارتز دقیقا همین خاصیت رو داره. از خاصیت تبدیل انرژی مکانیکی به انرژی الکتریکی اون، در فندکِ گازهای خانگی و یا فندک های جیبیتون بارها استفاده کردید. زمانی که فندک رو فشار دادید و تغغغغغغ!! بعله بعله، این همون کوارتز هست که بر اثر برخورد یک جسم به اون، برای شما تولید جرقه میکنه!! ولی خاصیت برعکس اون چی؟! خاصیت تبدیل انرژی الکتریکی به اون ارتعاشات منظم و پایدار. باید بهتون بگم که نکته دقیقا همینجاست. ما که با کامپیوترها و بردهای الکتریکی سر و کار داریم، کریستال هارو به خاطر تولید پالس های منظم و پایدارش دوست داریم!کریستال در بردهای الکرتیکی به چه کاری میاد؟3 کارخانه فرضی رو در نظر بگیرید که یکی از اون ها بند کفش تولید میکنه، یکی دیگه از اون کارخانه ها کفی کفش و یکی دیگه هم خود کفش رو بدون بند و کفی تولید میکنه! در بازار شرایط فروش به شدت سخته. و فروشنده گفته فقط زمانی کفش هارو از شما می‌خرم که دقیق و هم زمان بند کفش، کفی کفش و خود کفش رو به دست من برسونید. اما مشکل همینجا شروع میشه!! یکبار کارخانه بند کفش، بند هارو تحویل میده ولی خبری از کفش و کفی کفش نیست!! یبار کفش ها آماده هستن ولی کفی کفش کارش رو تموم نکرده و و و و...میتونید بفهمید چه فاجعه ای داره رخ میده؟! کار هیچ کدوم به درستی پیش نمیره و هر سه کارخانه به سمت ورشکستگی خیز بر میدارن. بعد از گذشت چند ماه و کارِ شلخته انجام دادن، این سه کارخانه تصمیم میگیرن فکری بکنن. و در جلسه ای باهم مشکلات رو بررسی کنن تا به یک راه حل برسن!! چیزهای مختلف رو بررسی میکنن و در آخر متوجه مشکل میشن. مشکل اونجایی شروع میشه که هرکدوم از رؤسا، ساعت کاری خاصی رو برای کارخانه خودشون در نظر گرفتن!! کارخانه کفش سازی صبح ها میرن سر کار، کارخانه بند سازی ظهر ها و کارخانه کفی کفش، شب ها برای کار به کارخانه میرن. بعد از کلی مذاکره و چک و چونه زدن، هر سه کارخانه تصمیم گرفتن یکی رو مسئول هماهنگ کردن این ساعت های کاری بکنن تا بتونن بین هر سه کارخانه هماهنگی ایجاد کنن!! و بعد بووووووم. از اون پس هر سه کارخانه سر موقع بندها، کفی ها و کفش هارو به فروشنده تحویل دادن!!این قضیه دقیقا شبیه به قضیه بردهای الکتریکی هست. بردهای الکتریکی برای انجام کارهاشون نیاز خیلی جدی ای به زمانبندی دارن. یعنی باید بدونن چه موقع باید کارشون رو شروع کنن!! کریستال ها با گرفتن برق متناوب، شروع به تولید پالس های خیلی خیلی خیلی منظم و پایدار و سریع میکنن. که این پالس ها باعث میشه مسئله زمانبندی در بردها حل بشه و قسمت های مختلف بردهای الکتریکی کارشون رو به موقع شروع کنن و جواب هارو به موقع به مقصد برسونن. چون اگه این جواب ها در هر قسمت به موقع به خروجی نرسه، نتیجه مطلوب رو از بردهایی که طراحی کردیم نخواهیم گرفت.کریستال ها رو عموما با فرکانس هاشون میشناسن و مثلا میگن: &quot;کریستال 12 مگا هرتز&quot; که این اعداد به صورت سرسام آوری زیاد هستن. مثلا یک کریستال 12 مگاهرتزی چیزی حدود 12،000،000 میشه، که این یعنی کریستال ما در یک ثانیه 12،000،000 بار پالس تولید میکنه!!! حتی نمیتونید تصور کنید یعنی چی!! یا مثلا کامپیوترهای امروزی کریستال های 4 گیگاهرتزی دارن که چیزی حدود 4،000،000،000 پالس در ثانیه میشه!! یعنی چراغی رو تصور کنید که 4،000،000،000 بار در ثانیه چشمک بزنه!! تمام!! تمام سعیم رو کردم که این موضوع رو خیلی خیلی ساده توضیح بدم و هرچیزی رو که از کریستال ها میدونستم رو به شما منتقل کنم. از این به بعد به بردها بیشتر توجه کنید تا متوجه بشید که کریستال ها همه جا هستند چون زمانبندی مهمه! امید که رستگار شویم.</description>
                <category>مبین آقاشاهی اردستانی</category>
                <author>مبین آقاشاهی اردستانی</author>
                <pubDate>Wed, 01 Jan 2025 10:55:12 +0330</pubDate>
            </item>
                    <item>
                <title>چگونه VoIP شخصی خود را برروی Ubuntu راه اندازی کنیم؟</title>
                <link>https://virgool.io/@mobin.aghashahi/%DA%86%DA%AF%D9%88%D9%86%D9%87-voip-%D8%B4%D8%AE%D8%B5%DB%8C-%D8%AE%D9%88%D8%AF-%D8%B1%D8%A7-%D8%A8%D8%B1%D8%B1%D9%88%DB%8C-ubuntu-%D8%B1%D8%A7%D9%87-%D8%A7%D9%86%D8%AF%D8%A7%D8%B2%DB%8C-%DA%A9%D9%86%DB%8C%D9%85-cim2notcl3pt</link>
                <description>تاحالا براتون سوال پیش اومده که VoIP چیه؟! تاحالا به این فکر افتادید که یک سرور VoIP برای خودتون داشته باشید؟!خب اگه نمی‌دونید VoIP چیه باید به صورت خیلی خیلی خیلی کلی بهتون بگم اتصال تماس صوتی برروی اینترنت رو بهش VoIP میگن. که نمونه های زیادی از اونو در دنیای امروز دیدید و باهاش کار کردید.نرم افزارهای زیادی وجود دارن که به ما اجازه میدن VoIP شخصی خودمون رو راه اندازی کنیم و لذتش رو ببریم ولی نرم افزاری که ما می‌خوایم در این مقاله از اون استفاده کنیم، نرم افزار Asterisk هست. Asterisk یک نرم افزار متن بازه که به شما اجازه میده تماس صوتی برروی اینترنت و به صورت رایگان داشته باشید. (البته از هزینه ناچیز اینترنت چش پوشی کنید تا رایگان محسوب بشه.)نصب Asterisk:نصب نرم افزار Asterisk به شدت سادس چون تمام پکیج های مورد نیاز برای نصب این نرم افزار برروی سیستم عامل Ubuntu وجود داره.نکته: اگه با مراحل نصب و کانفیگ کردن نرم افزار در لینوکس آشنا باشید، این مراحل براتون خیلی دم دستی و ساده خواهد بود.در ابتدا پکیج های ریپازیتوری ATP خودتون رو با دستور زیر بروزرسانی کنید تا آخرین نسخه از نرم افزار مورد نیاز رو دریافت کنید.$ sudo apt updateبه این طریق، کش ریپازیتوری پکیج های شما آپدیت می‌شود.حالا با دستور زیر، نرم افزار Asterisk رو نصب کنید.$ sudo apt install asterisk asterisk-dahdiپیغامی مبنی برا این که مایل به ادامه نصب نرم افزار هستید دریافت می‌کنید. که در این مرحله دکمه &lt;Enter&gt; رو فشار بدید.کمی صبر کنید تا نرم افزار Asterisk نصب شود.start و stop کردن سرویس Asterisk:حالا با دستور زیر می‌تونید چک کنید که آیا سرویس Asterisk برای شما فعال شده است یا خیر.$ sudo systemctl status asteriskهمونجور که در تصویر زیر مشاهده می‌کنید، سرویس Asterisk برای ما درحال اجرا است.اگر به هر دلیلی سرویس Asterisk شما غیر فعال بود می‌تونید اونو با دستور زیر اجرا کنید.$ sudo systemctl start asteriskو اگر به هر دلیلی مایل به متوقف کردن این سرویس بودید می‌تونید اونو با دستور زیر غیر فعال کنید.$ sudo systemctl stop asteriskاگه با لینوکس و نحوه تغییر کانفیگ های نرم افزارها آشنا باشید می‌دونید که بعد از هر تغییری در کانفیگ های نرم افزار باید اون نرم افزار رو restart کنید. $ sudo systemctl restart asteriskفایل های کانفیگ Asterisk:در Ubuntu مسیر دایرکتوری کانفیگ های Asterisk در /etc/asterisk موجود است و شما می‌توانید فایل های موجود در این دایرکتوری رو داخل عکس زیر ببینید.$ ls /etc/asteriskراه های زیادی برای پیکربندی Asterisk وجود داره. اما در این مقاله تمرکز ما فقط برای کانفیگ کردن Asterisk برای مکالمات تلفن همراه برروی پرتوکول SIP است. برای این کار، من فقط فایل های sip.conf و extensions.conf رو در دایرکتوری /etc/asterisk تغییر می‌دم.کانفیگ کردن Asterisk به عنوان سرور VoIP:ابتدا وارد دایرکتوری /etc/asterisk شوید.$ cd /etc/asteriskخب ابتدا از فایل های sip.conf و extensions.conf یک کپی به عنوان بکاپ تهیه کنید. بخاطر اینکه اگه در کانفیگ کردن این فایل ها مشکلی پیش بیاد و اشتباهی انجام بدید، می‌تونید دوباره از این بکاپ ها استفاده کنید، بدون نیاز به نصب مجدد نرم افزار.برای بکاپ گرفتن از فایل sip.conf، از دستور زیر استفاده کنید.$ sudo cp sip.conf sip.conf.backupو برای بکاپ گرفتن از فایل extensions.conf، از دستور زیر استفاده کنید.$ sudo cp extensions.conf extensions.conf.backupحالا از دستور زیر برای خالی کردن فایل sip.conf استفاده کنید.$ echo | sudo tee sip.confحالا با استفاده از دستور زیر و تکست ادیتور nano دستور زیر رو اجرا کنید.$ sudo nano sip.confچیزهایی که در عکس زیر مشاهده می‌کنید رو وارد فایل sip.conf کنید.در فایل بالا ما دو کاربر 9001 و 9002 رو ایجاد کردیم. با استفاده از secret پسوورد های کاربرهارو براشون تعریف کردیم که در اینجا هر کاربر نام کاربری و پسوورد یکسانی داره. فایل رو ذخیره کنید و ازش خارج بشید.حالا از دستور زیر استفاده کنید برای خالی کردن فایل extensions.conf.$ echo | sudo tee extensions.confحالا با استفاده از دستور زیر و تکست ادیتور nano دستور زیر رو اجرا کنید. تا بتوانید فایل extensions.conf رو ویرایش کنید.$ sudo nano extensions.confچیزهایی که در عکس زیر مشاهده می‌کنید رو وارد فایل extensions.conf کنید.وقتی تمام قدم های بالا رو به ترتیب انجام دادید، نرم افزار asterisk رو با دستور زیر restart کنید.$ sudo systemctl restart asteriskحالا با دستور زیر چک کنید که آیا نرم افزار Asterisk شما فعال است یا نه.$ sudo systemctl status asteriskهمونجور که مشاهده می‌کنید همه چیز به درستی پیش رفته و تمام کانفیگ های ما به درستی وارد شده است.کارهای سمت سروری ما به پایان رسید و حالا باید بریم سراغ تلفن های همراه و از VoIP خودمون استفاده کنیم.اتصال به سرور VoIP با استفاده از اندرویدبرای گوشی های اندروید، نرم افزار های زیادی وجود داره که می‌تونید با استفاده از اون به سرور VoIP خودتون متصل بشید و تماس صوتی برقرار کنید. ولی ما اینجا از نرم افزاری به نام CSIPSimple استفاده می‌کنیم. برای اتصال به سرور Asterisk خودتون ابتدا نرم افزار CSIPSimple  رو باز کنید و بر روی Add account کلیک کنید.حالا برروی Basic کلیک کنید.در این مرحله تمام فیلدها رو مطابق با کانفیگ های انجام شده در سرور تکمیل کنید و برروی Save کلیک کنید.شما باید Registered رو در صفحه Accounts ببینید. که به این معناست که ارتباط ما با سرور VoIP مون برقرار شده.حالا برروی دکمه برگشت در قسمت بالا کلیک کنید تا به صفحه شماره گیری منتقل شوید.برای اکانت های دیگه، روی گوشی دیگه همین مراحل رو انجام بدید و بعد به راحتی میتونید شماره های کانفیگ شده رو شماره گیری کنید و از تماس رایگان لذت ببرید.امیدوارم این آموزش بتونه گره از کنجکاوی های یک انسان باز کنه و بعد از انجام این کار، حس خوب بهش دست بده.ترجمه شده از مقاله Install Asterisk VoIP Server on Ubuntuمحمد مبین آقاشاهی اردستانی</description>
                <category>مبین آقاشاهی اردستانی</category>
                <author>مبین آقاشاهی اردستانی</author>
                <pubDate>Tue, 26 Dec 2023 02:10:16 +0330</pubDate>
            </item>
                    <item>
                <title>بازیابی رمز عبور ویندوز</title>
                <link>https://virgool.io/@mobin.aghashahi/%D8%A8%D8%A7%D8%B2%DB%8C%D8%A7%D8%A8%DB%8C-%D8%B1%D9%85%D8%B2-%D8%B9%D8%A8%D9%88%D8%B1-%D9%88%DB%8C%D9%86%D8%AF%D9%88%D8%B2-hzxuyzukajrx</link>
                <description>مسئله ای که وجود داره اینه که بعضی وقتا ممکنه به دلایلی رمز عبوری که برای ویندوز تنظیم کردیم رو از یاد ببریم و خب اولین راه و سخت ترین راهی که وجود داره اینه که ویندوز رو تعویض کنیم ولی شاید چیزهایی داخل درایو C ما وجود داشته باشه که در صورت تعویض ویندوز پاک بشه و اون اطلاعات برای ما مهم باشه و بخوایم اون اطلاعات رو داشته باشیم. در این آموزش میخوام یکی از روش هایی سریع و کابردی ای که میتونید باهاش رمز ویندوز خودتون رو بازیابی کنید بهتون آموزش بدم.چرا این اتفاق میوفته؟!نکته: اگه میخواید موضوع رو عمیقا درک کنید و بفهمید که در واقع چه اتفاقی میوفته که میشه رمز ویندوز رو به راحتی و بدون داشتن رمز عبور فعلی تغییر داد این قسمت رو مطالعه کنید. و اگه اون دانش فنی براتون مهم نیست و فقط میخواید این کار رو انجام بدید، سریعا به قسمت PC UNLOCKER مراجعه کنید.خب سوال اینجاست که چرا امکان انجام این کار هست؟! یعنی ویندوز اینقدر مسخرس که بشه پسوورد یوزرهاش رو بدون اجازه تعویض کنیم؟!اجازه بدید نگاه کلی ای داشته باشیم به مکانیزمی که ویندوز برای نگهداری اطلاعات یوزرهاش در نظر گرفته.ویندوز پسووردهاش رو کجا ذخیره میکنه؟!احتمالا این سوال بارها به ذهن انسان های کنجکاو رسیده باشه و در دنیای امروزی و با وجود گوگل و چت جی پی تی بعید نیست به جواب هم رسیده باشن. ولی خب اگه اولین باره این سوال به ذهنتون میرسه، جای نگرانی نیست چون من اینجام که جواب این سوال رو به شما بدم.ویندوز اطلاعات یوزرهاش رو داخل فایلی به اسم SAM نگهداری میکنه. که این فایل رو می‌تونید در مسیر زیر پیدا کنید:C:\Windows\System32\config\SAMیعنی اگه ما این فایل رو باز کنیم می‌تونیم پسوورد مورد نظر خودمون رو داخلش بنویسیم؟! متاسفانه بله.هیچ مکانیزیمی برای جلوگیری از این مشکل طراحی نشده؟! مکانیزم هایی طراحی شده ولی مکانیزم هایی نیستن که بتونن جلوی این کار رو بگیرن و این مکانیزم ها فقط، کار رو کمی پیچیده تر کردن وگرنه مشکل به قوت خودش باقی مونده!!!اون مکانیزم ها چی هستن؟!! خب اجازه بدید فایل SAM رو باز کنیم تا درست متوجه بشیم اون مکانیزم ها چی هستن و چجورین.اگه شما بخواید این فایل رو با نرم افزاری مثل NOTEPAD باز کنید با همچین اروری روبرو میشید. که اگه ارور رو بخونید متوجه می‌شید که نوشته؛ شما نمی‌تونید به این فایل دسترسی داشته باشید چون این فایل به وسیله پروسه ای دیگه درحال اجرا هست!! مکانیزم باز دارنده همین موضوعیه که شاهدش هستید. مهندیس جذابِ ماکروسافت نشستن باهم فکر کردن که چجوری جلوی به سرقت رفتن این اطلاعات رو بگیرن و ایده ای که به ذهنشون رسیده به این صورت بوده که، فایل SAM رو موقع بوت شدن ویندوز بسپارن به یک پروسه ای که اون پروسه اجازه نمیده هیچ موجود دیگه ای اون فایل رو باز کنه!!حالا چجوری میشه این مکانیزم امنیتی رو دور زد؟!خب چیزی که میشه فهمید اینه که ما به هیچ وجه موقع درحال اجرا بودن ویندوز نمی‌تونیم این فایل رو تغییر بدیم. (البته اگه میشد خیلی منطقی هم نبود، چون اگه ما رمز عبور رو داشتیم و میتونستیم در ویندوز LOGIN کنیم پس میتونستیم مثل آدم رمز رو تغییر بدیم و هیچ نیازی نداشتیم به این که بفهمیم ویندوز چیه، کیه و چرا...) ولی موضوعی که باید بدونید اینه که این مکانیزم امنیتی دقیقا زمانی شروع به فعالیت می‌کنه که ویندوز بوت شده و آماده بهربرداری کابرهاشه. پس ما باید کارمون رو دقیقا زمانی انجام بدیم که ویندوز هنوز بوت نشده!! راه های زیادی برای انجام این کار وجود داره، یکی از راه های سخت ولی باحال ترش اینه که ما یک لینوکس روی کامپیوترمون بالا بیاریم و از طریق اون لینوکس و برنامه هایی که اجازه تغییر فایل های باینری ویندوز رو میدن، برروی این فایل کار انجام بدیم. (در صورتی که دوست داری عمیقا با این فایل درگیر بشید و ببینید داخلش چیه، این کار رو برای خودتون انجام بدید.)ولی راه آسون تر و دم دست تری هم هست که لازم نباشه اینقدر خودمون رو درگیر مسائل فنی و تخصصی کنیم. در ادامه راه ساده تر رو براتون میگم.PC UNLOCKERمواد لازم:نرم افزار PC UNLOCKERنرم افزار RUFUS فلشاول با نام و یاد خدا، فلش رو به کامپیوتر خودتون متصل کنید. توجه کنید که اگه اطلاعات مهمی برروی فلشتون دارید اون اطلاعات رو به جای امنی منتقل کنید، چون در این مرحله اطلاعات فلش شما پاک خواهد شد.نرم افزار RUFUS رو باز کنید.1- در کادر اول نام فلش خودتون رو انتخاب کنید. (فلشی که میخواید نرم افزار PC UNLOCKER رو برروی اون بوت کنید.)2- برروی گزینه SELECT کلیک کنید و فایل iso نرم افزار PC UNLOCKER رو انتخاب کنید.3- بسته به نوع مادربرد شما معماری GPT یا MBR  رو انتخاب کنید. راه های تشخصی این که باید MBR بوت کنید یا GPT رو سرچ کنید و اگه حال سرچ کردن نداشتید و حتی شاید نخواید خودتون رو درگیرش کنید، یبار MBR بوت کنید و اگه دیدید موقع اجرای نرم افزار با ارور مواجه شدید، تغییرش بدید و GPT بوت کنید.4- برروی دکمه START کلیک کنید تا نرم افزار برروی فلش شما بوت بشه.بعد از این که نرم افزار برروی فلش شما بوت شد. فلش رو به کامپیوتری که میخواید پسورد اون رو ریکاوری کنید متصل کنید و کامپیوتر رو روشن کنید.حالا بوت سیستم خودتون رو با کلید هایی که در هر نوع مادربرد متفاوت است ببرید روی فلشتون. یعنی کامپیوترتون به جای ویندوز از روی فلش بوت بشه.اگه مراحل رو به درستی انجام داده باشید، بعد از اجرا شدن نرم افزار باید با تصویر زیر روبرو بشید.به شکل جالبی شما یوزرهای موجود در سیستم رو مشاهده می‌کنید و تنها کاری که لازمه انجام بدید اینه که برروی یوزر مورد نظر کلیک کنید و دکمه Reset Password رو بزنیم. در این مرحله از شما رمز جدیدی که دلخواه شماست رو میپرسه!!! رمز دلخواه رو وارد کنید و برروی گزینه Ok کلیک کنید. حالا به شما میگه که پسوورد شما با موفقیت تغییر کرد!!و تنها کاری که لازمه انجام بدید اینه که سیستم رو Restart کنید و وارد ویندوز بشید. حالا برروی یوزری که پسووردش رو تغییر دادید کلیک کنید و رمزی که در مرحله قبل براش انتخاب کردید رو وارد کنید. و به همین راحتی می‌تونید وارد سیستم بشید.امیدوارم این آموزش گره ای از هزاران گره زندگیتون رو باز کرده باشه و باعث شده باشه به خودتون افتخار کنید که امروزتون مثل دیروزتون نبوده. چون شما امروز چیزهای جدیدی یاد گرفتید!!</description>
                <category>مبین آقاشاهی اردستانی</category>
                <author>مبین آقاشاهی اردستانی</author>
                <pubDate>Sun, 19 Nov 2023 01:26:40 +0330</pubDate>
            </item>
                    <item>
                <title>ساخت تحریم گذر با استفاده از SSH Tunel</title>
                <link>https://virgool.io/@mobin.aghashahi/%D8%B3%D8%A7%D8%AE%D8%AA-%D8%AA%D8%AD%D8%B1%DB%8C%D9%85-%DA%AF%D8%B0%D8%B1-%D8%A8%D8%A7-%D8%A7%D8%B3%D8%AA%D9%81%D8%A7%D8%AF%D9%87-%D8%A7%D8%B2-ssh-tunel-c9so2n3wtbqm</link>
                <description>سلام. شاید برای شماهم پیش اومده باشه که به دلیل تحریم اجازه دسترسی به Steam, EpicGames و نرم افزارهایی از این قبیل رو نداشتید. خب راه حل اولی که به ذهن هر انسانی میرسه استفاده کردن از VPN های رایگانه ولی از اونجایی که VPN های رایگان از کیفیت مناسبی برخوردار نیستند؛ امکان داره در بازی های آنلاین شمارو با مشکل مواجه کنند.راه حل دومی که وجود داره اینه که خودمون یک تحریم گذر بسازیم که به صورت اختصاصی کانال خودمون با بالاترین سرعت رو داشته باشیم.مواد لازم:1) خرید vps (سرور مجازی) خارج از کشور ( بهتره vps لینوکس بخرید که نخواید درگیر راه اندازی ssh روی vps خودتون بشید.)2) دانلود نرم افزار ssh ( که ویندوز 10 این نرم افزار رو داره و حتی میتونید از نرم افزار Putty هم استفاده کنید.)خب شاید اولین چیزی که به ذهنتون میاد و باعث میشه از این روش دل سرد بشید اینه که فکر کنید؛ ما که تحریمیم!! پس چجوری میتونیم سرور مجازی خارج از کشور تهیه کنیم؟!!! و حتی شاید دومین نگرانیتون این باشه که اگر هم بتونیم اونو خریداری کنیم؛ باید پول زیادی هزینه کنیم.نگران نباشید؛ سایت های زیادی داخل ایران وجود دارن که این خدمات رو در اختیار شما قرار میدن. کافیه داخل گوگل سرچ کنید خرید سرور مجازی تا براتون لیست بلند بالایی از وبسایت های ارائه دهنده سرور مجازی بیاره. و اما هزینه این سرورهای مجازی بسته به سخت افزاری که تهیه میکنید متفاوته و شما میتونید ارزون ترین اونو خریداری کنید چون ساخت این تحریم گذر به سخت افزار قوی ای نیاز نداره و با 1 گیگ رم و cpu تک هسته ای هم کار شمارو به نحوه احسنت راه خواهد انداخت.خب اساس کار ما چیه؟! یعنی قراره چه اتفاقی رقم بزنیم؟! من توضیحات کوچکی در مورد اساس کارمون بهتون میدم که بدونید اصلا قراره چه اتفاقی بیوفته و ما در عمل داریم چکار میکنم!! چون انسانی که دانسته یک کاری رو انجام میده در مرحله دیباگ کردن مشکلات میتونه عملکرد بهتری داشته باشه نسبت به کسی که نمیدونه در حال انجام چه کاری هست.خب کاری که ما قراره انجام بدیم اینه!! ما اجازه دسترسی به Host C رو بنا به دلایلی نداریم ولی نیاز داریم که به اون هاست دسترسی داشته باشیم. درسته که ما نمیتونیم به صورت مستقیم با اون هاست حرف بزنیم ولی میتونیم از یک واسطه که اجازه دستری به اون هاست رو داره درخواست کنیم که این کار رو برای ما انجام بده. یعنی ما درخواستمون رو به Host B بگیم؛ Host B درخواست رو به Host C بگه و جواب برگشتی از Host C رو به ما انتقال بده. برای این کار ما باید به هاست B یک تونل بزنیم و درخواست هامون رو به اون سمت هدایت کنیم. این کلیت کاری هست که قراره انجام بدیم و خوبیه موضوع اینه که قرار نیست صفر تا صد کار رو ما انجام بدیم و ابزارهایی که ما در اختیار داریم این کار هارو برای ما انجام میدن. پس ترسی نداره و اصلا قرار نیست دانش چندانی از دنیای کامپیوتر و شبکه داشته باشید.مرحله اول خرید سرور مجازی از وبسایت مورد نظر هست. بعد از خرید سرور؛ به شما یک IP، یوزرنیم و پسورد داده خواهد شد.نکته: اگر هاست لینوکس خریداری کرده باشید که حتما همین کار رو انجام دهید username به صورت دیفالت در تمام سرورهای مجازی root است.حال برای فعال سازی ssh در windows 10  کلید ترکیبی Winkey + X را زده و سپس n را بزنید تا صفحه تنظیمات باز شود.سپس بر روی گزینه Apps کلیک کنید.در پنجره باز شده بر روی Optional features کلیک کنید.در پنجره باز شده بر روی Add a feature کلیک کنید تا تمامی فیچرهای موجود و قابل نصب بر روی سیستم شما نمایش داده شود.در این لیست اپلیکیشن OpenSSH Client را یافته و بر روی آن یک بار کلیک کرده و در نهایت بر روی Install کلیک نمایید.تا اینجای کار شما SSH رو روی کامپیوترتون نصب کردید و باید با استفاده از اون به سرور مجازی که خریدید SSH Tunel بزنید.خب حالا کلید ترکیبی Winkey + R را فشار دهید و داخل پنجره باز شده عبارت CMD را تایپ کنید.برروی OK کلیک کنید تا پنجره CMD شما باز شود.نکته: بعد از باز شدن پنجره CMD به هیچ عنوان فاز هکری به خود نگیرید و در کمال خضوع و خشوع به هدف خود فکر کنید و آن را دنبال کنید.بعد از باز شدن پنجره CMD دستور SSH رو وارد کنید تا مطمئین بشید SSH رو روی سیستمتون به درستی نصب کردید.اگر با این صفحه روبرو شدید به این معناست که SSH به درستی برروی کامپیوتر شما نصب شده و آماده استفاده است.حالا با سوئیچ D به سرور مجازی خودمون SSH میزنیم. برای بررسی عمیق تر SSH و سوئیچ های آن به این مقاله مراجعه کنید.ssh -D پورت دلخواه username@ipServerبرای مثال اگر یک سرور لینوکس خریده باشید و ip ای که وبسایت سرویس دهنده به شما داده است 123.123.124.154 باشد باید این دستور را وارد کنید.ssh -D 5454 root@123.123.124.154نکته: پورت انتخاب شده 5454 کاملا دلبخواهی است ولی نباید از پورت های خاص مانند 22، 80، 443 و ... استفاده شودبعد از وارد کردن این دستور اگر برای بار اول است که به سرور مورد نظر ssh میزنید با  پیغام زیر مواجه میشوید که باید yes را وارد کرده و ENTER بزنید.The authenticity of host &#x27;localhost (127.0.0.1)&#x27; can&#x27;t be established. ECDSA key fingerprint is SHA256:9jqmhko9Yo1EQAS1QeNy9xKceHFG5F8W6kp7EX9U3Rs. Are you sure you want to continue connecting (yes/no)بعد از آن باید پسورد سرور مورد نظر خود را وارد کنید.نکته: در این صفحه برای وارد کردن پسورد شاید فکر کنید چیزی نوشته نمیشود ولی نگران نباشید، پسورد شما نوشته خواهد شد ولی شما نخواهید دید.بعد از وارد کردن پسورد کلید ENTER را فشار دهید تا تونل شما ایجاد شود!! بلهههه تونل شما به همین سادگی ایجاد شد!!!حالا شما یک تونل از CMD خود به سرور مجازی دارید ولی این تونل از CMD شما به سرور است و برای اتصال این تونل به بقیه نرم افزارها باید proxy مورد نظر را برروی نرم افزارهای خود تنظیم نمایید که کار سختی نیست. به عنوان مثال برای این که از تونل خود برای firefox استفاده کنید باید وارد تنظیمات proxy مرورگر خود شوید. برای این کار طبق عکس زیر برروی سه خط در بالای مرورگر خود کلیک کنید و گزینه Settings رو انتخاب کنید.بعد از انتخاب Settings در پنجره باز شده و در قسمت جست و جو عبارت proxy را سرچ کنید و برروی گزینه setings کلیک کنید.حالا در پنجره باز شده برروی گزینه Manual proxy configuration کلیک کنید و در قسمت SOCKS Host عبارت localhost را وارد کنید و در قسمت پورت همان پورت دلخواهی که به آن ssh زدید را وارد کنید که من در مثال بالا از پورت 5454 استفاده کردم.نکته خیلی مهم: بعد از انجام دادن تنظیمات بالا، اسکرول موس را به پایین بچرخانید و تیک گزینه Proxy DNS when using SOCKS v5 را بزنید.حالا شما تحریم را دور زدید و میتونید آزادانه در اینترنت به گشت و گذار بپردازید. البته این موضوع فقط برای firefox شماست و برای استفاده از اون برای نرم افزار های دیگه باید بتونید این پروکسی محلی رو برروی اونا تنظیم کنید.مثلا اگه بخواید تمام برنامه های کامپیوتر شما از این پروکسی استفاده کنه و تمام اطلاعات شما از این پروکسی بگذره باید تنظیمات زیر رو انجام بدید.تنظیم پروکسی برای تمام نرم افزارها:وارد  Control Panel شوید و برروی گزینه Internet Options کلیک کنید.در این مرحله برروی سربرگ Connrctions کلیک کنید.حال برروی گزینه LAN settings کلیک کنید.مانند تصویر زیر تیک های Use a proxy ... و Bypass proxy ... را فعال کنید و برروی گزینه Advanced کلیک کنید.حالا در این قسمت پروکسی خودتون رو داخل کادر Socks و در قسمت Proxy address to use عبارت localhost را تایپ کنید و در port همان پورت دلخواهی که با آن تونل ssh رو ساخته این وارد کنید که در این مثال بنده از پروت 5454 استفاده کرده ام.برروی گزینه OK کلیک کرده و تمام تغییرات را ذخیره میکنید.حالا دیگه تمام نرم افزار های شما به این پراکسی متصل هستند و شما با موفقیت تحریم هارا دور زده اید!!نکته پایانی: نوشتار ما راجع به یک ابزار فنی بوده و بیشتر کاربرد مثبت فنی  دارد، اگر کسی استفاده نامناسب یا غیرقانونی از آن کرد به عهده نویسنده این مقاله نیست.</description>
                <category>مبین آقاشاهی اردستانی</category>
                <author>مبین آقاشاهی اردستانی</author>
                <pubDate>Fri, 19 May 2023 00:47:44 +0330</pubDate>
            </item>
                    <item>
                <title>ARP Spoofing چیست و چگونه صورت می‌گیرد؟</title>
                <link>https://virgool.io/@mobin.aghashahi/arp-spoofing%DA%86%DB%8C%D8%B3%D8%AA-%D9%88-%DA%86%DA%AF%D9%88%D9%86%D9%87-%D8%B5%D9%88%D8%B1%D8%AA-%D9%85%DB%8C%DA%AF%DB%8C%D8%B1%D8%AF-svntplm4q3lj</link>
                <description>شاید شماهم شنیده باشید که میگن از وای فای های موجود در مکان های عمومی استفاده نکنید و احتمالا این کار رو هم انجام نمی‌دادید. اما قضیه چیه و چرا این کار میتونه خطرساز بشه؟!خب همونجور که از عنوان مقاله پیداست میتونید حدس بزنید که بخاطر ARP Spoofing این کار میتونه خطرساز باشه ولی خب ARP Spoofing چیه؟! یک قطعس؟! یک برنامس؟! یا شایدهم یک هکر 13 ساله چینی!!  البته که آخری یک شوخی بی مزه بود.برای اینکه بخواهیم ادامه مطلب رو توضیح بدیم ابتدا به نظرم اگر یک دید کلی از موضوع داشته باشید به شدت مفید خواهد بود و به شما این امکان رو خواهد داد که فقط تا جایی که تمایل دارید در این مطب عمیق شوید. زیرا شاید شما یک خواننده کنجکاو باشید که فقط می‌خواهید بدانید در صورت استفاده از وای فای در مکان های عمومی چه چیزی می‌تواند خطرساز باشد و چه بلایی می‌تواند بر سر اطلاعاتتان بیاید و یا شایدهم یک دانشجوی رشته کامپیوتر هستید که می‌خواهید کمی عمیق تر درمورد شبکه و کارکرد آن بدانید. یک دید کلی از مسئله موجود:سناریو اول: (وقتی همه چیز آرام است.)در این سناریو اگر کامپیوترهای موجود در تصویر، همان اشخاص متصل به اینترنت از طریق یک مودم مشترک باشند، قضیه به این صورت است که هر کامپیوتر برای برقراری ارتباط با اینترنت بسته های خود را به مودم تحویل می‌دهند و مودم بسته ها را در بستر اینترنت ارسال می‌کند و جواب آن بسته ها را به کامپیوتر مورد نظر بر می‌گرداند. زیبا نیست؟! همه چیز به درستی کار خود را انجام خواهند داد و شما قادر هستید از این طریق پول های خودتان را از حسابی به حساب دیگر منتقل کنید یا وارد صفحه وبسایت دانشگاهتان شوید و در آن لاگین کنید و نمراتتان را چک کنید و هزاران کار دیگر که امروزه با اینترنت قادر به انجام آن ها هستیم. اما شبکه همیشه به این زیبایی کار نخواهد کرد و اشخاصی وجود خواهند داشت که مانع کارکرد درست یک شبکه شوند. سناریو دوم: (وقتی همه چیز آرام نیست.)حال این سناریو را با وجود فردی در شبکه که چیزهایی از شبکه ها و کارکرد آن ها می‌داند بررسی می‌کنم. فرض کنید کامپیوتر B در سناریو اول جای خود را به یک هکر می‌دهد. هکر با چیز هایی که از شبکه می‌داند خود را به جای مودم جا میزند و تمام پیام هارا به سمت خود می‌کشاند. آیا چنین کاری شدنی است؟! بله!! هکر تمام پیام هارا به سمت خود می‌کشاند و می‌تواند یک به یک پیام هارا بخواند (البته در اکثر موارد نمیتواند که در سناریو بعد توضیح خواهیم داد.) و بعد از خواندن پیام ها، پیام هارا جهت ارسال به اینترنت به مودم ارسال می‌کند و جواب هارا از مودم می‌گیرد و یک به یک به صاحبانشان تحویل می‌‎دهد. عجب خر تو خری است؟! دقیقا. آیا شما وقتی درحال لاگین به صفحه دانشگاهتان هستید می‌توانید متوجه شوید که این پیام های ارسالی و دریافتی به دستان شخص سومی هم رسیده و خوانده شده است؟! پیام هایی که از اتفاق رمز عبور و نام کاربری شماهم درون آن قرار داشته است؟! عمرا متوجه شوید!! شبکه به ظاهر آرام است و به کار خود ادامه می‌دهد ولی چیزی در این بین اشتباه است و آن شنودِ (همان Sniff خودمان در دنیای کامپیوتر) ارتباط شما توسط شخص سوم است. آیا شبکه همیشه همینقدر خطرناک است؟! بله. پس دیگر از اینترنت برای کارهای حیاطی خود استفاده نکینم؟! بیاید به سناریو سوم تا بهتون بگم هک و امنیت چجوری با یکدیگر به پیش می‌روند و چقدر پیشرفت هرکدام وابسته به پیشرفت دیگری است. به عبارت دیگر، اگر روشی برای هک پیدا شود، اشخاصی هستند که راه حلی بیابند و جلوی آن را بگیرند (معمولا با آپدیت ها این مشکلات امنیتی برطرف خواهند شد.) و اگر روشی برای هک وجود نداشته باشد، بازهم افراد خلاق و پیگیری پیدا خواهند شد که راهی برای نفوذ پیدا کنند. و این دو قطبی هک و امنیت مدام در حال رشد است.سناریو سوم: (وقتی همه چیز آرام نیست ولی جای امیدواری هست.)حال این سناریو که همانند سناریو دوم (سناریو بالایی) است را در نظر بگیرید. با این تفاوت که اینبار، اشخاص پیام های خود را با کلیدی که کپی همان کلید را بانک و دانشگاه در اختیار دارند قفل می‌‎کنند. حال چه اتفاقی رخ می‌دهد؟! اجازه دهید پیام های شخص سبز رنگ (computer B) در شکل را دنبال کنیم تا به صورت صحیح درک کنیم که چرا این شبکه درحالی که شنود می‌شود ولی همچنان امن است.فرض کنید شخص مو فرفری و سبز رنگ داستان ما می‌خواهد در صفحه دانشگاهی خود لاگین کند و برای این کار یک پیام حاوی نام کاربری و رمز عبور را برروی شبکه و برای دانشگاه ارسال می‌کند. اما قبل از ارسال با یک کلید که کپی همان کلید را دانشگاه در اختیار دارد پیغام خود را قفل می‌کند. پیغام در مرحله اول به هکر بد طینت ما می‌رسد (در واقع اول به مودم می‌رسد ولی شما برای راحت تر شدن توضیح مسئله از من بپذیرید که به دست هکر می‌رسد.). هکر می‌خواهد داخل نامه را بخواند اما ای دریغا به برش که برروی نامه قفل بزرگی قرار دارد و هکر قادر به خواندن آن نیست. در این مرحله هکر چشمش کور می‌شود و نامه را جهت رسیدن به دانشگاه به مودم ارسال می‌کند (چون اگر این کار را انجام ندهد شبکه درست کار نمی‌کند و شما متوجه خواهید شد که جایی از کار میلنگد). مودم نامه را به اینترنت می‌دهد و اینترنت آن را به مقصد خود یعنی دانشگاه می‌رساند. دانشگاه به وسیله کلید خود قفل را باز می‌کند و عملیات های مورد نیاز را انجام می‌دهد و نامه ای که درون آن اجازه ورود به صفحه پرتال دانشگاه است را ایجاد می‌کند. دانشگاه به وسیله همان کلید نامه را قفل می‌کند و ارسال می‌کند. نامه مسیر بازگشت خود را طی می‌کند و به دست هکر می‌رسد، هکر بازهم قفلی بزرگ برروی نامه می‌بیند و از فرط ناراحتی هودی خود را جر می‌دهد، فریاد می‌کشد، قهوه را بر صورت خود می‌پاشد و نامه را به صاحب آن یعنی کامپیوتر B می‌رساند. کامپیوتر B نامه را دریافت می‌کند و با کلید خود آن را باز می‌کند. آنجاست که هکر متوجه موضوعی می‌‍شود. بله بله!!! شبکه ما مجهز به TLS شده است.ما چجوری پیام هامون رو قفل کنیم؟!حقیقت این است که اگر ما فقط یک کاربر ساده باشیم که از یک وبسایت و یا یک نرم افزار تحت شبکه استفاده می‌‎کنیم، این وظیفه ما نیست که پیام های خودمان را رمزگذاری کنیم و این کار وظیفه وبسایت و یا نرم افزار هاییست که ما به آن ها مراجعه می‌کنیم و به ما خدمات می‌دهند. ولی آیا میتوان فهمید کدام وبسایت ها از TLS استفاده می‌کنند و این ارتباط امن را در اختیار ما قرار می‌دهند؟! بله. امروزه صفحاتی که از TLS استفاده نمی‌کنند بسیار کم هستند از این رو آیکون &quot;قفل&quot; بالای صفحات وبسایت برای ما موضوعی جا افتاده است و به چشمانمان آشناست. به بالای همین مقاله، جایی که آدرس ویرگول قرار دارد توجه کنید. در ابتدای این آدرس یک قفل می‌بینید؟! بله؟! معنای آن این است که ارتباط شما امن است و شما می‌توانید با خیال راحت از وبسایت ویرگول در هر مکانی استفاده کنید و خیالتان راحت باشد که هکری در بین راه در حال شنود کردن ارتباط شما نیست و یا اگر درحال شنود باشد، راهی از پیش نخواهد برد زیرا ارتباط ما رمزگذاری شده است.خب تا اینجای مطلب برای آن ها بود که تنها یک دید کلی از موضوع می‌خواستند و فقط می‌خواستند از خطرات هک در امان باشند. ولی اگر شما جزو آن دسته از افراد هستید که می‌خواهید موضوع را کمی عمیق تر دنبال کنید و بدانید از لحاظ فنی این کار چگونه صورت می‌گیرد ادامه مطلب را دنبال کنید و اگر مایل به این موضوع نیستید از شما متشکر هستم که مطالب این جانب را می‌خواندی و اشکالاتش را به طریقی به بنده اطلاع می‌دهید. چراغ ها خاموش می‌شود و کسانی که مایل به ادامه دادن نیستند می‌تواند بدون ذره ای شرمساری مطلب را رها کنند.مسئله از بعد فنی آن:اجازه دهید کمی عمیق تر شویم و مسئله را فنی تر بررسی کنیم. پیام ها در یک شبکه خصوصی (private) بر چه اساسی مسیریابی می‌شوند؟ IP ها؟! نام دیوایس های؟! بر اساس شماره‌ی اتصالشان؟! خیر هیچکدام. مسیریابی در شبکه خصوصی (private) یا همان شبکه محلیمان براساس آدرس های MAC صورت می‌گیرد. هر دیوایس برای خود یک جدولی تشکلی می‌دهد به نام ARP Table که در آن جدول، پارامترهای مختلفی نگهداری می‌شود. اما دوتا از مهم ترین پارامترهایی که در این قسمت برای ما مهم است، آدرس IP و آدرس MAC هست. برای دیدن این جدول در ویندوز می‌توانید وارد CMD ویندوز شوید و دستور arp -a را وارد کنید. نمونه ای از این جدول را در تصویر زیر میتوانید مشاهده کنید. که ابتدا آدرس IP و روبروی آن آدرس MAC مربوطه ذخیره شده است.این جدول چگونه ساخته می‌شود؟!خب سوال درست و به موقع این است که &quot;این جدول چگونه ساخته می‌شود؟&quot;. جواب سوال ساده است. دیوایس ها برای ارسال پیام به فلان IP در جدول MAC خود به دنبال IP مورد نظر می‌گردند و درصورت پیدا نکردن آن یک پیغام arp را برای تمام شبکه broadcast می‌کنند و از تمام شبکه می‌خواهند اگر کسی فلان IP را می‌شناسد، آدرس MAC آن را برایش ارسال کنند. و اگر دیوایسی در شبکه آن را بشناسد، آدرس MAC آن را برای درخواست کننده ارسال می‌کند. درخواست کننده MAC مورد نظر را دریافت می‌کند و آن را وارد جدول MAC خود می‌کند و بعد از آن، زمانی که می‌خواهد برای IP مورد نظر پیغامی بفرستد از همان MAC ذخیره شده در جدول ARP استفاده میکند.چیز به ذهنتون رسید؟! نه؟! خب چرا ما خودمون رو به جای مودم جا نزنیم؟! چرا به تمام دیوایس ها یک پیغام arp نفرستیم و مدعی نشیم آدرس MAC دیواس ما برابر است با IP مودم؟! IP مودم چیست؟! در اکثر موارد 192.168.1.1. بله بله!! ما میتوانیم این کار را انجام دهیم و ترافیک شبکه را از خود عبور دهیم!! جالب نیست؟! به نظر من که زندگی یعنی همین.مسئله از بعد عملی:خب سوال اساسی اینجاست که ما تمام این کارهای پیچیده شبکه ای را به چه صورتی انجام دهیم؟! و جواب اینه که خوشبختانه برای تمام این چیزها که گفته شد ابزارهای مناسبی ساخته شده که به رایگان در اختیار ما قرار دارند.مواد لازم:لینوکس (چه بهتر که کالی لینوکس استفاده شود زیرا تمام ابزارهای تست امنیت را در بر دارد و نیاز نیست تمام این هارا دوباره نصب کنیم.)پکیج نرم افزاری  dsniff جهت ایجاد پکت های arp در شبکهنرم افزار  wireshark برای انجام شنود و دیدن بسته های ارسال و دریافت شدهنکته: در این آموزش فرض شده است که کامپیوتری که می‌خواهیم به آن حمله ARP Spoofing انجام دهیم دارای آدرس آی پی 192.168.1.11 است و مودم ما دارای آدرس آی پی 192.168.1.1 است.خب ابتدا باید ما به عنوان شخص سوم (هکر) پکت های ARP خود را برروی شبکه منتشر کنیم و آدرس  MAC خود را به جای آدرس MAC مودم به شخصی که می‌خواهیم به آن حمله کنیم، قالب کنیم. برای این کار از دستور زیر استفاده میکنیم.sudo arpspoof -i eth0 -t 192.168.1.11 192.168.1.1در این دستور با سوئیچ i میگوییم که ما این حلمه را از طریق اینترفیس eth0 خود انجام می‌دهیم و از طریق سوئیچ t مشخص می‌کنیم که target (هدف) ما برای حمله آدرس آی پی 192.168.1.11 است و می‌خواهیم خود را به جای آدرس آی پی 192.168.1.1 (آدرس آی پی مودممان) جا بزنیم تا از این به بعد آدرس آی پی 192.168.1.11 به جای ارسال بسته هایش به مودم برای اتصال به اینترنت، ترافیکش را از ما عبور دهد. به همین راحتی!!! الان ما در بین راه به شنود پیام های ارسالی و دریافتی آدرس آی پی 192.168.1.11 نشسته ایم.تا اینجای کار آدرس آی پی 192.168.1.11 تمام بسته هایش را برای ما ارسال خواهد کرد و اگر همین الان برای مراجعه به یک وبسایت برروی کامپیوتر مورد حمله قرار گرفته شده تلاش کنید متوجه خواهید شد که به ظاهر اینترنت کامپیوتر مقابل قطع است و هیچ کاری انجام نمی‌دهد. زیرا کامپیوتر مورد حمله بسته های خود را برای ما ارسال می‌کند ولی ما آن بسته هارا دور میریزیم؛ ولی قرار بود ما این بسته هارا بخوانیم و بعد آن هارا تحویل مودم دهیم تا آب از آب تکان نخورد!! برای این کار در لینوکس باید حالت روتر را فعال کنیم که لینوکس کار مسیریابی را انجام دهد و بسته هارا به مقاصد درست خود برساند. برای این کار از دستور زیر استفاده می‌کنیم و حالت روتر لینوکس خود را فعال می‌کنم.sudo echo 1 &gt;/proc/sys/net/ipv4/ip_forwardحالا همه چیز آماده است و شما میتوانید تمامی ترافیک ارسالی از کامپیوتر مورد حمله را به وسیله نرم افزار wireshark شنود کنید.نرم افزار wireshark را اجرا کنید. برروی شبکه eth0 خود کلیک کنید تا بتوانید تمام بسته هایی که از این انترفیس عبور می‌کند را مشاهده کنید.اما ما نیازی به تمامی پکت های ارسالی و دریافتی برروی اینترفیس eth 0 نداریم و باید تمام پکت هایی که از طرف 192.168.1.11 است را مورد بررسی قرار دهیم.برای این کار در قسمت فیلتر کردن پکت ها مقدار ip.addr==192.168.1.11 را تایپ می‌کنیم تا فقط و فقط بسته هایی از این آدرس آی پی برای ما نمایش داده شود.حالا شما شاهد تمامی پکت های ارسالی و دریافتی توسط کامپیوتر 192.168.1.11 هستید و به یاد داشته باشید که اگر کامپیوتر مورد نظر به سایت هایی که از TLS  استفاده می‌کند سر بزند شما قادر به خواندن محتوای آن نیستید!!با تشکر از توجه شما. امیدوارم بعد از خواندن این مقاله جریان خون را در رگ هایتان حس کرده باشید. محمد مبین آقاشاهی اردستانی</description>
                <category>مبین آقاشاهی اردستانی</category>
                <author>مبین آقاشاهی اردستانی</author>
                <pubDate>Sat, 13 May 2023 03:15:29 +0330</pubDate>
            </item>
                    <item>
                <title>استفاده از Owl Carousel در لاراول</title>
                <link>https://virgool.io/@mobin.aghashahi/%D8%A7%D8%B3%D8%AA%D9%81%D8%A7%D8%AF%D9%87-%D8%A7%D8%B2-owl-carousel-%D8%AF%D8%B1-%D9%84%D8%A7%D8%B1%D8%A7%D9%88%D9%84-golpwpo0cezw</link>
                <description>Owl Carousel چیست؟Owl Carousel یک افزونه برای ایجاد لغزنده چرخ و فلکی واکنش گرا در وبسایت است.کجا استفاده می‌شود؟این افزونه برای مواقعی استفاده میشه که شما بخواید تعداد زیادی آیتم را در یک سطر نمایش بدید. به مثال زیر توجه کنید.این یک Owl Carousel است که در عین حال که جذابیت فوق العاده ای به وبسایت شما میده، میتونه فضای کمی از وبسایت شمارو برای نمایش تعداد زیادی آیتم اشغال کنه.چگونه از این افزونه در لاراول استفاده کنیم؟!و اما بپردازیم به سوال اصلی و مهمی که ما بخاطرش اینجاییم.ابتدا باید این افزونه را از طریق وبسایت  Owl Carousel دانلود کنیم. وارد وبسایت شوید و از طریق Download در بالای صفحه، افزونه رو دانلود کنید.برای استفاده از این افزونه ما به سه فایل به نام های owl.carousel.min.css، owl.theme.default.min.css و owl.carousel.js نیاز داریم که دو فایل css نام برده شده در فایل زیپ دانلود شده و در مسیر dist/assets و فایل js نام برده شده در مسیر dist وجود دارد.دو فایل css که در بالا از آن ها نام برده شد را باید در پروژه لاراول خود کپی کنید.پروژه لاراول خود را باز کنید و داخل پوشه public یک دایرکتوری به نام assets ایجاد کنید. و در دایرکتوری ایجاد شده دو دایرکتوری به نام های css و js ایجاد کنید. نکته: نام پروژه لاراولی که ایجاد کردم test است.نکته: نام ها اهمیتی ندارند و فقط باید بتوان فایل های css و js را در پروژه link کرد.دو فایل css که در بالا گفته شد را در دایرکتوری css کپی کنید و تک فایل js گفته شده را در دایرکتوری js.حال شما با موفقیت فایل های مورد نیاز برای استفاده از افزونه را در پروژه خود اضاف کردید و فقط باید از آن در پروژه استفاده کنید.حال یک view بسازید و فایل های css و js را به view مورد نظر خود لینک کنید.فایل های css کپی شده در مرحله بالا را مانند هر فایل css دیگری در head لینک کنید. &lt;link rel=&amp;quotstylesheet&amp;quot href=&amp;quot/assets/css/owl.carousel.min.css&amp;quot&gt;
&lt;link rel=&amp;quotstylesheet&amp;quot href=&amp;quot/assets/css/owl.theme.default.css&amp;quot&gt;و فایل js کپی شده در مرحله بالا را بین بسته شدن تگ body و بسته شدن تگ html کپی کنید.نکته: این افزونه با jQuery کار خواهد کرد و باید jQuery را به کد اضاف کنیم.&lt;script src=&amp;quothttps://ajax.googleapis.com/ajax/libs/jquery/3.6.3/jquery.min.js&amp;quot&gt;
&lt;script src=&amp;quot/assets/js/owl.carousel.js&amp;quot&gt;حال برای ایجاد آیتم هایی که نیاز به نمایش آن دارید از تگ های زیر استفاده کنید.&lt;div class=&amp;quotowl-carousel owl-theme&amp;quot&gt;
    &lt;div class=&amp;quotitem&amp;quot&gt;&lt;h4&gt;1&lt;/h4&gt;&lt;/div&gt;
    &lt;div class=&amp;quotitem&amp;quot&gt;&lt;h4&gt;2&lt;/h4&gt;&lt;/div&gt;
    &lt;div class=&amp;quotitem&amp;quot&gt;&lt;h4&gt;3&lt;/h4&gt;&lt;/div&gt;
    &lt;div class=&amp;quotitem&amp;quot&gt;&lt;h4&gt;4&lt;/h4&gt;&lt;/div&gt;
    &lt;div class=&amp;quotitem&amp;quot&gt;&lt;h4&gt;5&lt;/h4&gt;&lt;/div&gt;
    &lt;div class=&amp;quotitem&amp;quot&gt;&lt;h4&gt;6&lt;/h4&gt;&lt;/div&gt;
    &lt;div class=&amp;quotitem&amp;quot&gt;&lt;h4&gt;7&lt;/h4&gt;&lt;/div&gt;
    &lt;div class=&amp;quotitem&amp;quot&gt;&lt;h4&gt;8&lt;/h4&gt;&lt;/div&gt;
    &lt;div class=&amp;quotitem&amp;quot&gt;&lt;h4&gt;9&lt;/h4&gt;&lt;/div&gt;
    &lt;div class=&amp;quotitem&amp;quot&gt;&lt;h4&gt;10&lt;/h4&gt;&lt;/div&gt;
    &lt;div class=&amp;quotitem&amp;quot&gt;&lt;h4&gt;11&lt;/h4&gt;&lt;/div&gt;
    &lt;div class=&amp;quotitem&amp;quot&gt;&lt;h4&gt;12&lt;/h4&gt;&lt;/div&gt;
&lt;/div&gt;حال در مرحله آخر برای راه اندازی و دادن آپشن های انتهایی به نوع نمایش آیتم ها باید اسکریپت زیر را به انتهای برنامه خود (زیر دو اسکریپتی که در مرحله بالا به کد لینک کردیم.) اضاف کنید.
    $(&#039;.owl-carousel&#039;).owlCarousel({
        loop:true,
        margin:10,
        nav:true,
        responsive:{
            0:{
                items:1
            },
            600:{
                items:3
            },
            1000:{
                items:5
            }
        }
    })
نکته بسیار مهم: ترتیب اضاف کردن لینک اسکریپت های جاوا اسکریپت مهم است و اگر لینک هارا به ترتیب اضاف نکنید برنامه شما اجرا نخواهد شد و چیزی به شما نمایش نخواهد داد.و کار به پایان رسید و شما میتوانید نتیجه کار خود را تماشا کنید.</description>
                <category>مبین آقاشاهی اردستانی</category>
                <author>مبین آقاشاهی اردستانی</author>
                <pubDate>Wed, 05 Apr 2023 01:31:15 +0330</pubDate>
            </item>
                    <item>
                <title>چگونه یک کامپیوتر هک شده را تعمیر کنیم</title>
                <link>https://virgool.io/@mobin.aghashahi/%DA%86%DA%AF%D9%88%D9%86%D9%87-%DB%8C%DA%A9-%DA%A9%D8%A7%D9%85%D9%BE%DB%8C%D9%88%D8%AA%D8%B1-%D9%87%DA%A9-%D8%B4%D8%AF%D9%87-%D8%B1%D8%A7-%D8%AA%D8%B9%D9%85%DB%8C%D8%B1-%DA%A9%D9%86%DB%8C%D9%85-jhkkfqne5s54</link>
                <description>اگر فکر می کنید کامپیوتر شما هک شده، اولین سوالی که به ذهن شما میرسه اینه که چجوری کامپیوتر رو بعد از هک شدن تمیز کنیم؟! اقدام سریع برای محافظت از داده های شما و جلوگیری از آسیب بیشتر ضروری است.با افزایش اتکای ما به فناوری، هک رایانه به یک تهدید سایبری حیاتی تبدیل می شود که می تواند منجر به آسیب های قابل توجه و سرقت اطلاعات حساس شود.در ابتدا ما به بررسی نشانه های احتمالی هک شدن یک کامپیوتر می پردازیم و در آخر راه کارهایی برای تعمیر آن ارائه خواهیم کرد.نشانه هایی که کامپیوتر شما هک شده استآیا رایانه شما عجیب رفتار می کند یا در عملکرد مشکل دارد؟ این میتونه مهم ترین نشانه از هک شدن کامپیوتر شما باشد.با شیوع روزافزون تهدیدات سایبری، مانند فیشینگ و وب‌سایت‌های تقلبی، حفظ هوشیاری و دانستن نشانه‌های یک رایانه در معرض خطر بسیار مهم است.در اینجا نشانه هایی وجود دارد که نشان می دهد رایانه شما ممکن است هک شده باشد:1- یک کامپیوتر کندبدافزارها یا ویروس ها می توانند منابع سیستم را مصرف کنند و باعث کند شدن رایانه شما شوند.2- پاپ آپ یا پیام های خطای عجیبصفحات پاپ آپ می توانند ترفندهایی برای دانلود بدافزار بیشتر، گرفتن دسترسی بیشتر از سیستم شما و یا ارائه اطلاعات حساس شما باشند.3- تغییرات در فایل ها یا تنظیمات شمااگر متوجه شدید که فایل‌ها حذف یا خراب شده‌اند یا تنظیمات مرورگر شما بدون اجازه شما تغییر کرده است، ممکن است نشانه‌ای از هک باشد.به هیچ عنوان این علائم هشدار دهنده را نادیده نگیرید. آنها به غیر از اذیت کننده بودنشان، می توانند بسیار خطرناک باشند و به طور بالقوه اطلاعات شخصی و امنیت شما را در معرض خطر قرار دهند.اگر کامپیوترمان هک شد چه کنیم؟آن را از اینترنت جدا کنیداسکن ویروس را اجرا کنیدنرم افزارها خود را به روز کنیدفعال کردن احراز هویت دو مرحله ایکامپیوتر خود را ریست کنیدبه دنبال کمک از اشخاص متخصص باشیدمراحل تعمیر کامپیوتر هک شدهآن را از اینترنت جدا کنیداین کار مانع از دسترسی هکر به فایل ها و داده های شما از راه دور می شود. با جدا کردن رایانه خود از اینترنت، دسترسی هکرها به داده های خود را قطع کرده و آنها را از استفاده از رایانه خود برای حمله به سیستم های دیگر منع می کنید. این مرحله ضروری است، زیرا برای ارزیابی وضعیت و انجام اقدامات بیشتر برای ایمن سازی رایانه خود، زمان زیادی لازم است و هکر در این بین میتواند به هدف خود دست یابد.کامپیوتر خود را تا زمانی که مشکل را شناسایی و حل نکرده اید، از اینترنت جدا نگه دارید.اسکن ویروس را اجرا کنیدیک هکر می‌تواند بدافزار یا ویروس‌ها را از راه‌های مختلف مانند ایمیل‌های فیشینگ یا دانلود نرم‌افزارهای آلوده بر روی رایانه شما نصب کند.این برنامه های مخرب منجر به کندی عملکرد رایانه و دسترسی غیرمجاز به اطلاعات شخصی شما می شود.اجرای اسکن ویروس با استفاده از یک برنامه آنتی ویروس به روز مانند Clario (یا اگر از ویندوز 10 استفاده میکنید، از همان آنتی ویروس ویندوز استفاده نمایید.) می تواند هر گونه بدافزار یا ویروس را در رایانه شما شناسایی و حذف کند.اگر برنامه آنتی ویروس نمی تواند بدافزار را حذف کند، گزینه های دیگر را در نظر بگیرید.نرم افزارهای خود را به روز کنیدنرم افزارهای خود را به طور منظم به روز کنید تا کامپیوتر خود را ایمن نگه دارید.آپدیت کردن نرم افزارها، شامل مرورگر وب، سیستم عامل و هر برنامه‌ای که استفاده می‌کنید می‌شود.نرم افزارهای قدیمی بهشت هکرهاست. آن ها از باگ های موجود در نرم افزارهای آپدیت نشده و قدیمی استفاده خواهند کرد و به سیستم شما حمله می کنند.وقتی نرم افزار خود را به روز می کنید، به روز رسانی ها را از منابع مطمئن دانلود کنید.منابع مطمئن شامل وب سایت رسمی فروشنده یا فروشگاه برنامه است. از دانلود نرم افزار از وب سایت های ناآشنا یا مشکوک خودداری کنید، زیرا ممکن است حاوی بدافزار یا ویروس باشند.فعال کردن احراز هویت دو مرحله ایبا فعال کردن احراز هویت دو مرحله ای (2FA) یا احراز هویت بدون رمز عبور، می توانید یک لایه امنیتی اضافی به حساب های خود اضافه کنید.با 2FA، یک کد علاوه بر رمز عبور شما مورد نیاز است.این بدان معنی است که حتی اگر یک هکر جزئیات حساب های شما برای ورود را به دست آورد، بدون آن کد نمی تواند به حساب شما دسترسی پیدا کند.در حالی که 2FA مانند هر تمهیدات امنیتی دیگری کاملاً بی خطا نیست ولی خطر بالقوه دسترسی غیرمجاز به حساب های شما را به میزان قابل توجهی کاهش می دهد.برای افزایش بیشتر امنیت حساب های خود، از رمزهای عبور قوی و منحصر به فرد برای هر حساب استفاده کنید و از استفاده مجدد از یک رمز عبور در چندین حساب خودداری کنید.کامپیوتر خود را ریست کنیداگر یک نرم افزار آنتی ویروس نتواند بدافزار را از رایانه هک شده شما حذف کند، ممکن است بازنشانی آن به تنظیمات کارخانه ضروری باشد.این کار می تواند به طور موثری هر گونه نرم افزار مخرب یا آلودگی را که باعث مشکلاتی در رایانه شما می شود حذف کند.اما اشکال این روش این است که تمام داده‌ها، از جمله برنامه‌های نصب‌شده، فایل‌های شخصی و تنظیمات را حذف خواهند شد.بنابراین، قبل از تنظیم مجدد دستگاه، باید از آنها در یک هارد دیسک خارجی، فضای ذخیره سازی ابری یا مکان امن دیگری نسخه پشتیبان تهیه کنید.به دنبال کمک از اشخاص متخصص باشیداگر به توانایی خود در تعمیر رایانه هک شده اطمینان ندارید، از یک متخصص امنیت سایبری کمک بگیرید.کارشناسان امنیت سایبری می‌توانند به ارزیابی آسیب‌های ناشی از هک کمک کنند و راهنمایی‌هایی برای بازپس‌گیری کنترل امنیت رایانه شما ارائه دهند.آنها می توانند خدمات مختلفی از جمله حذف بدافزار، بازیابی اطلاعات، تجزیه و تحلیل امنیتی و مشاوره در مورد جلوگیری از هک های آینده ارائه دهند.در حالی که ممکن است این کار هزینه بر باشد، جستجوی کمک از یک متخصص یک سرمایه گذاری برای محافظت از داده ها و امنیت رایانه شما است.هزینه انجام ندادن این کار می تواند بسیار بیشتر باشد، مانند از دست دادن احتمالی داده ها، سرقت هویت، کلاهبرداری مالی یا سوء استفاده.به دلیل وابستگی ما به فناوری، تهدید رایانه هک شده بیش از هر زمان دیگری رایج است.سخن پایانیانجام اقدامات پیشگیرانه مانند موارد بالا می تواند خطر هک شدن رایانه شما را به میزان قابل توجهی کاهش دهد.اما بهترین راه برای پیشگری از یک حمله به سیستم خود بالا بردن اطلاعات خود در مورد راه های نفوذ، چگونگی و چرایی آن است.ترجمه شده از مقاله https://cybersecuritynews.com/how-to-fix-a-hacked-computer/</description>
                <category>مبین آقاشاهی اردستانی</category>
                <author>مبین آقاشاهی اردستانی</author>
                <pubDate>Sun, 05 Mar 2023 02:45:12 +0330</pubDate>
            </item>
                    <item>
                <title>بازیابی رمز عبور فایل زیپ</title>
                <link>https://virgool.io/@mobin.aghashahi/%DB%8C%D8%A7%D9%81%D8%AA%D9%86-%D8%B1%D9%85%D8%B2-%D8%B9%D8%A8%D9%88%D8%B1-%D9%81%D8%A7%DB%8C%D9%84-%D8%B2%DB%8C%D9%BE-sozfqgdqb54q</link>
                <description>شاید شماهم فایل زیپی دارید که با رمز عبور مهر و موم شده و شما رمز عبور اون فایل زیپ رو فراموش کردید. در اینجور مواقع برنامه های مختلفی وجود دارن که با روش های مختلفی به کمک شما خواهند آمد که شما رمز عبورتون رو بازیابی کنید. اما در این مقاله ما از نرم افزار رایگان و متن باز به نام Zydra استفاده خواهیم کرد.این نرم افزار با زبان Python نوشته شده است و ما برای اجرای این نرم افزار نیاز به یک مترجم Python خواهیم داشت.روش کار از لحاظ تئوریک به چه شکلی است؟روش کار بر پایه حدس کلمه عبور است که این روش خودش به دو نوع انجام می شود.1- حملات دیکشنری: حدس بر اساس پسوردهای احتمالی که به اصطلاح به این نوع حملات، حملات دیکشنری هم گفته می شود. زیرا ما پسوردهای احتمالیمان را داخل یک فایل ذخیره خواهیم کرد و آن ها را امتحان خواهیم کرد. این روش به نسبت روش دوم روش عاقلانه و سریع تری است ولی احتمال یافتن رمز عبور ارتباط مستقیم با دیکشنری ای دارد که شما از آن استفاده خواهید کرد.2- حملات  :brute force حدس پسورد به روش brute force ، روشی غیر هوشمندانه به حساب خواهد آمد زیرا در این روش باید تمامی احتمالات رو بررسی کنیم تا به پسورد صحیح دستیابیم. این نوع حمله به دلیل احتمالات زیادی که برای امتحان کردن وجود دارد زمان بسیار زیادی لازم دارد که به جواب برسد ولی صد در صد به جواب خواهد رسید. منظور از زمان زیاد ماه ها و یا سال ها زمان است!! روش کار از لحاظ عملی به چه شکلی است؟من در این آموزش از لینوکس استفاده می کنم و برای ویندوزهم راه دشواری در پیش ندارید و فقط باید بتوانید برنامه پایتون رو اجرا کنید.ابتدا باید نرم افزار رو دانلود کنیم که ما نرم افزار رو از گیت هاب Zydra دانلود خواهیم کرد.وارد گیت هاب که می شوید آموزش نصب نرم افزار به صورت کامل در قسمت REAME.md موجود است. که من عکس اون قسمت رو برای شما قرار خواهم داد و طبق آموزش های خودشون پیش خواهم رفت.sudo apt-get updatesudo apt-get install qpdf unrarpip3 install py-termsudo wget http://www.figlet.org/fonts/epic.flf -O /usr/share/figlet/epic.flfتا اینجای کار ما موفق به نصب پیش نیازها و کتابخانه های مورد نیاز نرم افزارمون شدیم. و حالا نوبت میرسه به دانلود و اجرای نرم افزارمون.برای دانلود و اجرای نرم افزار طبق دستورات زیر پیش خواهیم رفت.#دانلود نرم افزار
git clone https://github.com/hamedA2/Zydra.git#رفتن به پوشه نصب نرم افزار
cd Zydra
#رمشاهده راهنمای نرم افزار
python3 Zydra.py -hاگه همه چیز رو به صورت صحیح اجرا کرده باشید باید  پیغام زیر روبرو شوید.فایل زیپ مورد نظر خود را داخل پوشه محل نصب برنامه کپی کنید. (ما در این آموزش از فایل زیپ test.zip استفاده خواهیم کرد.)حالا که همه چیز آماده است میریم که دوتا حمله خودمون رو ببینیم که به چه صورتی انجام می شود.1- حمله دیکشنری:ابتدا باید دیکشنری خودمون رو آماده کنیم که برای این کار معمولا از دیکشنری های موجود در اینترنت استفاده می کنیم. شما به راحتی می توانید دیکشنری های مختلف موجود داخل اینترنت رو دانلود و از اون ها استفاده کنید.لینک یکسری از این دیکشنری هارو اینجا براتون قرار میدم که ازش استفاده کنید.
https://github.com/danielmiessler/SecLists/tree/master/Passwordsبعد از دانلود یکی از دیکشنری ها، دیکشنری دانلود شده رو به محل نصب نرم افزار کپی می کنیم.نکته: دیکشنری ها ظاهری به این شکل دارند. (تصویر زیر)یعنی هر خط نشان گر یک پسورد است.ما در این آموزش از دیکشنری worst-passwords-500.txt استفاده خواهیم کرد.حالا با دستور زیر نرم افزار را با دیکشنری worst-passwords-500.txt برروی فایل زیپ test.zip  اجرا خواهیم کرد.python3 Zydra.py -f test.zip -d 500-worst-passwords.txtنرم افزار یک به یک پسوردهای داخل دیکشنری مارا با فایل زیپ چک خواهد کرد و اگر پسور درست باشد با فونت سبز رنگ مانند تصویر بالا، پسورد صحیح رو به شما نمایش خواهد داد.نکته: اگه اولین دیکشنری شما راه به جایی نبرد و پسورد فایل شما شامل اون نبود، دیکشنری های دیگه رو امتحان کنید.2- حمله brute force:برای این حمله برعکسِ حمله دیکشنری پارامترهای مختلفی برای اجرای برنامه در دسترس است. پارامترهایی از قبیل تعداد کاراکترها و نوع کاراکترها. یعنی شما میتونید مشخص کنید چند کاراکتر و چه نوع از کاراکترهایی را به عنوان پسورد می خواهید امتحان کنید.ما اینجا تعدادی از اون پارامترها را برای شما خواهیم نوشت.python3 Zydra.py -f test.zip -b digits -m 2 -x 8در دستور بالا گفتیم که برروی فایل test.zip تمام اعداد 2 رقمی تا 8 رقمی را امتحان کن و رمز عبور احتمالی را از بین این رنج از اعداد جست و جو کن.python3 Zydra.py -f test.zip -b lowercase -m 2 -x 8در دستور بالا گفتیم که برروی فایل test.zip تمام حروف انگلیسی کوچک 2 رقمی تا 8 رقمی را امتحان کن و رمز عبور احتمالی را از بین این رنج از حروف جست و جو کن.python3 Zydra.py -f test.zip -b lowercase digits -m 2 -x 8در دستور بالا گفتیم که برروی فایل test.zip ترکیب تمام حروف انگلیسی کوچک و اعداد 2 رقمی تا 8 رقمی را امتحان کن و رمز عبور احتمالی را به این ترکیب جست و جو کن.به جز این دو نوع پارامتر که برای شما مثال زدم، انواع دیگری هم می توان برروی فایل جست و جو کرد که در ادامه براتون لیستی از تمام حالات خواهم نوشت.&lt;lowercase&gt;  حروف کوچک انگلیسی شامل abcdefghijklmnopqrstuvwxyz&lt;uppercase&gt;  حروف بزرگ انگلیسی شامل ABCDEFGHIJKLMNOPQRSTUVWXYZ&lt;letters&gt;    حروف کوچک و بزرگ انگلیسی&lt;digits&gt;     اعداد 0123456789&lt;symbols&gt;    نمادها !#$%&amp;&#039;()*+,-./:;&lt;=&gt;?@[\]^_`{|}~&#039;&amp;quot&lt;space&gt;     کاراکتر فاصلهنکته: معمولا حملات brute force را بر روی کامپیوترهای شخصی اجرا نمی کنند زیرا این روش نیاز به این دارد که ماه ها کامپیوتر شما روشن باشد و تا این عملیات انجام شود و رمز عبور پیدا شود. برای این کار از سرورهای مجازی استفاده خواهد شد که همیشه روشن باشند و هزینه کمتری داشته باشند.خب شما دیگه به صورت کامل متوجه شدید که چجوری باید پسورد یک فایل زیپ رو پیدا کنید. امیدوارم سختی های زندگی از پا درتون نیاره و بیشتر لذت ببرید از زندگی...</description>
                <category>مبین آقاشاهی اردستانی</category>
                <author>مبین آقاشاهی اردستانی</author>
                <pubDate>Sat, 25 Feb 2023 02:16:30 +0330</pubDate>
            </item>
                    <item>
                <title>استفاده از چند اینترنت به وسیله یک مودم</title>
                <link>https://virgool.io/@mobin.aghashahi/%D8%A7%D8%B3%D8%AA%D9%81%D8%A7%D8%AF%D9%87-%D8%A7%D8%B2-%DA%86%D9%86%D8%AF-%D8%A7%DB%8C%D9%86%D8%AA%D8%B1%D9%86%D8%AA-%D8%A8%D9%87-%D9%88%D8%B3%DB%8C%D9%84%D9%87-%DB%8C%DA%A9-%D9%85%D9%88%D8%AF%D9%85-zh7a6yc9fgjm</link>
                <description>شاید برای شماهم پیش اومده باشه (البته احتمالش یک درصده) که بخواید اینترنت مودم میتروتیک و ADSL رو بروی یک مودم داشته باشید. یعنی بتونید با اتصال به یک مودم، راحت سوئیچ کنید به اینترنت ADSL و یا اینترنتی که از میتروکتیکتون میاد...برای این کار میتروتیکتون رو برروی شبکه ای که قراره به شما اینترنت بده کانفیگ کنید. من اینجا اینترنت میتروتیکم رو داخل شبکه 192.168.37.1/24 قرار دادم. حالا سیم خروجی از میتروتیکتون رو به پورت ethernet مودمی که اینترنت ADSL روی اون کانفیگ شده متصل میکنید. (سیم نارنجی رنگ)حالا کامپیوترتون رو به مودم متصل کنید. ( در اینجا تفاوتی نداره که این اتصال از طریق کابل صورت میگیره و یا از طریق wireless)تا اینجای کار شما هر دو اینترنت رو روی مودم خودتون دارید و تنها چیزی که مشخص میکنه شما از کدوم مسیر و اینترنت استفاده میکنید، IP Private شماست.شما به راحتی میتونید IP Private خودتون تغییر بدید و مشخص کنید میخواید از کدوم شبکه استفاده کنید که در ادامه بهتون نشون میدم چجوری میشه این کار رو کرد.وارد control Panel بشید و گزینه Nerwork and Sharing Center رو انتخاب کنید.در پنجره باز شده برروی گزینه Ethernet کلیک کنید. (این بخش بسته به نوع اتصال شما، یعنی wireless یا کابل نوشته متفاوتی به شما نمایش خواهد داد.)در پنجره باز شده برروی گزینه Properties کلیک کنید.برروی گزینه Internet Protocol Version 4 (TCP/IPv4) کلیک کنید.در این پنجره باید تنظیمات IP Private خودمون رو انجام بدیم.(1) ابتدا تیک گزینه Use the following IP address را میزنیم تا تنظیمات مربوط به IP Static فعال شود (2) اگر بخواهیم از اینترنت میتروتیک استفاده کنیم باید این فیلد را با مقادیر داخل تصویر تکمیل کنید که داخل شبکه 192.168.37.1/24 قرار بگیرید. ولی اگر میخواهیم از اینترنت ADSL استفاده کنیم این فیلد را برابر با IP هایی در رنج 192.168.1.1/24 قرار میدهیم.(3) در این مثال به دلیل یکی بودن subnet Mask در هر دو شبکه، این فیلد برابر 255.255.255.0 قرار خواهد گرفت.(4) در این مرحله Default gateway برای میتروتیک برابر 192.168.37.250 و برای ADSL ما برابر 192.168.1.1 است. (5) گزینه Use the following DNS server address برای شما فعال خواهد شد و نیاز به فعال سازی آن نیست.(6) مقادیر DNS دلخواه خود را در این فیلد قرار دهید که ما در اینجا از 8.8.8.8 استفاده کردیم.برای اعمال تغییرات برروی گزینه OK کلیک کنید و در پنجره بعدی هم برروی OK کلیک کنید.حالا شما به اینترنتِ مودمِ میتروتیک خود از طریق مودمِ ADSL خود متصل هستید و برای تغییر آن میتوانید اطلاعات شبکه مربوط به مودم ADSL را از روش بالا وارد کنید و از اینترنت ADSL استفاده کنید. موفق و پیروز باشید...محمد مبین آقاشاهی اردستانی</description>
                <category>مبین آقاشاهی اردستانی</category>
                <author>مبین آقاشاهی اردستانی</author>
                <pubDate>Thu, 09 Feb 2023 00:50:17 +0330</pubDate>
            </item>
                    <item>
                <title>سیستم عامل ها را می توان با استفاده از دستور پینگ تشخیص داد</title>
                <link>https://virgool.io/@mobin.aghashahi/%D8%B3%DB%8C%D8%B3%D8%AA%D9%85-%D8%B9%D8%A7%D9%85%D9%84-%D9%87%D8%A7-%D8%B1%D8%A7-%D9%85%DB%8C-%D8%AA%D9%88%D8%A7%D9%86-%D8%A8%D8%A7-%D8%A7%D8%B3%D8%AA%D9%81%D8%A7%D8%AF%D9%87-%D8%A7%D8%B2-%D8%AF%D8%B3%D8%AA%D9%88%D8%B1-%D9%BE%DB%8C%D9%86%DA%AF-%D8%AA%D8%B4%D8%AE%DB%8C%D8%B5-%D8%AF%D8%A7%D8%AF-gnlk6kn8jdea</link>
                <description>سیستم‌های عامل را می‌توان با استفاده از دستور Ping شناسایی کرد. Ping یک نرم‌افزار مدیریت شبکه کامپیوتری است که برای یافتن اتصال و یا عدم اتصال یک Device در یک شبکه استفاده می شود.پینگ با ارسال بسته‌های درخواست با پروتکل پیام کنترل اینترنت (ICMP) به میزبان مورد نظر و انتظار برای پاسخ بازخورد ICMP عمل می‌کند.TTL چیست؟TTL به مدت‌زمان زنده ماندن (اعتبار داشتن) یک بسته  (packet) در سطح شبکه گفته می‌شود.  هر بسته (Packet) در طول مسیر، از  مبدا تا مقصد از دستگاه‌هایی عبور می‌کند که هر کدام از آن‌ها یک گام (hop)  محسوب می‌شوند. TTL بسته رابطه‌ی مستقیمی با تعداد گام‌های مسیری که بسته  از آن عبور می‌کند، دارد. با عبور از هر hop یک واحد از TTL بسته کم می‌شود. TTL افزون بر این‌که مفهومی در مسیریابی شبکه است، در حوزه‌هایی مانند DNS Caching و CDN Caching نیز کاربرد دارد.یکی از دلایل استفاده از این  پارامتر در بسته‌های اینترنتی جلوگیری از ارسال نامحدود و پی‌در‌پی بسته‌ها  بین مسیریاب‌ها و تجهیزات شبکه است.  TTL به نوعی تاریخ انقضا بسته محسوب  می‌شود و از سوی دیگر این قابلیت را به ارسال کننده می‌دهد که از تعداد  گام‌ها در طول مسیر آگاه شود.سیستم عامل ها را می توان با استفاده از دستور Ping شناسایی کردنکته ای که وجود دارد این است که TTL برای هر سیستم عامل متفاوت است و تا حدودی می توان سیستم عاملِ IP پینگ شده را بیابید. چرا گفتم تا حدودی؟!! چون در بعضی از موارد این TTL ها در سیستم عامل های مختلف اعدادی یکسان دارند و به درستی نمیتوان سیستم عاملی که با آن روبرو هستید را تشخیص دهید و باید در نظر داشته باشید که این روش با ترکیب روش های دیگر است که کابردی تر خواهد شد و بازهم تا حدودی به شما اجازه خواهد داد که سیستم عامل IP پینگ شده را پیدا کرد.نکته: ما هیچگاه به طور قطع نمیتوانیم از طریق حملات کور مطمئن شویم سیستم عامل چیست. در اینجا می توانید مقدار TTL را برای محدوده سرورها پیدا می کنید.برای دیدن لیست کامل سیستم عامل ها و TTL آن ها به این لینک مراجعه نمایید.کار به چه صورتی انجام می شود؟ابتدا باید دستور traceroute را اجرا کنیم تا تعداد Hops بین هدف و مقصد مشخص شود.نکته: برای ویندوز از دستور tracert استفاده کنید و برای لینوکس از دستور traceroute استفاده کنید.ما این کار را برروی وبسایت www.gbhackers.com تست خواهیم کرد.tracert gbhackers.comتعداد کل hops = 11حالا دامنه را پینگ کنید gbhackers.comمقدار TTL=53 است، با جمع کردن مقدار TTL و تعداد Hops می توانیم سیستم عامل را تعریف کنیم (53 + 11 = 64)، که با این اوصاف می توان نتیجه گرفت که احتمالا یک ماشین لینوکس در حال اجرا است.سخن پایانی:‌ اصولا کمتر کسی با این روش سعی بر فهمیدن سیستم عامل یک کامپیوتر می کند زیرا ابزارهای بهتر و کارآمد تری در دنیای شبکه وجود دارد که این کار را راحت تر، دقیق تر و با جزئیات بیشتر برای ما انجام می دهند (به عنوان مثال Nmap که میتونید آموزش گوشه ای از این ابزار قدرتمند رو اینجا داشته باشید.) ولی از اونجایی که این روش یکی از روش هایی هست که هر ابزاری برای تشخیص یک سیستم عامل انجام می دهد، به نظرم جالب بود که شماهم باهاش آشنا بشید و ببینید دنیای هک چه روش هایی رو برای به دست آوردن اطلاعات طی خواهد کرد.به امید روزهای بهترمحمد مبین آقاشاهی اردستانیترجمه شده از مقاله Operating Systems Can be Detected Using Ping Command</description>
                <category>مبین آقاشاهی اردستانی</category>
                <author>مبین آقاشاهی اردستانی</author>
                <pubDate>Mon, 14 Nov 2022 15:45:58 +0330</pubDate>
            </item>
                    <item>
                <title>تفاوت بین IP Private و IP Public</title>
                <link>https://virgool.io/@mobin.aghashahi/%D8%AA%D9%81%D8%A7%D9%88%D8%AA-%D8%A8%DB%8C%D9%86-ip-private-%D9%88-ip-public-y7pbcr36n3iy</link>
                <description>به عنوان یک دانشجوی کامپیوتر؛ ترم 6 دانشگاه بعد از تقلای زیادم برای فهمیدن اینکه IP چیه و چجوری میشه IP کامپیوتر رو به دست آورد، به دوگانه ای برخورد کردم که مغزم را به شدت درگیر کرد و اون IP Private و IP Public بود. در حقیقت سوال من این بود: &quot;اگه IP حکم آدرس خونه رو داره و بسته های دریافتی از اینترنت مستقیم به اون آدرس میره پس چرا کامپیوترِ من، دوتا IP داره؟! یعنی کامپیوترهای ما دوتا آدرس متفاوت داره؟! و چرا باید دوتا آدرس متفاوت داشته باشه؟! &quot;. انسان جایز الخطاست، مهندسان انسان هستند پس مهندسان هم اشتباه خواهند کرد:مهندس بودن گاهی این شکلی میشه!!برای روشن تر شدن مسئله واجب میدونم که نگاهی به گذشته و تاریخچه پیدایش IP ها داشته باشیم. مهندسان زمانی که IP هارو به عنوان آدرسی منحصر به فرد برای کامپیوترها و دستگاه ها انتخاب کردند هیچوقت به چنین روزی فکر نمیکردند!! یعنی اونا اصلا توقع نداشتن یک شخص چندین وسیله (DEVICE) که به اینترنت متصل هست رو داشته باشه یا حتی اصلا توقع نداشتند که تمام انسان های جهان حداقل یک وسیله (DEVICE) داشتن باشن که به اینترنت متصل میشه. ولی امروزه تقریبا تمام انسان های جهان یک یا چند گوشی موبایل دارند که به اینترنت متصله!! اونا برای خودشون کامپیوتر شخصی دارند که به اینترنت متصله و یا حتی خیلی از لوازم خونشون به اینترنت متصله و با اینترنت در ارتباطه. و اما جنبه ی تلخ ماجرا اینجاست که مهندس های کامپیوتر اومدن و یک آدرس IP چهار قستمی که هر کدوم از قسمت ها از ۱ تا ۲۵۵ مقدار میگرفت رو ساختن. که به عبارتی ۲۵۵ به توان ۴ آدرس IP منحصر به فرد خواهد شد. که اگه ۲۵۵ رو به توان ۴ برسونید به عدد ۴ میلیارد و فلان خواهید رسید!! بله این عددیه که مهندس ها فکر میکردن به اندازه کافی بزرگ هست که در آینده به مشکل بر نخورن ولی خب همونجور که گفتیم انسان جایز الخطاس، مهندسان انسان هستند پس مهندسان هم اشتباه خواهند کرد...خب به نظر شما راه حل چیه؟ شما به عنوان شخصی که یک سیستم رو طراحی کرده که کل جهان داره ازش استفاده میکنه و عملا جمع کردن اون سیستم و باز طراحی اون غیر ممکنه و هزینه بره؛ چه راه حلی به ذهنتون میرسه؟! ۱- معرفی آدرس هایی IP به اندازه کافی بزرگ تر (IP v 6)۲- معجزه NAT !!راه حل اول، IP v 6:مهندسان سعی کردن با طراحی و معرفی IP ورژن ۶ و بزرگ کردن رنج IP های منحصر به فرد، هم به نجات کمبود IP ها برسن و هم نواقص و ایرادات IP های ورژن ۴ رو رفع کنند. IP ورژن ۶ در تاریخ ۱۹۹۸ میلادی توسط گروه ویژه مهندسی اینترنت IETF به دنیا عرضه شد ولی خب تا به امروز نتونسته کمک چندانی به ما بکنه چون اکثر وسایل شبکه که تا به امروز ساخته شده از IP ورژن ۶ پشتیبانی نمیکنه و دنیای شبکه هنوز آماده پذیرش اون به عنوان یک راه حل نیست.متد NAT، ناجی مهندسان:چیزی که مهندسان رو از این مخمصه نجات داد IP ورژن ۶ نبود بلکه ساخت روشی به اسم NAT بود. از نظر من NAT وصله کاری دنیای شبکه بود. یعنی مهندسان فقط میخواستن این سیستم فراگیر شدشون به هر نحوی که هست کار کنه در صورتی که یک مهندس باهوش سیستمی که ساده باشه و به درستی کار کنه رو به سیستمی که پیچیدس و به درستی کار میکنه رو ترجیح میده.  این NAT چه کاری انجام میده؟اگه بخوایم خیلی وارد مسائل فنی نشیم و به ساده ترین حالت ممکن اونو توضیح بدیم باید بگیم که NAT نقش یک رابط رو داره!! منظور از رابط چیه؟ این رابط کجا قرار داره؟ مهندسا به این فکر کردن که به جای اینکه به هر نفر از افراد داخل یک شبکه ( به عنوان مثال افراد متصل به یک مودم در یک خانه) یک IP منحصر به فرد بدن بیان و اون IP منحصر به فرد رو فقط به مسیریاب اون شبکه بدن ( بازهم به عنوان مثال مودم شما)!! که این IP همون IP Public شماست. و مسیریاب (مودم شما) بیاد و یک سری IP که به اسم IP Private شناخته میشه رو به وسیله های (DEVICE) متصل به اون شبکه بده.برای روشن تر شدن مسئله به شکل زیر توجه کنید. در اینجا ما تونستیم ۳ تا کامپوتر رو به روش NAT به اینترنت متصل کنیم و فقط از یک IP Public استفاده کنیم!!! که اینجا اون IP Public در مودم ما میشه نماینده بقیه افرادی که در شبکه به اون متصل هستند.حالا کامپوترهای ما میتونن پیغام های خودشون رو به مسیریاب با آدرس IP Public بدن و مسیریاب اون پیغام هارو با آدرس IP Public خودش به مقصد برسونه و جواب رو برگردونه به کامپیوتر مربوطه...امیدوارم تا حدودی تونسته باشم مسئله تفاوت میان IP Public و IP Private و لزوم اون براتون مشخص کنم. به امید دنیای بهتر؛ روز خوش.</description>
                <category>مبین آقاشاهی اردستانی</category>
                <author>مبین آقاشاهی اردستانی</author>
                <pubDate>Mon, 31 Oct 2022 18:33:36 +0330</pubDate>
            </item>
                    <item>
                <title>چگونه شبکه رو اسکن کنیم؟</title>
                <link>https://virgool.io/@mobin.aghashahi/%DA%86%DA%AF%D9%88%D9%86%D9%87-%D8%B4%D8%A8%DA%A9%D9%87-%D8%B1%D9%88-%D8%A7%D8%B3%DA%A9%D9%86-%DA%A9%D9%86%DB%8C%D9%85-icrrobedgva2</link>
                <description>مقدمه: خیلی وقت ها پیش میاد که ما برای پیدا کردن مشکلات امنیتی شبکمون، باید شبکه رو اسکن کنیم تا ببینم کیا به شبکمون متصلن و یا پکت هامون برای رسیدن به مقصد چه مسیرهایی رو طی میکنن. ما حتی میتونیم با این کار پورت های باز Device های متصل به شبکمون رو پیدا کنیم و پورت هایی که بی جهت باز گذاشته شدن رو ببندیم. این کار یکی از پایه ای ترین و مهم ترین کارها برای جمع آوری اطلاعات از شبکون هست که اگر یک مدیر شبکه هستید باید اون رو بدونید. پس بریم که کمی شبکه ای که بهش متصل هستیم رو بهتر بشناسیم. Zenmap:اگه از سیستم عامل ویندوز استفاده می‌کنید، ابتدا باید نرم افزار Zenmap رو دانلود و نصب کنید ولی اگه از Kali linux  استفاده کنید، به صورت دیفالت نرم افزار Nmap (این نرم افزار همون Zenmap هست که محیط گرافیکی نداره) برروی سیستم عامل شما نصب هست.بعد از باز کردن نرم افزار با تصویر زیر مواجه خواهید شد.1- محل وارد کردن IP شبکه ای که بهش متصل هستید و یا میخوای اسکنش کنید.2- در این قسمت انواع اسکن هایی که شما بهش نیاز دارید وجود داره که در این مقاله یکی از اون حالت هارو میبینیم.3- این قسمت با توجه به IP وارد شده در قسمت 1 و انتخاب نوع اسکن شما در قسمت 2، یک دستور ساخته میشه که شما میتونید از اون برای Nmap استفاده کنید و بیشتر جنبه راهنمایی داره.4- در این قسمت IP های که اسکن شده و فعال ( یا به اصطلاح دیوایس های UP) رو برای شما نمایش می‌دهد.5- در این قسمت اطاعاتی از کارهای درحال اجرا به شما نمایش خواهد داد. (اطلاعاتی در مورد روند کار اسکن شبکه ای که شما بهش دادید.)ما برای این آموزش شروع به اسکن شبکه محلی خودمون میکنیم، شبکه ای که از روتر (مودم) به دیوایس های متصل به اون ختم میشه.ما با این کار میفهمیم که در شبکه ای که بهش متصل هستیم چه Device های فعالی داریم.پس ابتدا باید IP شبکه محلی خودمون رو پیدا کنیم، که برای این کار وارد CMD &#40;کلید های ترکیبی win+ R را فشار داده و در پنجره باز شده cmd را تایپ کنید.&#41; ویندوز میشیم و دستور ipconfig رو تایپ میکنیم.در کادر سبز رنگ اطلاعات مربوط به کارت شبکه متصل به مودم رو مشاهده میکنید.که اینجا نشون میده که Defualt Gatway ما که همون IP مودم ماست 192.168.1.1 هست و IP کامپیوتر من 192.168.1.2 و  Subnet Mask اون 255.255.255.0 هست. که ما اینجا با IP سیستممون و Subnet Mask کار داریم.پس ما برای اسکن کردن تمام IP های فعال مودممون باید IP زیر رو در قسمت Target نرم افزار Zenmap وارد کنیم.1- در قسمت Target باید IP های مودم رو وارد کنیم که ما در اینجا 192.168.1.2/24 رو وارد کردیم که 24 تهش منظور Subnet Mask ماست. در اینجا Zenmap از آی پی های 192.168.1.1 تا 192.168.1.254 رو اسکن میکنه.2- در قسمت پروفایل از حالت Quick scan استفاده میکنیم که این دستور سریعا IP هارو اسکن میکنه و اطلاعات کمی از Device ها به ما میدهد.حال برروی دکمه scan کلیک میکنیم و منتظر می‌مانیم که اسکن به پایان برسد.در پایان ما میتونیم در کادر 1 لیستی از IP های فعال رو مشاهده کنیم و در قسمت 2 اطلاعات کاملی از Device های متصل به اون رو ببینم. به عنوان مثال در کادر زیر ما مشاهده میکنیم که به آی پی آدرس 192.168.1.5 یک دستگاه موبایل شیائومی با MAC آدرس زیر نوشته شده است و تمام PORT های TCP متصل به آن بسته است.حالا با وارد شدن به قسمت Topology می‌توانید شبیه سازی از Node های شبکتون ببینید.و در پایان شما میتونید با کار کردن با Profile های مختلف در Zenmap به اطلاعات بیشتری از شبکه برسید.موفق و پیروز باشید.جمع نمرات 20 نمره</description>
                <category>مبین آقاشاهی اردستانی</category>
                <author>مبین آقاشاهی اردستانی</author>
                <pubDate>Sat, 11 Jun 2022 22:17:23 +0430</pubDate>
            </item>
                    <item>
                <title>آموزش ساخت پدال برای بازی های کامپیوتر آردوینو + پایتون</title>
                <link>https://virgool.io/cafegame/%D8%A2%D9%85%D9%88%D8%B2%D8%B4-%D8%B3%D8%A7%D8%AE%D8%AA-%D9%BE%D8%AF%D8%A7%D9%84-%D8%A8%D8%B1%D8%A7%DB%8C-%D8%A8%D8%A7%D8%B2%DB%8C-%D9%87%D8%A7%DB%8C-%DA%A9%D8%A7%D9%85%D9%BE%DB%8C%D9%88%D8%AA%D8%B1-%D8%A2%D8%B1%D8%AF%D9%88%DB%8C%D9%86%D9%88-%D9%BE%D8%A7%DB%8C%D8%AA%D9%88%D9%86-imdy0malhil3</link>
                <description>مقدمه:فرض کنید که میتونید در بازی ها به جای شلیک کردن با موس، با یک پدال زیر پاتون این کار رو انجام بدید. یا در بازی های ماشینی به جای استفاده از دکمه های کیبورد، با پدال زیر پاتون گاز بدید!! این موضوع میتونه هم کیفیت بازیتون رو بیشتر کنه و هم لذت ساخت یک وسیله به دستان خودتون رو بهتون بده. خب اجازه بدید کار رو شروع کنیم.موارد مورد نیاز:یک برد آردوینوتعدادی سیمپدال یا دکمه اتصالات آردوینوابتدا سیم هایی که از آردوینو به دکمه مورد نظرمون میره رو وصل میکنیم که کار به شدت ساده ای در پیش داریم.من اینجا یک پدال دو پا دارم که ستا سیم داره. دوتا سیم (سبز و آبی) برای پدال ها و یک سیم (قرمز) مشترک بین اونها. سیم مشترک رو به GND متصل میکنم و دوتا سیم دیگه رو به A2 و A5.کد نویسی سمت آردوینوکد نویسی سمت آردوینو پیچیدگی خاصی نداره و تنها باید کاری کنیم که وقتی پدال فشرده شد، آردوینو از طریق پرت سریال کاراکتر مشخصی رو برای کامپیوتر ارسال کنه. ما وقتی پدال کوچ رو فشار میدیم، اتصال بین GND و A2 برقرار میشه و مقدار A2، صفر یا LOW میشود. و وقتی پدال بزرگ تر رو فشار میدیم، اتصال بین GND و A5 برقرار میشه و مقدار A5، صفر یا LOW میشود که کد سمت آردوینو به صورت زیر میشه.void setup() {  Serial.begin(2000000);  pinMode(A5, OUTPUT);  pinMode(A2, OUTPUT);  digitalWrite(A2,HIGH);  digitalWrite(A5,HIGH);}void loop() {  if(digitalRead(A5)==LOW){    Serial.println(&amp;quotf&amp;quot);    }  else if(digitalRead(A2)==LOW){    Serial.println(&amp;quotb&amp;quot);    }    delay(100);}کد رو برروی آردوینو آپلود کنید.کد نویسی پایتونکد نویسی سمت پایتون باید کاراکترهای ارسالی از آردوینو رو دریافت کنه ( که برای دریافت اطلاعات از کتابخانه serial استفاده میکنیم.) و تصمیم بگیره که کدوم کلید رو بزنه. (که ما برای این کار از کتابخانه‌ی pyautogui.)import serial  # Serial imported for Serial communication
import time  # Required to use delay functions
import pyautogui

ArduinoSerial = serial.Serial(&#039;com6&#039;, 2000000)  # ایجاد پورت سریال جهت دریافت اطلاعات 
time.sleep(2)  # چند ثانیه صبر میکنیم تا ارتباطمون پایدار بشه

while 1:
    incoming = str(ArduinoSerial.readline())  # خواندن یک خط اطلاعات از پورت سریال
    ArduinoSerial.flushOutput() #پاک کردن اطلاعات دریافتی اضافی از پورت خروجی سریال
    ArduinoSerial.flushInput()#پاک کردن اطلاعات دریافتی اضافی از پورت ورودی سریال
    if &#039;f&#039; in incoming: #تصمیم گیری درمورد اطلاعات دریافتی که من اینجا بعد از دریافت کارکتر &amp;quotاف&amp;quot تصمیم شلیک دارم
        pyautogui.click() #کلیک کردن
    elif &#039;b&#039; in incoming: #تصمیم گیری درمورد اطلاعات دریافتی که من اینجا بعد از دریافت کارکتر &amp;quotآر&amp;quot تصمیم خشاب عوض کردن دارم
        pyautogui.press(&#039;r&#039;)#فشردن دکمه آرنکته 1:
در خطی که ما برای ایجاد پورت سریال استفاده کردیم باید بدونید کدوم COM شما فعاله و این میتونه متغیر باشه.
نکته 2:
برد آردوینو باید از طریق USB به کامپیوتر متصل باشد.
نکته 3:
برنامه پایتون شما باید در حال اجرا باشد.سخن پایانیدرحال حاضر با این چیزهایی که در این پست یادگرفتید، میتونید دسته بازی تولید کنید و لذت ببرید. پس سعی کنید چیزهای بیشتری بسازید و از این جهان نچندان دلپذیر لذت ببرید.مشکلات خودتون رو در زیر این پست با من در میان بزارید و من قول خواهم داد در حد توان به شما کمک خواهم کرد.</description>
                <category>مبین آقاشاهی اردستانی</category>
                <author>مبین آقاشاهی اردستانی</author>
                <pubDate>Fri, 27 May 2022 14:18:36 +0430</pubDate>
            </item>
                    <item>
                <title>5 نکته برای تسلط بر هنر کد نویسی تمیز</title>
                <link>https://virgool.io/@mobin.aghashahi/5-%D9%86%DA%A9%D8%AA%D9%87-%D8%A8%D8%B1%D8%A7%DB%8C-%D8%AA%D8%B3%D9%84%D8%B7-%D8%A8%D8%B1-%D9%87%D9%86%D8%B1-%DA%A9%D8%AF-%D9%86%D9%88%DB%8C%D8%B3%DB%8C-%D8%AA%D9%85%DB%8C%D8%B2-y6j4ws1gqbtx</link>
                <description>برنامه نویسان خوب کدهای خسته کننده می نویسند. برنامه نویسان بزرگ کدهای واقعا خسته کننده می نویسند.زمانی که در یک سال گذشته با این نقل قول در اینترنت برخورد کردم، آن نقل قول من را با مفهموم کد نویسی تمیز آشنا کرد.کد تمیز دقیقا چیست؟به زبان ساده کد تمیز به سلسه ای از کدها اشاره دارد که خواندن و درک آن آسان است. برخی از ویژگی های بارز کد تمیز عبارتند از:بار شناختی خواننده را کاهش می دهدشامل متغیرها و توابع با نام شهودی استبهترین روش ها را برای کدنویسی دنبال می کندچرا از کد نویسی تمیز استفاده کنم در صورتی که کد من بدون آن هم کار خواهد کرد؟خوشحالم که این سوال در ذهن شما ایجاد شد. کد تمیز به معنای نوشتن کدی نیست که کار کند، بلکه نوشتن کدی است که خواندن و نگهداری آن در طولانی مدت آسان باشد. همانطور که از این نمودار می بینید، هزینه نگهداری از کد کثیف به شدت در طول زمان افزایش می یابد، در حالی که در مورد کد تمیز، نسبتا ثابت می ماند.کد تمیز کوتاه‌ ترین یا هوشمندانه‌ ترین کد نیست، اما کد ظریفی است که درک آن کمترین تلاش را می‌طلبد.برنامه نویسی به همان اندازه که علم است هنرهم است. در اینجا چند نکته برای کمک به نوشتن کد تمیز وجود دارد.1. نام های متغیر با معناکاملاً واضح است که هیچ کس تمام محاسبات را به صورت ذهنی انجام نمی دهد تا بررسی کند که یک متغیر چه چیزی را ذخیره می کند؛ این نامِ انتخابی شما برای یک متغییر است که به فهمیدن این امر کمک می‌کند.مثال 1const x = n.filter(e =&gt; e &gt; 0);مثال 2const positiveElements = numbers.filter(num =&gt; num &gt; 0);همانطور که می بینید درک مثال دوم بسیار ساده تر از مثال اول است.در مورد بولی، نام متغیر باید سوالی باشد که بتوان به آن با بله یا خیر پاسخ داد، مانندconst isValid = false;
const hasAuthorization = true;2. توابع خود توضیحیهنگام نوشتن توابع یا متدها باید به دو نکته توجه داشت:پیروی از اصل مسئولیت واحد (SRP) نام توابع باید از افعال باشد (save, submit)اصل مسئولیت واحد (SRP) بیان می کند که یک تابع باید فقط یک کار خاص را انجام دهد. یک مثال از این می‌تواند تابعی باشد که داده ها را به سرور ارسال می کند، تابعی که داده ها را به سرور ارسال می‌کند نباید داده ها را اعتبار سنجی کند و اعتبار سنجی داده ها باید در تابعی جداگانه انجام شود.مثال برای SRPدو اصل خوب دیگر وجود دارد که باید از آنها پیروی کرد:بدنه تابع نباید بیش از 2 سطح تودرتو داشته باشدیک تابع باید حداکثر 3 آرگومان داشته باشد3. توابع مشابه را با هم گروه کنیدتوابع مرتبط باید با هم در یک کلاس گروه بندی شوند و به ما کمک کنند کد خود را به صورت بخش بندی نگه داریم.در اینجا متوجه می‌شویم که کلاس IOHelper فقط توابع را برای عملیات io (ورودی- خروجی) با هم گروه‌بندی می‌کند، بدون اینکه هیچ کاربردی از خود داشته باشد.4. تعداد کامنت ها را به حداقل برسانیداین مورد ممکن است برای برخی از مبتدیان غیر منطقی به نظر برسد، اما این یک اصل مهم در کد تمیز است. کدی که شما می نویسید باید خود توضیحی باشد، یعنی هرکسی که کد شما را مشاهده می کند نباید برای درک عملکرد آن به کامنت ها تکیه کند و کد باید خودش قادر به توضیح کارکرد خود باشد.تنها در موارد خاص است که شما مجبور به کامنت گزاری می‌‌شوید و در اکثر مواقع، کد شما بهترین کامنت شماست.5. قوانین قالب بندی کدکدها همیشه باید از مجموعه ای دقیق از قوانین قالب بندی پیروی کند. همچنین ایده خوبی است که از قالب‌بندی مانند black یا prettier برای خودکار کردن قالب‌بندی استفاده کنید.ساختار پروژه باید قبل از شروع پروژه تصمیم گیری شود و همه افرادی که روی آن کار می کنند باید از آن آگاه باشند و موافقت کنند که از آن پیروی کنند، زیرا ساختار پروژه وابسته به سلیقه کد نویس است و هرکس یک ساختار خاص را نسبت به ساختار دیگر دوست دارد.متغیرها و قرارداد نامگذاری تابع نیز باید از قبل مشخص شده باشد (isValid یا hasVality و غیره) و موارد خاص زبان باید در نظر گرفته شود (مثلاً: snake case در پایتون و camel case در JS/TS).در مورد نامگذاری متغییرها به روش های camel case  و snake case بخوانید.snake_case_variable = &amp;quotvalue&amp;quotcamelCaseVariable = &amp;quotvalue&amp;quot
CaseVariable = &amp;quotvalue&amp;quotنتیجههمانطور که قبلاً نیز ذکر شد، کد تمیز کوتاه ترین کد نیست، بلکه کدی است که درک آن بسیار ساده است. پیروی از این اصول به شما کمک می‌کند نه با بهبود مهارت‌های کدنویسی، بلکه با بهبود مهارت‌های نرم‌افزاری مورد نیاز برای کدنویسی، کدنویس بهتری شوید، زیرا به شما یاد می‌دهد چگونه کد خود را برای افراد غیر فنی توضیح دهید.منبع 5 Tips to Master the Art of Clean Code</description>
                <category>مبین آقاشاهی اردستانی</category>
                <author>مبین آقاشاهی اردستانی</author>
                <pubDate>Fri, 13 May 2022 15:15:55 +0430</pubDate>
            </item>
                    <item>
                <title>آموزش ساخت ربات تلگرام جهت مشاهده قیمت دلار + PHP</title>
                <link>https://virgool.io/@mobin.aghashahi/%D8%A2%D9%85%D9%88%D8%B2%D8%B4-%D8%B3%D8%A7%D8%AE%D8%AA-%D8%B1%D8%A8%D8%A7%D8%AA-%D8%AA%D9%84%DA%AF%D8%B1%D8%A7%D9%85-%D8%AC%D9%87%D8%AA-%D9%85%D8%B4%D8%A7%D9%87%D8%AF%D9%87-%D9%82%DB%8C%D9%85%D8%AA-%D8%AF%D9%84%D8%A7%D8%B1-php-hpgy1ncl8m4j</link>
                <description>مقدمه:شاید براتون جالب باشه که چجوری میشه ربات تلگرامی ساخت که ما بهش پیغام بدیم و اون ربات قیمت دلار رو به صورت آنلاین برامون برگردونه.ایده ای در دنیای کامپیوتر وجود داره که میگه: هر کار تکراری که در طول شبانه روز انجام میشه رو میتوان و باید به کد تبدیل کرد. حالا منظور چیه؟! منظور اینه که ما همواره برای مشاهده قیمت دلار مرورگر رو باز میکنیم، سرچ میکنیم &quot;قیمت دلار&quot; و بعد در اولین سایت نمایش داده شده قیمت دلار را مشاهده میکنیم. بله!! این یک کار تکراریه که میتوان اونو به کد تبدیلش کرد و کار رو ساده تر انجام بدیم، یعنی وارد تلگرام بشیم و به ربات ساخته شده پیغامی بفرستیم و ربات خودش بره قیمت رو لابه لای کد های HTML پیدا کنه و برامون ارسال کنه. پس بریم که ببینیم این کار چجوری صورت میگیره. برای ساخت ربات تلگرام به چه چیزهایی نیاز داریم؟1- شناخت زبان برنامه نویسی PHP2- دامنه (لازم نیست هزینه زیادی برای دامنه های com یا ... بدید و با دامنه های ir هم میتونید ربات رو به کار بندازید.)3- هاست خارج از کشور (برای خرید هاست از سایت پارس پک استفاده کنید چون به دلیل داشتن پلن های متفاوت برای هاست، میتونید هاست ارزون قیمت پیدا کنید و کارتون راه بیوفته. راستی، به دلیل فیلترینگ هاست شما باید خارج از کشور باشه که اونم پارس پک داره.)4- هاست شما باید ssl هم داشته باشه که اگه هاستتون رو از پارس پک تهیه کنید ssl رایگان در اختیارتون میزاره.5- و مشخصا یک اکانت تلگرام هم نیاز دارید.نکته مهم: بنده اسپانسر پارس پک نیستم و فقط به دلیل هزینه های پایینش به شما پیشنهاد میکنم و اگه هاست بهتری سراغ داشتید زیر همین پست با بنده به اشتراک بزارید.خب حالا که مواد اولیه رو گفتیم بریم سراغ کار اصلیمون...ابتدا وارد تگرام بشید و @botfather رو سرچ کنید.برروی گزینه newbot کلیک کنید تا ربات شما ساخته شود.1- بعد از انجام دستور newbot، تلگرام از شما نام ربات رو میخواد. که ما اینجا &quot;mobinabcdefgbot&quot; رو برای رباتمون انتخاب کردیم.2- در مرحله بعد تلگرام آیدی ربات شمارو میخواد که یک نام دلخواه است. ( البته بعد از نام ربات باید از کلمه bot استفاده شود.)3- بعد از انجام دادن این کارها، تلگرام به شما یک token میدهد که برای ارتباط سرور شما با ربات است. این توکن یک API بین سرور و ربات است. بعد از ساخت ربات، باید اون رو به وبسایت خودتون متصل کنید. برای انجام این کار، تلگرام یک دستوری داره به نام setwebhook. دستور رو به صورت زیر استفاده کنید.دستور رو به صورت بالا در مرورگر خود اجرا کنید.آدرس وارد شده از سه قسمت تشکیل شده است. قمست اول جزء ثابت است و باید همیشه به همین منوال باشد.جزء دوم همان token به دست آمده از مرحله قبل است. جزء سوم هم همان دامنه سایت شماست که قرار است ربات اطلاعات را به آن بفرستد و اطلاعات در آنجا پردازش شود و پاسخ برگردد. بعد از وارد کردن آدرس سایت و token خود، اگر کار را به درستی انجام داده باشید با پیغام &quot;Webhook was set&quot; مواجه می‌شوید.برای جلوگیری از اشتباه، آدرسی که باید از اون استفاده کنید رو در زیر براتون قرار میدم.https://api.telegram.org/botTOKEN/setwebhook?url=WEBSITE_ADDRESSنکته: به جای TOKEN و WEBSITE_ADDRESS در بالا، token و آدرس وبسایت خودتون رو وارد کنید.خب تا اینجای کار، بعد از ارسال هر پیغام به ربات ما، ربات اون پیغام رو به وبسایت ما ارسال میکند. پس لازمه بریم و در کد نویسی وبسایتمون پیغام رو از ربات دریافت کنیم و کاری رو که دوست داریم باهاش انجام بدیم.$botToken = &amp;quotyourToken Telegram&amp;quot
$webSite = &amp;quothttps://api.telegram.org/bot&amp;quot . $botToken;دو متغیر تعریف میکنیم به نام های $botToken و $webSite که در اولی باید token ربات رو وارد کنیم و در متغیر دوم هم که با token وارد شده در متغیر اول یک url ساخته می‌‌شود که همان url ربات ماست که باید ازش پیغام هارو دریافت کنیم.$update = file_get_contents&#40;&amp;quotphp://input&amp;quot&#41;;
$update = json_decode($update, TRUE);در خط اول دستور file_get_contents یک دستور برای دریافت صفحات وبسایت است. با این دستور شما میتوانید صفحات وبسایت هارو دریافت کنید. که ما در اینجا به ربات وصل میشیم و اطلاعات رو در قالب json دریافت میکنیم.در خط دوم فایل json دریافتی رو واکشی و قسمت update اون که مربوط به اطلاعات پیام و کاربر میشه رو جدا میکنیم.$chatId = $update[&amp;quotmessage&amp;quot][&amp;quotchat&amp;quot][&amp;quotid&amp;quot];
$message = $update[&amp;quotmessage&amp;quot][&amp;quottext&amp;quot];در متغیر $update به دست آمده در قسمت بالایی، تمام پارامترهایی که مربوط به پیغام دهنده است قرار دارد. پارامترهایی که در این برنامه نیاز است chatId و message است که به صورت بالا، آن هارا به دست میاوریم.$result = file_get_contents&#40;&amp;quothttps://www.tgju.org/%D9%82%DB%8C%D9%85%D8%AA-%D8%AF%D9%84%D8%A7%D8%B1&amp;quot&#41;;در قطعه کد بالایی ما به سایت www.tgju.org متصل می‌شویم که قیمت دلار را به صورت آنلاین نمایش می‌دهد. و با استفاده دستور file_get_contents که قبلا با آن آشنا شدیم، صفحه رو دریافت می‌کنیم.بعد از دریافت صفحه در متغیر $result فایل های HTML وبسایت www.tgju.org قرار می‌گیرند و ما باید برای برگرداندن قیمت دلار، آن را فیلتر کنیم و قسمت مورد استفاده خودمان که همان قیمت دلار است برگردانیم. برای این کار از سه تابع معروف PHP به نام های explode و preg_match و preg_replace استفاده می‌کنیم.تابع explode: برای نادیده گرفتن کارکتری مشخص در یک متن است.تابع preg_match: برای یافتن عبارتی در یک متن است.تابع preg_replace: برای یافتن یک عبارت و جایگزینی آن با عبارتی دیگر در یک متن است.$row = explode(&amp;quot\n&amp;quot, $result);

$near=false;
foreach ($row as $value) {
    if($near==true&amp;&amp;preg_match(&#039;/&lt;span class=&amp;quotinfo-value&amp;quot&gt;&lt;span class=&amp;quotinfo-price&amp;quot&gt;/&#039;,$value))
    {
        $data=preg_replace(&#039;/&lt;span class=&amp;quotinfo-value&amp;quot&gt;&lt;span class=&amp;quotinfo-price&amp;quot&gt;/&#039;,null,$value);
        $data=preg_replace(&#039;/&lt;\/span&gt; &lt;span class=&amp;quotinfo-change&amp;quot&gt;/&#039;,&amp;quot &amp;quot,$data);
        $data=preg_replace(&#039;/&lt;\/span&gt;&lt;\/span&gt;/&#039;,&amp;quot &amp;quot,$data);

        $data=&amp;quotقیمت دلار &amp;quot.$data.&amp;quot تومان&amp;quot

        sendMessage($chatId,$data);
    }
    else{
        $near=false;
    }

    if (preg_match(&#039;/&lt;strong&gt;دلار&lt;\/strong&gt;/&#039;,$value)) {
        $near=true;
    }
}با این چند خط، کدهای HTML اضافی را حذف خواهیم کرد و قیمت دلار که مد نظر ما هست رو جدا خواهیم کرد.کد رو میتونید داخل گیت هاب بنده مشاهده کنید.اگر جایی رو بد توضیح داده بودم بپرسید که صد در صد جواب خواهم داد.موفق و پیروز باشید 20 نمره</description>
                <category>مبین آقاشاهی اردستانی</category>
                <author>مبین آقاشاهی اردستانی</author>
                <pubDate>Fri, 06 May 2022 14:27:43 +0430</pubDate>
            </item>
                    <item>
                <title>آپلود پروژه لاراول بر روی هاست</title>
                <link>https://virgool.io/@mobin.aghashahi/%D8%A2%D9%BE%D9%84%D9%88%D8%AF-%D9%BE%D8%B1%D9%88%DA%98%D9%87-%D9%84%D8%A7%D8%B1%D8%A7%D9%88%D9%84-%D8%A8%D8%B1-%D8%B1%D9%88%DB%8C-%D9%87%D8%A7%D8%B3%D8%AA-vpuldfnwnyyu</link>
                <description>آپلود کردن پروژه لاراول بر روی هاست تفاوت چندانی با آپلود کردن یک پروژه معمولی که با PHP خام نوشتید نداره. و حتی خیلی هم ترس نداره.برای آپلود پروژهاتون بر روی هاست، مرسوم ترین روش استفاده از پروتکل FTP هست. اگه نمیدونید FTP چیه باید بگم که یک پروتکل ارتباطی قدیمی و ناامن ( بله ناامن از این جهت که فایل هارو بدون هیچ رمزگذاری ارسال میکنه) برای انتقال فایل هاست که بهتون اجازه میده خیلی راحت از راه دور به کامپیوتر یا سرورِ داخلِ شبکه متصل بشید و فایل هاتون رو انتقال بدید. برای اتصال به سرور از طریق FTP به آدرس، نام کاربری و پسورد FTP سرورتون نیاز دارید.نکته:برای به دست آوردن این سه مورد( آدرس، نام کاربری و پسورد) یا به پشتیبانی سرورتون پیام بدید و ازش درخواست کنید که راهنماییتون کنه و یا با کمی کنکاش در هر هاستی میتونید اونو پیدا کنید.بعد از به دست آوردن ملزمات اتصال به سرور شما میتونید از چند طریق به سرور متصل بشید.1: از طریق File Explorer ویندوز (بدترین روش اتصال)برای این کار در آدرس بار File Explorer عبارت ftp://ip adress را وارد کنید و کلید اینتر را بفشارید. (مانند تصویر زیر)و در پنجره باز شده نام کاربری و رمز عبور خود را وارد کنید تا وارد سرور شوید.2: از طریق نرم افزار جانبی (بهترین روش اتصال)این روش از آن جهت بهترین روش است که به شما اجازه میدهد در صورت قطعی موقت، اتصال به کل قطع نشود و شما مجبور نباشید یک فایل حجیم رو دوباره آپلود کنید.باری به هر جهت شما از نرم افزار جانبی استفاده کنید که به مشکلی بر نخورید و اعصاب جنابعالی مخدوش نشود.نرم افزاری که من برای این کار استفاده میکنم FileZilla هست که شما میتونید اونو دانلود و به راحتی نصب و استفاده کنید.بعد از دانلود و نصب نرم افزار با پنجره زیر مواجه می‌شوید.در قسمت های علامت زده شده تصویر به ترتیب آدرس هاست، نام کاربری و رمز عبور را وارد کنید تا به هاست متصل شوید.بعد اتصال به هاست نوبت میرسه به آپلود فایل ها برروی هاست. برای این کار فایل های پروژه رو به دو قسمت تقسیم میکنیم دایرکتوری public و مابقی پروژه.فایل های دایرکتوری public رو داخل دایرکتوری public_html آپلود کنید و مابقی پروژه را در دایرکتوری قبلی public_html در یک پوشه جدید به نامی دلخواه کپی کنید.وارد env. برروی هاست شوید و تنظیمات دیتابیس هاست خود را وارد کنید.DB_CONNECTION=mysql
DB_HOST=آدرس هاست
DB_PORT=پرت دیتابیس هاست
DB_DATABASE=نام دیتابیس هاست
DB_USERNAME=نام کاربری دیتابیس
DB_PASSWORD= پسوورداز دیتابیس خود در لوکال هاست پروژه بکاپ گرفته و بر روی هاست خود import کنید.حال وارد دایرکتوری public_html شوید و در فایل index.php مسیرهایی زیر را به صورت زیر تغییر دهید.file_exists($maintenance = __DIR__.&#039;/../storage/framework/maintenance.php&#039;)
تغییر به 
file_exists($maintenance = __DIR__.&#039;/../../storage/framework/maintenance.php&#039;)

----------------------------
require __DIR__.&#039;/../vendor/autoload.php&#039;;
تغییر به
require __DIR__.&#039;/../نام پوشه ای که پروژه را در آن کپی کردید/vendor/autoload.php&#039;;
----------------------------
$app = require_once __DIR__.&#039;/../bootstrap/app.php&#039;;
تغییر به
$app = require_once __DIR__.&#039;/../نام پوشه ای که پروژه را در آن کپی کردید/bootstrap/app.php&#039;;
نکته:اگر بعد از اجرای پروژه با مشکل مواجه شدید به احتمال زیاد در آدرس دهی ها به مشکل خورده اید و باید مطابق با دایرکتوری ای که پروژه را در آن کپی کردید، دایرکتوری های بالا را تغییر دهید.به عنوان مثال اگر پروژه را در پوشه قبل از public_html کپی کردید باید از کدهای بالا استفاده کنید.** هر /.. به معنی یکبار برگشت از پوشه public_html است **در پایان براتون بگم که به احتمال زیاد، تمامِ این کار هارو خواهید کرد ولی بازهم به مشکل میخورید و این موضوع از این جهته که سرورها و دایرکتوری هاشون باهم تفاوت دارن و حتی امکان داره در اتصال دیتابیس و بکاپ گرفتن و import کردنش اشتباه کرده باشید. باری به هر جهت کامپیوتر و دنیاش ممارست می‌طلبه ولی در آخر خواهید توانست، پس دست از کار نکشید و به سرچ ادامه بدید.اینو یادتون نره که برنامه نویس ها گداهای خوبی میشن، چون خیلی پیگیرن :)</description>
                <category>مبین آقاشاهی اردستانی</category>
                <author>مبین آقاشاهی اردستانی</author>
                <pubDate>Wed, 16 Feb 2022 20:18:51 +0330</pubDate>
            </item>
                    <item>
                <title>مسئله در &quot;کل&quot; پیچیده است، ولی در &quot;جزء&quot; شیرین</title>
                <link>https://virgool.io/laravel-community/%D9%85%D8%B3%D8%A6%D9%84%D9%87-%D8%AF%D8%B1-%DA%A9%D9%84-%D9%BE%DB%8C%DA%86%DB%8C%D8%AF%D9%87-%D8%A7%D8%B3%D8%AA-%D9%88%D9%84%DB%8C-%D8%AF%D8%B1-%D8%AC%D8%B2%D8%A1-%D8%B4%DB%8C%D8%B1%DB%8C%D9%86-ipsonractehr</link>
                <description>مقدمه:داستان از جایی شروع شد که به عنوان یک برنامه نویس بعد از زمستان های بسیار که یخ حوض شکسته و عمر خویش را صرف یادگیری کرده بودم تصمیمی جان فرسا گرفتم (البته جان فرسا برای من و در آن سطح). بله تصمیم چیزی نبود جز قبول یک پروژه فروشگاه اینترنتی... در این مقاله سعی بر نوشتن در مورد چاله ها، سراشیبی ها و قله های این مسیر است. باشد که مفید واقع شود... یادگیری کافی استدر حقیقت یادگیری در برنامه نویسی و هر آنچه به کامپیوتر مربوط می‌شه، هیچوقت متوقف نخواهد شد و شخصی که یادگیری در این حوزه را متوقف کنه، ناخواسته از این چرخه حذف خواهد شد و به گورستان کامپیوترها می‌پیوندد ولی از جایی به بعد یادگیری به تنهایی کافی نیست و باید داشته هات رو به کار ببندی!!بله ترس های زیادی در این مورد وجود داره و مقابله با این ترس ها کار راحتی نیست. ترس هایی که می‌تونه شب و روز انسان رو سیاه کنه. انسان رو به سمت بی خوابی های شبانه ببره. جویدن ناخنِ از سر استرس رو به جان آدمی بندازه. ترس هایی از این دست؛ &quot;نکنه دانشم به اندازه کافی نباشه!!&quot;، &quot;نکنه از پسش برنیام!! &quot;نکنه مشتری چیزی رو بخواد که من بلدش نباشم!!&quot;.هدف از گفتن این ترس ها اینه که خواننده بدونه انسان ها در ترس های خود تنها نیست و این ترس هایی مشترک بین تمام برنامه نویس هاست. ترس هایی که بعضا به جا هستن و هرکدوم راه حل خودشون رو دارن.&quot;کافی نبودن دانش&quot; ترسی بچگانه و بزرگترین ترس یک برنامه نویسه. تنها زمانی این ترس منطقیه که دوستان و بزرگواران اینترت رو ملی کنن و یا اینترنت بر اثر اتفاقی از بین بره... بله بله، ما برنامه نویس ها اینترنت رو داریم!! &quot;How TO ...&quot; جای اون سه نقطه‌ی انتهایی هرچیزی که میخوای رو بنویس تا اینترنت جوابش رو بهت بده!! پس ما حتی در طول تکمیل پروژه میتونیم چیزهای جدید یادبگیریم و این موضوعی مشترک بین تمام برنامه نویس هاست.موضوع دیگه ای که وجود داره اینه که هرشخصی مشتری ای در حد و اندازه های خودش پیدا میکنه!! یعنی شما به عنوان یک برنامه نویس تازه کار قرار نیست کارفرمایی از شرکت ناسا داشته باشد. کارفرمای شما بی شک در حد و اندازه های خود شما خواهد بود پس نگران چالش هایی که کارفرما شمارو باهاش مواجه می‌کنه نباشید چون کارفرمای شما در ابتدا اونقدرهاهم که فکر میکنید حرفه ای و پر توقع نیست. بزرگ ترین چالش بعد از قبول پروژهشاید بزرگترین چالش بعد از قبولی یک پروژه، نقطه شروع یک پروژه باشه. پروژه ای به این بزرگی، اونم تک نفره، از کجا شروعش کنم؟! آدم اگه بخواد یک سایت کامل رو کد نویسی کنه خیلی سخته ولی اگه بخواد یک فرم لاگین رو طراحی و بعد یک قسمت برای فروش محصولات طراحی کنه و داخل اون قسمتی برای نظرات بزاره و ...کار به مراتب ساده تر خواهد شد، پس پروژه رو جزء جزء ببینید و بعد دست به کد نویسی ببرید.برگ های این درخت نقاط خوبی برای شروع پروژه هستند.شما می‌تونید از طراحی قالب شروع کنید، که در این صورت باید قالب را به سه قسمت Header، Content و Footer تقسیم کنید و هر قسمت را به صورت مجزا کد نویسی کنید. یا حتی از طراحی دیتابیس خودتون شروعش کنید. نکته: برای طراحی دیتابیسِ خود باید توجه کنید که به اندازه کافی با کارفرما در مورد نیازهاش صحبت کرده باشید و یا به اصطلاح سنگ هایتان را واکنده باشید. زیرا اگر اشتباه متوجه خواسته های مشتری شده باشید و در اواسط پروژه بخواهید پایگاه داده خود را تغییر دهید، احتمالا در دردسر بزرگی افتاده اید. پس در این مرحله صبر و شکیبایی جزو بهترین و درست ترین کارهاست.نکته: اگه دیتابیس خود را محکم و جامع بسازید، اضاف کردن هر ویژگی ای برای وبسایتتون سهل تر از چیزیه که فکرشو میکنید. وبسایت هایی امثال دیجی کالا؛ ویژگی های جست و جو، مرتب سازی، مقایسه کالا و غیرشون را مدیون همین دیتابیس کامل خود هستند...نکته: از دیتابیس خود نمودار ER داشته باشید که بدونید حرف حسابتون چیه و قراره جدول ها و روابطتون چی باشه!! حتی این نمودار در تغییرات بعدی به شما کمک شایان، بهرام، پرهام و بهنازی خواهد کرد!!!حماقتی به نام &quot;PHP خام&quot;قانونی وجود داره که میگه: &quot; اگه دیدی کاری خیلی سخته ولی بقیه انجامش دادن، شک نکن داری راهشو اشتباه میری.&quot; شما برای باز کردن یک پیچ، ابزارهای مختلفی دارید. شما میتونید اون پیچ رو با چاقو باز کنید!! میتونید با بیچ گوشتی باز کنید و یا میتونید با دریل شارژی اونو باز کنید!! ساخت یک سایت هم به همین منواله. شما میتونید یک سایت رو با php خام کد نویسی کنید یا میتونید از یکی از فریم ورک های موجود استفاده کنید. پس اگه با وبسایتی مواجه شدید که داره فیل هوا میکنه ولی وبسایت شما لاگین هم به زور انجام میده، بدانید و آگاه باشید که وبسایت های بزرگ رو هیچگاه با php خام کد نویسی نمیکنن!! شاید اگه برنامه نویس کهنه کار و یا حتی برنامه نویس دم به کهنه کاری باشید تعجب کنید که در قرن 21، اولین پروژه وبسایتم رو با php خام ایجاد کردم!! php به تنهایی خیلی کودن است!! هیچ چیز نمیداند و برای جزء به جزء آن باید کد نویسی کنید. به عنوان مثال اگه بخواهید برای صفحه لاگین خود یک اعتبار سنجی داده بنویسد باید خودتان به برنامه بگویید که فلان کاراکتر رو نپذیرد، اندازه اش از فلان عدد بیشتر و یا کمتر نباشد، نوعش ایمیل باشد و ... که برای هر کدام از آن ها حداقل ساعت ها وقت نیاز است و در آخر مطمئن باشید که جایی از کار را اشتباه کرده اید!!! ولی در فریم ورکی مثل لاراول با چند خط کد و در کمتر از یک دقیقه میتوان تمام این کارها را به نحوه احسنت انجام داد.با این اوصاف یکبارهم که شده با php خام یک پروژه نسبتا بزرگ انجام بدید تا در صورت آشنایی با فریم ورک های موجود، بدانید که با چه نعمتی مواجه شدید.هک شدن مال همسایسبرای یک برنامه نویس تازه کار و یا برنامه نویسی که درحال اجرای اولین پروژش هست، زیادهم بد نیست اگه sql injection داشته باشه!! حقیقت اینه که تمام ما باید اشتباهاتی انجام بدیم، از اشتباهاتمون درس بگیریم و بهتر و بهتر بشیم.اولین وبسایت من sql injection داشت به صورتی که لازم به اجرای کوئری پیچیده ای برای هک شدن نداشت و فقط لازم بود یک یوزرنیم وارد کنید و بعد داخل پسوردش بنویسید OR &#x27;1&#x27;= &#x27;1&#x27;همین کافی بود که کل username و password های هش نشده رو جلوی شما بزاره!!من بعد از انجام این اشتباه بود که به دنبال راه حل گشتم و قبل از اون هیچ اطلاعی از امنیت وبسایت نداشتم.راه حل مقابله با این حملات، استفاده از کلاس های PDO در PHP بود. یعنی شما برای برقراری ارتباط با دیتابیستون به جای استفاده از دستورات قدیمی مثل mysqli_query باید از توابع کتابخانه PDO استفاده کنید.کد نویسی تمیزقرار نیست کد شما فقط و فقط کار کنه!!بلکه قراره کد شما، هم زمان که کار میکنه، تمیز و قابل انعطاف هم باشه!! کدها از نظر من به دو دسته تقسیم می‌شن. یکی شبیه به ساختمونی که هر تیکش رو با چسب بهم بچسبونید، چیزی شبیه به عکس زیر!!در اینجور مواقع به اصطلاح مشکلات رو وصله کاری کردن برای اجرای سریع کد در لحظه و ایجاد خطر در آینده!!! خطری که میگه: منو سریع کد نویسی کردی ولی از من توقع تغییر نداشته باش!!کتاب کد نویسی تمیز از عمو باب را در این مورد مطالعه فرماییدو یا کدی خواهید ساخت که تمیز و مرتب است و هر قسمت به درستی کار خودشونو انجام میدن.یک قانون وجود داره (البته داخل ذهن من) که میگه: کد تمیزی که در مدت 5 روز مینویسی، بهتر از کد وصله شده ای هست که در مدت 10 دقیقه می‌نوسی.کدها قرار نیست تا آخر عمرشون به همین منوال پشت ویترین باشن و شما از پشت ویترین به کدتون نگاه کنید!! کدها بالاخره روزی تغییر می‌کنند و شما مجبورید این موضوع رو بپذیرید. شما باید در طول زمان، ویژگی هایی به وبسایتتون اضاف کنید و یا ویژگی هایی رو از وبسایتتون حذف کنید و اگه کدتون مرتب و تمیز نباشه، عمرا قادر به انجام چنین کاری باشید!! چیزی که من با اون مواجه شدم. هر قسمت از کد شما مخصوص انجام کار خاصیه. قرار نیست Header شما هم زمان که سربرگ وبسایت شمارو نمایش میده، مسئول قسمتی از Footer شماهم باشه و این دو باید کاملا از هم دیگه مجزا باشن. اگه قرار باشه قسمتی از Header مربوط به قسمتی از Footer باشه، زمانی که لازم باشه Header رو تغییر بدید Footer وبسایت هم قلقلک میشه و باید Footer رو هم تغییر دهید و این به مراتب هزینه بر است. کد نویسی کثیف حتی میتونه باعث نابودی کامل پروژه بشه!! شما فرض کنید که قراره صفحه لاگین سایت خودتون رو تغییر بدید و برای تغییر قسمت لاگین مجبور به تغییر session ها باشید و برای تغییر session ها مجبور به تغییر ساختار دیتابیس خود باشید و به همین منوال در دوری باطل گیر خواهید افتاد که در این صورت باید با کد خود خداحفظی کنید!!کد خود را مانند بخش های مختلف یک کارخونه تصور کنید. به عنوان مثال اگر قرار باشه یک کارخونه تولید کیک با طعم پرتغال به جای تولید کیک با طعم پرتغال، دست به تولید کیک توت فرنگی بزنه؛ قرار نیست کارخونه تخریب شود و دوباره کارخونه ای مخصوص کیک توت فرنگی ساخته بشه بلکه قراره قسمتی که مربوط به طعم کیک هاست تغییری جزئی کنه. و یا اگر شیر آب خونه شما چکه کنه، قرار نیست برق کشی خونه رو بررسی کنید تا مشکل چکه کردن شیر آب رو پیدا کنید و مستقیما متوجه می‌شید که مشکل از شیر آبه.توصیه پایانی:اگه برنامه نویس باشید، در طول کارهاتون با افرادی مواجه می‌شید که مدام در حال تعریف از خود و شق القمرهای خود هستن. اگه تونستید چیزی از اون افراد یادبگیرید که هیچ!! ولی اگه بودن اون افراد تنها باعث تخریب اعتماد به نفس شما می‌شه، اونارو به راحتی نادیده بگیرید و زندگی و حرفه‌ی خودتون رو نجات بدید. این دسته از افراد، پر تکرار ترین انسان ها در این حرفه هستن!! دست از مقایسه خودتون با دیگران بکشید و بدونید شما در مسیر خودتونید و بقیه در مسیر خودشون. پیروز موفق باشیدجمع نمرات 20</description>
                <category>مبین آقاشاهی اردستانی</category>
                <author>مبین آقاشاهی اردستانی</author>
                <pubDate>Wed, 19 Jan 2022 23:33:44 +0330</pubDate>
            </item>
            </channel>
</rss>