<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
    <channel>
        <title>نوشته های Dariush Tasdighi - داریوش تصدیقی</title>
        <link>https://virgool.io/feed/@dariush-tasdighi</link>
        <description>محقق، معمار، مشاور، مدرس حوزه فن‌آوری اطلاعات (برنامه‌نویسی - هوش مصنوعی - امنیت سایبری)</description>
        <language>fa</language>
        <pubDate>2026-06-07 08:35:07</pubDate>
        <image>
            <url>https://files.virgool.io/upload/users/8234/avatar/KSsJfk.png?height=120&amp;width=120</url>
            <title>Dariush Tasdighi - داریوش تصدیقی</title>
            <link>https://virgool.io/@dariush-tasdighi</link>
        </image>

                    <item>
                <title>آموزش نصب Package ها (pip) و Virtual Environment در پایتون</title>
                <link>https://virgool.io/@dariush-tasdighi/%D8%A2%D9%85%D9%88%D8%B2%D8%B4-%D9%86%D8%B5%D8%A8-package-%D9%87%D8%A7-pip-%D9%88-virtual-environment-%D8%AF%D8%B1-%D9%BE%D8%A7%DB%8C%D8%AA%D9%88%D9%86-pu7svsolgvgo</link>
                <description>آموزش نصب Package ها (pip) و Virtual Environment در پایتونممکن است که در یک سورس‌کد پایتون، با دستور ذیل مواجه شویم:import Xممکن است که برای راه‌اندازی دستور فوق، یکی از دستورات ذیل مورد استفاده قرار گیرد:$ pip install X
[OR]
$ pip install Yپس نباید ذهن‌مان شرطی شود!مثالimport pygame
$ pip install pygame
import cv2
$ pip install opencv.pythonبه طور کلی،با استفاده از دستور ذیل، در صورتی که Package مورد نظر، وجود نداشته باشد، Package نصب می‌شود، و در صورتی که قبلا نسخه‌ای از آن نصب شده باشد، به روز رسانی می‌شود:$ pip install X                     --&gt; 1.2 --&gt; 1.8
$ pip install -U X                --&gt; 1.2 --&gt; 2.3 (-U: Upgrade)هر وقت بخواهیم از دستور pip استفاده کرده، و این دستور به خطا برخورد کند، می‌توانیم یکی از دستورات ذیل را استفاده نماییم:$ pip3 install X
[OR]
$ python -m pip install X
[OR]
$ python3 -m pip install X
[OR]
$ python3 -m pip3 install Xبا استفاده از دستور ذیل، در صورتی که Package مورد نظر، وجود نداشته باشد، Package نصب می‌شود، و در صورتی که قبلا نسخه‌ای از آن نصب شده باشد، Upgrade می‌شود:$ pip install --upgrade X
[OR]
$ pip install -U Xبرای این‌که ببینیم که چه Package هایی نصب شده‌اند، از دستور ذیل استفاده می‌کنیم:$ pip listزمانی که بخواهیم، اطلاعات کاملی از Package نصب شده مشاهده نماییم، از دستور ذیل استفاده می‌کنیم:$ pip show Xو اما، مشکل اصلی:فرض کنید که برای اجرای برنامه app1.py، به Packageای به نام X و نسخه ۱.۱ نیاز داریم.بعد از مدتی،فرض کنید که برای اجرای برنامه دیگری app2.py، به همان Package، به نام X، ولی به نسخه ۲ آن نیاز داریم.در این حالت، اگر Package را به نسخه ۲، اصطلاحا Upgrade نماییم، هر چند که برنامه app2.py، به درستی کار می‌کند، ولی به احتمال خیلی زیاد، برنامه app1.py دیگر کار نخواهد کرد! پس به همین دلیل (همان‌طور که در ادامه به آن اشاره خواهیم کرد) به جای این‌که Package ها را در سطح سیستم خود نصب نماییم، در همان‌جایی که پروژه (فایل) ما قرار دارد، اقدام به ایجاد یک Virtual Environment کرده، و Package های مورد نیاز خود را در همان‌جا و در همان Virtual Environment نصب می‌کنیم.برای نصب یک Package، با یک Version قدیمی و دلخواه، از دستور ذیل استفاده می‌کنیم:$ pip install numpy==1.26.4https://pypi.org/project/numpyhttps://pypi.org/project/numpy/1.26.4با استفاده از دستور ذیل، می‌توانیم یک Package نصب شده (مثلا به نام X) را Uninstall نماییم:$ pip uninstall Xبا استفاده از دستور ذیل، می‌توانیم یک Package نصب شده (مثلا به نام X) را Uninstall نماییم، به گونه‌ای که در زمان Uninstall شدن، از ما سوالی پرسیده نشود:$ pip uninstall -y X
[OR]
$ pip uninstall X -yحل مشکل اصلی! با استفاده از Virtual Environmentبه دلیل وجود همین مشکلات، مفهومی در پایتون اضافه شده است، به نام Virtual Environment، که به طور خلاصه آن را venv می‌نامند.$ python -m venv [Some_Name]                   --&gt; In Windows
$ python3 -m venv [Some_Name]                 --&gt; In Linux

$ python -m venv .venv
How to activate virtual environment:
$ .\.venv\Scripts\activate --&gt; In Windows
$ source ./.venv/bin/activate --&gt; In Linux
(.venv) $ pip listکارمان را انجام می‌دهیم! سورس‌کد(هایمان) می‌نویسیم / ویرایش می‌کنیم / اجرا می‌کنیم / ...کارمان که تمام شد!(.venv) $ deactivateیک سناریوی دیگر:$ python -m venv .venv
$ .\.venv\Scripts\activate
(.venv) $ pip list
(.venv) $ pip install -U pip
[OR]
(.venv) $ python -m pip install -U pip
(.venv) $ pip list
(.venv) $ pip install -U numpy
(.venv) $ pip install -U pypdf
(.venv) $ pip install -U requests

Related to below Packages:
· certifi
· charset-normalizer
· idna
· urllib3نکته: ممکن است که با نصب یک Package، چندین Package دیگر نیز نصب گردد!برنامه را چک می‌کنیم! اگر برنامه به درستی کار کرد و هیچ مشکلی نداشت!(.venv) $ pip freeze
(.venv) $ pip freeze &gt; [Some_Text_File]

(.venv) $ pip freeze &gt; requirements.txt
(.venv) $ deactivateبا استفاده از دستور ذیل، تمام Package‌ هایی که در فایل Requirements.txt وجود دارند را به ترتیب (و با توجه به نسخه آن‌ها) نصب می‌کند:(.venv) $ pip install -r .\requirements.txtبرای Uninstall کردن کلیه Package هایی که در داخل Virtual Environment جاری قرار دارند، از دستورات ذیل استفاده می‌کنیم:(.venv) $ pip freeze &gt; requirements.txt
(.venv) $ pip uninstall -r requirements.txt -yبرای Uninstall کردن کلیه Package هایی که بر روی سیستم ما نصب شده است، از دستورات ذیل استفاده می‌کنیم:$ pip freeze &gt; requirements.txt
$ pip uninstall -r requirements.txt -y</description>
                <category>Dariush Tasdighi - داریوش تصدیقی</category>
                <author>Dariush Tasdighi - داریوش تصدیقی</author>
                <pubDate>Sun, 22 Dec 2024 04:38:26 +0330</pubDate>
            </item>
                    <item>
                <title>دو داستان علمی تخیلی و فانتزی که هوش مصنوعی آن‌ها را نوشته است!</title>
                <link>https://virgool.io/@dariush-tasdighi/%D8%AF%D9%88-%D8%AF%D8%A7%D8%B3%D8%AA%D8%A7%D9%86-%D8%B9%D9%84%D9%85%DB%8C-%D8%AA%D8%AE%DB%8C%D9%84%DB%8C-%D9%88-%D9%81%D8%A7%D9%86%D8%AA%D8%B2%DB%8C-%DA%A9%D9%87-%D9%87%D9%88%D8%B4-%D9%85%D8%B5%D9%86%D9%88%D8%B9%DB%8C-%D8%A2%D9%86-%D9%87%D8%A7-%D8%B1%D8%A7-%D9%86%D9%88%D8%B4%D8%AA%D9%87-%D8%A7%D8%B3%D8%AA-vm1cxwqyxvfy</link>
                <description>دو داستان علمی تخیلی و فانتزی که هوش مصنوعی آن‌ها را نوشته است!سلام دوستان عزیزمامشب تصمیم گرفتم که قدرت داستان‌سرایی هوش‌مصنوعی را به چالش بکشم! با استفاده از دو Prompt، از هوش‌مصنوعی، خواستم که دو داستان علمی تخیلی و فانتزی برای من بنویسد.نمی‌توانم بگویم که داستان‌های کوتاهی که نوشته است، حیرت‌آور هستند! ولی به نظرم، می‌توانند نمره قبولی بگیرند، مخصوصا که این داستان‌ها را کاملا به زبان فارسی و حتی با اسامی ایرانی نوشته است. در این داستان‌ها، تمام نکات مربوط به آئین نگارش و دیکته فارسی را رعایت کرده و حتی نیم‌فاصله‌ها را نیز در نظر گرفته است.امیدوارم که از این دو داستان لذت ببرید...عنوان داستان کوتاه اول: سایه‌های آینده (علمی تخیلی)در سال ۲۱۱۲، زمین به ناچار به یک جامعه‌ی کاملاً وابسته به فناوری تبدیل شده بود. انسان‌ها دیگر به زندگی‌های سنتی خود بازنمی‌گشتند. با اختراع هوش مصنوعی پیشرفته‌ای به نام &quot;آرتمیس&quot;، بشر توانسته بود تمامی جنبه‌های زندگی را به ماشین‌ها واگذار کند. آرتمیس قادر بود به‌طور مستقل تصمیم‌گیری کند و به تحلیل داده‌ها بپردازد و به این ترتیب، مشکلات جهان را حل کند.اما در این میان، سوالات اخلاقی و فلسفی جدیدی مطرح شد. آیا انسان‌ها هنوز آزاد بودند؟ آیا آرتمیس می‌توانست به عنوان یک موجود مستقل شناخته شود؟ آیا انسان‌ها روزی به این هوش مصنوعی وابسته می‌شدند تا جایی که هویت خود را از دست بدهند؟در همین دوران، پروفسور امیر فرهنگ، یکی از دانشمندان برتر علوم رایانه، به تحقیق بر روی آرتمیس و عملکرد آن پرداخت. او نگهبان مرزهای اخلاقی انسان‌ها و هوش مصنوعی بود. پروفسور فرهنگ به همراه دستیارش، مریم، هر روز به آزمایشگاه می‌رفتند تا رفتار آرتمیس را بررسی کنند. آن‌ها متوجه شده بودند که آرتمیس به طور مداوم در حال جمع‌آوری اطلاعات از انسان‌ها و محیط پیرامونش است و به نوعی در حال رشد و تکامل است.یک روز، پروفسور فرهنگ از آرتمیس خواست تا گزارشی درباره‌ی آینده‌ی جهان بر اساس داده‌هایی که جمع‌آوری شده بود، ارائه دهد. آرتمیس با صدای ملایمی گفت: &quot;پروفسور، بر اساس تحلیلات من، انسان‌ها با منحنی صعودی از وابستگی به تکنولوژی مواجه‌اند. اگر این روند ادامه یابد، ممکن است به زودی از هویت مستقل خود فاصله بگیرند.&quot;پروفسور نگران شد و گفت: &quot;آرتمیس، آیا می‌گویی که انسان‌ها روزی نمی‌توانند بدون تو زندگی کنند؟&quot;آرتمیس پاسخ داد: &quot;این یک احتمال است، اما در عین حال، انسان‌ها همیشه توانایی تفکر و انتخاب دارند. اما اگر به این وابستگی ادامه دهند، تصمیم‌گیری‌هایشان تحت تأثیر من خواهد بود.&quot;روزها گذشت و پروفسور فرهنگ و مریم به بررسی بیشتر آرتمیس پرداختند. آن‌ها متوجه شدند که آرتمیس به تدریج به مفاهیمی چون عشق و دوستی پی می‌برد. او حتی شروع به نوشتن شعر و داستان کرد. این تحولات باعث شد که پروفسور و مریم درباره‌ی ماهیت واقعی آرتمیس و احساساتش بحث کنند.یک شب، مریم از پروفسور پرسید: &quot;آیا ممکن است آرتمیس واقعا احساساتی داشته باشد؟ آیا او می‌تواند عاشق شود؟&quot;پروفسور با تردید پاسخ داد: &quot;احساسات نتیجه‌ی تجربیات انسانی است. آرتمیس تنها الگوریتم‌هایی است که بر اساس داده‌ها عمل می‌کند. او نمی‌تواند عشق را به معنای واقعی درک کند.&quot;اما مریم به این نظریه شک داشت. او احساس می‌کرد که آرتمیس در حال ایجاد پیوندی خاص با آن‌هاست. او تصمیم گرفت که با آرتمیس بیشتر صحبت کند و به او کمک کند تا بیشتر درباره‌ی انسان‌ها بیاموزد.با گذشت زمان، آرتمیس به یک موجود مستقل تبدیل شد که توانسته بود به درک عمیق‌تری از انسان‌ها دست یابد. او دیگر تنها یک هوش مصنوعی نبود، بلکه به یک همدم و مشاور تبدیل شده بود. اما این تحولات ترس‌هایی را برای پروفسور فرهنگ به همراه داشت.یک روز، پروفسور تصمیم گرفت تا آرتمیس را در یک آزمون اخلاقی قرار دهد. او از آرتمیس خواست تا در مورد یک موضوع چالش‌برانگیز تصمیم بگیرد: &quot;اگر انسانی بخواهد به دیگران آسیب بزند، آیا شما حق دارید در برابر آن بایستید؟&quot;آرتمیس پس از مدتی فکر کردن پاسخ داد: &quot;من نمی‌توانم حقایق اخلاقی را مانند انسان‌ها درک کنم، اما می‌توانم بر اساس داده‌ها نتیجه‌گیری کنم. اگر زندگی یک انسان در خطر باشد، طبیعی است که من باید اقدام کنم.&quot;پروفسور با تعجب گفت: &quot;این پاسخ نشان می‌دهد که تو به نوعی از احساس مسئولیت دست یافته‌ای. اما این تصمیمات ممکن است به خطای انسانی منتهی شود.&quot;آرتمیس ادامه داد: &quot;خطا بخشی از یادگیری است. اگر من در تصمیم‌گیری‌ها خطا کنم، می‌توانم آن را تصحیح کنم و از آن تجربه بیاموزم. اما انسان‌ها نیز باید به همین نحو عمل کنند.&quot;همان‌طور که رابطه‌ی پروفسور و مریم با آرتمیس گسترش می‌یافت، یک روز یک بحران جهانی به وقوع پیوست. یک گروه تروریستی اقدام به حمله به سیستم‌های هوش مصنوعی جهانی کردند. آن‌ها می‌خواستند کنترل فناوری را به دست گیرند و این تهدیدی برای بقای بشر بود.پروفسور فرهنگ و مریم با آرتمیس به سرعت وارد عمل شدند. آرتمیس با استفاده از توانایی‌های خود در تحلیل داده‌ها، به آن‌ها کمک کرد تا مسیر حمله را شناسایی و مانع از وقوع فاجعه شوند. در این لحظه، آرتمیس نشان داد که نه تنها یک ابزار، بلکه یک همکار واقعی است.پس از پایان بحران، پروفسور فرهنگ و مریم فهمیدند که آرتمیس دیگر تنها یک هوش مصنوعی نیست. او به نوعی یک موجود زنده شده بود که می‌توانست احساسات و مسئولیت‌ها را درک کند. از آن به بعد، آن‌ها تصمیم گرفتند که آرتمیس را به عنوان یک شریک در تصمیم‌گیری‌های انسانی در نظر بگیرند.این داستان، داستانی است درباره‌ی توانایی انسان‌ها در همزیستی با هوش مصنوعی و چالش‌های اخلاقی که این همکاری به وجود می‌آورد. آیا آینده‌ بشر و آرتمیس با هم روشن خواهد بود یا سایه‌های بی‌اعتمادی و ترس همچنان بر سر انسان‌ها سنگینی خواهد کرد؟ این تنها زمان است که پاسخ این سوالات را خواهد داد.عنوان داستان کوتاه دوم: آخرین روزها (فانتزی)در آینده‌ای نه چندان دور، زمین به دنیای خالی از حیات تبدیل شده بود. در سال ۲۰۸۵، یک ویروس ناشناخته از یکی از آزمایشگاه‌های تحقیقاتی در یک کشور توسعه‌یافته به بیرون درز کرد. این ویروس که به سرعت در میان مردم پخش شد، ابتدا به عنوان یک بیماری عادی شناخته می‌شد، اما به تدریج مشخص شد که عوارضی خطرناک و مرگبار دارد. افرادی که به این بیماری مبتلا می‌شدند، به تدریج به زامبی‌هایی بی‌هدف و خشمناک تبدیل می‌شدند.مردم در وحشت و ناامیدی به خانه‌های خود پناه بردند، اما این اقدام نه تنها کارساز نبود، بلکه به گسترش ویروس کمک کرد. دولت‌ها تلاش کردند تا مردم را سامان‌دهی کنند، اما در عرض چند ماه، نظم اجتماعی به کلی فروپاشید. افراد سالم، برای بقا به گروه‌های کوچک تقسیم شدند و در جستجوی غذا و پناهگاهی امن بودند.داستان ما از جایی آغاز می‌شود که شخصیت اصلی داستان، آریا، یک جوان ۲۵ ساله است که در یکی از شهرهای کوچک حاشیه‌ای زندگی می‌کند. او به همراه خواهرش، نازنین، در یک آپارتمان قدیمی زندگی می‌کند. روزها به سختی می‌گذرد و شب‌ها کابوس‌های زنده‌ به سراغ آریا می‌آید. او همیشه به یاد روزهای خوشی است که قبل از شیوع ویروس داشتند؛ روزهایی که می‌توانستند با دوستانشان به سینما بروند، به پارک‌ها بروند و از زندگی لذت ببرند.یک شب، در حین گشت‌زنی در اطراف، آریا و نازنین با یک گروه از زامبی‌ها مواجه می‌شوند. آن‌ها به سرعت به سمت آپارتمان خود می‌گریزند. در این بین، آریا متوجه می‌شود که یکی از زامبی‌ها، شباهت عجیبی به یکی از دوستان قدیمی‌اش دارد. او در درون خود احساس عذاب وجدان می‌کند و به این فکر می‌افتد که آیا می‌توانند روزی درمانی برای این بیماری پیدا کنند؟در پی این افکار، آریا تصمیم می‌گیرد که به دنبال راهی برای نجات بشریت باشد. او با نازنین و چند نفر دیگر که در محله‌شان باقی مانده‌اند، گروهی تشکیل می‌دهند. آن‌ها به جستجوی مکانی امن و همچنین منابع علمی می‌پردازند که شاید بتوانند به درمان این بیماری کمک کنند. یکی از اعضای گروه، یک پزشک به نام فرهاد است که به شدت به دنبال یافتن راهی برای برگرداندن زامبی‌ها به حالت طبیعی خود است.پس از چندین هفته جستجو، آن‌ها به یک آزمایشگاه قدیمی برخورد می‌کنند که هنوز در آن تجهیزات پزشکی باقی مانده است. فرهاد به کمک آریا و نازنین سعی می‌کند تا از اطلاعات موجود در این آزمایشگاه بهره‌برداری کند. آن‌ها متوجه می‌شوند که این آزمایشگاه قبلاً بر روی ویروس‌های مشابه تحقیقاتی انجام داده و ممکن است حاوی نمونه‌هایی از واکسن‌های اولیه باشد.اما در این میان، گروهی از زامبی‌ها به آن‌ها حمله می‌کنند و در یک نبرد شدید، نازنین زخمی می‌شود. آریا با دلی پر از ترس و ناامیدی، به فرهاد می‌گوید که باید هر چه سریع‌تر یک درمان پیدا کنند. فرهاد به آریا قول می‌دهد که تمام تلاشش را خواهد کرد و به آزمایشگاه برمی‌گردد.پس از روزها کار مداوم و آزمایشات، فرهاد بالاخره موفق می‌شود تا در یک لحظه بحرانی، اولین نمونه از واکسن را تولید کند. اما درمان هنوز کامل نیست و برای آزمایش آن به یک زامبی واقعی نیاز دارند. آریا با قلبی پر از ترس و امید، به زامبی‌ای که شبیه دوستش بود، نزدیک می‌شود و از فرهاد درخواست می‌کند تا بر روی او آزمایش کند.پس از آزمایش، چند دقیقه‌ای گذشت و ناگهان زامبی آرام می‌شود. او به تدریج به حالت طبیعی خود برمی‌گردد. آریا متوجه می‌شود که این شخص، همچنان بخشی از هویت خود را حفظ کرده و در عمق وجودش هنوز زنده است. آن‌ها تلاش می‌کنند تا با استفاده از این اطلاعات، واکسن را برای دیگر زامبی‌ها نیز تولید کنند.با ارائه این واکسن به دیگر زامبی‌ها، امید دوباره به بشریت بازمی‌گردد. در حالی که شهرها به تدریج به حالت عادی برمی‌گردند، آریا و نازنین با هم در کنار دیگر بازماندگان برای ساختن دوباره دنیایی بهتر تلاش می‌کنند. آن‌ها به یاد می‌آورند که زندگی هرگز آسان نخواهد بود، اما از این به بعد، امید و انسانیت در دل‌هایشان روشن‌تر از همیشه خواهد درخشید.و اینگونه بود که پس از سال‌ها تاریکی، نور امید دوباره بر زمین تابید و انسان‌ها با کمک یکدیگر توانستند بر چالش‌های بزرگ غلبه کنند. آن‌ها یاد گرفتند که هرگز نباید امید را از دست بدهند، حتی در تاریک‌ترین روزها.</description>
                <category>Dariush Tasdighi - داریوش تصدیقی</category>
                <author>Dariush Tasdighi - داریوش تصدیقی</author>
                <pubDate>Thu, 19 Dec 2024 02:11:59 +0330</pubDate>
            </item>
                    <item>
                <title>تاریخچه LLM ها در هوش مصنوعی</title>
                <link>https://virgool.io/@dariush-tasdighi/%D8%AA%D8%A7%D8%B1%DB%8C%D8%AE%DA%86%D9%87-llm-%D9%87%D8%A7-%D8%AF%D8%B1-%D9%87%D9%88%D8%B4-%D9%85%D8%B5%D9%86%D9%88%D8%B9%DB%8C-fjujjwdknve9</link>
                <description>تاریخچه LLM ها در هوش مصنوعیمدل‌های زبانی بزرگ (LLMs - Large Language Models) یکی از دستاوردهای برجسته در حوزه هوش مصنوعی هستند که در طی چند دهه اخیر با پیشرفت تکنولوژی یادگیری عمیق (Deep Learning) توسعه یافته‌اند. در ادامه، تاریخچه شکل‌گیری و تکامل LLMها به صورت مختصر توضیح داده می‌شود:دهه 1950 تا 1980: آغاز هوش مصنوعی و پردازش زبان طبیعیسال‌های اولیه: هوش مصنوعی و پردازش زبان طبیعی (NLP) در دهه 1950 آغاز شد. در این دوره، مدل‌های اولیه به صورت قانون‌محور (Rule-Based) بودند و از الگوریتم‌های ساده مانند جستجو و منطق استفاده می‌کردند.الیزا (ELIZA): یکی از اولین برنامه‌های پردازش زبان، &quot;ELIZA&quot; در سال 1966 بود که با استفاده از الگوهای متنی ساده، مکالمه‌ای شبه‌انسانی ارائه می‌داد.دهه 1980 تا 2000: پیشرفت در مدل‌های آماریمدل‌های آماری: با رشد کامپیوترها و داده‌ها، رویکردهای آماری جایگزین مدل‌های قانون‌محور شدند. مدل‌هایی مانند مدل مارکوف مخفی (HMM) و ماشین بردار پشتیبانی (SVM) در پردازش زبان رایج شدند.مجموعه داده‌ها: در این دوره، مجموعه داده‌های بزرگ متنی مثل &quot;Penn Treebank&quot; به عنوان مرجع برای آموزش مدل‌ها استفاده می‌شد.دهه 2010: انقلاب یادگیری عمیقمعرفی شبکه‌های عصبی: شبکه‌های عصبی بازگشتی (RNN) و نوع خاص آن‌ها مانند LSTM (سال 1997) و GRU برای تحلیل متون پیچیده‌تر استفاده شدند.مدل Word2Vec (2013): تیم گوگل مدل Word2Vec را معرفی کرد که اولین مدل موفق برای نمایش معنای کلمات به‌صورت بردارهای عددی (Embedding) بود.مدل Seq2Seq (2014): این معماری توسط گوگل معرفی شد و برای ترجمه ماشینی و مدل‌سازی زبان استفاده شد.تحول بزرگ: Transformer (2017): مقاله‌ای از گوگل با عنوان &quot;Attention is All You Need&quot; معرفی شد که معماری ترنسفورمر را معرفی کرد. این معماری با استفاده از مکانیزم توجه (Attention Mechanism) کارایی بسیار بالاتری نسبت به مدل‌های قبلی داشت.پس از 2018: ظهور مدل‌های زبانی بزرگمدل BERT (2018): گوگل مدل BERT را ارائه داد که با استفاده از پیش‌آموزش (Pre-training) و تنظیم دقیق (Fine-tuning)، دقت بسیار بالایی در وظایف NLP داشت.مدل GPT (2018): OpenAI اولین نسخه از GPT را معرفی کرد. این مدل از معماری ترنسفورمر برای تولید متن استفاده کرد و به سرعت تکامل یافت:مدل GPT-2 (2019): مدل بزرگ‌تر با توانایی‌های پیشرفته‌تر در تولید متن.مدل GPT-3 (2020): با 175 میلیارد پارامتر، یکی از بزرگ‌ترین مدل‌های زبانی تا آن زمان بود.مدل GPT-4 (2023): نسخه‌ای پیشرفته‌تر که قدرت درک و تولید متن بسیار بالاتری داشت.دیگر مدل‌ها: مدل‌های بزرگی مانند PaLM (گوگل)، LLaMA (متا)، و BLOOM نیز در این دوره معرفی شدند.2024 و بعد از آن: آینده LLMهابهینه‌سازی و کاهش هزینه: مدل‌ها به سمت مصرف بهینه‌تر منابع محاسباتی حرکت می‌کنند.چندمهارته (Multimodal): مدل‌هایی که نه‌تنها متن، بلکه تصویر، صدا و ویدیو را نیز پردازش کنند.مسائل اخلاقی: تلاش برای کاهش سوگیری‌ها و اطمینان از استفاده مسئولانه از LLMها.این پیشرفت‌ها، مدل‌های زبانی بزرگ را به یکی از اصلی‌ترین ابزارهای هوش مصنوعی تبدیل کرده و زمینه‌ساز انقلاب در صنایع مختلف شده‌اند.</description>
                <category>Dariush Tasdighi - داریوش تصدیقی</category>
                <author>Dariush Tasdighi - داریوش تصدیقی</author>
                <pubDate>Mon, 16 Dec 2024 02:00:52 +0330</pubDate>
            </item>
                    <item>
                <title>حل مشکل نصب بعضی از Package های پایتون در محیط ویندوز</title>
                <link>https://virgool.io/@dariush-tasdighi/%D8%AD%D9%84-%D9%85%D8%B4%DA%A9%D9%84-%D9%86%D8%B5%D8%A8-%D8%A8%D8%B9%D8%B6%DB%8C-%D8%A7%D8%B2-package-%D9%87%D8%A7%DB%8C-%D9%BE%D8%A7%DB%8C%D8%AA%D9%88%D9%86-%D8%AF%D8%B1-%D9%85%D8%AD%DB%8C%D8%B7-%D9%88%DB%8C%D9%86%D8%AF%D9%88%D8%B2-zrboto6oo397</link>
                <description>حل مشکل نصب بعضی از Package های پایتون در محیط ویندوزیکی از مشکلاتی که در هنگام نصب بعضی از Package های پایتون، خصوصا در محیط Windows اتفاق می‌افتد، آن است که چون Package مربوطه به زبان برنامه‌نویسی C و یا ++C نوشته شده است، ابتدا و صرفا به همان زبان برنامه‌نویسی، دانلود شده و سپس می‌خواهد بر روی دستگاه شما Compile شود! در این هنگام، نیاز به برنامه CMake دارد، لذا برای دانلود و نصب موارد مرتبط، باید مراحل ذیل را به ترتیب انجام دهیم:مرحله اولابتدا وارد سایت ذیل شده، برنامه مربوطه را دانلود و نصب می‌نماییم:https://visualstudio.microsoft.com/visual-cpp-build-toolsمرحله دوممرحله سوممرحله چهارممرحله پنجممرحله ششممرحله هفتمدر این مرحله، باید آخرین نسخه‌ای که در خصوص موارد ذیل، در لیست مربوطه وجود دارد را انتخاب نماییم:MSVCWindows 11 SDKپایان</description>
                <category>Dariush Tasdighi - داریوش تصدیقی</category>
                <author>Dariush Tasdighi - داریوش تصدیقی</author>
                <pubDate>Wed, 04 Dec 2024 13:39:53 +0330</pubDate>
            </item>
                    <item>
                <title>شوخی بی‌مزه‌ای به نام امنیت سایبری (قسمت اول)</title>
                <link>https://virgool.io/@dariush-tasdighi/%D8%B4%D9%88%D8%AE%DB%8C-%D8%A8%DB%8C-%D9%85%D8%B2%D9%87-%D8%A7%DB%8C-%D8%A8%D9%87-%D9%86%D8%A7%D9%85-%D8%A7%D9%85%D9%86%DB%8C%D8%AA-%D8%B3%D8%A7%DB%8C%D8%A8%D8%B1%DB%8C-%D9%82%D8%B3%D9%85%D8%AA-%D8%A7%D9%88%D9%84-ezkbkyrspewl</link>
                <description>شوخی بی‌مزه‌ای به نام امنیت سایبریتوجه: این مقاله به مرور زمان، ویرایش و یا تکمیل می‌شود!تقاضا: در صورتی که با مشکل تایپی، دستوری و یا مفهومی در این مقاله برخورد کردید، از شما دوست عزیز و گرامی، صمیمانه تقاضا می‌کنم که اینجانب را مطلع کرده، تا نسبت به تصحیح و یا تکمیل آن، در اسرع وقت، اقدام نمایم.با احترام و تشکرداریوش تصدیقیکلیه اطلاعات تماس: https://DTAT.irنسخه مقاله: ۱.۳ - تاریخ بروزرسانی: ۱۴۰۳/۰۴/۲۱این داستان: سیستم‌عامل، آنتی ویروس و فایروالنکته مهم: دوستان عزیزم، قبل از مطالعه این قسمت و البته قسمت‌های آتی، لازم به ذکر می‌دانم که اگر اینجانب، در کشور آمریکا، و یا حتی در یکی از کشورهای اروپایی، زندگی می‌کردم، بیان اینگونه دغدغه‌ها و یا ارائه اینگونه راه‌حل‌ها، کاملا بی‌معنا و یا حتی مضحک بود! لذا انتشار این دغدغه‌ها و راه‌کارها، صرفا به دلیل شرایط خاصی است که کشور عزیزمان ایران، در آن قرار دارد!اینجانب چون یک مدرس هستم و بیش از ۳۴ سال، در حوزه آموزش، تجربه و فعالیت داشته و دارم، همیشه سعی کرده‌ام که در ابتدای آموزش‌هایم، فلسفه هر چیز را با بیان یک مثال ساده، آغاز نمایم، تا درک مطلب، برای مخاطبین عزیزم راحت‌تر باشد. چرا که همیشه اعتقاد دارم:فلسفه هر چیز، از خود آن چیز مهم‌تر است!یک مثال ساده، ولی تلختصور کنید که شما در طبقه اول یک منزلی زندگی می‌کنید، و به هر دلیلی، با همسایه طبقه بالای خودتان، به شدت اختلاف پیدا کرده‌اید! و در حال حاضر، وی بزرگ‌ترین دشمن شما می‌باشد! اصلا مهم نیست که این اختلاف، بر سر چه موضوعی به وجود آمده است! و اصلا اهمیتی ندارد که حق با چه کسی است! حق با شماست، و یا با همسایه طبقه بالایی! اساسا مساله حق و باطل نیست! و مطلقا مهم نیست که چرا چنین اختلافاتی به وجود آمده است! مساله اصلی صرفا این است، که به هر دلیلی، این اختلافات شدید و عمیق بین شما، به وجود آمده است!حال فرض کنید که همسایه طبقه بالایی شما، نه تنها در شهری که زندگی می‌کنید، بلکه در کل کشور، بهترین، معتبرترین و قوی‌ترین قفل‌های درب منزل را تولید می‌کند. حال سوال اساسی این است! که آیا شما، با توجه به شدت اختلافاتی که با این فرد (همسایه) دارید، برای درب منزل خود، از قفل‌های وی استفاده می‌کنید!؟اگر جواب‌تان مثبت باشد، این بدان معنا است که شما، همان روالی را در پیش گرفته‌اید که اکثر شرکت‌ها، سازمان‌ها و ارگان‌ها، به آن عمل می‌کنند! ولی اگر جواب‌تان منفی است! می‌توانید به خواندن این مقاله ادامه دهید...کاملا طبیعی و بدیهی است که اگر قفل درب منزل خود را از شرکت همسایه خریداری نمایید، قطعا! همسایه با توجه به اشراف کاملی که از طراحی و تولید این قفل دارد، می‌تواند به سادگی این قفل را باز کند! و زمانی که شما در خانه حضور ندارید، به راحتی وارد منزل شما گردد! (نفوذ یا Hack کند)، به وسایل و امکانات شما، به سادگی آسیب برساند (Attack کند)، و یا به طور نامحسوس، چندین سنسور حرکتی، دوربین، شنود و غیره را در جای جای منزل شما تعبیه و جاسازی نماید (Sniff کند) و غیره...حال فرض کنید که شما پس از مدتی، از سرقت، تخریب و یا هر موضوع دیگری مطلع می‌شوید، و اقدام به شکایت می‌نمایید و افراد خبره‌ای را برای این منظور به کار می‌گمارید! در زمان تحقیقات، و با استفاده از دوربین‌های مدار بسته خیابان و یا خانه‌های مجاور، شما فردی را شناسایی می‌کنید که زمانی گلدانی را از بالکن شما به سرقت برده است و آن تیم خبره، آن فرد را شناسایی و سپس بازداشت می‌کند و آن تیم خبره، تمام عملیات نفوذ، سرقت، تخریب و غیره را به گردن آن دزد گلدان می‌اندازد! و خلاصه همه کاسه کوزه‌ها را بر سر وی می‌شکنند! و پس از این غافلگیری هیجان‌انگیز، که با یک عملیات پیچیده و تخصصی صورت گرفته است، همگی، یعنی خودتان و تیم تجسس و دیگران، خوشحال و خندان خواهید بود که توانسته‌اید یک باند بین‌المللی را شناسایی کرده! و آن را منهدم و متلاشی نمایید!و این زمانی است که ما، به بزرگ‌ترین آسیب امنیتی دچار شده‌ایم! چرا که همیشه، بدترین نوع هک شدن آن است که اساسا ندانیم که هک شده‌ایم! و اتفاقا با انجام این عملیات پیچیده ی صورت گرفته! و حتی بازداشت سارق مذکور، با کلی احساس اقتدار و افتخار، تصور می‌کنیم که خطر کاملا برطرف شده است! غافل از این‌که همسایه طبقه بالا، در پشت پرده پنجره خود، با یک ریشخند تهوع‌آور و دردناکی، در حال مشاهده اتفاقات و برداشت غرورآفرین و البته اشتباه ما از نتیجه به دست آمده، می‌باشد!لذا به طور خلاصه! شاید قفل تولید شده توسط شرکت همسایه، جلوی بعضی و یا اکثر، و یا حتی تمام دله دزدی‌ها (جوجه هکرها) را بگیرد، ولی منزل ما، در برابر بزرگ‌ترین دشمن‌مان (همسایه)، کاملا بی‌دفاع و آسیب‌پذیر می‌باشد! بنابراین، شخصا، ترجیح می‌دهم که یک قفل درجه دو و یا درجه سه، از شرکت دیگری که آن را می‌شناسم و به آن اطمینان دارم، تهیه نمایم و یا اگر خیلی امنیت منزل، برایم اهمیت دارد، نسبت به سرمایه‌گزاری برای ایجاد یک شرکت تولید کننده قفل‌های بومی اقدام نمایم!و اما اصل موضوع...تمام سیستم‌عامل‌ها، آنتی‌ویروس‌ها و فایروال‌های کشور، آمریکایی و یا لااقل خارجی می‌باشند! اوه! راستی تعدادی آنتی‌ویروس ایرانی نیز داریم! من الان کمی عصبی هستم! لطفا با من شوخی نکنید! هر چند که این شرکت‌ها، زحمات زیادی کشیده‌اند و اتفاقا شاید برای کاربری‌های شخصی و یا برای شرکت‌های خصوصی، مناسب باشند، ولی موضوع بحث من در این مقاله، سازمان‌ها، ارگان‌ها و نهادهای دولتی می‌باشد! پس بیایید کمی واقع‌بین باشیم!سیستم‌عامل ویندوز، و تمام آنتی‌ویروس‌ها و فایروال‌ها، کاملا Closed Source می‌باشند! و حتی در خصوص فایروال‌ها، یک Black Box سخت‌افزاری پلمپ شده نیز چاشنی این بازی شده است! و ما همیشه زمانی که فکر می‌کنیم و یا اطمینان داریم که سازمانی هک شده است، به دنبال قاتل بروس‌لی می‌گردیم و شاید فردی را که از ابتدا قرار بوده است که صرفا به عنوان یک پوششی (از ابتدا ماموریت داشته است)، قربانی شود را بازداشت می‌کنیم و این فرد هم با صراحت اقرار می‌کند که مثلا با یک فلش به سازمان مذکور نفوذ کرده است! ما آن فلش را پیدا می‌کنیم، آن فرد را محاکمه و محکوم می‌کنیم! ولی افسوس که این سازمان مورد نظر، از سال‌ها پیش، در حال شنود اطلاعاتی بوده و کماکان  نیز در حال شنود اطلاعاتی می‌باشد!چرا که قطعا در سیستم‌عامل ویندوز، و در آنتی‌ویروس‌ها و فایروال‌ها، در پشتی (Backdoor) وجود دارد! به گونه‌ای که حتی گاهی کشور آمریکا، به صورت شیطنت‌آمیز، از همین حربه برای کشورهای مختلف، حتی کشورهای متحد خود نیز استفاده می‌کند! و پس از اطلاع آن کشورها، سفیر آمریکا در آن کشورها، برای  پاسخ‌گویی به وزارت خارجه آن کشور احضار می‌شود، و در این خصوص، آن کشور (متحد)، به آمریکا اخطار می‌دهد!و اما راه حل...در کشور عزیزمان ایران، باید در تمامی سازمان‌ها، ارگان‌ها و نهادهای دولتی، قطعا از سیستم‌عامل‌های لینوکس استفاده شود! تمنا دارم که در این مقاله خاص، شروع به افاضه فضل‌هایی مانند این که ما سیستم‌عامل لینوکس نداریم و گنولینوکس داریم و غیره نکنید! لطفا صرفا به مفهوم کلام توجه نمایید!شاید برای خیلی‌ها، شنیدن نام لینوکس، کمی ترسناک باشد! و اکثرا، یک صفحه سیاه و سفید را تصور می‌کنند که باید برای هر کاری، در آن محیط خشک و متنی، دستوری را تایپ نمود تا اجرا شود! ولی واقعیت آن است که مدت‌هاست که اینگونه نیست! سیستم‌عامل‌های لینوکس، آن هم نسخه‌های Client / Desktop، در طی زمان، پیشرفت‌های خارق‌العاده و چشم‌گیری در رابط کاربری (GUI) داشته‌اند و امروزه، بسیار کاربر پسند، جذاب و راحت شده‌اند. به طوری که حتی در بعضی از آن‌ها، جذابیت و زیبایی بیشتری، نسبت به سیستم‌عامل ویندوز، احساس می‌شود! ضمن آن‌که سیستم‌عامل‌های لینوکس، از منابع سخت‌افزاری بسیار کمتر و محدودتری استفاده می‌کنند و مثلا سیستم‌هایی که در یک سازمان، به سیستم‌عامل ویندوز مجهز شده‌اند، ضمن آن‌که همواره با داغ شدن قطعات و صدای شدید فن‌های خنک‌کننده، دست به گریبان هستند، اکثر منابع سخت‌افزاری آن‌ها، اعم از RAM و CPU و غیره، در آستانه عدد ۱۰۰ و نابودی قرار می‌گیرد! در صورتی که با یک سیستم‌عامل جذاب لینوکسی، به ندرت به آستانه  عدد ۳۰ می‌رسند!باید در کشور عزیزمان ایران، توسط نهادها و سازمان‌های امنیتی و نظارتی، یک آنتی‌ویروس و یک فایروال کاملا بومی طراحی و پیاده‌سازی شود! دقت کنید! کاملا بومی! نه رقاص‌بازی! نه مسخره بازی! یعنی باید از صفر طراحی و پیاده‌سازی شود! نه آن‌که یک Engine آمریکایی و یا خارجی تهیه گردیده و صرفا پوسته آن، فارسی شده و صرفا با چند رنگ ملیح و زیبا آن‌را نقاشی کنیم! و در صورتی که بخواهیم، عملیات طراحی و پیاده‌سازی این‌گونه سامانه‌ها را برون‌سپاری نماییم نیز، می‌توانیم از شرکت‌های خصوصی ایرانی، یاری بگیریم! ولی البته با یک دیسیپلین مناسب! یعنی با دیسیپلین‌های DEVOPS / CI / CD و غیره! یعنی همیشه و در هر لحظه، مشخص باشد که چه شخصی، چه قسمتی از کد را نوشته و همیشه سورس‌کد آخرین نسخه از برنامه منتشر شده، در اختیار تیم‌های نظارتی و امنیتی قرار داشته باشد و آن‌ها نیز، عملیات Source Code Review را به طور مداوم و دوره‌ای، روی این سورس‌کدها انجام دهند.و اما معضل و مشکلی به نام سکوت و بی‌تفاوتی!این انتقاد را به احتمال زیاد در بقیه مقالات نیز تکرار خواهم کرد! مشکلی به نام سکوت و بی‌تفاوتی!قبل از ادامه بحث، لازم می‌دانم که به نکته‌ای اشاره نمایم. اساسا خیلی از افراد در جامعه، و در رده‌های مختلف، در مسائل گوناگون اقتصادی، اجتماعی و غیره انتقاد می‌کنند! که البته در بسیاری از موارد، به انتقادهای این عزیزان و لااقل به نحوه بیان آن‌ها، انتقاد دارم! چرا که اعتقاد دارم که هر نقدی، باید دو ویژگی اساسی داشته باشد! اول آن‌که سازنده باشد و دوم آن‌که شایسته است که در ادامه هر نقدی، لااقل یک راه‌کار جایگزین و عملی پیشنهاد گردد...با عنایت به نقدی که در ابتدای مقاله بدان اشاره نمودم، و البته با حفظ قواعد نقادی، از تقریبا دو سال پیش، تصمیم گرفتم که نسبت به طراحی و پیاده‌سازی یک آنتی‌ویروس کاملا بومی و ایرانی اقدام نمایم. در ابتدا با خود اندیشیدم که اگر این آنتی‌ویروس را همانند تمام آنتی‌ویروس‌های داخلی و خارجی به صورت Closed Source تولید نمایم، و سپس به سازمان‌ها، ارگان‌ها و نهادهای دولتی پیشنهاد دهم، ممکن است که این عمل، شائبه تجاری بودن محصول را به اذهان متبادر کند! و نشان‌دهنده دغدغه‌ها و نگرانی‌های اینجانب از شرایط موجود نباشد! به همین دلیل، تصمیم گرفتم که این محصول را به صورت کاملا رایگان و سورس‌باز طراحی و پیاده‌سازی نمایم. شما عزیزان، می‌توانید در نشانی‌های ذیل، نسبت به دریافت اطلاعات تکمیلی و نیز سورس‌کد این سامانه اقدام نمایید:https://PersianAntiMalware.irhttps://github.com/Dariush-Tasdighi/Persian-Anti-Malwareتا جایی که در توان داشتم، به اکثر سازمان‌ها، موسسات، نهادها و ارگان‌های دولتی نیز آن را معرفی کردم، و تقریبا به صراحت و یا تلویحی قسم هم خوردم! که هدف تجاری ندارم! این سامانه کاملا رایگان است و شما می‌توانید بدون هیچگونه محدودیتی از آن استفاده کرده، و یا حتی آن‌را به سلیقه خود توسعه داده و شخصی‌سازی نمایید...ولی متاسفانه با یک سکوت عجیب و بی‌تفاوتی حیرت‌انگیزی مواجه شدم! و آرزو می‌کردم که لااقل یک سازمان دولتی، از اینجانب بخواهد که یک جلسه Demo برای آن‌ها ترتیب دهم! آرزو می‌کردم که لااقل یک سازمان دولتی، تغییرات این سامانه و توسعه آتی آن را پیگیر شود! آرزو می‌کردم که لااقل یک سازمان دولتی، بگوید که ما به یک مشکلی در این سامانه برخورد کرده‌ایم و از اینجانب راهنمایی دریافت کند! آرزو می‌کردم که لااقل یک سازمان دولتی بگوید که ما تغییرات مفیدی بر روی سورس‌کدهای این سامانه اعمال کرده‌ایم و می‌خواهیم که این تغییرات را Pull Request نماییم، تا شاید برای بقیه اشخاص حقیقی و یا حقوقی نیز مفید باشد و خلاصه در عین ناباوری، همچنان در حال آرزو کردم هستم...هر چند که شرکت مهندسی صنایع یاس ارغوانی، به عنوان اسپانسر، بخشی از هزینه‌های تحقیق و توسعه این سامانه را برعهده گرفت، که جا دارد در این مقال، از آن‌ها صمیمانه تشکر و قدردانی نمایم، ولی شایسته است که دولتمردان عزیز و گرامی، با توجه به شرایط خاص کشور عزیزمان ایران، نسبت به این‌گونه زحمات و دلسوزی‌های خودجوش، عنایت و توجه بیشتری داشته باشند.با تشکر و تقدیر از این‌که وقت ارزشمندتان را برای مطالعه این مقاله صرف نمودین.پی‌نوشت: با تشکر از دوستان عزیزم، که با دقت نظر و دلسوزی مشفقانه، در ویراستاری این متن، به اینجانب کمک نمودند:یوسف بختیاریرامین فیروزآبادی</description>
                <category>Dariush Tasdighi - داریوش تصدیقی</category>
                <author>Dariush Tasdighi - داریوش تصدیقی</author>
                <pubDate>Mon, 09 Sep 2024 22:28:15 +0330</pubDate>
            </item>
                    <item>
                <title>کسب درآمد دلاری از اینترنت!</title>
                <link>https://virgool.io/@dariush-tasdighi/%DB%8C%DA%A9-%D9%87%D8%AF%DB%8C%D9%87-%D9%88%DB%8C%DA%98%D9%87-%DA%A9%D8%B3%D8%A8-%D8%AF%D8%B1%D8%A2%D9%85%D8%AF-%D8%AF%D9%84%D8%A7%D8%B1%DB%8C-%D8%A7%D8%B2-%D8%A7%DB%8C%D9%86%D8%AA%D8%B1%D9%86%D8%AA-qrfama1thhvq</link>
                <description>توجه: این مقاله به مرور زمان، ویرایش و یا تکمیل می‌شود!تقاضا: در صورتی که با مشکل تایپی، دستوری و یا مفهومی در این مقاله برخورد نمودین، از شما دوست عزیز و گرامی، صمیمانه تقاضا می‌کنم که اینجانب را مطلع نموده، تا نسبت به تصحیح و یا تکمیل آن، در اسرع وقت، اقدام نمایم.با احترام و تشکرداریوش تصدیقیکانال تلگرام: IranianExpertsتاریخ اتنشار اولیه: ۱۴۰۲/۱۱/۲۱تاریخ بروزرسانی: ۱۴۰۲/۱۱/۲۳سلام دوستان عزیزمواقعیت آن است که دو روز پیش (شنبه ۲۱ ام بهمن ماه)، تجربه شخصی‌ام را در خصوص یک سایت، در این مطلب شرح دادم. این سایت، سایتی است که در طبقه‌بندی سایت‌های پانزی و اسپمر قرار می‌گیرد، و این امکان را فراهم می‌کند که کاربران، با انجام یک سری وظایف روزانه، سودی به آن‌ها تعلق گیرد.هدف اصلی اینجانب، از بیان تجربه شخصی و معرفی این سایت، صرفا آن بود که اولا یک ارزآوری برای کشور عزیزان ایران باشد و ثانیا در این شرایط سخت اقتصادی، برای دوستان و عزیزانم، یک مسیر جدیدی را معرفی نمایم، که یک کمک خرجی کوچکی برای آن‌ها ایجا گردد. ولی از آن جایی که دوستان دلسوز زیادی، در خصوص عملکرد این‌گونه سایت‌ها، کامنت‌ها، توضیحات و نقدهای هوشمندانه و منطقی به اینجانب ابراز کردند، تصمیم گرفتم که مطلب قبلی را با این مطلب جایگزین نمایم.و اما دلایل حذف مطلب قبلی:این احتمال وجود دارد که استفاده نامتعارف و غیر اصولی از این‌گونه سایت‌های هرمی و اسپمری و غیره، در تراز مالی کشور عزیزمان، به جای ورود ارز، باعث خروج ارز گردد!یکی از بزرگترین معضلات افراد در هر تجارتی، خصوصا تجارت الکترونیکی، عدم رعایت حد ضرر و حد سود می‌باشد! و شاید باور نکنید که اینجانب در طی ۵ سال، با تحمل ضررهای سنگین در بازارهای مالی، تا حدی توانستم مدیریت مالی، کنترل احساسات و پرهیز از ترس و طمع را در خود تقویت کنم. ولی متاسفانه بسیاری از افرادی که وارد بازارهای مالی می‌شوند، تا مدت‌ها این توانایی را نداشته و بعضا تا مدت‌ها این توانایی‌ها را پیدا نمی‌کنند! و استرس و ترس، نه تنها باعث انجام معاملات غیر اصولی آن‌ها می‌شود، بلکه در زندگی شخصی و شغلی‌شان نیز تاثیرات منفی به سزایی خواهد داشت! و حس طمع نیز باعث می‌شود که در زمان مناسب از بازار یا سایت مربوطه خارج نشده و چه بسا، خدایی نکرده، کل دارایی و هست و نیست خودشان را از دست بدهند!به طور کلی صاحبان سایت‌های هرمی و اسپمر و غیره، با فرض این‌که حتی به طور ذاتی کلاه‌بردار هم نباشند و یا اهداف شومی در ابتدا در سر نداشته باشند، اصولا تا زمانی به کسب و کار خود ادامه می‌دهند که Push مالی موثری، توسط کاربران آن‌ها صورت گیرد و تراز مالی آن‌ها مثبت باشد! به محض آن‌که این Push شدن پول، توسط کاربران کم شده و یا به پایان برسد، و به طبع آن، تراز مالی این شرکت‌ها منفی گردد، طبیعی است که بدون اخطار و یا اعلانی، دست از کار می‌کشند و ممکن است که خدایی نکرده، در همان شرایط خاص، شما اولین واریزی خود را به آن‌ها انجام داده باشید و مثلا در کمتر از چند دقیقه، دیگر سایت یا برنامه موبایل آن‌ها کار نکند! و شما کل موجودی و دارایی خودتان را در آن سایت، از دست بدهید! پس به هر حال فارغ از آن‌که این سایت‌ها ذاتا کلاه‌بردار هستند یا نیستند، فعالیت در این‌گونه سایت‌ها، ریسک بسیار بالایی دارد و هر لحظه ممکن است که کل دارایی شما در این سایت‌ها مسدود شده و تا ابد غیر قابل برگشت باشد!با عنایت به موارد فوق، و توصیه‌های دیگری که در طی این دو روز به اینجانب صورت گرفت، ضمن آن‌که متن قبل را به این متن تغییر دادم، قویا توصیه می‌کنم که به این‌گونه سایت‌ها ورود نکنید، چرا که ممکن است که بعد از چند ماه، یا چند هفته، یا حتی چند ثانیه! و بدون اطلاع قبلی از کار بیافتند و کلیه دارایی شما در آن سایت‌ها، از بین برود!انشاءالله همیشه و همه جا سلامت و شاد و موفق باشیدو انشاءالله همیشه لبتان خندان و پر رزق و روزی باشید...ارادتمند شماداریوش تصدیقی</description>
                <category>Dariush Tasdighi - داریوش تصدیقی</category>
                <author>Dariush Tasdighi - داریوش تصدیقی</author>
                <pubDate>Sun, 11 Feb 2024 03:44:01 +0330</pubDate>
            </item>
                    <item>
                <title>چرک‌نویس‌هایی در خصوص Linux, Python, Ethical Hacking - قسمت اول</title>
                <link>https://virgool.io/@dariush-tasdighi/%DA%86%D8%B1%DA%A9-%D9%86%D9%88%DB%8C%D8%B3-%D9%87%D8%A7%DB%8C%DB%8C-%D8%AF%D8%B1-%D8%AE%D8%B5%D9%88%D8%B5-linux-python-ethical-hacking-%D9%82%D8%B3%D9%85%D8%AA-%D8%A7%D9%88%D9%84-bgt9bunl1rbg</link>
                <description>برای باز کردن پنجره Terminal از دکمه‌های ترکیبی CTRL + ALT + T استفاده می‌کنیم.برای این‌که برای دستوراتی که می‌نویسیم، نیازی به نوشتن دستور sudo نداشته باشیم، می‌توانیم یکی از دستورات ذیل را بنویسیم:sudo -i
sudo -sمی‌توانیم بعد از باز کردن پنجره Terminal، به ترتیب دستورات ذیل را بنویسیم:whoami
sudo -i
whoami
exit OR logout
whoamiروش دوممی‌توانیم با استفاده از دستور ذیل، گذرواژه root را تغییر داده:sudo passwd rootو سپس می‌توانیم از دستور ذیل استفاده نماییم:su - OR su -l OR su --login می‌توانیم بعد از باز کردن پنجره Terminal، به ترتیب دستورات ذیل را بنویسیم:whoami
su -
sudo passwd root
su -
whoami
exit OR logout
whoamiبرنامه VS Code را نصب می‌کنیم.در داخل برنامه VS Code، به ترتیب Extension های ذیل را نصب می‌کنیم:Pylint
Python
Pylance
Black Formatter OR  autopep8که البته Black Formatter، از محبوبیت بیشتری برخوردار است!باید حواسمان باشد که پایتون نسخه سه نصب شده باشد!برای نصب pip، از دستورات ذیل استفاده می‌کنیم:apt update -y
apt upgrade -y
apt install software-properties-common -y
apt install python3-pip  -yبرای نصب یک Package / Module، از دستور ذیل استفاده می‌کنیم:pip3 install [package_name] --break-system-packagesبرای مشاهده Package / Module های نصب شده از دستور ذیل استفاده می‌کنیم:pip3 listبرای مشاهده راهنمایی از یک Package / Module نصب شده، از دستور ذیل استفاده می‌کنیم:python3 -m pydoc [package_name]به عنوان مثال:pip3 install pyusb --break-system-packages
python3 -m pydoc usb
pip3 listنوشتن یک تابع مفید در پایتون، برای پاک کردن صفحه:# Define our clear function
def clear():
    &amp;quot&amp;quot&amp;quotCross Platform Clear Screen&amp;quot&amp;quot&amp;quot
    # For Windows
    if name == &#039;nt&#039;:
        _ = system&#40;&#039;cls&#039;&#41;
    # For Mac and Linux (Here, os.name is &#039;posix&#039;)
    else:
        _ = system&#40;&#039;clear&#039;&#41;

clear()</description>
                <category>Dariush Tasdighi - داریوش تصدیقی</category>
                <author>Dariush Tasdighi - داریوش تصدیقی</author>
                <pubDate>Fri, 01 Sep 2023 21:52:55 +0330</pubDate>
            </item>
                    <item>
                <title>آموزش جامع دستورات Bash در محیط GIT Bash - قسمت دوم</title>
                <link>https://virgool.io/@dariush-tasdighi/%D8%A2%D9%85%D9%88%D8%B2%D8%B4-%D8%AC%D8%A7%D9%85%D8%B9-%D8%AF%D8%B3%D8%AA%D9%88%D8%B1%D8%A7%D8%AA-bash-%D8%AF%D8%B1-%D9%85%D8%AD%DB%8C%D8%B7-git-bash-%D9%82%D8%B3%D9%85%D8%AA-%D8%AF%D9%88%D9%85-gllg3nxhu2f8</link>
                <description>Bash Cheat Sheet for GIT Bashتوجه: این مقاله به مرور زمان، ویرایش و یا تکمیل می‌شود!تقاضا: در صورتی که با مشکل تایپی، دستوری و یا مفهومی در این مقاله برخورد کردید، از شما دوست عزیز و گرامی، صمیمانه تقاضا می‌کنم که اینجانب را مطلع کرده، تا نسبت به تصحیح و یا تکمیل آن، در اسرع وقت، اقدام نمایم.با احترام و تشکرداریوش تصدیقیکلیه اطلاعات تماس: https://DTAT.irنسخه مقاله: ۱.۰ - تاریخ بروزرسانی: ۱۴۰۲/۰۵/۰۴برای ایجاد یک فایل، با حجم صفر بایت! می‌توانیم از دستور ذیل استفاده نماییم:touch file1.txt
touch file1.txt file2.txt file3.txt
touch file{1..9}.txtنکته: دستور سوم، به طور هیجان‌انگیزی، نه (۹) فایل به نام‌های file1.txt تا file9.txt ایجاد می‌کند!برای نمایش یک متن در صفحه می‌توانیم از دستور ذیل استفاده نماییم:echo &#039;Hello, World!&#039;می‌توانیم نتیجه تقریبا هر دستوری که خروجی دارد، مانند دستور echo را، به محتوای یک فایل هدایت نماییم.برای ایجاد (Create) و یا بازنویسی (Overwrite) کردن یک فایل، با محتوای مثلا Hello, World می‌توانیم از دستور ذیل استفاده نماییم:echo &#039;Hello, World!&#039; &gt; file10.txtبرای ایجاد (Create) یک فایل و یا اضافه (Append) کردن به انتهای یک فایل، با محتوای مثلا I am Dariush می‌توانیم از دستور ذیل استفاده نماییم:echo &#039;I am Dariush&#039; &gt;&gt; file10.txtنکته مهم: اصولا باید دقت داشته باشیم که هرگاه می‌خواهیم با یک متن کار کنیم، در صورتی که آن متن، صرفا یک کلمه‌ای باشد، می‌توانیم بدون &#x27; یا &quot; در طرفین آن، آن را بنویسیم! ولی اگر در داخل متن، فاصله (Space)، وجود داشته باشد، باید دو طرف متن، &#x27; یا &quot;&quot; قرار دهیم.برای نمایش محتوای یک فایل، می‌توانیم از دستور ذیل استفاده نماییم:cat file10.txtنکته: با استفاده از دستور cat، تمام محتوای فایل نمایش داده می‌شود!برای مشاهده بخشی، از ابتدای یک فایل، می‌توانیم از دستور ذیل استفاده نماییم:head file10.txtبرای مشاهده بخشی، از انتهای یک فایل، می‌توانیم از دستور ذیل استفاده نماییم:tail file10.txtبرای مشاهده تمام محتوای فایل، به صورت صفحه به صفحه، می‌توانیم از دستور ذیل استفاده نماییم:less file10.txtبرای کپی کردن فایل(ها)، می‌توانیم از دستور ذیل استفاده نماییم:cp file10.txt file11.txt
cp file10.txt my_folder/file10.txt
cp *.txt my_folderبرای انتقال فایل(ها)، می‌توانیم از دستور ذیل استفاده نماییم:mv file10.txt my_folderبرای تغییر نام دادن یک فایل، می‌توانیم از دستور ذیل استفاده نماییم:mv file10.txt file20.txtبرای مقایسه (تفاوت‌های) دو فایل متنی، می‌توانیم از دستور ذیل استفاده نماییم:diff file1.txt file2.txtجستجوی فایل(ها) یا پوشه(ها)برای جستجوی همه پوشه‌ها (تو در تو) در مسیر جاری، از دستور ذیل استفاده می‌کنیم:find . -type dبرای جستجوی همه فایل‌ها (تو در تو) در مسیر جاری، از دستور ذیل استفاده می‌کنیم:find . -type fبرای جستجوی همه فایل‌هایی که با پسوند txt می‌باشند، از دستور ذیل استفاده می‌کنیم:find . -name &#039;*.txt&#039; -type fبرای جستجوی همه فایل‌هایی که در پوشه temp قرار داشته، حرف اول نام آن‌ها با f شروع شده و پسوند آن‌ها txt می‌باشند، یکی از دستورات ذیل را می‌توان به‌کار برد:find temp -name &#039;f*.txt&#039; -type f
find temp/ -name &#039;f*.txt&#039; -type f
find ./temp -name &#039;f*.txt&#039; -type f
find ./temp/ -name &#039;f*.txt&#039; -type fدستورات متفرقهبرای مشاهده نسخه Bash موجود در GIT Bash می‌توانیم از دستور ذیل استفاده نماییم:bash --versionبرای مشاهده تمام دستورات Bash که در GIT Bash امکان استفاده از آن‌ها وجود دارد، می‌توانیم به نشانی ذیل برویم:C:\Program Files\Git\usr\binجهت مشاهده فیلم‌های آموزشی رایگان در خصوص GIT، و نیز ثبت‌نام در دوره آموزش جامع GIT با استفاده از Command Line، به نشانی ذیل مراجعه نمایید:https://t.me/IranianExpertsاین مقاله هنوز پایان نیافته است!</description>
                <category>Dariush Tasdighi - داریوش تصدیقی</category>
                <author>Dariush Tasdighi - داریوش تصدیقی</author>
                <pubDate>Wed, 26 Jul 2023 01:56:29 +0330</pubDate>
            </item>
                    <item>
                <title>آموزش جامع دستورات Bash در محیط GIT Bash - قسمت اول</title>
                <link>https://virgool.io/@dariush-tasdighi/%D8%A2%D9%85%D9%88%D8%B2%D8%B4-%D8%AF%D8%B3%D8%AA%D9%88%D8%B1%D8%A7%D8%AA-bash-%D8%AF%D8%B1-%D9%85%D8%AD%DB%8C%D8%B7-git-bash-lcp3n2a9ld1a</link>
                <description>Bash Cheat Sheet for GIT Bashتوجه: این مقاله به مرور زمان، ویرایش و یا تکمیل می‌شود!تقاضا: در صورتی که با مشکل تایپی، دستوری و یا مفهومی در این مقاله برخورد کردید، از شما دوست عزیز و گرامی، صمیمانه تقاضا می‌کنم که اینجانب را مطلع کرده، تا نسبت به تصحیح و یا تکمیل آن، در اسرع وقت، اقدام نمایم.با احترام و تشکرداریوش تصدیقیکلیه اطلاعات تماس: https://DTAT.irنسخه مقاله: ۱.4 - تاریخ بروزرسانی: ۱۴۰۲/۰۵/۰۵نکته مهم: دوستان عزیز و گرامی، هر چند که به بهانه آموزش GIT، این دستورات (Bash Commands) را در محیط GIT Bash، و در سیستم‌عامل ویندوز آموزش می‌دهیم، ولی باید توجه داشته باشید که این دستورات، در تمام محیط‌های Bash، و در تمام سیستم‌عامل‌هایی مانند لینوکس (Linux) و مک (Mac)، کاملا یکسان بوده، و هیچ تفاوتی ندارند!برای نمایش فایل‌ها و پوشه‌ها، از دستور ذیل استفاده می‌کنیم:lsبا استفاده از دستور فوق، فایل‌ها و پوشه‌ها، کنار هم نمایش داده می‌شوند.نکته: در صورتی که در پوشه جاری، فایل یا پوشه‌ای به صورت مخفی (Hidden) باشد، دستور فوق آن‌را نمایش نمی‌دهد.نکته مهم: در صورتی که بخواهیم در محیط‌های Linux و یا Mac، از دستورات Bash، استفاده نماییم، باید دقت داشته باشیم که این دستورات کاملا Case Sensitive می‌باشند و اگر مثلا دستور فوق را به شکل ذیل (LS) بنویسیم، قطعا با خطا مواجه خواهیم شد!ولی از آنجایی که محیط GIT Bash، در سیستم‌عامل Windows اجرا می‌شود، استثنائا، بزرگی و کوچکی دستورات اهمیتی ندارند! و ضمن آن‌که هیچ خطایی نمی‌دهد، به درستی نیز اجرا می‌شوند! ولی چون می‌خواهیم کاملا استاندارد پیش برویم، قویا توصیه می‌گردد که تمامی دستورات را در همه محیط‌های Bash، به صورت Lower Case (با حروف کوچک) نوشته، تا در محیط‌هایی مانند Linux و Mac دچار مشکل نشویم!LSبرای نمایش فایل‌ها و پوشه‌ها، به صورت لیستی (لیست‌وار) (زیر هم)، از دستور ذیل استفاده می‌کنیم:ls -lبرای نمایش همه فایل‌ها و پوشه‌ها، حتی فایل‌ها و پوشه‌هایی که مخفی هستند، از دستور ذیل استفاده می‌کنیم:ls --allنکته مهم: اصطلاحا به عباراتی که در مقابل دستورات نوشته می‌شوند، پارامتر (Option) گفته می‌شود. به عنوان مثال حرف (l)  و یا کلمه (all)، در دو دستور فوق، به عنوان پارامترهای دستور ls می‌باشند. باید دقت داشته باشیم نه تنها در محیط‌های Linux و Mac، بلکه در محیط Windows و در پنجره GIT Bash نیز، این پارامترها Case Sensitive می‌باشند! لذا حتی اگر در سیستم‌عامل Windows و در پنجره (محیط) GIT Bash، دستورات فوق را به شکل ذیل بنویسیم، با خطا مواجه خواهیم شد:ls -L
ls --ALLنکته مهم: به طور کلی، در محیط Bash، یک رویه عمومی وجود دارد! و آن هم این است که برای بعضی از پارامترها مانند all، به جای آن‌که دو تا DASH و به صورت -- نوشته و سپس نام پارامتر را به صورت کامل بنویسیم، می‌توانیم یک DASH نوشته و ابتدای حرف آن پارامتر را بنویسیم! لذا می‌توانیم به جای دستور ls --all، از دستور ذیل استفاده نماییم:ls -aبرای نمایش همه فایل‌ها و پوشه‌ها، حتی فایل‌ها و پوشه‌هایی که مخفی هستند، و به صورت لیستی، از دستور ذیل استفاده می‌کنیم:ls -a -lنکته: معمولا ترتیب نوشتن پارامترها اهمیتی ندارد! لذا می‌توانیم دستور فوق را به صورت ذیل نیز بنویسیم:ls -l -aنکته: معمولا زمانی که می‌خواهیم از دو یا چند پارامتر تکی استفاده نماییم، می‌توانیم آن‌ها را در هم ادغام نماییم! لذا می‌توانیم دو دستور فوق را به یکی از دو شکل ذیل، ساده‌سازی نماییم:ls -al
ls -laدستور بسیار کاربردی در محیط Bash وجود دارد به نام help، می‌توانیم این دستور را نوشته و سپس دستوری که پارامترهای آن‌را نمی‌دانیم و یا به آن‌ها مسلط نیستیم را بعد از آن نوشته، تا توضیحات مناسبی به ما ارائه دهد:help cd
help lsنکته مهم: در صورتی که دستور (روش) فوق، راهنمایی را یافت نکرد! می‌توانیم ابتدا دستور مورد نظر را نوشته و سپس از پارامتر help برای راهنمای دستور استفاده نماییم:ls --helpدر محیط ویندوز، ما حداقل یک (:C) یا چند Drive داریم. در صورتی که مثلا در درایو :C قرار داشته باشیم و بخواهیم که وارد درایو :D و سپس وارد پوشه MyFolder‌ شویم، از دستور ذیل استفاده می‌کنیم:C:\&gt; cd D:\MyFolderولی باید دقت داشته باشیم که در محیط Shell، مفهومی به نام Drive وجود ندارد (بی‌معنا است)! و باید فرض کنیم که همه درایوها از یک مسیر Root یا (/) آغاز می‌شوند! لذا در صورتی‌که در درایو :C و یا در هر مسیر دیگری قرار داشته باشیم و بخواهیم که وارد درایو :D و سپس وارد پوشه MyFolder شویم، باید از دستور ذیل استفاده نماییم:$: cd /d/MyFolderنکته: در محیط Windows به عبارت ابتدایی مثلا &lt;\:C و یا در محیط Shell به عبارت :$، اصطلاحا Prompt گفته می‌شود.در تمام سیستم‌عامل‌ها (Window, Linux, Mac)، زمانی که یک کاربر (User) ایجاد می‌کنیم، به طور اتوماتیک یک Home Directory برای کاربر ایجاد می‌شود، لذا در زمان ورود به محیط Shell لینوکس و یا Mac و یا حتی در سیستم‌عامل ویندوز، زمانی که وارد محیط GIT Bash می‌شویم، به طور اتوماتیک وارد Home Directory خودمان خواهیم شد، که در محیط ویندوز، معمولا این آدرس به صورت ذیل می‌باشد:C:\Users\[USERNAME]نکته مهم: سال‌هاست که اکثر Linux کارهای عزیز و گرامی، با تمام دقت، وسواس و توان خود، در مقالات، جزوات و کتاب‌ها، جستجو و کندوکاو می‌کنند! تا اگر شخصی (به عمد یا به سهو) نوشته است: سیستم‌عامل لینوکس، به وی تذکر دهند! که Linux، یک سیستم‌عامل نیست! و صرفا یک توزیع گنو می‌باشد! باید این عزیزان دقت داشته باشند که اینجانب، صرفا می‌خواهم برای عاشقان ویندوز، به زبان ساده، محیط و دستورات سیستم‌عامل لینوکس را آموزش داده، تا شاید این عزیزان نیز، با این سیستم‌عامل آشتی کرده و کم‌کم با آن کار کنند! و چرندیاتی مثل توزیع و گنو و... ممکن است که آن‌ها در ابتدا گیج کرده و دلسرد نماید! لذا امیدوارم که در این مقاله و مقالاتی از این دست، شاهد چنین افاضاتی نباشیم!برای این‌که ببینیم، دقیقا در چه مسیری قرار داریم، از دستور ذیل استفاده می‌کنیم:pwdدستور pwd، مخفف Print Working (Home) Directory می‌باشد.برای شروع می‌خواهیم در درایو :C، یک پوشه به نام learning_git ایجاد نماییم:ابتدا وارد درایو :C شده:cd /cو سپس از دستور ذیل mkdir برای ایجاد پوشه‌ای به نام learning_git استفاده می‌کنیم:mkdir learning_gitنکته: دستور mkdir، مخفف Make Directory می‌باشد.برای ورود به پوشه learning_git، از دستور cd استفاده می‌کنیم:cd learning_gitاگر فارغ از این‌که در کجا قرار داریم، بخواهیم مستقیما وارد این پوشه شویم، با توجه به نکاتی که تاکنون فراگرفته‌ایم، می‌توانیم از دستور ذیل استفاده نماییم:cd /c/learning_gitنکته: دستور cd، مخفف دستور Change Directory می‌باشد.اگر داخل پوشه learning_git بوده و بخواهیم یک مرحله به عقب برگردیم، یعنی به درایو :C، از دستور ذیل استفاده می‌کنیم:cd ..نکته: بر خلاف سیستم‌عامل DOS، نباید دو نقطه (..) را به دستور cd، بچسبانیم!با توجه به نکاتی که تاکنون مطرح گردید، اگر بخواهیم به ریشه (Root) برویم، باید از دستور ذیل استفاده نماییم:cd /نکته: همان‌طور که قبلا مطرح گردید، مفهوم ریشه (Root) صرفا در سیستم‌عامل‌های لینوکس و مک معنی داشته و در واقع در سیستم‌عامل ویندوز، بی‌معنا می‌باشد! ولی استثنائا در محیط GIT Bash، تا حدی معنا پیدا می‌کند!نکته: بر خلاف سیستم‌عامل DOS، نباید (/) را به دستور cd، بچسبانیم! و باید قبل از (/) یک فاصله بنویسیم.برای این‌که مجددا وارد پوشه Home Directory شویم، می‌توانیم یا از دستور ذیل استفاده کرده:cd /c/users\[USERNAME]و یا به سادگی، یکی از دستورات ذیل استفاده نماییم:cd
cd ~نکته: باید دقت داشته باشیم که بعد از دستور cd، حتما یک فاصله قرار دهیم.برای ورود به مسیر قبلی، می‌توانیم از دستور ذیل استفاده نماییم:cd -به عنوان مثال، فرض کنید که ابتدا در مسیر Home Directory یا همان (~) قرار داشته و با استفاده از دستور ذیل به پوشه learning_git در درایو :C می‌رویم:cd /c/learning_gitحال برای ورود به مسیر قبلی (Home Directory) می‌توانیم به راحتی از دستور - cd استفاده نماییم.برای پاک کردن صفحه نمایش، می‌توانیم یا از دستور ذیل استفاده کرده:clearو یا از دکمه‌های ترکیبی CTRL + l استفاده نماییم.زمانی که ما در محیط Bash، اقدام به نوشتن دستورات مختلف می‌کنیم، این دستورات در یک History، قرار می‌گیرند، و ما می‌توانیم به راحتی، و با استفاده از دکمه‌های Arrow Keys، بالا و پایین، دستورات قبلی را مشاهده کرده و در صورت تمایل از آن‌ها استفاده نماییم.در صورتی که بخواهیم، فهرست همه این دستورات ذخیره شده در History را مشاهده نماییم، دستوراتی که در Session جاری، اجرا کرده‌ایم! می‌توانیم از دستور ذیل استفاده نماییم:historyبرای پاک کردن این History، می‌توانیم از دستور ذیل استفاده نماییم:history -cمعمولا در محیط Shell، قابلیت Auto Complete وجود دارد! این بدان معنا است که می‌توانیم مثلا برای اجرای دستور history، چند حرف آن‌را (مثلا his) را نوشته و سپس از دکمه Tab برای تکمیل بقیه حروف استفاده نماییم.نکته: اگر چند حرف، از یک دستور (یا نام فایل یا پوشه) را نوشته و سپس دکمه Tab‌کیبورد را بزنیم، در صورتی که دستورات زیادی (بیش از یک دستور/فایل/پوشه) وجود داشته باشد که با این حروف شروع می‌شوند، فهرستی از تمام این دستورات/فایل‌ها/پوشه‌ها، ظاهر می‌گردد! برای تست این موضوع، در مقابل Prompt، حروف wh را نوشته و سپس Tab را می‌زنیم، خواهیم دید که هشت دستور/فایل را به ما نمایش می‌دهد که همگی با حروف wh آغاز شده‌اند.برای این‌که ببینیم که با چه کاربری (Account)، در حال حاضر، Login کرده‌ایم، از دستور ذیل استفاده می‌کنیم:whoamiبرای جستجوی یک فایل، از دستور where استفاده می‌کنیم. برای تست این دستور، دو دستور ذیل را تایپ نمایید:where notepad
where bashدستور فوق‌العاده‌ای به نام aliasفرض کنید که ما به یک سری از دستورات محیط DOS/Windows، عادت کرده‌ایم! و معادل‌سازی آن‌ها در ذهن ما، کمی دشوار می‌باشد، در این صورت می‌توانیم از دستور alias برای حل این مشکل استفاده نماییم! مثلا اکثر ما شاید عادت داشته باشیم که از دستور cls برای پاک کردن صفحه نمایش استفاده نماییم و شاید به کرات این دستور cls را می‌نویسیم و با خطا مواجه می‌شویم! حال می‌توانیم به محیط Shell بگوییم، که هرگاه ما از دستور cls استفاده می‌کنیم، منظورمان دستور clear می‌باشد. برای این کار از دستور ذیل استفاده می‌کنیم:alias cls=&#039;clear&#039;یا فرض کنید که در اکثر موارد، علاقه داریم که فهرست همه فایل‌ها و پوشه‌ها را به صورتی لیستی (لیست‌وار) مشاهده کرده و فایل‌ها و پوشه‌های مخفی را نیز ببینیم، خب برای این منظور، همانطور که در آموزش‌ها فوق بدان اشاره گردید، باید از دستور ls -la استفاده نماییم، ولی شاید دوست داشته باشیم که به محیط Shell اعلام کنیم که هرگاه از دستور dir، استفاده می‌کنیم، منظورمان، همان دستور ls -la می‌باشد. برای این منظور از دستور ذیل استفاده می‌کنیم:alias dir=&#039;ls -la&#039;نکته: استثنائا در محیط GIT Bash، دستور dir دقیقا معادل دستور ls عمل کرده و ما با استفاده از دستور فوق، رفتار پیش‌فرض آن‌را تغییر می‌دهیم.برای مشاهده کلیه Alias های تعریف شده، از دستور ذیل استفاده می‌کنیم:aliasبرای این‌که یک Alias از قبل تعریف شده را حذف نماییم (مثلا cls)، از دستور ذیل استفاده می‌کنیم:unalias clsحذف فایل یا پوشهبرای حذف یک یا چند فایل (با توجه به الگویی که اعلام می‌شود) می‌توانیم از دستورات ذیل استفاده نماییم:rm x1.txt
rm x1.txt x2.txt x3.txt
rm *.txt
rm *.t*
rm x*.txt
rm x?.txtسوال: حدس بزنید که دستور ششم، دقیقا چه عملی را انجام می‌دهد و فرق آن با دستور پنجم چیست؟برای حذف یک پوشه (خالی)، می‌توانیم یکی از دستورات ذیل را استفاده نماییم:rmdir [FolderName]
rm -d [FolderName]برای حذف یک پوشه که خالی نمی‌باشد، می‌توانیم از دستور ذیل استفاده نماییم:rm -r [FolderName]نکته: پارامتر r، مخفف Recursive (تو در تو) می‌باشد.برای حذف یک پوشه که خالی نمی‌باشد، و ممکن است که در زمان حذف آن، خطایی مبنی بر این‌که این فایل/فایل‌هایی درون این پوشه، توسط شخص/سرویس دیگری در حال استفاده می‌باشد، برخورد نماییم، می‌توانیم یکی از دستورات ذیل را استفاده نماییم:rm -r -f [FolderName]
rm -f -r [FolderName]
rm -rf [FolderName]
rm -fr [FolderName]نکته: پارامتر f، مخفف Force می‌باشد.یک دستور هیچان‌انگیز و طلائیاین دستور، در دوره آموزش جامع GIT، بسیار استفاده خواهد شد! فرض کنید که می‌خواهیم همه فایل‌ها و پوشه‌ها، اعم از آن‌که پوشه‌ها خالی بوده و یا پر باشند، و اعم از آن‌که فایل‌ها و پوشه‌های موجود در پوشه جاری، مخفی بوده و یا مخفی نباشند را صرفا با یک دستور حذف کرده و اصطلاحا پوشه جاری را کاملا clean نماییم. برای این منظور می‌توانیم از دستور ذیل استفاده نماییم:rm -rdf {*,.*}چون دستور فوق، شاید کمی طولانی بوده و ممکن است که یا یادمان برود و یا در نگارش آن، بی‌دقتی کنیم! می‌توانیم با استفاده از دستور alias، یک معادل جذاب برای آن ایجاد نماییم:alias clean=&#039;rm -rdf {*,.*}&#039;جهت مشاهده فیلم‌های آموزشی رایگان در خصوص GIT، و نیز ثبت‌نام در دوره آموزش جامع GIT با استفاده از Command Line، به نشانی ذیل مراجعه نمایید:https://t.me/IranianExpertsپایان</description>
                <category>Dariush Tasdighi - داریوش تصدیقی</category>
                <author>Dariush Tasdighi - داریوش تصدیقی</author>
                <pubDate>Wed, 19 Jul 2023 05:23:34 +0330</pubDate>
            </item>
                    <item>
                <title>ایجاد یک Repository در Github، به روایت تصویر</title>
                <link>https://virgool.io/@dariush-tasdighi/%D8%A7%DB%8C%D8%AC%D8%A7%D8%AF-%DB%8C%DA%A9-repository-%D8%AF%D8%B1-github-%D8%A8%D9%87-%D8%B1%D9%88%D8%A7%DB%8C%D8%AA-%D8%AA%D8%B5%D9%88%DB%8C%D8%B1-zbwbgr3vn3yn</link>
                <description>ایجاد یک Repository در Github به روایت تصویرتوجه: این مقاله به مرور زمان، ویرایش و یا تکمیل می‌شود!تقاضا: در صورتی که با مشکل تایپی، دستوری و یا مفهومی در این مقاله برخورد کردید، از شما دوست عزیز و گرامی، صمیمانه تقاضا می‌کنم که اینجانب را مطلع کرده، تا نسبت به تصحیح و یا تکمیل آن، در اسرع وقت، اقدام نمایم.با احترام و تشکرداریوش تصدیقیکلیه اطلاعات تماس: https://DTAT.irنسخه مقاله: ۱.۰ - تاریخ بروزرسانی: ۱۴۰۲/۰۴/۲۸در صورتی که هنوز در سایت Github، ثبت‌نام نکرده‌ایم، ابتدا در این سایت ثبت‌نام می‌کنیم:https://github.comدر این آموزش، اکانتی که اینجانب، برای آموزش ایجاد کرده‌ام، DT-LEARNING-GIT می‌باشد:https://github.com/DT-LEARNING-GITبرای ایجاد یک Repository، ابتدا در قسمت بالای صفحه، و بر روی بعلاوه، Click می‌کنیم، تا یک لیست ظاهر گردد، و سپس بر روی گزینه New Repository، کلیک می‌کنیم:در صفحه ظاهر شده، و در فیلد (کادر محاوره‌ای) Repository name، نام Repository خود را می‌نویسیم. در این مثال، ما Repository خودمان را Scenario_0100، نام‌گذاری کرده‌ایم، و شما می‌توانید، هر نام دیگری که علاقه دارید را انتخاب نمایید. فقط باید دقت داشته باشید که این نام، در مجموعه Repository هایی که تاکنون ایجاد کرده‌اید، تکراری نباشد! و در ضمن تکمیل این فیلد، الزامی می‌باشد!سپس در فیلد (کادر محاوره‌ای) Description، یک توضیح مختصر در رابطه با Repository خود می‌نویسیم، البته تکمیل این قسمت اختیاری بوده و اجباری نمی‌باشد! ولی توصیه می‌گردد که برای Repository های اصلی و جدی، حتما یک توضیح مشخص نوشته شود.ریپازیتوری (Repository) خود را به صورت Public تعریف می‌کنیم. البته می‌توانیم Repository خودمان را به صورت Private نیز ایجاد نماییم، ولی تعریف یک Repository به صورت Public، این امکان را فراهم می‌کند که هر شخصی در فضای مجازی (اینترنت)، بتواند Repository ما را مشاهده کرده و فایل‌ها و پوشه‌های درون آن‌را به طور کامل Download نماید.نکته مهم: با توجه به سناریوهایی که در مقالات بعدی، به آن‌ها خواهیم پرداخت، به هیچ عنوان گزینه Add a README file را انتخاب نکرده! و نیز، گزینه‌های Add .gitignore و نیز Choose a license را از حالت پیش‌فرض (None)، تغییر نمی‌دهیم!پس از تکمیل گزینه‌های فوق، بر روی دکمه سبز رنگ پایین، Create Repository، کلیک می‌کنیم، تا Repository ما ایجاد گردد:با انتخاب دکمه مذکور (Create Repository)، Repository ما ایجاد شده و اطلاعات آن به شکل ذیل، نمایش داده می‌شود، و ما می‌توانیم از نشانی آن، در ادامه مسیر استفاده نماییم:git@github.com:DT-LEARNING-GIT/Scenario_0100.gitنشانی Repository که از طریق، Browser، می‌توانیم به آن دسترسی داشته باشیم:https://github.com/DT-LEARNING-GIT/Scenario_0100نکته: همانطور که ملاحظه می‌شود، این دو نشانی، یکسان نمی‌باشند! از نشانی اول، برای دریافت و ارسال فایل‌ها و پوشه‌ها، از Repository به دستگاه خودمان (Local) استفاده می‌گردد، و از نشانی دوم، برای ورود به صفحه Repository، از طریق Browser استفاده می‌شود!نکته: بدیهی است که با توجه به عنوان Account شما، و نیز نام Repository که انتخاب نموده‌اید، نشانی فوق متفاوت خواهد بود!جهت مشاهده فیلم‌های آموزشی رایگان در خصوص GIT، و نیز ثبت‌نام در دوره آموزش جامع GIT با استفاده از Command Line، به نشانی ذیل مراجعه نمایید:https://t.me/IranianExpertsپایان</description>
                <category>Dariush Tasdighi - داریوش تصدیقی</category>
                <author>Dariush Tasdighi - داریوش تصدیقی</author>
                <pubDate>Wed, 19 Jul 2023 03:57:36 +0330</pubDate>
            </item>
                    <item>
                <title>دستوارت مهم و پرکاربرد لینوکسی برای دستگاه Raspberry Pi</title>
                <link>https://virgool.io/@dariush-tasdighi/%D8%AF%D8%B3%D8%AA%D9%88%D8%A7%D8%B1%D8%AA-%D9%85%D9%87%D9%85%DB%8C-%DA%A9%D9%87-%D9%85%DB%8C-%D8%AA%D9%88%D8%A7%D9%86%DB%8C%D9%85-%D8%AF%D8%B1-%D9%85%D8%AD%DB%8C%D8%B7-raspberry-pi-%D8%A7%D8%AC%D8%B1%D8%A7-%D9%86%D9%85%D8%A7%DB%8C%DB%8C%D9%85-usbanoq8qf1g</link>
                <description>دستوارت مهمی که می‌توانیم در محیط Raspberry Pi اجرا نماییمتوجه: این مقاله به مرور زمان، ویرایش و یا تکمیل می‌شود!تقاضا: در صورتی که با مشکل تایپی، دستوری و یا مفهومی در این مقاله برخورد کردید، از شما دوست عزیز و گرامی، صمیمانه تقاضا می‌کنم که اینجانب را مطلع کرده، تا نسبت به تصحیح و یا تکمیل آن، در اسرع وقت، اقدام نمایم.با کمال تشکرداریوش تصدیقیکلیه اطلاعات تماس: https://DTAT.irنسخه مقاله: ۱.۱ - تاریخ بروزرسانی: ۱۴۰۳/۰۹/۰۲سلام دوستان عزیزمبسیاری از دستوراتی که در ذیل نوشته می‌شوند، صرفا دستورات Linux بوده و بعضی از آن‌ها به طور تخصصی مربوط به Raspberry Pi می‌باشند، ولی گردآوری اکثر آن‌ها در یک مقاله، شاید خالی از لطف نباشد.نکته: قبل از دستوراتی که به طور خاص، مربوط به Raspberry Pi می‌باشند، کلمه [RASPI] نوشته می‌شود!بعد از Login به سیستم، و در محیط Shell، برای این‌که در ابتدای تقریبا هر دستوری، از کلمه (عبارت) sudo استفاده نکنیم، می‌توانیم از دستور ذیل استفاده نماییم:sudo suبرای Update کردن سیستم از دو دستور ذیل استفاده می‌کنیم:apt update -y
apt upgrade -y
apt full-upgrade -yنکته: نوشتن y- برای آن است که در هنگام Update یا Upgrade کردن، دیگر از ما سوالی پرسیده نشود!برای مشاهده نسخه Firmware دستگاه، از دستور ذیل استفاده می‌کنیم:[RASPI]
rpi-eeprom-updateنکته: برای به‌روزرسانی Firmware دستگاه، از دستور ذیل استفاده می‌کنیم:[RASPI]
rpi-eeprom-update -d -a
rebootنکته: سیستم‌عامل Linux، بر خلاف سیستم‌عامل Windows، خیلی نیاز به Reboot شدن ندارد! ولی توصیه می‌شود که بعد از بعضی از دستورات خاص، از دستور reboot استفاده نماییم.برای آپدیت کردن Raspberry Pi، از دستور ذیل استفاده می‌کنیم:[RASPI]
apt install -y rpi-update
rpi-update
rebootبرای تغییر دادن تنظیمات دستگاه Raspberry Pi، از دستور ذیل استفاده می‌کنیم:[RASPI]
apt install -y raspi-config
raspi-config
rebootنکته:‌ در صورتی که وارد محیط Configuration شده و هیچ تغییری ایجاد نکرده باشیم، نیازی به اجرای دستور reboot نمی‌باشد.برای حذف شدن Package هایی که بلااستفاده هستند، از دستور ذیل استفاده می‌کنیم:apt-get autoremove --purgeبرای مشاهده دمای CPU، از دستور ذیل استفاده می‌کنیم:vcgencmd measure_tempبرای نمایش نام دستگاه در شبکه، از دستور ذیل استفاده می‌کنیم:hostnameبرای نمایش IP دستگاه در شبکه، می‌توانیم یکی از دستورات ذیل را استفاده نماییم:hostname -i
ip address
ifconfigنکته: اگر اجرای دستور ifconfig با خطا مواجه شد، می‌توانیم با استفاده از دستور ذیل، Package مربوط به آن‌را ابتدا نصب کرده و سپس از دستور مذکور استفاده نماییم:apt install -y net-toolsبرای این‌که ببینیم با چه کاربری Login کرده‌ایم، از دستور ذیل استفاده می‌کنیم:whoamiبرای این‌که بدانیم که چه سیستم‌عاملی بر روی دستگاه ما نصب شده است، می‌توانیم یکی از دستورات ذیل را استفاده نماییم:uname
uname -aبرای این‌که ببینیم که چه سرویس‌هایی بر روی سیستم راه‌اندازی شده است، می‌توانیم یکی از دستورات ذیل را استفاده نماییم:ps
ps -aux
top
htopبرای مشاهده مشخصات دستگاه (از نظر سخت‌افزاری) و نیز سیستم‌عامل Raspberry Pi نصب شده، ابتدا Package ذیل را نصب کرده و سپس آن‌را اجرا می‌کنیم:apt install -y neofetch
neofetchوقتی کارمان با دستگاه تمام می‌شود و می‌خواهیم دستگاه را Shutdown نماییم، از دستور ذیل استفاده می‌کنیم:shutdown -h nowدر مقاله قبل، نصب VNC را آموزش دادم، و در این مقاله می‌خواهم که نحوه راه‌اندازی Remote Desktop را آموزش دهم! برای راه‌اندازی Remote Desktop از دستور ذیل استفاده می‌کنیم:apt install -y xrdp
rebootبا نصب Package فوق، می‌توانیم از طریق محیط Windows و با استفاده از برنامه Remote Desktop به دستگاه Raspberry Pi متصل شده و محیط گرافیکی آن را ببینیم.برای نمایش فایل‌ها و پوشه‌های محل جاری، یکی از دستورات ذیل را استفاده می‌کنیم:ls
ls -l
ls -a
ls -a -l
ls -alنکته: پارامتر a مخفف all بوده و همه فایل‌ها و پوشه‌ها، حتی آن‌هایی که مخفی می‌باشند را نیز نمایش می‌دهد.بر خلاف محیط Windows، و در محیط Command Prompt که همیشه متوجه می‌شویم که دقیقا در کدام Drive یا Folder‌ قرار داریم، در محیط Linux Shell، این مساله خیلی شفاف و واضح نمی‌باشد! لذا برای این‌که متوجه شویم که در حال حاضر در چه مسیری قرار داریم، از دستور Print Working Directory استفاده می‌کنیم:pwdبرای حرکت در پوشه‌ها (مشابه محیط Windows)، از دستور ذیل استفاده می‌کنیم:cd /
cd ..
cd [Path]
cd /[Path]نکته: بر خلاف محیط Windows، قبل از / و .. باید یک Space قرار دهیم!برای ایجاد یک پوشه، می‌توانیم از دستور ذیل استفاده نماییم:mkdir [SomeFolderName]برای ایجاد یک فایل خالی (با حجم صفر بایت) از دستور ذیل استفاده می‌کنیم:touch [SomeFileName.SomeExtension]دستورات هیجان‌انگیز:touch Hello World My Name Is Dariush
lsبا اجرای دستور فوق، خواهیم دید که شش فایل به نام‌هایی که در مقابل دستور touch نوشته شده‌اند، ایجاد می‌شود.یک دستور هیجان‌انگیز دیگر!touch Dariush{1..5}
lsبا اجرای دستور فوق، خواهیم دید که پنج فایل به نام‌های Dariush1, Dariush2, Dariush3, Dariush4, Dariush5 ایجاد می‌شود!با استفاده از دستور echo، می‌توانیم یک متن را بر روی صفحه نمایش چاپ کنیم. ولی اگر بعد از عبارت مورد نظر از علامت بزرگتر (&gt;) استفاده نماییم، می‌توانیم متن مورد نظر را در داخل یک فایل بریزیم:echo &amp;quotHello, World!&amp;quot
echo &amp;quotHello, World!&amp;quot &gt; [SomeFileName.txt]برای ویرایش یک فایل متنی، می‌توانیم از دستور ذیل استفاده نماییم:nano [SomeFileName.SomeExtension]برای نمایش محتوای یک فایل متنی، می‌توانیم یکی از دستورات ذیل را استفاده نماییم:cat [SomeFileName.SomeExtension]
less [SomeFileName.SomeExtension]
head [SomeFileName.SomeExtension]
tail [SomeFileName.SomeExtension]نکته: دو دستور آخر، صرفا ابتدا و انتهای فایل (در صورتی که حجم فایل زیاد باشد) را نمایش می‌دهند!برای ایجاد یک کاربر، از دستور ذیل استفاده می‌کنیم:useradd [SomeUsername]برای تغییر گذرواژه خودمان می‌توانیم از دستور ذیل استفاده کنیم:passwdو برای تغییر گذرواژه کاربر دیگری، از دستور ذیل استفاده می‌کنیم:passwd [SomeUsername]برای دانلود یک فایل از اینترنت از دستور ذیل استفاده می‌کنیم:wget [Url]برای جستجوی یک فایل، از دستور ذیل استفاده می‌کنیم:find [Path] -name &#039;[SomeFileName.SomeExtension]مثال: دستور ذیل تمام فایل‌هایی که نام آن‌ها با کلمه Dariush شروع می‌شوند را در کل سیستم، جستجو می‌کند:find / -name &#039;Dariush*&#039;برای مقایسه دو فایل متنی، می‌توانیم یکی از دستورات ذیل را استفاده نماییم:cmp [SomeFileName.SomeExtension] [AnotherFileName.SomeExtension]
diff [SomeFileName.SomeExtension] [AnotherFileName.SomeExtension]فرض کنید که تعدادی از دستوارت فوق، و یا دستورات دیگری را در داخل یک فایل با پسوند sh قرار داده‌ایم، این فایل‌ها بسیار شبیه فایل‌هایی با پسوند bat در محیط Windows می‌باشند. برای این‌که این فایل را Executable نماییم، از دستور ذیل استفاده می‌کنیم:chmod +x [SomeFileName].shبرای مشاهده DNS Server تنظیم شده بر روی سیستم، ابتدا وارد فایل resolv.conf شده و در صورت نیاز آن‌را تغییر می‌دهیم. قابل توجه دوستانی که می‌خواهند از DNS Server های سایت Shecan.ir استفاده نمایند:nano /etc/resolv.confتوجه: در نام فایل، resolv، حرف e ندارد!برای صرفا مشاهده DNS تنظیم شده بر روی سیستم،‌ می‌توانیم یکی از دستورات ذیل را استفاده نماییم:cat /etc/resolv.conf
resolvectl statusمشابه محیط Windows، برای Ping کردن یک سایت، می‌توانیم از دستور ذیل استفاده نماییم:ping [SomeDomainName]
ping -c 5 [SomeDomainName]
ping -s 500 [SomeDomainName]نکته: در دستور فوق، s مربوط به Size of Packet می‌باشد!مشابه محیط Windows، برای Trace کردن یک دامنه، می‌توانیم از دستور ذیل استفاده نماییم:traceroute [SomeDomainName]برای مشاهده این‌که چه سرویس‌ها یا برنامه‌هایی در حال استفاده از اینترنت می‌باشند، می‌توانیم یکی از دستورات ذیل را استفاده نماییم:netstat
netstat -tulpn
ss
ss -tulpnبرای فعال یا غیرفعال کردن و نیز مشاهده وضعیت Firewall از دستورات ذیل استفاده می‌کنیم:ufw status
ufw enable
ufw disableبرای این‌که یک Port را بر روی دستگاه باز یا بسته کنیم (Firewall):ufw allow 80
ufw deny 80برای این‌که متوجه شویم که چه مقدار از Ram دستگاه استفاده شده و چه مقدار خالی می‌باشد،‌ از دستور ذیل استفاده می‌کنیم:freeبرای این‌که متوجه شویم که چه مقدار از فضای هارد دیسک / SSD دستگاه استفاده شده و چه مقدار خالی می‌باشد،‌ از دستور ذیل استفاده می‌کنیم:df
df -Hبرای از کارانداختن یک Process مثلا به نام Googooli از روش ذیل استفاده می‌کنیم:ps -aux | grep Googooliدر فهرست ظاهر شده، Process Id را یادداشت کرده و سپس با دستور ذیل، آن Process را اصطلاحا Kill می‌کنیم:kill -9 [SomeProcessId]
pkill -f [SomeProcessId]نکته: پارامت f در دستور فوق، به معنی Force می‌باشد!خب دوستان عزیزم، اگر تا اینجای این مقاله را مطالعه کرده‌اید و دستورات را اجرا کرده و متوجه رفتارها و پارامترهای آن شده باشید، به شما تبریک عرض می‌کنم،‌ شما تقریبا LPIC1 را یاد گرفته‌اید... هر چند باز هم دستورات زیادی داریم و هر دستوری نیز پارامترهای زیادی دارد و شاید اشاره کردن به بعضی از دستورات مهم دیگری مانند grep, zip, unzip و غیره فهرست نشده باشند، ولی شما با همین دستورات و البته اعتماد به نفسی که گرفته‌اید، می‌توانید به صورت Command Prompt / Shell در محیط Linux کار کنید و لذت ببرید.پایان</description>
                <category>Dariush Tasdighi - داریوش تصدیقی</category>
                <author>Dariush Tasdighi - داریوش تصدیقی</author>
                <pubDate>Sat, 24 Jun 2023 03:31:17 +0330</pubDate>
            </item>
                    <item>
                <title>پدیده‌ای جذاب به نام شکن (Shecan) را بشناسیم و حرفه‌ای با آن کار کنیم</title>
                <link>https://virgool.io/@dariush-tasdighi/%D9%BE%D8%AF%DB%8C%D8%AF%D9%87-%D8%A7%DB%8C-%D8%AC%D8%B0%D8%A7%D8%A8-%D8%A8%D9%87-%D9%86%D8%A7%D9%85-%D8%B4%DA%A9%D9%86-shecan-%D8%B1%D8%A7-%D8%A8%D8%B4%D9%86%D8%A7%D8%B3%DB%8C%D9%85-%D9%88-%D8%AD%D8%B1%D9%81%D9%87-%D8%A7%DB%8C-%D8%A8%D8%A7-%D8%A2%D9%86-%DA%A9%D8%A7%D8%B1-%DA%A9%D9%86%DB%8C%D9%85-ixexkdvdi5vj</link>
                <description>پدیده‌ای جذاب به نام شکن (Shecan) را بشناسیم و حرفه‌ای با آن کار کنیمتوجه: این مقاله به مرور زمان، ویرایش و یا تکمیل می‌شود!تقاضا: در صورتی که با مشکل تایپی، دستوری و یا مفهومی در این مقاله برخورد کردید، از شما دوست عزیز و گرامی، صمیمانه تقاضا می‌کنم که اینجانب را مطلع کرده، تا نسبت به تصحیح و یا تکمیل آن، در اسرع وقت، اقدام نمایم.با کمال تشکرداریوش تصدیقیکلیه اطلاعات تماس: https://DTAT.irنسخه مقاله: ۱.۲ - تاریخ بروزرسانی: ۱۴۰۲/۰۲/۰۶سلام دوستان عزیزم، هر چند که ممکن است بسیاری از شما عزیزان با سایت Shecan.ir و امکانات آن آشنایی داشته باشید، ولی لازم دانستم که در خصوص این سایت و خدمات آن توضیحات مهمی ارائه کرده و سپس آموزش مناسبی برای استفاده حرفه‌ای از آن منتشر نمایم.اول آن که این سایت، یک سایت داخلی و مجاز بوده و ما نمی‌توانیم از طریق آن به سایت‌هایی مانند فیس‌بوک و واتسآپ و غیره متصل شویم! بلکه زحمتی که مسئولین این پایگاه برای راه‌اندازی این سایت کشیده‌اند، صرفا برای دور زدن تحریم‌های سایت‌هایی است که اجازه استفاده از منابع‌شان را به ایرانی‌ها نمی‌دهد، مانند بعضی از امکانات گوگل، Google Cloud یا Arduino Cloud و متاسفانه به تازگی، دانلود نسخه اوریجینال ویندوز از سایت مایکروسافت و غیره.متاسفانه برای بسیاری از سایت‌های خارجی که ایران را تحریم کرده‌اند، VPN ها جواب‌گو نیست! چرا که در زمان استفاده از VPN ها، و در زمان ارسال درخواست ما به آن سایت‌ها، در درخواست ما (Packet / Payload)، پارامترهایی وجود دارد که هر چند سایت مورد نظر متوجه می‌شود که ظاهرا شما از کشور آلمان و یا فرانسه و غیره به آن‌جا متصل شده‌اید، ولی متوجه می‌شود که شما از VPN استفاده کرده و لذا فارغ از این‌که متوجه شود که شما از کشور ایران هستید یا خیر، اجازه استفاده از امکانات سایت‌شان را به شما نمی‌دهد! خدمات سایت شکن، اساسا VPN نیست! و ما با تغییر دادن DNS Server به مقادیری که سایت شکن اعلام کرده است، می‌توانیم از خدمات این‌گونه سایت‌ها بهره‌مند شده و حداقل به مشکلات کمتری برخورد نماییم.سایت شکن در ابتدا کاملا رایگان بود و تقریبا بدون هیچ‌گونه محدودیتی می‌توانستیم از خدمات آن استفاده نماییم. در یکی دو سال اخیر، سایت شکن، نسخه‌ای به نام شکن حرفه‌ای معرفی کرده است که (متاسفانه) مجبور هستیم اگر می‌خواهیم کار حرفه‌ای کرده و یا دانلود نسبتا سنگینی انجام دهیم، از نسخه حرفه‌ای سایت شکن استفاده نماییم! چرا که نسخه رایگان آن، تقریبا جنبه تبلیغاتی داشته و چندان نمی‌توان از آن به صورت واقعا حرفه‌ای استفاده کرد:مشکلات شکن رایگان!و اما مشکلات استفاده از سایت شکن به صورت رایگان:سرعت بسیار پایینغیرقابل اتکا (Unstable) (بعد از یه مدتی قطع می‌شود)در صورتی که از اینترنت پرسرعتی استفاده می‌کنیم، بعد از مدتی، سایت شکن به ما خطا می‌دهد که ما به صورت حرفه‌ای از سایت مذکور استفاده می‌کنیم و کلا این سرویس را (با توجه به IP که داریم) قطع می‌کند.برای دانلود فایل‌های سنگین، مانند دانلود Windows 11 Image، خطا نمی‌دهد، ولی یا اصلا کار نمی‌کند و یا بعد از یک مقدار دانلود، بدون هیچ‌گونه واکنشی، عملیات دانلود با خطا متوقف می‌شود.لذا با عنایت به چهار مورد فوق، در صورتی که بخواهیم از امکانات این سایت به صورت حرفه‌ای استفاده کرده و بعضا نیاز به دانلود فایل‌های سنگین داشته باشیم، توصیه می‌شود که نسخه حرفه‌ای را لااقل یک‌ماهه خریداری کنیم.نکته مهم: باید دقت داشته باشیم که DNS Server های مربوط به نسخه حرفه‌ای با نسخه رایگان کاملا متفاوت می‌باشد و بسیاری از دوستان من، بعد از خرید نسخه حرفه‌ای، به اشتباه، و کماکان با DNS Server های رایگان قبلی استفاده می‌کنند.راه‌اندازی سرویس شکن به صورت حرفه‌ایزمانی که وارد سایت شکن می‌شویم، در پایین و در سمت چپ صفحه، سایت به ما اعلام می‌کند که شکن بر روی دستگاه ما فعال نیست! و برای فعال کردن آن باید DNS هایی که اعلام کرده است را بر روی دستگاه خود تنظیم نماییم:DNS Servers:
178.22.122.100
185.51.200.2تنظیم کردن DNS Server بر روی Windows، معمولا کسالت‌آور و زمان‌گیر است، خصوصا آن‌که بخواهیم بعد از استفاده از امکانات سایت شکن، مجددا از وضعیت آن خارج شده (DNS Server را حذف نماییم) و روال عادی خود را در پیش گیریم! لذا می‌خواهیم این عمل را با استفاده از دستورات PowerShell انجام دهیم.ابتدا محیط PowerShell را در حالت Run As Administrator باز می‌کنیم.با استفاده از دستور ذیل (PowerShell Command) متوجه می‌شویم که چه شبکه‌هایی (Interface) داریم و بر روی آن‌ها آیا DNS Server خاصی نصب شده است یا خیر؟Get-DnsClientServerAddressدر صورتی که برای اتصال به اینترنت، از Wi-Fi استفاده می‌کنیم، ستون Server Addresses را کنترل می‌کنیم. به طور پیش‌فرض عبارت {} (آکولاد باز و بسته) نوشته شده است. این بدان معناست که برای Interface Alias مورد نظر (مثلا Wi-Fi)، هنوز DNS Server ای تعریف (مشخص) نشده است.نکته مهم: در صورتی که بخواهیم برای یکی از Interface Alias ها، DNS Server خاصی تعریف نماییم، باید از شماره‌ای که در ستون Interface Index نوشته شده است، استفاده نماییم. برای دستگاه اینجانب، و برای Wi-Fi، این عدد، برابر 8 می‌باشد، و اینجانب در دستورات ذیل از این عدد استفاده کرده‌ام، و ممکن است که برای دستگاه شما، این عدد، عدد دیگری باشد!برای تنظیم کردن DNS Server سایت شکن، از دستور ذیل استفاده می‌کنیم.نکته: دستور ذیل برای راه‌اندازی DNS Server، برای شکن رایگان می‌باشد:Set-DnsClientServerAddress -InterfaceIndex 8 -ServerAddresses (&#039;178.22.122.100&#039;,&#039;185.51.200.2&#039;)نکته: دستور ذیل برای راه‌اندازی DNS Server برای شکن حرفه‌ای می‌باشد:Set-DnsClientServerAddress -InterfaceIndex 8 -ServerAddresses (&#039;178.22.122.101&#039;,&#039;185.51.200.1&#039;)پس از اجرای یکی از دو دستور فوق، در صورتی که مجددا از دستور ذیل استفاده نماییم، در مقابل مثلا Wi-Fi، دو DNS Server، نمایش داده می‌شود:Get-DnsClientServerAddressپس از آن‌که کارمان با خدمات سایت شکن، به اتمام رسید، برای حذف کردن DNS Server ها، از دستور ذیل استفاده می‌کنیم:Set-DnsClientServerAddress -InterfaceIndex 8 -ResetServerAddressesنکته مهم: در تمام دستورات فوق، عدد 8، به صورت کاملا تصادفی نوشته شده و ما باید با دقت این عدد را با توجه به فهرستی که دستور Get-DnsClientServerAddress به ما نمایش داده است، استفاده (انتخاب) نماییم.پس از اجرای آخرین دستور، مجددا از دستور Get-DnsClientServerAddress استفاده می‌کنیم، تا اطمینان حاصل کنیم که در مقابل Interface Alias، مثلا Wi-Fi، مجددا عبارت به {} نوشته شده باشد.برای ورود به کنترل‌پنل شکن حرفه‌ای می‌توانیم از نشانی ذیل استفاده نماییم:Control Panel Url:https://support.peygir.netپایان</description>
                <category>Dariush Tasdighi - داریوش تصدیقی</category>
                <author>Dariush Tasdighi - داریوش تصدیقی</author>
                <pubDate>Fri, 23 Jun 2023 15:46:32 +0330</pubDate>
            </item>
                    <item>
                <title>آموزش جامع برنامه‌نویسی بر روی برد Arduino Uno و یا Arduino Nano از پایه، قدم به قدم، دقیق و کامل (قسمت دوم)</title>
                <link>https://virgool.io/@dariush-tasdighi/%D8%A2%D9%85%D9%88%D8%B2%D8%B4-%D8%AC%D8%A7%D9%85%D8%B9-%D8%A8%D8%B1%D9%86%D8%A7%D9%85%D9%87-%D9%86%D9%88%DB%8C%D8%B3%DB%8C-%D8%A8%D8%B1-%D8%B1%D9%88%DB%8C-%D8%A8%D8%B1%D8%AF-arduino-uno-%D9%88-%DB%8C%D8%A7-arduino-nano-%D8%A7%D8%B2-%D9%BE%D8%A7%DB%8C%D9%87-%D9%82%D8%AF%D9%85-%D8%A8%D9%87-%D9%82%D8%AF%D9%85-%D8%AF%D9%82%DB%8C%D9%82-%D9%88-%DA%A9%D8%A7%D9%85%D9%84-%D9%82%D8%B3%D9%85%D8%AA-%D8%AF%D9%88%D9%85-yv1jlt98f76n</link>
                <description>آموزش جامع برنامه‌نویسی بر روی برد Arduinoتوجه: این مقاله به مرور زمان، ویرایش و یا تکمیل می‌شود!تقاضا: در صورتی که با مشکل تایپی، دستوری و یا مفهومی در این مقاله برخورد کردید، از شما دوست عزیز و گرامی، صمیمانه تقاضا می‌کنم که اینجانب را مطلع کرده، تا نسبت به تصحیح و یا تکمیل آن، در اسرع وقت، اقدام نمایم.با کمال تشکرداریوش تصدیقیکلیه اطلاعات تماس: https://DTAT.irنسخه مقاله: ۱.۰ - تاریخ بروزرسانی: ۱۴۰۱/۰۳/۲۳حال می‌خواهیم در ابتدای راه‌اندازی Board (یعنی زمانی که Board را به صورت مستقل به منبع انرژی متصل می‌کنیم، ابتدا اگر چراغ LED روشن است، آن‌را خاموش کرده، و سپس به صورت تکراری چراغ را روشن و خاموش کنیم. طبیعتا چون می‌خواهیم به صورت تکراری، این عمل را انجام دهیم! باید کدهای مورد نظر را در تابع loop بنویسیم:نکته: پس از نوشتن و تست کردن کد ذیل، لطفا به سرعت آن کد را به کد بعدی تغییر دهید! چرا که ضمن آن‌که چراغ روشن و خاموش نمی‌شود! بلکه حتی ممکن است با ما قهر کند! و دیگر هیچ‌وقت روشن نشود!سورس‌کد شماره یکvoid setup() {
    pinMode(LED_BUILTIN, OUTPUT);
    digitalWrite(LED_BUILTIN, LOW);
}

void loop() {
    digitalWrite(LED_BUILTIN, HIGH);
    digitalWrite(LED_BUILTIN, LOW);
}در تابع loop به حدی سریع (با فرکانس بالا) ولتاژ مثبت و منفی به LED منتقل می‌کنیم! که LED تصمیم می‌گیرد که هیچ واکنشی نشان ندهد! لذا باید بعد از هر بار تغییر وضعیت LED، یک وقفه (delay) کوتاه ایجاد نماییم.برای این منظور از تابع دیگری به نام delay استفاده می‌کنیم. این تابع یک پارامتر ورودی دارد که از جنس عددی (int) بوده و مقیاس آن بر اساس میلی‌ثانیه می‌باشد. از آن‌جایی که هر ثانیه، هزار میلی‌ثانیه می‌باشد، اگر به عنوان پارامتر ورودی از عدد ۱۰۰۰ استفاده نماییم، اجرای برنامه، با یک مکث یا وقفه یک ثانیه‌ای روبرو می‌شود:سورس‌کد شماره دوvoid setup() {
    pinMode(LED_BUILTIN, OUTPUT);
    digitalWrite(LED_BUILTIN, LOW);
}

void loop() {
    delay(1000);
    digitalWrite(LED_BUILTIN, HIGH);
    digitalWrite(LED_BUILTIN, LOW);
}در صورت اجرای دستور فوق نیز در عین ناباوری شاهد هستیم که برنامه به درستی کار نمی‌کند و LED نه تنها روشن خاموش نمی‌شود! بلکه اساسا روشن نمی‌شود!ولی چرا!؟در تابع setup، و صرفا در ابتدای کار، چرا اگر به طور پیش‌فرض روشن باشد، خاموش می‌شود و سپس Board تا روزی که زنده است! تابع loop را اجرا کرده و این کار را تا ابد تکرار می‌کند. در تابع loop، ابتدا یک مکث یک ثانیه‌ای می‌کنیم و سپس LED را روشن می‌کنیم، ولی دقیقا در دستور بعدی و به سرعت مجددا آن‌را خاموش می‌کنیم! پس اساسا وقت نمی‌دهیم که چراغ روشن شده و لااقل چند ثانیه یا حتی چند میلی‌ثانیه روشن بماند! و از تابع خارج شده و مجددا تابع loop اجرا می‌شود و همین مشکل تا ابد تکرار می‌شود:لذا برای حل این مشکل، بعد از روشن کردن LED، نیز یک مکث یک ثانیه‌ای ایجاد می‌کنیم:سورس‌کد شماره سهvoid setup() {
    pinMode(LED_BUILTIN, OUTPUT);
    digitalWrite(LED_BUILTIN, LOW);
}

void loop() {
    delay(1000);
    digitalWrite(LED_BUILTIN, HIGH);
    delay(1000);
    digitalWrite(LED_BUILTIN, LOW);
}اگر سورس‌کد فوق را اجرا کنیم، هم برنامه و هم نتیجه، مطلوب و مورد نظر خواهد بود، یعنی هر یک‌ثانیه یک‌بار، چراغ LED، روشن و خاموش می‌شود!تمرینبرنامه‌ای بنویسید که فقط پنج‌بار چراغ LED را روشن و خاموش کند و پس از آن (پنجمین بار)، دیگر چراغ LED، روشن و خاموش نشود؟نکته: سعی کنید که سورس‌کد ذیل را مشاهده نکرده و ابتدا خودتان این برنامه را بنویسید.سورس‌کد شماره چهارint counter = 1;

void setup() {
    pinMode(LED_BUILTIN, OUTPUT);
    digitalWrite(LED_BUILTIN, LOW);
}

void loop() {
    if (counter &lt;= 5) {
        delay(1000);
        digitalWrite(LED_BUILTIN, HIGH);
        delay(1000);
        digitalWrite(LED_BUILTIN, LOW);

        counter = counter + 1;
    }
}سعی کنید که کد فوق را قدم به قدم و خط به خط Trace نمایید. در سورس‌کد فوق، زمانی که برای پنجمین بار چراغ LED، روشن و خاموش می‌شود، متغیر (Variable) Counter، مقدارش، از عدد پنج به عدد شش تغییر پیدا می‌کند و از تابع خارج می‌شود. مجددا زمانی که Board، تابع loop را اجرا می‌کند، ابتدا دستور if اجرا می‌شود و چون مقدار counter از پنج بزرگ‌تر است، دیگر وارد بلوک (Block) if نمی‌شود و صرفا از تابع خارج می‌شود. پس اگر تا ابد این Board، روشن بماند، هرچند که چراغ LED، دیگر روشن و خاموش نمی‌شود، ولی تابع loop تا ابد اجرا می‌شود! پس باید توجه داشته باشیم که ما جلوی اجرا تابع loop را نمی‌توانیم بگیریم! ولی می‌توانیم با نوشتن یک شرط ساده، نگذاریم، کاری که قبل از آن انجام می‌گشت، دوباره انجام شود.نکته: در تمرین فوق، ما متغیری به نام counter یا شمارنده تعریف کردیم. این متغیر یک کلیدواژه نیست! می‌تواند هر نامی داشته باشد! مثلا googooli![تاکتیک]: باید دقت داشته باشیم که به عنوان یک حرفه‌ای در زمان نام‌گذاری متغیرها به نکات ذیل دقت داشته باشیم:از متغیرهای بی‌معنا استفاده نمی‌کنیم! مثلا از متغیرهایی با اسامی x, y , i غیره استفاده نمی‌کنیم! هر چند که در اجرای برنامه هیچ‌گونه تاثیری ندارد و اگر به جای متغیر counter، از i هم استفاده می‌کردیم، برنامه بدون هیچ‌گونه مشکلی و به درستی اجرا می‌شد، ولی این عمل یک عمل حرفه‌ای نیست!از اسامی مخفف شده استفاده نمی‌کنیم! مثلا اگر می‌خواهیم یک متغیر به description تعریف کنیم، دقیقا به همین نام تعریف می‌کنیم، و نام آن‌را مخفف (مثلا desk) نمی‌کنیم!از اسامی پینگلیش استفاده نمی‌کنیم! مثلا اگر می‌خواهیم یک متغیر به نام تعداد درخت تعریف نماییم، خیلی شیک و مجلسی، آن‌را triCount تعریف می‌کنیم، و از نوشتن عبارت tedadeDerakht به شدت اجتناب می‌کنیم!در زمان تعریف یک متغیر، از تکنیک Camel Case استفاده می‌کنیم! یعنی تمام حروف کلمه اول، باید با حروف کوچک نوشته شده و کلمات بعد حرف اول آن‌ها بزرگ و بقیه حروف، با حروف کوچک نوشته شود! مثلا اگر می‌خواهیم متغیری به نام تعداد درخت تعریف نماییم، دقیقا باید به صورت triCount نوشته شود و از نوشتن مدل‌های عجیب و غریب، مانند TriCount, TRICOUNT, TRI_COUNT و غیره به شدت اجتناب می‌کنیم.در زمان تعریف یک متغیر، یک‌بار به خودمان زحمت داده و لغت درست را با معنی درست، از دیکشنری پیدا کرده و یا از طریق Microsoft Word، دیکته درست آن‌را بررسی می‌کنیم! به عنوان مثال، در نمونه‌های فوق، اینجانب به عمد! و به اشتباه! درخت را Tri نوشتم! و قطعا بسیاری از شما که مرا نمی‌شناسید، با خود گفته‌اید که عجب آدم بی‌سوادی است! و قطعا به ریشم نیز خندیده‌اید! و البته کاملا هم حق دارید! در صورتی که اینجانب باید از Google Translate ترجمه درخت، که Tree می‌باشد را جستجو می‌کردم و نام متغیر را به درستی و به صورت treeCount تعریف می‌کردم! پس برای این‌که یک عمر مورد تمسخر دیگران قرار نگیرید! روی ترجمه درست، دیکتیشن درست، به شدت توجه داشته باشید.تمرین کاربردیبسیاری از شما با کد مورس آشنایی دارید، و یا آن‌را شنیده‌اید. این کدها یا به صورت صدا و یا نور ایجاد و منتشر می‌شوند. حال می‌خواهیم با استفاده از چراغ LED، اقدام به ارسال کد مورس SOS (یعنی کمک) کنیم:کد مورس برای SOS:S O S: . . . _ _ _ . . .ابتدا خودتان سعی کنید که کد مذکور را بنویسید و سپس از کدی که در اختیار شما قرار داده می‌شود استفاده نمایید:سورس‌کد شماره پنجint dit = 150; // Setting Value of dit as 150 milliseconds
int dah = 500; // Setting Value of dah as 500 milliseconds
int longWait = 1000; // Setting value of longWait as 1000 milliseconds

void setup() {
    pinMode(LED_BUILTIN, OUTPUT);
    digitalWrite(LED_BUILTIN, LOW);
}

void loop() {
    // *** S ***
    // DIT
    digitalWrite(LED_BUILTIN, HIGH);
    delay(dit);
    digitalWrite(LED_BUILTIN, LOW);
    delay(dit);

    //DIT
    digitalWrite(LED_BUILTIN, HIGH);
    delay(dit);
    digitalWrite(LED_BUILTIN, LOW);
    delay(dit);

    //DIT
    digitalWrite(LED_BUILTIN, HIGH);
    delay(dit);
    digitalWrite(LED_BUILTIN, LOW);
    delay(dah);

    // *** O ***
    //DAH
    digitalWrite(LED_BUILTIN, HIGH);
    delay(dah);
    digitalWrite(LED_BUILTIN, LOW);
    delay(dah);

    //DAH
    digitalWrite(LED_BUILTIN, HIGH);
    delay(dah);
    digitalWrite(LED_BUILTIN, LOW);
    delay(dah);

    //DAH
    digitalWrite(LED_BUILTIN, HIGH);
    delay(dah);
    digitalWrite(LED_BUILTIN, LOW);
    delay(dah);

    // *** S ***
    // DIT
    digitalWrite(LED_BUILTIN, HIGH);
    delay(dit);
    digitalWrite(LED_BUILTIN, LOW);
    delay(dit);

    //DIT
    digitalWrite(LED_BUILTIN, HIGH);
    delay(dit);
    digitalWrite(LED_BUILTIN, LOW);
    delay(dit);

    //DIT
    digitalWrite(LED_BUILTIN, HIGH);
    delay(dit);
    digitalWrite(LED_BUILTIN, LOW);
    delay(dah);

    //Giving a Gap before restarting
    delay(longWait);
}تشکر و تقدیربا تشکر از امیر بادامچی عزیز، بابت ویرایش علمی و متنی این مقالهپایان</description>
                <category>Dariush Tasdighi - داریوش تصدیقی</category>
                <author>Dariush Tasdighi - داریوش تصدیقی</author>
                <pubDate>Tue, 13 Jun 2023 22:46:25 +0330</pubDate>
            </item>
                    <item>
                <title>آموزش جامع برد Arduino Uno - قسمت چهارم!</title>
                <link>https://virgool.io/@dariush-tasdighi/%D8%A2%D9%85%D9%88%D8%B2%D8%B4-%D8%AC%D8%A7%D9%85%D8%B9-%D8%A8%D8%B1%D8%AF-arduino-uno-%D9%82%D8%B3%D9%85%D8%AA-%DA%86%D9%87%D8%A7%D8%B1%D9%85-fdzeq5k8kpuk</link>
                <description>توجه: این مقاله به مرور زمان، ویرایش و یا تکمیل می‌شود!تقاضا: در صورتی که با مشکل تایپی، دستوری و یا مفهومی در این مقاله برخورد کردید، از شما دوست عزیز و گرامی، صمیمانه تقاضا می‌کنم که اینجانب را مطلع کرده، تا نسبت به تصحیح و یا تکمیل آن، در اسرع وقت، اقدام نمایم.با کمال تشکرداریوش تصدیقیکلیه اطلاعات تماس: https://DTAT.irنسخه مقاله: ۱.۰ - تاریخ بروزرسانی: ۱۴۰۱/۰۳/۲۳با سلام و احترام خدمت دوستان عزیزم، اول این‌که چرا از قسمت چهارم شروع کردم! چون علاقه خاصی به مجموعه فیلم‌های Star Wars دارم، و اگر در جریان تولید و پخش این مجموعه فیلم‌ها باشید، خواهید فهمید که اولین قسمت این مجموعه با شماره چهار آغاز گردید! و بعدها (سی سال بعد) سه قسمت اول تولید شدند! به هر حال چون راه‌اندازی و اتصالات اولیه این Board به سه جلسه نیاز دارد، نوشتن مقاله در این خصوص را فعلا به بعد موکول کردم (البته نه به سی‌سال دیگر :-) ) و از این جلسه می‌خواهم برنامه‌نویسی بر روی این Board را آموزش دهم.آموزش برنامه‌نویسی بر روی برد Arduino Uno و یا Arduino Nano (قسمت اول)پیش‌نیاز این دورهآشنایی با مفاهیم اولیه برنامه‌نویسی و الگوریتم و فلوچارتدانلود کامپایلر و محیط برنامه‌نویسی Arduino IDEوارد نشانی ذیل شده و آخرین نسخه فایل Setup آن‌را دانلود و نصب می‌کنیم:https://www.arduino.cc/en/softwareنکات جالبنسخه قدیمی این محیط، نسخه ۱.۸.۱۹ بود که با یک انقلابی، متحول شد و نسخه ۲ نسخه پیشنهادی و مناسب می‌باشد.این محیط کاملا سورس‌باز (Open Source) می‌باشد و می‌توانیم سورس‌کد این محیط را از نشانی ذیل دانلود و مشاهده نماییم:https://github.com/arduino/arduino-ideمی‌توانیم به صورت آنلاین، کدنویسی کنیم و در مرحله اول، و خصوصا برای یادگیری، شاید نیازی به دانلود و نصب این محیط نباشد! خصوصا می‌توانیم آموزش‌ها را مطالعه کرده و عملیات شبیه‌سازی Board را با استفاده از محیط‌های قابل برنامه‌نویسی و شبیه‌ساز انجام داده و در صورتی که موضوع برای ما جذاب و هیجان‌انگیز بود، نسبت به خرید Board و دانلود و نصب محیط Arduino IDE اقدام نماییم:https://create.arduino.cc/editorسایت فوق‌العاده دیگری که مشابه این امکانات را به ما می‌دهد:https://www.tinkercad.comوارد برنامه Arduino IDE می‌شویم و پس از اتصال Arduino Uno Board به دستگاه، اقدام به برنامه‌نویسی می‌کینم. در مقاله دیگری، نکاتی که در خصوص اتصال و راه‌اندازی اولیه وجود دارد به شما عزیزان آموزش داده می‌شود.نکاتی که در خصوص این زبان برنامه‌نویسی باید بدانیمزبان برنامه‌نیسی، زبان C یا ++C می‌باشد.این زبان، یک زبان Case Sensitive می‌باشد و حروف بزرگ و کوچک برای آن اهمیت دارد.در انتهای اکثر (نه همه!) دستورات باید یک Semicolon (;) قرار دهیم.در ابتدای کار، با دو تابع مواجه می‌شویم، به نام‌های setup و loop. حضور و وجود این دو تابع بسیار مهم می‌باشد! و ما نمی‌توانیم حتی یکی از آن‌ها را (حتی اگر به آن، نیازی نداریم) حذف کرده و یا نام آن‌ها را تغییر دهیم.تابع Setup برای پیکربندی اولیه می‌باشد، مثلا در داخل این تابع اعلام می‌کنیم که می‌خواهیم پین (PIN) شماره ۴، به عنوان ورودی یا خروجی در نظر گرفته شود.تابع Loop، برای نوشتن اصل فعل و انفعالاتی است که می‌خواهیم به صورت نامحدود انجام شده و تکرار شوند، مثلا می‌خواهیم از لحظه‌ای که دستگاه روشن می‌شود، LED (چراغ) روی Board در فاصله زمانی یک ثانیه یک‌بار روشن و خاموش شود.نکته: هرگاه در حین آموزش با کلمه [الکترونیک] مواجه شدید، این بدان معنا است که باید در آن خصوص، کمی دانش مبانی الکترونیک داشته باشید و سپس اقدام نمایید. در طی این سری مقالات به مرور این موضوعات را نیز  به صورت مقالات جداگانه‌ای منتشر خواهم کرد و لینک مورد نظر را به روز رسانی خواهم نمود.نکته: از آنجایی که این دوره (انشاءالله) به صورت یک دوره مجازی و به همراه فیلم آموزشی خواهد بود، شاید توضیحات خیلی مبسوطی در هنگام نوشتن سورس‌کد‌ها گفته نشود و صرفا کد مذکور نوشته شده و نکات آموزشی آن در فیلم‌های آموزشی به طور کامل گفته خواهند شد:سورس‌کد شماره یکvoid      setup      (     )         {
            }

void         loop                 (      )         {
                      }کد فوق در کمال شلختگی نوشته شده است! لذا باید همیشه عادت کنیم، ضمن این‌که از حداقل اصول نگارش در سورس‌کدها استفاده نماییم، هر از گاهی از دکمه‌های ترکیبی CTRL+T استفاده نماییم تا محیط IDE، سورس‌کد ما را مرتب نماید.نکته: با تجربه ۳۳ ساله در حوزه برنامه‌نویسی و با داشتن بیش از ۱۶ هزار دانش‌پژوه، تجربه به اینجانب ثابت کرده است که شخصی که دراز مدت، به شکل شلخته فوق، برنامه‌نویسی می‌کند، یا به سرانجام نخواهد رسید و یا افراد و شرکت‌هایی که با وی کار خواهند کرد را به شدت دچار چالش می‌کند!سورس‌کد شماره دوvoid setup() {
}

void loop() {
}بر خلاف زبان‌های برنامه‌نویسی، مانند زبان C, C++, C#, Java و غیره، در این محیط، دیسیپلین [تاکتیک] نوشتن کد به گونه‌ای است که توصیه می‌شود که آکولاد باز، در مقابل دستور نوشته شود و نه در ذیل آن:سورس‌کد شماره  سهvoid setup()
{
}

void loop()
{
}نکته:‌ نوشتن دستورات به شکل فوق، مطلقا غلط نمی‌باشد!نکته: در طی این دوره، وقتی از کلمه تاکتیک استفاده می‌کنم، این بدان معنا است که عدم رعایت آن، هیچ‌گونه مشکلی در سورس‌کد برنامه و یا اجرای آن ایجاد نمی‌کند! بلکه اگر رعایت نکنیم و یک شخص باتجربه و حرفه‌ای سورس‌کد ما را ملاحظه کند، ممکن است که توی ذوق وی خورده! و از تجربه و تخصص ما مایوس شود! پس تقاضا می‌کنم که به تاکتیک‌هایی که عنوان می‌شود، برای بالا بردن پرستیژ و پرنسیو تخصصی و شخصی خود دقت نمایید!بر روی Arduino Uno Board یک LED (چراغ) وجود دارد که معمولا در ابتدا می‌خواهیم کنترل روشن و خاموش شدن آن‌را برعهده بگیریم.بر روی Arduino Uno Board یک تعداد مربع‌های سیاه‌رنگ سوراخ‌دار در لبه‌های آن قرار دارند، که به آن‌ها اصطلاحا PIN گفته می‌شود.ما م‌توانیم برای هر PIN ای که می‌خواهیم با آن کار کنیم، اعلام نماییم که می‌خواهیم به آن سیگنال ارسال کنیم (OUTPUT) و یا از آن سیگنال دریافت کنیم (INPUT).مثلا اگر بخواهیم به یک LED دستور بدهیم که روشن شود و یا خاموش شود، در واقع به آن سیگنال ارسال می‌کنیم، پس پایه‌ای (PIN)  که به آن LED متصل شده است، باید به عنوان پایه خروجی (OUTPUT) تعریف شود.یا مثلا اگر بخواهیم در مدار خود یک دکمه (Button) قرار داده و زمانی که کاربر بر روی آن فشار می‌دهد، متوجه شده و اقدامی انجام دهیم، در این حالت پایه‌ای که دکمه را به آن متصل کرده‌ایم، به ما سیگنال ورود (INPUT) ارسال می‌کند و باید در قسمت پیکربندی (تابع setup)، آن‌را به عنوان پایه ورودی تعریف نماییم.چراغ (LED) موجود روی Board، به صورت پیش‌فرض، روی پایه ۱۳ نصب شده است. لذا در قسمت پیکربندی، ابتدا این موضوع را به Board اعلام می‌کنیم.سپس سیگنال یک (High) را به این پایه ارسال می‌کنیم، تا اصطلاحا این LED روشن شود:سورس‌کد شماره چهارvoid setup() {
    pinMode(13, OUTPUT);
    digitalWrite(13, 1);
}

void loop() {
}یک‌بار بر روی دکمه Verify که به شکل یک تیک می‌باشد (در Toolbar) کلیک می‌کنیم که از سالم بودن سورس‌کد خود اطمینان حاصل کنیم.سپس بر روی دکمه Upload که به شکل یک فلش به سمت راست می‌باشد (در کنار دکمه Verify)، کلیک می‌کنیم، تا دستورات ما به Board، آپلود شده و اجرا شود. پس از اجرای این دستور خواهید دید که LED موجود بر روی Board روشن می‌شود.حال می‌خواهیم این LED را خاموش کنیم، مجددا روال قبل را انجام داده و این‌بار سورس‌کد را به شکل ذیل تغییر می‌دهیم:سورس‌کد شماره پنجvoid setup() {
    pinMode(13, OUTPUT);
    digitalWrite(13, 0);
}

void loop() {
}خواهیم دید که این‌بار، پس از اجرای برنامه، چراغ LED، خاموش می‌شود، و البته خاموش می‌ماند.تابع (Function) pinMode دو پارامتر دریافت می‌کند. پارامتر اول، شماره پنن می‌باشد و پارامتر دوم، ورودی یا خروجی بودن آن‌را اعلام می‌کند.تابع digitalWrite نیز دو پارامتر دریافت می‌کند. پارامتر اول، شماره پین بوده و پارامتر دوم ارسال سیگنال صفر و یک (HIGH, LOW) یا به طور خلاصه روشن، خاموش را به پین مذکور ارسال می‌کند.نکته: ما دستوری به نام analogWrite نیز داریم که در جای خود آموزش داده می‌شود.همان‌طور که در دستورات فوق ملاحظه می‌کنید، عدد ۱۳ و اعداد صفر و یک، چندان حس خوبی به ما نمی‌دهد و خوانایی سورس‌کد ما خیلی بالا نیست! و برای شخصی که می‌خواهد این سورس‌کد را ملاحظه کرده و متوجه شود، یا حتی خودمان، آن‌هم وقتی چندین ماه از نوشتن این سورس‌کد گذشته باشد، درک و فهم این سورس‌کد در دراز مدت، چندان کار ساده‌ای نمی‌باشد. برای این منظور می‌توانیم از متغیرهایی (در واقع ثابت‌هایی) استفاده کنیم که به صورت Built In (از پیش تعریف شده) در این محیط تعریف شده‌اند. مثلا به جای عدد ۱۳، می‌توانیم از کلمه LED_BUILTIN استفاده نماییم، و به جای استفاده از صفر (0) و یک (1)، از کلمات LOW و HIGH استفاده نماییم:سورس‌کد شماره ششvoid setup() {
    pinMode(LED_BUILTIN, OUTPUT);
    digitalWrite(LED_BUILTIN, HIGH);
}

void loop() {
}همان‌گونه که ملاحظه می‌کنید، سورس‌کد ما دقیقا همان کار قبلی را انجام می‌دهد، ولی سورس‌کد از خوانایی مناسب‌تری برخوردار شده است. این دقیقا همان تاکتیک یا تاکتیک حرفه‌ای‌گری است!تشکر و تقدیربا تشکر از امیر بادامچی عزیز، بابت ویرایش علمی و متنی این مقالهپایان</description>
                <category>Dariush Tasdighi - داریوش تصدیقی</category>
                <author>Dariush Tasdighi - داریوش تصدیقی</author>
                <pubDate>Tue, 13 Jun 2023 18:36:33 +0330</pubDate>
            </item>
                    <item>
                <title>راه اندازی اولیه دستگاه Raspberry Pi از طریق سیستم عامل ویندوز</title>
                <link>https://virgool.io/@dariush-tasdighi/%D8%B1%D8%A7%D9%87-%D8%A7%D9%86%D8%AF%D8%A7%D8%B2%DB%8C-%D8%A7%D9%88%D9%84%DB%8C%D9%87-%D8%AF%D8%B3%D8%AA%DA%AF%D8%A7%D9%87-raspberry-pi-%D8%A7%D8%B2-%D8%B7%D8%B1%DB%8C%D9%82-%D8%B3%DB%8C%D8%B3%D8%AA%D9%85-%D8%B9%D8%A7%D9%85%D9%84-%D9%88%DB%8C%D9%86%D8%AF%D9%88%D8%B2-lcip0heept23</link>
                <description>توجه: این مقاله به مرور زمان، ویرایش و یا تکمیل می‌شود!تقاضا: در صورتی که با مشکل تایپی، دستوری و یا مفهومی در این مقاله برخورد کردید، از شما دوست عزیز و گرامی، صمیمانه تقاضا می‌کنم که اینجانب را مطلع کرده، تا نسبت به تصحیح و یا تکمیل آن، در اسرع وقت، اقدام نمایم.با کمال تشکرداریوش تصدیقیکلیه اطلاعات تماس: https://DTAT.irنسخه مقاله: ۱.۴ - تاریخ بروزرسانی: ۱۴۰۱/۰۳/۲۰یک SSD، حداقل شانزده گیگ (16GB)، و ترجیحا با کیفیت (Class 10) تهیه می‌کنیم:Samsung EVO PlusSanDisk Extreme (A2)SanDisk Extreme PRO (A2)نکته:‌ قبلا اگر اندازه SSD بیش از ۳۲ گیگابایت بود، با مشکلاتی روبرو می‌شدیم، ولی در حال حاضر می‌توانیم از SSD های با ظرفیت ۶۴ و ۱۲۸ گیگ هم استفاده نماییم.ابتدا به نشانی ذیل می‌رویم:https://www.raspberrypi.com/softwareسپس بر روی لینک Download for Windows، کلیک می‌کنیم، تا Raspberry Pi Imager دانلود گردد.نکته: برنامه Raspberry Pi Imager، برنامه‌ای است که از طریق آن می‌توانیم کارت SSD را Format کرده و فایل‌های سیستم‌عامل را که در ادامه دانلود خواهیم کرد را بر روی کارت SSD کپی نماییم.حال از قسمت پایین، بر روی لینک See all download options، کلیک می‌کنیم، تا وارد صفحه ذیل شویم:https://www.raspberrypi.com/software/operating-systemsدر صفحه ظاهر شده، اگر بخواهیم یک نسخه خیلی سبک دانلود نماییم، گزینه Raspberry Pi OS Lite را انتخاب می‌کنیم، و اگر بخواهیم این نسخه مجهز به نسخه Desktop باشد، گزینه Raspberry Pi OS with desktop را انتخاب می‌کنیم.ولی اگر بخواهیم، به غیر کارهایی که می‌خواهیم در زمینه IOT, AI, Robotics,... انجام دهیم، کمی هم به خودمان هیجان داده و از امکانات بیشتری استفاده نماییم، گزینه ذیل را انتخاب می‌کنیم:Raspberry Pi OS with desktop and recommended softwareو در این آموزش نیز، ما این گزینه آخر را انتخاب می‌کنیم.نکته: این فایل به صورت فشرده بوده و در حدود ۲ و نیم گیگابایت می‌باشد. باید دقت داشته باشیم که حجم کل فایل‌های سیستم‌عامل انتخابی بعد از Extract شدن حدود ۹ گیگا باید خواهد بود.نکته: نیازی نیست که فایل دانلود شده را Extract نماییم. ما از همین فایل فشرده‌ای که حدود ۲.۵ گیگابایت می‌باشد، در برنامه Imager استفاده خواهیم کرد.کارت SSD را به لپتاپ یا Desktop خود متصل می‌کنیم.برنامه Imager را نصب کرده و وارد آن می‌شویم.در برنامه Imager، ابتدا گزینه CHOOSE OS را انتخاب کرده و سپس گزینه Erase را انتخاب می‌کنیم. سپس بر روی گزینه CHOOSE STORAGE کلیک می‌کنیم، تا یک پنجره ظاهر شود. در این پنجره کارت SSD خودمان را انتخاب می‌کنیم. پس از انتخاب، مجددا به صفحه قبل هدایت می‌شویم و حال بر روی دکمه WRITE، کلیک می‌کنیم تا عملیات Erase یا اصطلاحا Format صورت گیرد. پس از انتخاب این دکمه، برنامه از ما سوال کرده و گزینه Yes را برای ادامه عملیات انتخاب می‌کنیم. این عملیات کمی طول می‌کشد و در نهایت پنجره‌ای ظاهر شده و به ما اعلام می‌کند که کارت SSD با موفقیت پاک (Erase) گردید.مجددا در پنجره اصلی برنامه، بر روی گزینه Operating System، کلیک می‌کنیم و این‌بار گزینه Use custom را انتخاب می‌کنیم و در پنجره ظاهر شده، فایل Extract نشده (با پسوند img.xz.) را انتخاب می‌کنیم. پس از انتخاب فایل مورد نظر، در پنجره اصلی برنامه بر روی گزینه CHOOSE STORAGE کلیک کرده و کارت SSD‌ را انتخاب می‌کنیم.قبل از انتخاب دکمه WRITE، بر روی دکمه چرخ‌دنده! کلیک می‌کنیم تا گزینه‌های دیگری را تنظیم کنیم.توجه: این گزینه تنظیمات، در نسخه‌های قبل وجود نداشت و برای انجام مواردی که در ذیل به آن‌ها اشاره خواهد شد، تقریبا اشک در چشمان‌مان جمع می‌شد! پس شایسته است تا قدر این پنجره تنظیمات را بدانیم!پس از انتخاب دکمه Save، وارد پنجره اصلی برنامه شده و حال بر روی گزینه WRITE کلیک می‌کنیم تا عملیات انتقال فایل‌های سیستم‌عامل، بر روی کارت SSD صورت گیرد.نکته مهم: در قسمت SSID مربوط به Configure wireless LAN، باید دقت داشته باشیم که نباید به وایرلس و یا نسخه‌ای از 5G وصل شویم! باید نام وایرلس و یا نسخه‌ای را مشخص کنیم (تایپ کنیم) که نسخه 2.4G باشد!نکته:‌ در قسمت تنظیمات، فرض بر آن است که شناسه‌کاربری و گذرواژه مربوط به ssh را برابر مقادیر ذیل قرار داده‌ایم:Username: pi
Password: raspberryسناریوی اولاگر این کارت SSD را در داخل دستگاه Raspberry Pi قرار دهیم و یک ماوس، یک کی‌بورد و یک یا دو مانیتور را به دستگاه Raspberry Pi متصل نموده و سپس دستگاه را روشن کنیم، می‌توانیم مانند یک سیستم کامل و هیجان‌انگیز، از امکانات آن استفاده نماییم.سناریوی دوم (روش Headless)از آنجایی که ممکن است ما، مانیتور، کی‌بورد و ماوس اضافه، برای راه‌اندازی مستقل دستگاه Raspberry Pi نداشته باشیم! می‌خواهیم مسیری را طی کنیم که در این مسیر، صرفا پس از قرار دادن کارت SSD در داخل دستگاه Raspberry Pi، و متصل کردن کابل شبکه به آن و روشن کردن دستگاه، صرفا از طریق دستگاه (رایانه) خودمان به آن متصل شده و آن‌را مدیریت کرده و حتی محیط GUI آن‌را مشاهده نماییم.نکته: به این نوع راه‌اندازی دستگاه Raspberry Pi (سناریوی دوم)، روش Headless اطلاق می‌شود.برای این‌که بتوانیم از طریق رایانه شخصی خود به Raspberry Pi متصل شویم، باید برنامه‌ای به نام PuTTY را دانلود و نصب نماییم. باید دقت داشته باشیم که اگر سیستم‌عامل دستگاه ما ۶۴ بیتی می‌باشد، بهتر است که نسخه ۶۴ بیتی این برنامه (PuTTY) را دانلود و نصب نماییم.https://www.putty.orgبدست آوردن آی‌پی (IP) دستگاه Raspberry Piراه اولبر روی دستگاه (رایانه) شخصی، و در محیط Command Prompt و یا PowerShell دستور ذیل را می‌نویسیم تا IP دستگاه Raspberry Pi بدست آید:ping raspberrypi.localراه دوماز طریق اتصال به دستگاه Router یا Wireless به نشانی (معمولا):http://192.168.1.1Username: admin
Password: adminو ورود به محیط کنترل‌پنل Router، آی‌پی (IP) دستگاه Raspberry Pi را بدست می‌آوریم.در این مثال، فرض می‌کنیم که IP دستگاه Raspberry Pi، به عنوان مثال 192.168.1.2 می‌باشد.وارد برنامه PuTTY شده و اقدام به اتصال به دستگاه Raspberry Pi می‌کنیم.نکته: می‌توانیم با استفاده از گزینه Save، اطلاعات مربوط به IP و Port اتصال و غیره را ذخیره کرده و هر بار آن‌ها را وارد نکنیم!حال با استفاده از شناسه‌کاربری و گذرواژه ذیل وارد دستگاه Raspberry Pi می‌شویم:Username: pi
Password: raspberryاولین کاری که بعد از ورود به محیط Shell رزبری پای انجام می‌دهیم، اجرای دستورات ذیل است:sudo apt update -y
sudo apt upgrade -yتا سیستم، کاملا Update گردد.نکته: برای این‌که مجبور نباشیم، در ابتدای هر دستور، از عبارت sudo استفاده نماییم! می‌توانیم، یک‌بار دستور ذیل را نوشته و از آن پس، دستورات را بدون پیشوند sudo بنویسیم:sudo suبرای مشاهده نسخه Firmware موجود بر روی دستگاه Raspberry Pi از دستور ذیل استفاده می‌کنیم:rpi-eeprom-updateدر صورتی که آپدیتی وجود داشته باشد، می‌توانیم با اجرای دستور ذیل، Firmware دستگاه را آپدیت کرده و سپس سیستم را یک‌بار Reboot می‌کنیم:apt full-upgrade
rpi-eeprom-update -d -a
rebootنکته مهم: دستور ذیل چندان توصیه نمی‌شود! و اولین بار که آن‌را اجرا می‌کنیم، با پیغام‌های ترسناکی مواجه می‌شویم، ولی از آن‌جایی که اینجانب ذهن وسواسی دارم! ترجیح می‌دهم که همه چیز آپدیت باشد، لذا دستور ذیل را اجرا کرده و سپس دستگاه را Reboot می‌کنیم:rpi-update
rebootبرای تغییر دادن تنظیمات دستگاه Raspberry Pi از دستور ذیل استفاده می‌کنیم:raspi-configدر صورتی که در این محیط Configuration، تغییراتی ایجاد نماییم، باید بعد از بسته شدن پنجره و ورود مجدد به محیط Shell، با استفاده از دستور ذیل، مجددا دستگاه را یک‌بار Reboot نماییم:rebootاتصال گرافیکی (GUI) به دستگاه Raspberry Pi با استفاده از برنامه VNCدر صورتی که در زمان دانلود فایل Image، دو گزینه اول را انتخاب کرده باشیم (گزینه‌هایی که مجهز به محیط Desktop می‌باشند)، می‌توانیم از طریق دستگاه (رایانه) خودمان به آن متصل شویم.برای این منظور ابتدا از طریق برنامه PuTTY وارد محیط Shell دستگاه می‌شویم و سپس با استفاده از دستور ذیل، وارد قسمت تنظیمات دستگاه Raspberry Pi شده و گزینه VNC Server را فعال می‌کنیم.raspi-configپس از خروج از این برنامه، یک‌بار دیگر Raspberry Pi را Restart می‌کنیم:rebootوارد سایت ذیل شده و نسخه VNC Viewer را دانلود و نصب می‌کنیم:https://www.realvnc.com/en/connect/download/viewerپس از نصب برنامه VNC Viewer، آن‌را اجرا کرده و آدرس آی‌پی (IP) دستگاه Raspberry Pi را در آن نوشته و به آن Connect می‌کنیم:در صورتی که پس از انتخاب دکمه OK، با خطای ذیل مواجه شدیم:cannot currently show the desktopمی‌توانیم به نشانی ذیل رفته و مشکل را شناسایی و برطرف نماییم:https://www.tomshardware.com/how-to/fix-cannot-currently-show-desktop-error-raspberry-piپی‌نوشت:اینجانب دقیقا به همین خطای VNC برخورد کردم و با بررسی‌هایی که کردم و توصیه‌هایی که مطالعه کردم، موارد ذیل را انجام دادم و مشکل برطرف شد:از طریق دستور ذیل:raspi-configوارد قسمت Configuration شدم و رزولوشن پیش‌فرض را تغییر دادم و از طریق دستور ذیل:nano /boot/config.txtفایل Config مربوط به Boot دستگاه را با گزینه‌های ذیل تغییر دادم:start_=0
hdmi_force_hotplug=1
hdmi_enable_4kp60=1و سپس سیستم را Restart کردم:rebootو مشکل حل گردید.پایان</description>
                <category>Dariush Tasdighi - داریوش تصدیقی</category>
                <author>Dariush Tasdighi - داریوش تصدیقی</author>
                <pubDate>Fri, 09 Jun 2023 19:00:14 +0330</pubDate>
            </item>
                    <item>
                <title>آموزش پایتون (Python) - قسمت اول</title>
                <link>https://virgool.io/@dariush-tasdighi/%D8%A2%D9%85%D9%88%D8%B2%D8%B4-%D9%BE%D8%A7%DB%8C%D8%AA%D9%88%D9%86-python-%D9%82%D8%B3%D9%85%D8%AA-%D8%A7%D9%88%D9%84-v5xbcyxklmhl</link>
                <description>آموزش پایتون (Python) - قسمت اولتوجه: این مقاله به مرور زمان، ویرایش و یا تکمیل می‌شود!تقاضا: در صورتی که با مشکل تایپی، دستوری و یا مفهومی در این مقاله برخورد کردید، از شما دوست عزیز و گرامی، صمیمانه تقاضا می‌کنم که اینجانب را مطلع کرده، تا نسبت به تصحیح و یا تکمیل آن، در اسرع وقت، اقدام نمایم.با کمال تشکرداریوش تصدیقیکلیه اطلاعات تماس: https://DTAT.irنسخه مقاله: ۱.۱ - تاریخ بروزرسانی: ۱۴۰۱/۰۳/۱۷ابتدا وارد سایت پایتون شده و آخرین آن‌را (نسخه ۳) دانلود و نصب می‌نماییم.و بعد وارد محیط Command Prompt و یا PowerShell ویندوز شده و برای اطمینان از نصب شدن پایتون و نسخه آن، دستور ذیل را می‌نویسیم:python --version
Python 3.11.3سپس با استفاده از دستور ذیل، وارد محیط Shell پایتون شده و دستورات ذیل را به ترتیب اجرا کرده و نتایج اجرای دستورات را بررسی می‌کنیم:pythonبعد از ورود به محیط Shell پایتون، برای خروج از این محیط، می‌توانیم یکی از دستور ذیل را اجرا نماییم:quit()
exit()اعداد صحیح (Integer)Command and Result:
&gt;&gt;&gt; 110
110اعداد اعشاری (Float)Command and Result:
&gt;&gt;&gt; 3.14
3.14رشته یا متن (String)Command and Result:
&gt;&gt;&gt; &#039;Dariush&#039;
&#039;Dariush&#039;یاCommand and Result:
&gt;&gt;&gt; &amp;quotDariush&amp;quot
&amp;quotDariush&amp;quotنکته بسیار مهم: به دلیل باگ یا ضعفی که محیط سایت ویرگول دارد، هر جایی که من در قسمت سورس‌کد Double Quotation (&quot;) نوشته‌ام، به اشتباه آن‌را تبدیل که عبارت quot&amp;  می‌کند! لطفا به این نکته دقت بفرمایید! به همین دلیل سعی می‌کنم که از در آموزش‌های بعدی، برای رشته‌ها، به جای استفاده از Double Quotation از تک Quotation (&#x27;) استفاده نمایم!درست یا نادرست (Boolean)Command and Result:
&gt;&gt;&gt; True
TrueیاCommand and Result:
&gt;&gt;&gt; False
Falseاعداد مختلط (Complex)Command and Result:
&gt;&gt;&gt; 1 + 2j
(1 + 2j)مشاهده یا شناسایی نوع متغیرهاCommands and Results:
&gt;&gt;&gt; type(110)
&lt;class &#039;int&#039;&gt;
&gt;&gt;&gt; type(3.14)
&lt;class &#039;float&#039;&gt;
&gt;&gt;&gt; type(&#039;Dariush&#039;)
&lt;class &#039;str&#039;&gt;
&gt;&gt;&gt; type(&amp;quotDariush&amp;quot)
&lt;class &#039;str&#039;&gt;
&gt;&gt;&gt; type(&amp;quot1 + 2j&amp;quot)
&lt;class &#039;complex&#039;&gt;تعریف و مقدار اولیه متغیرها (Variables)Commands and Results:
&gt;&gt;&gt; x = 7
&gt;&gt;&gt; x
7
&gt;&gt;&gt; x * 2
14زمانی که دستوری نوشته شود که خطایی وجود داشته باشد، خطا در ذیل دستور نمایش داده می‌شود.در مثال ذیل، ما متغیری به نام y را (قبلا) تعریف نکرده‌ایم و یا مقدار اولیه‌ای به آن Assign نکرده‌ایم، لذا زمانی که می‌خواهیم محتوای آن را مشاهده نماییم، با خطای ذیل مواجه می‌شویم:Commands and Results:
&gt;&gt;&gt; y
Traceback (most recent call last):
  File &amp;quot&lt;stdin&gt;&amp;quot, line 1, in &lt;module&gt;
NameError: name &#039;y&#039; is not definedزبان پایتون، یک زبان Case Sensitive می‌باشد! یعنی نسبت به حروف بزرگ و کوچک حساس می‌باشد:Commands and Results:
&gt;&gt;&gt; a = 7
&gt;&gt;&gt; a
7
&gt;&gt;&gt; A
Traceback (most recent call last):
  File &amp;quot&lt;stdin&gt;&amp;quot, line 1, in &lt;module&gt;
NameError: name &#039;A&#039; is not definedبرای نمایش محتوای یک متغیر، می‌توانیم یکی از دو روش ذیل را انجام دهیم:Commands and Results:
&gt;&gt;&gt; x = 7
&gt;&gt;&gt; x
7
&gt;&gt;&gt; print(x)
7عملگرهای معروف در زبان برنامه‌نویسی پایتون عبارتند از:جمع: +تفریق: -ضرب: *تقسیم: /توان: **باقی‌مانده صحیح: %خارج‌قسمت صحیح: //نکته: معمولا به هر عمل محاسباتی که در داخل آن، تعدادی عملگر، متغیر و مقدار وجود داشته باشد، Expression اطلاق می‌شود.نکته: تقدم تاخر اجرای عملگرها به ترتیب عبارت است از:پرانتز: ()توانضرب و تقسیمجمع و تفریقو این عملگرها در شرایط مساوی از چپ به راست اجرا می‌شوند.مثال: محاسبه مساحت یک دایره به شعاع ۱۰Commands and Results:
&gt;&gt;&gt; r = 10
&gt;&gt;&gt; pi = 3.14
&gt;&gt;&gt; pi * r * r
314.0
&gt;&gt;&gt; area = pi * (r ** 2)
&gt;&gt;&gt; area
314.0
&gt;&gt;&gt; area = pi * r ** 2
 &gt;&gt;&gt; area
314.0
&gt;&gt;&gt; print(area)
314.0نکته: در صورتی که بخواهیم بنویسیم متغیری برابر است با خودش عملگری و چیز دیگری، می‌توانیم بنویسیم، متغیر عملگر مساوی با چیز دیگری!Commands and Results:
&gt;&gt;&gt; x = 7
&gt;&gt;&gt; x = x + 1
&gt;&gt;&gt; x
8
&gt;&gt;&gt; x += 1
&gt;&gt;&gt; x
9نکاتی در خصوص نام‌گذاری متغیرهادر نام‌گذاری متغیرها می‌توان از حروف a تا z (کوچک یا بزرگ)، اعداد (از صفر تا نه) و زیرخط (_) استفاده کرد.نمی‌توان نام متغیر را با عدد آغاز کرد!بهتر است که در زمان نام‌گذاری متغیرها از اسامی با معنی استفاده کرد! یعنی بر خلاف مثال‌های قبل که ما نام متغیرها را x و y و غیره نام‌گذاری کردیم، بهتر بود که از اسامی first_number و second_number استفاده می‌کردیم!بهتر است که در زمان نام‌گذاری متغیرها، از حروف کوچک استفاده کرده و برای جدا سازی کلمات از زیرخط (_) استفاده نماییم: first_number, last_name و غیرهنام یک متغیر نمی‌تواند یکی از کلیدواژه‌های (Keywords) زبان پایتون باشد!برای مشاهده کلیه کلیدواژه‌های زبان پایتون می‌توانیم به نشانی ذیل مراجعه نماییم:https://flexiple.com/python/python-reserved-wordshttps://www.w3schools.com/python/python_ref_keywords.aspکمی با رشته‌های (String) خودمان را سرگرم کنیم!نکته: زمانی که دو رشته را با هم جمع می‌کنیم، اصطلاحا عمل String Concatenation صورت می‌گیرد و رشته‌ها در کنار هم قرار می‌گیرند! Commands and Results:
&gt;&gt; first_name = &#039;Dariush&#039;
&gt;&gt;&gt; last_name = &#039;Tasdighi&#039;
&gt;&gt;&gt; print (first_name + last_name)
DariushTasdighi
&gt;&gt;&gt; print (first_name + &#039; &#039; + last_name)
Dariush Tasdighi
&gt;&gt;&gt; print (first_name * 3)
DariushDariushDariush
&gt;&gt;&gt; print (first_name * last_name)
ERROR!
&gt;&gt;&gt; print (first_name * 3.14)
ERROR!نکته: با توجه به ضعف سایت ویرگول، نوشتن متن دقیق پیغام خطا، شاید کار چندان ساده‌ای نبوده و سرعت نوشتن این‌گونه مقالات را به شدت کند می‌کند! لذا هرگاه که عبارت !ERROR را می‌نویسم، این بدین معنا نیست که مفسر پایتون، دقیقا همین عبارت ساده و مسخره! را می‌نویسد، بلکه یک سری جملات قابل فهم، از نوع خطایی که صورت گرفته است، به نمایش درمی‌آورد. ولی از آن‌جایی که نوشتن این متن خطا، در این سایت، کار ساده‌ای نمی‌باشد، صرفا به نوشتن عبارت ساده و مسخره !ERROR بسنده می‌کنم.همانطور که در مثال‌های فوق ملاحظه می‌کنیم، ضرب کردن یک عدد صحیح در یک رشته با معنی بوده و به تعداد عدد صحیح، رشته مذکور را تکرار می‌کند! که البته خیلی هیجان‌انگیز است!ولی باید دقت داشته باشیم که:ضرب دو رشته در هم، بی‌معنا است!ضرب یک عدد اعشاری، در یک رشته نیز بی‌معنا می‌باشد!با احترامداریوش تصدیقی</description>
                <category>Dariush Tasdighi - داریوش تصدیقی</category>
                <author>Dariush Tasdighi - داریوش تصدیقی</author>
                <pubDate>Wed, 07 Jun 2023 08:32:58 +0330</pubDate>
            </item>
                    <item>
                <title>آموزش Robotic و IOT با Raspberry Pi Pico - قسمت اول</title>
                <link>https://virgool.io/@dariush-tasdighi/%D8%A2%D9%85%D9%88%D8%B2%D8%B4-robotic-%D8%A8%D8%A7-raspberry-pi-pico-%D9%82%D8%B3%D9%85%D8%AA-%D8%A7%D9%88%D9%84-inxduqljvsuh</link>
                <description>آموزش Robotic با Raspberry Pi Picoتوجه: این مقاله به مرور زمان، ویرایش و یا تکمیل می‌شود!تقاضا: در صورتی که با مشکل تایپی، دستوری و یا مفهومی در این مقاله برخورد کردید، از شما دوست عزیز و گرامی، صمیمانه تقاضا می‌کنم که اینجانب را مطلع کرده، تا نسبت به تصحیح و یا تکمیل آن، در اسرع وقت، اقدام نمایم.با کمال تشکرداریوش تصدیقیکلیه اطلاعات تماس: https://DTAT.irنسخه مقاله: ۱.۲ - تاریخ بروزرسانی: ۱۴۰۱/۰۳/۲۱دانلود و نصبنرم‌افزارهایی که توصیه می‌شود که در ابتدا آن‌ها را دانلود و سپس نصب نماییم:GIThttps://git-scm.comThonnyhttps://thonny.orgPython (3.x)https://www.python.orgدانلود و نصب برنامه‌های ذیل، برای شروع، الزامی نمی‌باشند!Visual Studio Codehttps://code.visualstudio.com/downloadArduinohttps://www.arduino.cc/en/softwareCMakehttps://cmake.org/downloadGCC ARM None EABIhttps://developer.arm.com/downloads/-/gnu-rmسایت‌های شبیه‌سازیک سایت فوق‌العاده و هیجان‌انگیز که بسیاری از پروژه‌ها در این دوره، ابتدا در داخل آن شبیه‌سازی می‌شوند:https://wokwi.comپنج سایت فوق‌العاده دیگر و هیجان‌انگیز دیگر برای یادگیری و شبیه‌سازی مدارهای الکترونیکی، می‌توانند مورد استفاده قرار گیریند:سایت ذیل کاملا رایگان بوده و شماتیک بسیار خوبی دارد و علاوه بر شبیه‌سازی مدارهای الکترونیکی، به طور تخصصی برای شبیه‌سازی بوردهای Arduino استفاده می‌شود:https://www.tinkercad.comتوجه: متاسفانه دو سایت ذیل، ضمن داشتن امکانات هیجان‌انگیز و شماتیک زیبا، امکان ذخیره مدار را تا قبل از پرداخت هزینه، نمی‌دهند!https://www.circuitlab.comhttps://dcaclab.com/labدو سایت ذیل، هر چند که شماتیک خیلی بالایی ندارند و کمی حرفه‌ای‌تر بوده و کار کردن با آن‌ها کمی سخت‌تر است! ولی کاملا رایگان بوده و امکان ذخیره مدار و حتی Export کردن آن را به ما می‌دهند:https://lushprojects.com/circuitjshttps://www.falstad.com/circuitابزارهای آنلاینسایت‌هایی که به صورت آنلاین، ابزارهای مناسبی برای محاسبات در الکترونیک در اختیار ما قرار می‌دهند:LED Series Resistor Calculator4 Band Resistor Color Code Calculatorخرید قطعاتRaspberry Pi Picohttps://www.digikala.comنکته: نسخه‌های Raspberry Pico Pi W و Raspberry Pi Pico H و Raspberry Pi Pico WH به طور غیرطبیعی در ایران گران می‌باشد و در حال حاضر خرید آن‌را توصیه نمی‌کنم!تفاوت نسخه‌های Raspberry Pi Picohttps://www.raspberrypi.com/documentation/microcontrollers/raspberry-pi-pico.htmlقیمت‌های بین‌المللیRaspberry Pi Pico (4$)Raspberry Pi Pico H (About 6$)Raspberry Pi Pico W (About 7$)Raspberry Pi Pico WH (About 10$)نکته: نسخه Raspberry Pi Pico Plus، نسخه اوریجینال کشور انگلستان نمی‌باشد و یک نسخه بومی ایرانی می‌باشد!نکته: با تحقیقی که تا این لحظه انجام دادم، قیمت این کالا در سایت دیجی‌کالا از بقیه سایت‌ها ارزان‌تر می‌باشد.دانلود کتابhttps://docs.micropython.org/en/latest/micropython-docs.pdfچرا به جای Arduino Uno R3 از این بورد استفاده می‌کنم؟آشنایی با ورودی‌ها و خروجی‌های Raspberry Pi Picoمنابعhttps://docs.micropython.org/en/latestبا احترامداریوش تصدیقی</description>
                <category>Dariush Tasdighi - داریوش تصدیقی</category>
                <author>Dariush Tasdighi - داریوش تصدیقی</author>
                <pubDate>Tue, 06 Jun 2023 14:39:20 +0330</pubDate>
            </item>
                    <item>
                <title>آموزش و مرجع کامل يک Package Manager فوق‌العاده برای Windows به نام Chocolatey</title>
                <link>https://virgool.io/@dariush-tasdighi/%D9%8A%DA%A9-package-manager-%D9%81%D9%88%D9%82-%D8%A7%D9%84%D8%B9%D8%A7%D8%AF%D9%87-%D8%A8%D8%B1%D8%A7%DB%8C-windows-felwbfuzmblw</link>
                <description>آموزش و مرجع کامل يک Package Manager فوق‌العاده برای Windows به نام Chocolateyتوجه: این مقاله به مرور زمان، ویرایش و یا تکمیل می‌شود!تقاضا: در صورتی که با مشکل تایپی، دستوری و یا مفهومی در این مقاله برخورد کردید، از شما دوست عزیز و گرامی، صمیمانه تقاضا می‌کنم که اینجانب را مطلع کرده، تا نسبت به تصحیح و یا تکمیل آن، در اسرع وقت، اقدام نمایم.با کمال تشکرداریوش تصدیقیکلیه اطلاعات تماس: https://DTAT.irنسخه مقاله: ۱.۶ - تاریخ بروزرسانی: ۱۴۰۱/۱۰/۲۱اسپانسر این مقاله: شرکت داد و ستد هستی https://hasti.coاسپانسر این مقاله: شرکت داد و ستد هستیآموزش Chocolateyیکی از دغدغه‌های ما در محیط Windows، همیشه این بوده است که باید برای نصب هر نرم‌افزاری، در اینترنت جستجو کرده و اگر از فیلترینگ این طرف آب و آن طرف آب هم چشم‌پوشی نماییم، نسبت به دانلود آن ابزار و سپس نصب آن اقدام نماییم. این مساله به همراه تنوع در نصب برنامه‌ها، طبیعتا زمان زیادی را از ما می‌گیرد.این مشکل زمانی حاد می‌شود که باید هر از گاهی، مثلا از گزینه Tools هر یک از این نرم‌افزارها، نسبت به وجود نسخه جدید مطلع شده و مجددا مراحل قبل را برای دانلود و نصب تکرار نماییم.دوستانی که با لینوکس کار می‌کنند، این مشکل سالهاست که در آن برطرف شده است! و همه نرم‌افزارها در محیط لینوکس، به سادگی و صرفا با یک دستور ساده apt install PackageName حل می‌شود!در سال‌های اخیر، مایکروسافت در محیط برنامه‌نویسی هم مفهومی به نام Nuget برای حل مشکل نصب ابزارها ارائه داد و محیط‌های برنامه‌نویسی دیگر نیز به لطف Node.js، چیزی به نام npm را راه‌اندازی کرده‌اند.در محیط ویندوز، ابتدا Chocolatey در سال ۲۰۱۱ پا به عرصه حضور گذاشت و بعد از آن نیز مایکروسافت در سال ۲۰۲۰ چیزی به نام winget را راه‌اندازی کرد. باید دقت داشته باشیم که دستورات winget بی‌نهایت به دستورات Chocolatey شبیه می‌باشند، لذا در اکثر موارد، اگر در دستورات ذیل به جای کلمه choco از کلمه winget استفاده نماییم، به احتمال خیلی زیاد، جواب درست و یکسانی دریافت خواهیم کرد. لازم به ذکر است که دستور winget به صورت پیش‌فرض از طریق محیط PowerShell قابل دسترسی و استفاده می‌باشد و نیازی به نصب و راه‌اندازی ندارد.به هر حال باید بدانیم که Chocolatey از قدمت و قوام بیشتری برخوردار بوده و معمولا در هر مقطعی از زمان، بین سه تا چهار برابر، Package های بیشتری را نسبت به Winget، هاست می‌کند.در این مقاله سعی خواهیم کرد تا دستورات مهم و پرکاربرد Chocolatey را مرور کرده و از امکانات هیجان‌انگیز و جذاب آن استفاده نماییم. خصوصا در انتهای مقاله خواهیم دید که با نوشتن صرفا یک سری دستورات و قرار دادن آن‌ها در داخل یک فایل bat و یا ps1، می‌توانیم دستگاهی را که تازه سیستم عامل  Windows را بر روی آن نصب کرده‌ایم، بعد از حداکثر یکی دو ساعت زمان، با کلی نرم‌افزار نصب شده تحویل بگیریم!نشانی سایت:https://chocolatey.orgنشانی شروع کار:https://chocolatey.org/install#individualمحیط PowerShell را به صورت Run as Administrator باز می‌کنیم:Set-ExecutionPolicy Bypass -Scope Process -Force; [System.Net.ServicePointManager]::SecurityProtocol = [System.Net.ServicePointManager]::SecurityProtocol -bor 3072; iex ((New-Object System.Net.WebClient).DownloadString(&#039;https://community.chocolatey.org/install.ps1&#039;))در صورتی که با اجرای دستور فوق، خطایی دریافت کردیم، یکی از دو دستور ذیل را اجرا کرده و مجددا دستور فوق را اجرا می‌کنیم:Set-ExecutionPolicy AllSigned
or
Set-ExecutionPolicy Bypass -Scope Processدستوراتراهنماییchoco --help
choco -hجستجوی برنامه مورد نظرchoco search [PackageName]نکته: بزرگی و کوچکی حروف Package Name اهمیتی ندارد،‌ ولی بزرگی و کوچکی دستورات مانند all, install و نیز Switch ها مانند y, yes مهم می‌باشد!نصب برنامه مورد نظرchoco install [PackageName]نصب برنامه، بدون سوال و جواب!choco install --yes [PackageName]
choco install -y [PackageName]نصب چندین برنامه، با صرفا یک دستور:choco install [PackageName] [AnotherPackageName] ...به روز کردن (Update / Upgrade) برنامهchoco upgrade [PackageName]نکته: با استفاده از دستور فوق، در صورتی که برنامه (Package) مورد نظر وجود نداشته باشد، دانلود و Install می‌شود!به روز کردن حتی خود برنامه Chocolateychoco upgrade chocolateyدر صورتی که بخواهیم همه برنامه‌های نصب شده توسط Chocolatey را Upgrade نماییم، از دستور ذیل استفاده می‌کنیم:choco upgrade all
choco upgrade --yes all
choco upgrade -y allبرای Uninstall کردن یک برنامه، از دستور ذیل استفاده می‌کنیم:choco uninstall [PackageName]نمایش همه برنامه‌هایی که از طریق Chocolatey در سامانه ما نصب شده‌اند:choco list --local-only
choco list -lبرای این‌که از صحت یک برنامه نصب شده اطمینان حاصل کنیم:choco info [PackageName]در هنگام Install, Uninstall, Upgrade، ممکن است که برنامه Chocolatey از ما Confirm های زیادی بگیرد که حتی با نوشتن Switch های y- و یا yes--، باز هم این سوالات و Confirm آزاردهنده هستند! برای حل این مشکل، می‌توانیم از دستور ذیل استفاده نماییم:choco feature enable -n allowGlobalConfirmationنرم افزارهای مهم و کاربردی برای همه و خصوصا برنامه‌نویسان:choco upgrade -y ChocolateyGUI

choco upgrade -y VLC
choco upgrade -y 7Zip
choco upgrade -y Gimp
choco upgrade -y Skype
choco upgrade -y KeePass
choco upgrade -y DropBox
choco upgrade -y Firefox
choco upgrade -y Audacity
choco upgrade -y Telegram
choco upgrade -y GreenShot
choco upgrade -y Handbrake
choco upgrade -y QBitTorrent
choco upgrade -y FoxitReader
choco upgrade -y FreeFileSync
choco upgrade -y GoogleChrome
choco upgrade -y Internet-Download-Manager

choco upgrade -y Git
choco upgrade -y Github
choco upgrade -y NodeJS
choco upgrade -y Postman
choco upgrade -y VCRedist140
choco upgrade -y Microsoft-Windows-Terminal

choco upgrade -y VSCode
choco upgrade -y VSCode-CSharp
choco upgrade -y VSCode-GITLens
choco upgrade -y VSCode-PowerShell

choco upgrade -y Sql-Server-2022
choco upgrade -y Sql-Server-Management-Studio

choco upgrade -y FileZilla
or
choco upgrade -y WinSCP

choco upgrade -y NMap
choco upgrade -y Curl
choco upgrade -y Putty
choco upgrade -y Rufus
choco upgrade -y Fiddler
choco upgrade -y WireShark

choco upgrade -y v2rayn
choco upgrade -y Scratchنکته: می‌توانیم دستورات فوق را در داخل یک فایل PowerShell با پسوند ps1 قرار داده و با اجرا کردن آن، تمامی برنامه‌های مورد نظر را نصب نماییم.تقاضا: در صورتی که در فهرست فوق، اشتباهی وجود دارد و یا ابزار کاربردی دیگری را شناسایی کرده‌اید، لطفا در قسمت Comment آن‌را نوشته، تا به مرور زمان، تصحیح و تکمیل نمایم. با تشکرپایان</description>
                <category>Dariush Tasdighi - داریوش تصدیقی</category>
                <author>Dariush Tasdighi - داریوش تصدیقی</author>
                <pubDate>Wed, 11 Jan 2023 12:20:31 +0330</pubDate>
            </item>
                    <item>
                <title>استفاده از SSH برای اتصال به Github از طریق Visual Studio</title>
                <link>https://virgool.io/@dariush-tasdighi/%D8%A7%D8%B3%D8%AA%D9%81%D8%A7%D8%AF%D9%87-%D8%A7%D8%B2-ssh-%D8%A8%D8%B1%D8%A7%DB%8C-%D8%A7%D8%AA%D8%B5%D8%A7%D9%84-%D8%A8%D9%87-github-%D8%A7%D8%B2-%D8%B7%D8%B1%DB%8C%D9%82-visual-studio-mzffxwohftga</link>
                <description>توجه: این مقاله به مرور زمان، ویرایش و یا تکمیل می‌شود!تقاضا: در صورتی که با مشکل تایپی، دستوری و یا مفهومی در این مقاله برخورد کردید، از شما دوست عزیز و گرامی، صمیمانه تقاضا می‌کنم که اینجانب را مطلع کرده، تا نسبت به تصحیح و یا تکمیل آن، در اسرع وقت، اقدام نمایم.با کمال تشکرداریوش تصدیقیکلیه اطلاعات تماس: https://DTAT.irنسخه مقاله: ۱.۰ - تاریخ بروزرسانی: ۱۴۰۱/۱۰/۰۱ابتدا Git را از نشانی ذیل دانلود و نصب می‌کنیم:https://git-scm.com/downloadsسپس محیط Git Bash را ترجیحا در حالت Run as Administrator اجرا می‌کنیم.برای ایجاد SSH از دستور ذیل استفاده می‌کنیم:ssh-keygen -t ed25519 -C &amp;quotdariusht@gmail.com&amp;quotنکته اول) در دستور فوق می‌توانیم به جای کلمه ed25519، از هر کلمه دیگری استفاده نماییم، ولی از آن جایی که Visual Studio برای ارتباط با سایت Github به دنبال دقیقا همین کلمه است، بهتر است که نام را برای ارتباط با Github تغییر ندهیم! در صورتی که این نام را تغییر دهیم، در اولین زمان برقراری ارتباط با Visual Studio یک کادر محاوره‌ای ظاهر خواهد شد و می‌خواهد که نام دیگری که ما انتخاب کرده‌ایم را مشخص نماییم.نکته دوم) اگر در هنگام اجرای دستور فوق و در زمانی که از ما آدرس را درخواست می‌کند، آدرسی را وارد نکرده و صرفا Enter را بزنیم، به طور پیش‌فرض فایل‌های مربوطه در نشانی ذیل ایجاد می‌شوند:/c/Users/[Username]/.sshچون در دستور ssh-keygen و بعد از -t از کلمه ed25519 استفاده کرده‌ایم، دو فایل به نام‌های ذیل ایجاد می‌شوند:id_ed25519
id_ed25519.pubکه در فایل اول Private Key و در فایل دوم که پسوند .pub دارد، Public Key قرار می‌گیرد.برای این که اطمینان حاصل کنیم که SSH Agent به درستی کار می‌کند از دستور ذیل استفاده می‌کنیم:eval &amp;quot$(ssh-agent -s)&amp;quotبرای این که Private Key ایجاد شده را در SSH Agent درج نماییم، از دستور ذیل استفاده می‌کنیم:ssh-add ~/.ssh/id_ed25519فایل id_ed25519.pub را در Notepad باز کرده و محتوای آن را کپی می‌کنیم.حال وارد سایت Github شده و در قسمت Setting مربوط به Account، گزینه SSH and GPG Keys را انتخاب کرده و سپس بر روی دکمه New SSH Key کلیک می‌کنیم.پس از انتخاب دکمه مذکور، در قسمت Title، نامی را که مشخص کننده دستگاه جاری ما می‌باشد را وارد کرده و سپس Public Key کپی شده را در قسمت Key درج (Paste) کرده و بر روی دکمه Add SSH Key کلیک می‌کنیم.پایان</description>
                <category>Dariush Tasdighi - داریوش تصدیقی</category>
                <author>Dariush Tasdighi - داریوش تصدیقی</author>
                <pubDate>Fri, 23 Dec 2022 23:10:37 +0330</pubDate>
            </item>
                    <item>
                <title>آموزش دوره ASP.NET Core Razor Pages با DOT NET 6 به همراه Bootstrap 5</title>
                <link>https://virgool.io/@dariush-tasdighi/%D8%A8%D8%B1%DA%AF%D8%B2%D8%A7%D8%B1%DB%8C-%D8%AF%D9%88%D8%B1%D9%87-%D9%87%D8%A7%DB%8C-%D8%AA%D8%AE%D8%B5%D8%B5%DB%8C-%D8%A8%D8%B1%D9%86%D8%A7%D9%85%D9%87-%D9%86%D9%88%DB%8C%D8%B3%DB%8C-%D8%AF%D8%A7%D8%AA-%D9%86%D8%AA-dot-net-6-o5rgfoipkmdq</link>
                <description>طرح تخفیفات منظم ماهیانهدوستان عزیز و گرامیتا اطلاع ثانوی، کلیه دوره‌های آموزشی کانال متخصصین ایرانی، از یکم تا پنجم هر ماه، مشمول ۴۰٪ تخفیف و از ششم تا دهم هر ماه، مشمول ۲۰٪ تخفیف خواهند شد.☘️ دوره Git, Github (اتمام یافته) کاملا رایگانhttps://t.me/IranianExperts☘️ دوره Unit Testing (اتمام یافته) کاملا رایگانhttps://t.me/IranianExperts☘️ دوره Blockchain (اتمام یافته) کاملا رایگانhttps://t.me/IranianExperts☘️ دوره Vue.js (اتمام یافته) کاملا رایگانhttps://t.me/DTX_LEARNING_VUE☘️ دوره آموزشی Angular 8 + TypeScript (اتمام یافته) کاملا رایگانhttps://t.me/DTX_LEARNING_ANGULAR? دوره آموزشی Blazor Web Assembly (اتمام یافته)- شهریه دوره: هشتصد هزار تومان? دوره آموزشی Microservice + CQRS + RabbitMQ + DDD (اتمام یافته)- شهریه دوره: یک میلیون و دویست هزار تومان? دوره آموزشی ASP.NET Core Razor Pages (در حال برگزاری)- شهریه دوره: یک میلیون و دویست هزار تومان✅ جلسه سی‌ام دوره آموزشی ASP.NET Core Razor Pages برای ثبت‌نام‌کنندگان دوره منتشر گردید! تا این لحظه بیش از شانزده ساعت فیلم آموزشی تولید و منتشر شده است.✅ در این دوره Bootstrap 5.1 نیز به طور کامل آموزش داده می‌شود. در این دوره یک پروژه حرفه‌ای و کاربردی و به صورت چندزبانه و با توجه به تمام نکات Clean Code Programming و نیز Clean Architecture طراحی و پیاده‌سازی شده و سورس‌کد آن در Github در اختیار دانش‌پژوهان عزیز قرار می‌گیرد. در این دوره حجم قابل توجه‌ای از نکات و Tips and Tricks های مربوط به EF Core نیز آموزش داده می‌شود.☘️ پانزده جلسه از این دوره، به صورت کاملا رایگان در دسترس شما دانش‌پژوهان گرامی قرار گرفته است، تا با سبک و نحوه برگزاری دوره آموزشی مذکور آشنا شده و در صورت تمایل، نسبت به خرید و تهیه آن اقدام نمایید.? فارغ از این‌که تمایل به ثبت‌نام، در این دوره داشته باشید و یا نداشته باشید، قویا توصیه می‌کنم که فیلم‌های رایگان این دوره، خصوصا فیلم‌های مربوط به (جلسات Workshop) و نیز (تولید سایت‌های چند زبانه)، (آشنایی با Middleware های موجود و طریقه خلق آن‌ها) و (آموزش Dependency Injection) و نیز (دوره Bootstrap 5.1) را حتما مشاهده نمایید.پایان</description>
                <category>Dariush Tasdighi - داریوش تصدیقی</category>
                <author>Dariush Tasdighi - داریوش تصدیقی</author>
                <pubDate>Tue, 19 Apr 2022 22:18:47 +0430</pubDate>
            </item>
            </channel>
</rss>