PyKadeh
چت بات هوشمند با استفاده از fasttext embedding منتشر شد برای بک اند از جنگو استفاده شده و کاربر میتونه سوالات مد نظرش رو اونجا تعریف کنه و مدل سوالی که کاربر میپرسه رو با سوالاتی که وارد کردید تطبیق میده و هر کدوم شبیه تر بود، جواب رو به کاربر نشون میده.…
نسخه فارسی هم طی امروز یا فردا منتشر میشه، چون زبان فارسی یکم ریزه کاری بیشتری داره و مدل پردازشش هم حجیم تره.
❤1
چت بات بروزرسانی و زبان فارسی اضافه شد
همچنین توضیحات فارسی کامل به ریپو اضافه شد.
برای پیش پردازش از hazm استفاده شده و همچنین نرمالایز بسیار کاملی انجام میشه، مثلاً سلااااااااااام تبدیل به سلام میشه و بعد از اون توسط hazm پردازش میشه.
https://github.com/ITheEqualizer/Chatbot
همچنین توضیحات فارسی کامل به ریپو اضافه شد.
برای پیش پردازش از hazm استفاده شده و همچنین نرمالایز بسیار کاملی انجام میشه، مثلاً سلااااااااااام تبدیل به سلام میشه و بعد از اون توسط hazm پردازش میشه.
https://github.com/ITheEqualizer/Chatbot
GitHub
GitHub - ITheEqualizer/Chatbot: A lightweight and flexible Question & Answer chatbot built with Django and powered by FastText…
A lightweight and flexible Question & Answer chatbot built with Django and powered by FastText embeddings. - ITheEqualizer/Chatbot
7❤3
هوش مصنوعی، در سادهترین تعریف، ترکیبی از علم داده، ریاضیات، و علوم کامپیوتر است که هدف آن ساخت سیستمهایی است که بتوانند درک، استدلال، و تصمیمگیری خودکار انجام دهند.
اما در لایههای عمیقتر، هوش مصنوعی دیگر فقط “برنامهنویسی ماشینی” نیست؛ بلکه شامل مدلهایی است که از دادهها میآموزند و خود را با شرایط جدید تطبیق میدهند — همان چیزی که به آن یادگیری ماشین (Machine Learning) گفته میشود.
یادگیری ماشین: مغز متفکر هوش مصنوعی
در یادگیری ماشین، به جای اینکه به کامپیوتر بگوییم “چطور کاری را انجام دهد”، فقط به آن “داده” و “نتیجه” را نشان میدهیم تا خودش الگوها را پیدا کند.
سه رویکرد اصلی در یادگیری ماشین وجود دارد:
یادگیری نظارتشده (Supervised Learning):
مدل با دادههای برچسبدار آموزش میبیند. مثال: تشخیص ایمیل اسپم یا غیر اسپم.
یادگیری بدون نظارت (Unsupervised Learning):
مدل سعی میکند ساختار پنهان دادهها را کشف کند. مثال: خوشهبندی مشتریان بر اساس رفتار خرید.
یادگیری تقویتی (Reinforcement Learning):
سیستم از طریق آزمون و خطا و دریافت پاداش یا جریمه، راهحل بهینه را یاد میگیرد. مثال: رباتی که یاد میگیرد در محیطی ناشناخته حرکت کند.
یادگیری عمیق (Deep Learning): الهام از مغز انسان
یادگیری عمیق یکی از شاخههای پیشرفتهتر یادگیری ماشین است که از شبکههای عصبی مصنوعی (Neural Networks) استفاده میکند.
این شبکهها از لایههای متعدد تشکیل شدهاند و میتوانند الگوهای پیچیدهای را در دادهها تشخیص دهند.
مدلهای بزرگ زبانی (مثل ChatGPT) یا سیستمهای بینایی ماشین (مثل تشخیص چهره) بر پایهی همین معماریها ساخته شدهاند.
مدلهای زبانی و انقلاب در پردازش متن
در چند سال اخیر، مدلهای زبانی بزرگ (Large Language Models) مانند GPT و BERT، مفهوم «درک زبان طبیعی» را دگرگون کردهاند.
این مدلها با میلیاردها پارامتر آموزش میبینند و قادرند متن تولید کنند، سوال پاسخ دهند، کد بنویسند و حتی منطق زبانی را تقلید کنند.
قدرت این مدلها از پیشپردازش عظیم دادههای متنی و معماری ترنسفورمر (Transformer) ناشی میشود که ساختار جمله را در سطح معنا و بافت تحلیل میکند.
چالشها و دغدغههای اخلاقی
در کنار پیشرفتها، چالشهای مهمی هم وجود دارد:
سوگیری الگوریتمی: مدلها از دادههای انسانی میآموزند، پس ممکن است همان خطاها و پیشداوریها را بازتولید کنند.
حریم خصوصی: جمعآوری دادههای بزرگ، خطر نشت یا سوءاستفاده از اطلاعات را افزایش میدهد.
وابستگی بیش از حد: استفادهی بیرویه از هوش مصنوعی میتواند منجر به کاهش مهارتهای انسانی در تحلیل و خلاقیت شود.
آیندهی هوش مصنوعی: همزیستی انسان و ماشین
در آینده، تمرکز اصلی از “خودکارسازی کامل” به سمت “همافزایی انسان و ماشین” پیش میرود.
مدلهای هوش مصنوعی قرار نیست جایگزین انسان شوند، بلکه قرار است ابزارهایی برای تقویت توان ذهنی، خلاقیت و تصمیمگیری انسان باشند.
در واقع، متخصصان آینده کسانی خواهند بود که میدانند چطور با هوش مصنوعی همکاری کنند، نه صرفاً از آن استفاده.
اما در لایههای عمیقتر، هوش مصنوعی دیگر فقط “برنامهنویسی ماشینی” نیست؛ بلکه شامل مدلهایی است که از دادهها میآموزند و خود را با شرایط جدید تطبیق میدهند — همان چیزی که به آن یادگیری ماشین (Machine Learning) گفته میشود.
یادگیری ماشین: مغز متفکر هوش مصنوعی
در یادگیری ماشین، به جای اینکه به کامپیوتر بگوییم “چطور کاری را انجام دهد”، فقط به آن “داده” و “نتیجه” را نشان میدهیم تا خودش الگوها را پیدا کند.
سه رویکرد اصلی در یادگیری ماشین وجود دارد:
یادگیری نظارتشده (Supervised Learning):
مدل با دادههای برچسبدار آموزش میبیند. مثال: تشخیص ایمیل اسپم یا غیر اسپم.
یادگیری بدون نظارت (Unsupervised Learning):
مدل سعی میکند ساختار پنهان دادهها را کشف کند. مثال: خوشهبندی مشتریان بر اساس رفتار خرید.
یادگیری تقویتی (Reinforcement Learning):
سیستم از طریق آزمون و خطا و دریافت پاداش یا جریمه، راهحل بهینه را یاد میگیرد. مثال: رباتی که یاد میگیرد در محیطی ناشناخته حرکت کند.
یادگیری عمیق (Deep Learning): الهام از مغز انسان
یادگیری عمیق یکی از شاخههای پیشرفتهتر یادگیری ماشین است که از شبکههای عصبی مصنوعی (Neural Networks) استفاده میکند.
این شبکهها از لایههای متعدد تشکیل شدهاند و میتوانند الگوهای پیچیدهای را در دادهها تشخیص دهند.
مدلهای بزرگ زبانی (مثل ChatGPT) یا سیستمهای بینایی ماشین (مثل تشخیص چهره) بر پایهی همین معماریها ساخته شدهاند.
مدلهای زبانی و انقلاب در پردازش متن
در چند سال اخیر، مدلهای زبانی بزرگ (Large Language Models) مانند GPT و BERT، مفهوم «درک زبان طبیعی» را دگرگون کردهاند.
این مدلها با میلیاردها پارامتر آموزش میبینند و قادرند متن تولید کنند، سوال پاسخ دهند، کد بنویسند و حتی منطق زبانی را تقلید کنند.
قدرت این مدلها از پیشپردازش عظیم دادههای متنی و معماری ترنسفورمر (Transformer) ناشی میشود که ساختار جمله را در سطح معنا و بافت تحلیل میکند.
چالشها و دغدغههای اخلاقی
در کنار پیشرفتها، چالشهای مهمی هم وجود دارد:
سوگیری الگوریتمی: مدلها از دادههای انسانی میآموزند، پس ممکن است همان خطاها و پیشداوریها را بازتولید کنند.
حریم خصوصی: جمعآوری دادههای بزرگ، خطر نشت یا سوءاستفاده از اطلاعات را افزایش میدهد.
وابستگی بیش از حد: استفادهی بیرویه از هوش مصنوعی میتواند منجر به کاهش مهارتهای انسانی در تحلیل و خلاقیت شود.
آیندهی هوش مصنوعی: همزیستی انسان و ماشین
در آینده، تمرکز اصلی از “خودکارسازی کامل” به سمت “همافزایی انسان و ماشین” پیش میرود.
مدلهای هوش مصنوعی قرار نیست جایگزین انسان شوند، بلکه قرار است ابزارهایی برای تقویت توان ذهنی، خلاقیت و تصمیمگیری انسان باشند.
در واقع، متخصصان آینده کسانی خواهند بود که میدانند چطور با هوش مصنوعی همکاری کنند، نه صرفاً از آن استفاده.
🎯 پروژه جدید من: بینایی ماشین با یادگیری عمیق (Computer Vision)
توی این پروژه با استفاده از شبکه عصبی کانولوشنی (CNN)، مدلی ساختم که میتونه اشیاء رو از روی تصاویر تشخیص بده 📸🧠
چند تا نکته دربارهٔ پروژه:
- از TensorFlow و Keras استفاده کردم
- مدل آموزشدیده ذخیره میشه و قابل استفاده مجدد هست
- روی دیتاست CIFAR-10 تست شده
- دقت مدل بالای ۸۵٪ به دست اومده 💪
📎 سورس کامل پروژه روی گیتهاب:
🔗 github.com/ITheEqualizer/Computer-Vision
توی این پروژه با استفاده از شبکه عصبی کانولوشنی (CNN)، مدلی ساختم که میتونه اشیاء رو از روی تصاویر تشخیص بده 📸🧠
چند تا نکته دربارهٔ پروژه:
- از TensorFlow و Keras استفاده کردم
- مدل آموزشدیده ذخیره میشه و قابل استفاده مجدد هست
- روی دیتاست CIFAR-10 تست شده
- دقت مدل بالای ۸۵٪ به دست اومده 💪
📎 سورس کامل پروژه روی گیتهاب:
🔗 github.com/ITheEqualizer/Computer-Vision
GitHub
GitHub - ITheEqualizer/Computer-Vision: A deep learning project which can identify the item of the given picture.
A deep learning project which can identify the item of the given picture. - ITheEqualizer/Computer-Vision
2
زمان جنگ جهانی دوم، گروهی از پژوهشگران مأمور شدند تا راهی برای افزایش دوام هواپیماهای جنگی پیدا کنند.
آنها هواپیماهایی را بررسی کردند که از جنگ برگشته بودند. بیشتر گلولهها روی بالها و دم هواپیما دیده میشد.
پیشنهاد اولیه این بود که همین بخشها باید تقویت شوند.
اما یک ریاضیدان به نام آبراهام والد نکته مهمی را گوشزد کرد:
این هواپیماها با وجود تمام آن گلولهها، توانستهاند برگردند.
بخشهایی که تیر نخوردهاند، همان نقاط حساسی هستند که اگر آسیب ببینند، هواپیما هرگز برنمیگردد.
پس باید همان قسمتها تقویت شوند.
این داستان یک نمونه کلاسیک از «بایاس بقا»ست.
ما اغلب فقط بازماندهها را میبینیم و فراموش میکنیم آنهایی که شکست خوردهاند، دیگر پیش چشم ما نیستند.
چه در دادهها و چه در زندگی، مراقب باشیم فقط به دیدهها تکیه نکنیم.
بعضی وقتها آنچه دیده نمیشود، از آنچه میبینیم مهمتر است.
آنها هواپیماهایی را بررسی کردند که از جنگ برگشته بودند. بیشتر گلولهها روی بالها و دم هواپیما دیده میشد.
پیشنهاد اولیه این بود که همین بخشها باید تقویت شوند.
اما یک ریاضیدان به نام آبراهام والد نکته مهمی را گوشزد کرد:
این هواپیماها با وجود تمام آن گلولهها، توانستهاند برگردند.
بخشهایی که تیر نخوردهاند، همان نقاط حساسی هستند که اگر آسیب ببینند، هواپیما هرگز برنمیگردد.
پس باید همان قسمتها تقویت شوند.
این داستان یک نمونه کلاسیک از «بایاس بقا»ست.
ما اغلب فقط بازماندهها را میبینیم و فراموش میکنیم آنهایی که شکست خوردهاند، دیگر پیش چشم ما نیستند.
چه در دادهها و چه در زندگی، مراقب باشیم فقط به دیدهها تکیه نکنیم.
بعضی وقتها آنچه دیده نمیشود، از آنچه میبینیم مهمتر است.
❤1
یه نوجوان 18 ساله اومده یه اپلیکیشن ساخته که کالری موجود تو غذایی که به صورت عکس بهش ارسال شده رو نشون میده!
نکته جالب اینه که این ایده 30 میلیون دلار فاند گرفته!
حالا پشت زمینه این ایده چیه؟ یه پرامپت با یه عکس بفرست برای ChatGPT و خروجی بگیر! یعنی کل کاری که کرده اینه که پرامپت مناسب این کار رو پیدا کرده و تو اپلیکیشنش استفاده کرده!
نکته جالب اینه که این ایده 30 میلیون دلار فاند گرفته!
حالا پشت زمینه این ایده چیه؟ یه پرامپت با یه عکس بفرست برای ChatGPT و خروجی بگیر! یعنی کل کاری که کرده اینه که پرامپت مناسب این کار رو پیدا کرده و تو اپلیکیشنش استفاده کرده!
📚 آشنایی با کتابخانهی datetime در پایتون ⏰
اگر با زمان و تاریخ سروکار داری (مثل ثبت لاگها، زمانبندی کارها یا ساخت تایمرها)، کتابخانهی قدرتمند و داخلی datetime یکی از دوستداشتنیترین ابزارهای پایتونه!
بیاید چند تا مثال ساده ولی مفید ببینیم 👇
🕒 بهدست آوردن زمان و تاریخ فعلی:
📆 فقط تاریخ یا فقط ساعت:
⏳ ساخت زمان دلخواه:
🧮 محاسبه فاصله بین دو تاریخ:
🧠 نکته کاربردی:
برای تبدیل زمان به فرمت دلخواه از متد
✨ خلاصه:
کتابخانهی datetime بهصورت پیشفرض در پایتون نصب شده و برای هر نوع کار با زمان، تاریخ و فاصله بین آنها فوقالعاده کاربردی است.a
#پایتون #آموزش_پایتون #datetime #ترفند_کدنویسی
اگر با زمان و تاریخ سروکار داری (مثل ثبت لاگها، زمانبندی کارها یا ساخت تایمرها)، کتابخانهی قدرتمند و داخلی datetime یکی از دوستداشتنیترین ابزارهای پایتونه!
بیاید چند تا مثال ساده ولی مفید ببینیم 👇
🕒 بهدست آوردن زمان و تاریخ فعلی:
from datetime import datetime
now = datetime.now()
print(now)
# خروجی مثل: 2025-11-11 14:35:22.456789
📆 فقط تاریخ یا فقط ساعت:
print(now.date()) # خروجی: 2025-11-11
print(now.time()) # خروجی: 14:35:22.456789
⏳ ساخت زمان دلخواه:
birthday = datetime(1998, 7, 21, 9, 30)
print(birthday)
# 1998-07-21 09:30:00
🧮 محاسبه فاصله بین دو تاریخ:
from datetime import date
start = date(2025, 1, 1)
end = date(2025, 11, 11)
delta = end - start
print(delta.days) # خروجی: 314
🧠 نکته کاربردی:
برای تبدیل زمان به فرمت دلخواه از متد
strftime() استفاده کن:print(now.strftime("%d/%m/%Y %H:%M"))
# خروجی: 11/11/2025 14:35✨ خلاصه:
کتابخانهی datetime بهصورت پیشفرض در پایتون نصب شده و برای هر نوع کار با زمان، تاریخ و فاصله بین آنها فوقالعاده کاربردی است.a
#پایتون #آموزش_پایتون #datetime #ترفند_کدنویسی
9❤1
خیلی جالبه که به محض اینکه API سایتم رو راه اندازی کردم، چند دقیقه بعد سرویس CloudFlare از دسترس خارج شد.
شرمنده ام کلودفلر جان...
شرمنده ام کلودفلر جان...
16❤3
🔴 قطعی تاریخی کلودفلر – ۱۸ نوامبر ۲۰۲۵ (۲۷ آبان ۱۴۰۴)
یکی از بزرگترین قطعیهای تاریخ اینترنت
رخ داد!
از حدود ۱۴:۵۰ به وقت ایران، میلیونها سایت و سرویس معروف (از جمله X، ChatGPT، Discord، Spotify، Grindr و …) همزمان داون شدند.
مدت قطعی اصلی: بیش از ۳ ساعت
بدترین قطعی کلودفلر از سال ۲۰۱۹ تا حالا
علت واقعی (طبق گزارش رسمی کلودفلر): یک تغییر ساده در مجوزهای دسترسی دیتابیس ClickHouse → کوئری هر ۵ دقیقه یکبار شروع به تولید ردیفهای تکراری کرد → فایل پیکربندی Bot Management از ۶۰ فیچر به بیش از ۵۰۰ فیچر باد کرد → فایل غولآسا به تمام سرورهای جهانی پخش شد → نرمافزار اصلی (نوشتهشده با Rust) پنیک کرد و خطای ۵xx داد.
جالبه که اول فکر کردن حمله DDoS عظیمه، چون مشکل متناوب بود!
سرویسهای آسیبدیده:
بخش CDN و امنیت اصلی
بخش های Turnstile، Workers KV
داشبورد و لاگین کاربران
همچنین Cloudflare Access و WARP
حتی صفحه وضعیت خودشون هم داون شد!
راهحل: برگرداندن نسخه قدیمی فایل + پچ فوری کد
کلودفلر قول داده:
اعتبارسنجی سختگیرانهتر فایلهای پیکربندی
محدودیت سخت روی اندازه فایلها
تستهای بهتر قبل از rollout
این قطعی نشون داد چقدر اینترنت امروز به چند شرکت معدود وابستهست؛ یک باگ ساده داخلی میتونه نصف دنیا رو فلج کنه!
پستمورتِم رسمی:
https://blog.cloudflare.com/18-november-2025-outage/
#کلودفلر #قطعی_اینترنت #CloudflareOutage
یکی از بزرگترین قطعیهای تاریخ اینترنت
رخ داد!
از حدود ۱۴:۵۰ به وقت ایران، میلیونها سایت و سرویس معروف (از جمله X، ChatGPT، Discord، Spotify، Grindr و …) همزمان داون شدند.
مدت قطعی اصلی: بیش از ۳ ساعت
بدترین قطعی کلودفلر از سال ۲۰۱۹ تا حالا
علت واقعی (طبق گزارش رسمی کلودفلر): یک تغییر ساده در مجوزهای دسترسی دیتابیس ClickHouse → کوئری هر ۵ دقیقه یکبار شروع به تولید ردیفهای تکراری کرد → فایل پیکربندی Bot Management از ۶۰ فیچر به بیش از ۵۰۰ فیچر باد کرد → فایل غولآسا به تمام سرورهای جهانی پخش شد → نرمافزار اصلی (نوشتهشده با Rust) پنیک کرد و خطای ۵xx داد.
جالبه که اول فکر کردن حمله DDoS عظیمه، چون مشکل متناوب بود!
سرویسهای آسیبدیده:
بخش CDN و امنیت اصلی
بخش های Turnstile، Workers KV
داشبورد و لاگین کاربران
همچنین Cloudflare Access و WARP
حتی صفحه وضعیت خودشون هم داون شد!
راهحل: برگرداندن نسخه قدیمی فایل + پچ فوری کد
کلودفلر قول داده:
اعتبارسنجی سختگیرانهتر فایلهای پیکربندی
محدودیت سخت روی اندازه فایلها
تستهای بهتر قبل از rollout
این قطعی نشون داد چقدر اینترنت امروز به چند شرکت معدود وابستهست؛ یک باگ ساده داخلی میتونه نصف دنیا رو فلج کنه!
پستمورتِم رسمی:
https://blog.cloudflare.com/18-november-2025-outage/
#کلودفلر #قطعی_اینترنت #CloudflareOutage
The Cloudflare Blog
Cloudflare outage on November 18, 2025
Cloudflare suffered a service outage on November 18, 2025. The outage was triggered by a bug in generation logic for a Bot Management feature file causing many Cloudflare services to be affected.
7
🚀 راهاندازی API وبسایت AliZakaee.ir
بالاخره API رسمی وبسایتم رو راهاندازی کردم!
از این به بعد میتونید بهصورت مستقیم و از طریق درخواستهای JSON به محتوای بلاگ دسترسی داشته باشید.
🔗 آدرس اصلی API:
https://alizakaee.ir/api/
📌 لیست پستها:
https://alizakaee.ir/api/posts/
این API با Django REST Framework ساخته شده و فعلاً به صورت عمومی و Read-Only در دسترسه.
هدفم اینه که توسعهدهندهها و کسایی که میخوان دادههای بلاگ رو توی اپلیکیشنها یا سرویسهای خودشون استفاده کنن، بتونن خیلی راحت بهش متصل بشن.
در پست جدید بلاگم، کامل توضیح دادم که API چطور کار میکنه، چه فیلدهایی برمیگردونه، و چطور میشه ازش استفاده کرد.
👇 میتونید از لینک زیر مطالعه کنید:
🌐 لینک پست بلاگ:
https://alizakaee.ir/blog/%D8%B1%D8%A7%D9%87%D8%A7%D9%86%D8%AF%D8%A7%D8%B2%DB%8C-api-%D9%88%D8%A8%D8%B3%D8%A7%DB%8C%D8%AA-alizakaeeir/
بالاخره API رسمی وبسایتم رو راهاندازی کردم!
از این به بعد میتونید بهصورت مستقیم و از طریق درخواستهای JSON به محتوای بلاگ دسترسی داشته باشید.
🔗 آدرس اصلی API:
https://alizakaee.ir/api/
📌 لیست پستها:
https://alizakaee.ir/api/posts/
این API با Django REST Framework ساخته شده و فعلاً به صورت عمومی و Read-Only در دسترسه.
هدفم اینه که توسعهدهندهها و کسایی که میخوان دادههای بلاگ رو توی اپلیکیشنها یا سرویسهای خودشون استفاده کنن، بتونن خیلی راحت بهش متصل بشن.
در پست جدید بلاگم، کامل توضیح دادم که API چطور کار میکنه، چه فیلدهایی برمیگردونه، و چطور میشه ازش استفاده کرد.
👇 میتونید از لینک زیر مطالعه کنید:
🌐 لینک پست بلاگ:
https://alizakaee.ir/blog/%D8%B1%D8%A7%D9%87%D8%A7%D9%86%D8%AF%D8%A7%D8%B2%DB%8C-api-%D9%88%D8%A8%D8%B3%D8%A7%DB%8C%D8%AA-alizakaeeir/
alizakaee.ir
راهاندازی API وبسایت AliZakaee.ir
7
از شدت خستگی و بی حوصلگی برای تست نوشتن و همینطور برای بررسی کردن اینکه کیفیت تست نویسی Claude Sonnet 4.5 چطور هستش، ازش خواستم برام تست بنویسه با توجه به کدبیسم.
اول اینکه ٢۵٠٠ خط تست نوشت، ٢۵٠٠!
دوم اینکه به edge case هایی فکر کرد که عملاً من نمیدونستم حتی میتونه مشکل ایجاد کنه، خط به خط کد رو خوندم و میتونم بگم فوقالعاده هست!
یک موردی هم که خیلی شنیدم که میگن A.I. فقط تستی مینویسه که پس بشه، اصلاً اینطور نبود و اتفاقاً داخل ران اول، ٩تا تست فیل شد که منتهی شد به رفع مشکل کد توسط من.
خلاصه اینکه مواردی که خلاقیت دو چندان نمیخواد مثل تست نویسی رو بدین به A.I. چون اون هم میتونه خلاقیت بیشتری داشته باشه و با توجه به دایره اطلاعاتش کیس های بیشتری رو لحاظ کنه و هم اینکه در زمان شما صرفهجویی کنه و شما روی فیچرهای اصلی کار کنید.
و اینکه داخل پرامپتتون حتماً بیان کنید که ملاکتون صرفاً پس شدن تست ها نیست و میخواین جامع و کامل باشن و ازش بخواین کامل هم کامنت گذاری کنه.
اول اینکه ٢۵٠٠ خط تست نوشت، ٢۵٠٠!
دوم اینکه به edge case هایی فکر کرد که عملاً من نمیدونستم حتی میتونه مشکل ایجاد کنه، خط به خط کد رو خوندم و میتونم بگم فوقالعاده هست!
یک موردی هم که خیلی شنیدم که میگن A.I. فقط تستی مینویسه که پس بشه، اصلاً اینطور نبود و اتفاقاً داخل ران اول، ٩تا تست فیل شد که منتهی شد به رفع مشکل کد توسط من.
خلاصه اینکه مواردی که خلاقیت دو چندان نمیخواد مثل تست نویسی رو بدین به A.I. چون اون هم میتونه خلاقیت بیشتری داشته باشه و با توجه به دایره اطلاعاتش کیس های بیشتری رو لحاظ کنه و هم اینکه در زمان شما صرفهجویی کنه و شما روی فیچرهای اصلی کار کنید.
و اینکه داخل پرامپتتون حتماً بیان کنید که ملاکتون صرفاً پس شدن تست ها نیست و میخواین جامع و کامل باشن و ازش بخواین کامل هم کامنت گذاری کنه.
10
در زمینه دیتای مورد نیاز برای آموزش شما همیشه دو دسته دیتا دارید، آموزش و تست
اما آیا این تقسیم بندی درسته؟
در مورد دیتای آموزش بحثی نیست و شما ازش برای آموزش مدل استفاده میکنید.
اما در مورد دیتای تست، این یک اشتباه رایج و خیلی بزرگه چون شما برای آموزش یک مدل نیاز به دیتای آموزش دارید و دیتا توسعه!
برای مثال اگر قرار باشه تشخیص ناهنجاری رو پیادهسازی کنید، چندین مدل مختلف با توجه به سناریو قابل استفاده هستش و شما عملاً باید بهترین مدل رو انتخاب کنید و این مورد توسط دیتای توسعه (dev) انجام میشه و با توجه به امتیاز و دقت کسب شده در این مرحله شما بهترین مدل رو انتخاب میکنید.
در واقع دیتای توسعه همون دیتاییه که شما ازش برای انتخاب مدل، تنظیم ابرپارامترها (hyperparameters)، جلوگیری از overfitting و تنظیم معماری استفاده میکنید. این دقیقاً چیزی هست که در ادبیات علمی به validation set شناخته میشه.
پس دیتای تست چی شد؟
تست عملاً اختیاری هستش و ضروری نیست و بررسی مدل بر حسب دیتای تست صرفاً برای این هست که شما بتونید بدون bias به عملکرد اون مدل پی ببرید اما زمانی که مدل شما انتخاب شده باشه با توجه به دیتای dev، شما الزاماً نیازی به دیتای تست ندارید.
به صورت علمی، دیتای تست فقط یکبار و در پایان فرآیند آموزش استفاده میشه تا عملکرد نهایی مدل بدون هیچگونه bias ناشی از مشاهده قبلی دیتا اندازهگیری بشه
دلیل علمی این موضوع اینه که هرچقدر روی dev تست کنید و روی dev بهبود بدید، dev برای شما اطلاعات لیک میکنه (information leakage) و به مرور باعث overfitting نسبت به dev میشه. تست از این جهت ضروری نیست که روی روند آموزش نقشی نداره و فقط یک معیار نهایی برای گزارش عملکرده.
پس به صورت کلی، تقسیم بندی دیتا به دو دسته آموزش و تست یک اشتباه رایجه و درست این قضیه یا دیتای آموزش و توسعه هست یا آموزش و توسعه و تست.
اما آیا این تقسیم بندی درسته؟
در مورد دیتای آموزش بحثی نیست و شما ازش برای آموزش مدل استفاده میکنید.
اما در مورد دیتای تست، این یک اشتباه رایج و خیلی بزرگه چون شما برای آموزش یک مدل نیاز به دیتای آموزش دارید و دیتا توسعه!
برای مثال اگر قرار باشه تشخیص ناهنجاری رو پیادهسازی کنید، چندین مدل مختلف با توجه به سناریو قابل استفاده هستش و شما عملاً باید بهترین مدل رو انتخاب کنید و این مورد توسط دیتای توسعه (dev) انجام میشه و با توجه به امتیاز و دقت کسب شده در این مرحله شما بهترین مدل رو انتخاب میکنید.
در واقع دیتای توسعه همون دیتاییه که شما ازش برای انتخاب مدل، تنظیم ابرپارامترها (hyperparameters)، جلوگیری از overfitting و تنظیم معماری استفاده میکنید. این دقیقاً چیزی هست که در ادبیات علمی به validation set شناخته میشه.
پس دیتای تست چی شد؟
تست عملاً اختیاری هستش و ضروری نیست و بررسی مدل بر حسب دیتای تست صرفاً برای این هست که شما بتونید بدون bias به عملکرد اون مدل پی ببرید اما زمانی که مدل شما انتخاب شده باشه با توجه به دیتای dev، شما الزاماً نیازی به دیتای تست ندارید.
به صورت علمی، دیتای تست فقط یکبار و در پایان فرآیند آموزش استفاده میشه تا عملکرد نهایی مدل بدون هیچگونه bias ناشی از مشاهده قبلی دیتا اندازهگیری بشه
دلیل علمی این موضوع اینه که هرچقدر روی dev تست کنید و روی dev بهبود بدید، dev برای شما اطلاعات لیک میکنه (information leakage) و به مرور باعث overfitting نسبت به dev میشه. تست از این جهت ضروری نیست که روی روند آموزش نقشی نداره و فقط یک معیار نهایی برای گزارش عملکرده.
پس به صورت کلی، تقسیم بندی دیتا به دو دسته آموزش و تست یک اشتباه رایجه و درست این قضیه یا دیتای آموزش و توسعه هست یا آموزش و توسعه و تست.
❤3
در صورتی که بخواین بررسی کنید مدل آموزش دیده توسط شما، دچار underfitting یا overfitting شده یا نه باید واریانس و bias (که ما اینجا از جهت گیری استفاده میکنیم برای بیانش) رو بررسی کنید.
در بررسی داده های ما که به دو دسته آموزش و توسعه تقسیم شدند ممکنه چند حالت پیش بیاد:
١. جهت گیری بالا و واریانس کم
در این حالت مدل شما دچار underfitting شده و مثل دانش آموزی هست که خوب درس نخونده و سوالات رو نمیتونه جواب بده.
در این حالت برای حل این مشکل، باید اندازه شبکه عصبی، چه از لحاظ تعداد لایه و چه نورون افزایش پیدا کنه و این مورد تقریباً همیشه باعث کاهش جهت گیری میشه و کار دیگه ای که میشه انجام داد اینه که نرخ آموزش (learning rate) رو کاهش داد که باعث میشه سرعت آموزش کاهش پیدا کنه اما مشکل جهت گیری حل بشه.
٢. جهت گیری کم و واریانس بالا:
در این حالت شما دچار overfitting شدید که مثل دانش آموزی هست که عیناً سوالات رو حفظ کرده و اگر سوالات یکم تغییر کنه دیگه نمیتونه جواب بده.
برای رفع این مشکل اول اینکه یاید حجم و تعداد داده ها رو افزایش بدید ث تقریباً این مورد همیشه باعث کاهش واریانس میشه ولی مقدار کمی هم جهت گیری رو افزایش میده و کار دیگه ای هم که میشه کرد این هست که داده ها رو منظم کرد.
—
در هر دو مورد ذکر شده میتونید مدل و معماری های مختلف رو هم تست کنید تا ببینید نتیجه بهتری خواهید داشت یا خیر اما این مورد الزاماً باعث بهبود نمیشه ولی در هر حال جزء مواردی هست که باید بررسی و تست کنید.
—
قبلاً مفهومی وجود داشت به اسم معامله بین جهت و واریانس به نحوی که روش هایی که وجود داشت مثلاً باعث کاهش واریانس و افزایش جهت گیری میشد و بالعکس اما امروزه با پیشرفت سخت افزاری و دیجیتالی شدن زندگی، عملاً هم میشه حجم شبکه عصبی رو افزایش داد و هم حجم داده بیشتری وجود داره که باعث میشه اون معامله دیگه شکل نگیره و ما بتونیم به صورت دقیق روی یکی تمرکز کنیم.
در بررسی داده های ما که به دو دسته آموزش و توسعه تقسیم شدند ممکنه چند حالت پیش بیاد:
١. جهت گیری بالا و واریانس کم
در این حالت مدل شما دچار underfitting شده و مثل دانش آموزی هست که خوب درس نخونده و سوالات رو نمیتونه جواب بده.
در این حالت برای حل این مشکل، باید اندازه شبکه عصبی، چه از لحاظ تعداد لایه و چه نورون افزایش پیدا کنه و این مورد تقریباً همیشه باعث کاهش جهت گیری میشه و کار دیگه ای که میشه انجام داد اینه که نرخ آموزش (learning rate) رو کاهش داد که باعث میشه سرعت آموزش کاهش پیدا کنه اما مشکل جهت گیری حل بشه.
٢. جهت گیری کم و واریانس بالا:
در این حالت شما دچار overfitting شدید که مثل دانش آموزی هست که عیناً سوالات رو حفظ کرده و اگر سوالات یکم تغییر کنه دیگه نمیتونه جواب بده.
برای رفع این مشکل اول اینکه یاید حجم و تعداد داده ها رو افزایش بدید ث تقریباً این مورد همیشه باعث کاهش واریانس میشه ولی مقدار کمی هم جهت گیری رو افزایش میده و کار دیگه ای هم که میشه کرد این هست که داده ها رو منظم کرد.
—
در هر دو مورد ذکر شده میتونید مدل و معماری های مختلف رو هم تست کنید تا ببینید نتیجه بهتری خواهید داشت یا خیر اما این مورد الزاماً باعث بهبود نمیشه ولی در هر حال جزء مواردی هست که باید بررسی و تست کنید.
—
قبلاً مفهومی وجود داشت به اسم معامله بین جهت و واریانس به نحوی که روش هایی که وجود داشت مثلاً باعث کاهش واریانس و افزایش جهت گیری میشد و بالعکس اما امروزه با پیشرفت سخت افزاری و دیجیتالی شدن زندگی، عملاً هم میشه حجم شبکه عصبی رو افزایش داد و هم حجم داده بیشتری وجود داره که باعث میشه اون معامله دیگه شکل نگیره و ما بتونیم به صورت دقیق روی یکی تمرکز کنیم.
7❤2
چرا منظم سازی داده ها باعث کاهش overfitting میشه؟
در صورتی که وزن های شما خیلی بزرگ باشند، این یعنی اینکه به داده های نویز هم خیلی زیاد توجه شد و یک افزایش یا کاهش کوچک در داده های ورودی باعث تغییر فوقالعاده بزرگ میشه.
ما در L1 و L2 دنبال این هستیم که وزن ها رو کوچکتر کنیم و میگیم هرچقدر وزن بیشتر باشه مدل بیشتر جریمه میشه.
تفاوت L1 و L2 در این هست که L1 بعضی از ویژگی ها رو عملاً صفر و حذف میکنه که برای انتخاب ویژگی مناسبه ولی L2 چیزی رو صفر نمیکنه بلکه نزدیک به صفر میکنه و برای زمانی مناسبه که ما چندین ویژگی داریم و نمیخوایم هیچکدوم حذف بشن.
این موارد هم که گفته شد در اصل از طریق وزن ها انجام میشه.
در مورد L2 که پر کاربردتره باید بگم که ما عملاً هر بار میایم و قبل از اعمال گرادیان اصلی، وزن ها رو در یک عدد کوچکتر از یک ضرب میکنیم که این باعث میشه هر دفعه کم بشه و به همین دلیل بهش weight decay هم میگن.
پس به صورت کلی مدل رو مجبور کنیم بیش از حد پیچیده نشه و وزنهای خیلی بزرگ نداشته باشه.
چون وزنهای بزرگ معمولاً نشونهٔ اینه که مدل روی نویز و جزئیات بیربط داده زوم کرده.
در صورتی که وزن های شما خیلی بزرگ باشند، این یعنی اینکه به داده های نویز هم خیلی زیاد توجه شد و یک افزایش یا کاهش کوچک در داده های ورودی باعث تغییر فوقالعاده بزرگ میشه.
ما در L1 و L2 دنبال این هستیم که وزن ها رو کوچکتر کنیم و میگیم هرچقدر وزن بیشتر باشه مدل بیشتر جریمه میشه.
تفاوت L1 و L2 در این هست که L1 بعضی از ویژگی ها رو عملاً صفر و حذف میکنه که برای انتخاب ویژگی مناسبه ولی L2 چیزی رو صفر نمیکنه بلکه نزدیک به صفر میکنه و برای زمانی مناسبه که ما چندین ویژگی داریم و نمیخوایم هیچکدوم حذف بشن.
این موارد هم که گفته شد در اصل از طریق وزن ها انجام میشه.
در مورد L2 که پر کاربردتره باید بگم که ما عملاً هر بار میایم و قبل از اعمال گرادیان اصلی، وزن ها رو در یک عدد کوچکتر از یک ضرب میکنیم که این باعث میشه هر دفعه کم بشه و به همین دلیل بهش weight decay هم میگن.
پس به صورت کلی مدل رو مجبور کنیم بیش از حد پیچیده نشه و وزنهای خیلی بزرگ نداشته باشه.
چون وزنهای بزرگ معمولاً نشونهٔ اینه که مدل روی نویز و جزئیات بیربط داده زوم کرده.
5❤2
راه اندازی سرور توسعه قابل دسترسی با Zero Trust
به عنوان یک دولوپر، شاید با این قضیه برخورد کنید که نیاز داشته باشید یکسری از اندپوینت هایی که دارید فقط قابل استفاده از طرف افراد خاصی باشه به صورت ریموت تا امنیت پروژه بالاتر بره.
برای این کار روش های مختلفی وجود داره و اینجا ما به معرفی روش Zero Trust متعلق به CloudFlare می پردازیم که نقشه کلی به این صورت هست که دولوپر مد نظر باید کلاینت WARP رو نصب کنه و وارد اکانت مربوط به خودش بشه و اگر اون اکانت تعریف شده باشه، امکان دسترسی به سرور براش فراهم میشه.
ابتدا به این وبسایت مراجعه کنید و اکانت خودتون رو بسازید
دقت کنید Team Nameای که وارد می کنید، تبدیل به آدرس شما میشه که ازش برای لاگین شدن استفاده میشه.
از منوی سمت چپ، وارد قسمت زیر بشین:
Teams & Resources > Devices > Management > Device enrollment > Device enrollment permissions > Manage
▫️در قسمت Access policies، بر روی گزینه Create new plicy کلیک کنید.
▫️در قسمت Policy name یک اسم انتخاب کنید و کمی پایین تر، در قسمت Add rules و بخش Include، شرط رو بر روی Emails قرار بدید و در کادر Value، ایمیل های مد نظر خودتون که میخواین دسترسی داشته باشن رو وارد کنید.
▫️بر روی دکمه Save کلیک کنید.
❗️داخل این قسمت میتونید از مثلاً ایمیل کلی شرکتتون استفاده کنید و تک تک ایمیل ها رو در قسمت دیگه ای وارد کنید، برای مثال:
به بخش زیر مراجعه کنید:
Teams & Resources > Devices > Device profiles > Create new profile
▫️در قسمت Name نام مورد نظر خودتون رو وارد کنید.
▫️در قسمت Build an expression، قسمت Selector رو بر روی User Email ست کنید و Operator رو هم بر روی in قرار بدید و در قسمت Value آدرس ایمیل های مجاز مد نظرتون رو وارد کنید.
▫️در قسمت Device tunnel protocol، گزینه MASQUE رو انتخاب کنید.
▫️در قسمت Service mode، گزینه Gateway with WARP رو انتخاب کنید.
▫️در قسمت Split Tunnels، گزینه Include IPs and domains رو انتخاب کنید و زمانی که ازتون خواست بهش مورد اضافه کنید، از منوی Selector گزینه IP Address رو انتخاب و قسمت Value هم آی پی سرور خودتون رو وارد کنید.
▫️بر روی گزینه Save profile کلیک کنید.
به بخش زیر مراجعه کنید:
Network > Connectors > Cloudflare Tunnels > Create a tunnel
▫️از قسمت Select your tunnel type گزینه Cloudflare رو انتخاب کنید.
▫️در قسمت Tunnel name، یک نام برای تونل خودتون انتخاب کنید.
▫️با فرض اینکه سرور شما لینوکس هستش، از قسمت Choose your environment گزینه Debian رو انتخاب کنید و بعد از اون دستوراتی که بهتون نمایش داده میشه رو بدون تغییر در کنسول سرورتون وارد کنید.
▫️در قسمت Route Traffic، بر روی گزینه CIDR کلیک و آی پی سرور خودتون رو وارد کنید.
▫️بر روی گزینه Save کلیک کنید.
به منوی زیر مراجعه کنید:
Traffic policies > Traffic settings > Proxy and inspection
▫️گزینه Allow Secure Web Gateway to proxy traffic را فعال و تیک تمامی موارد موجود در Select protocols to forward را بزنید.
به بخش زیر مراجعه کنید:
Traffic policies > Firewall policies > Network > Add a policy
▫️در قسمت Policy name، عنوان Access را وارد کنید.
▫️در قسمت Build an expression بخش Traffic بر روی گزینه Add condition کلیک کنید و Selector گزینه Destination IP را انتخاب و Operator را in قرار داده و در قسمت Value آی پی سرور خود را وارد کنید. (1)
▫️بر روی گزینه And کلیک کرده و Selector را بر روی Destination Port قرار دهید و Operator را in و در قسمت Value پورت سرور خود که معمولاً 22 است را وارد کنید. (2)
▫️در قسمت Identity بخش Selector را بر روی User Email قرار داده و Operator را بروی in تنظیم و در قسمت Value ایمیل های مد نظر خود را وارد کنید. (3)
▫️در قسمت Select an action گزینه Action را بر روی Allow قرار دهید. (4)
▫️بر روی گزینه Save policy کلیک کنید.
▫️مجدداً بر روی گزینه Add a policy کلیک کنید و نام آن را Block قرار دهید و بخش 1 و 2 را عیناً تکرار کنید و بخش 3 را انجام ندهید و در بخش 4 گزینه Block را انتخاب و ذخیره سازی رو انجام دهید.
❗️مطمئن شوید که در لیست قوانین، آیتم Access بالاتر از آیتم Block قرار دارد.
وارد سرور مجازی خود شوید و دستور زیر را وارد کنید:
▫️خطی که ListenAddress را دارد را از حالت کامنت خارج کنید و آنرا به
▫️دستور زیر را در کنسول خود وارد کنید:
تبریک!
حالا تنها کاربرانی که از طریق Zero Trust به ورک اسپیس شما وصل شوند می توانند از سرور مد نظر استفاده کنند.
به عنوان یک دولوپر، شاید با این قضیه برخورد کنید که نیاز داشته باشید یکسری از اندپوینت هایی که دارید فقط قابل استفاده از طرف افراد خاصی باشه به صورت ریموت تا امنیت پروژه بالاتر بره.
برای این کار روش های مختلفی وجود داره و اینجا ما به معرفی روش Zero Trust متعلق به CloudFlare می پردازیم که نقشه کلی به این صورت هست که دولوپر مد نظر باید کلاینت WARP رو نصب کنه و وارد اکانت مربوط به خودش بشه و اگر اون اکانت تعریف شده باشه، امکان دسترسی به سرور براش فراهم میشه.
ابتدا به این وبسایت مراجعه کنید و اکانت خودتون رو بسازید
دقت کنید Team Nameای که وارد می کنید، تبدیل به آدرس شما میشه که ازش برای لاگین شدن استفاده میشه.
از منوی سمت چپ، وارد قسمت زیر بشین:
Teams & Resources > Devices > Management > Device enrollment > Device enrollment permissions > Manage
▫️در قسمت Access policies، بر روی گزینه Create new plicy کلیک کنید.
▫️در قسمت Policy name یک اسم انتخاب کنید و کمی پایین تر، در قسمت Add rules و بخش Include، شرط رو بر روی Emails قرار بدید و در کادر Value، ایمیل های مد نظر خودتون که میخواین دسترسی داشته باشن رو وارد کنید.
▫️بر روی دکمه Save کلیک کنید.
❗️داخل این قسمت میتونید از مثلاً ایمیل کلی شرکتتون استفاده کنید و تک تک ایمیل ها رو در قسمت دیگه ای وارد کنید، برای مثال:
Email ending in: @yourcomapny.comبه بخش زیر مراجعه کنید:
Teams & Resources > Devices > Device profiles > Create new profile
▫️در قسمت Name نام مورد نظر خودتون رو وارد کنید.
▫️در قسمت Build an expression، قسمت Selector رو بر روی User Email ست کنید و Operator رو هم بر روی in قرار بدید و در قسمت Value آدرس ایمیل های مجاز مد نظرتون رو وارد کنید.
▫️در قسمت Device tunnel protocol، گزینه MASQUE رو انتخاب کنید.
▫️در قسمت Service mode، گزینه Gateway with WARP رو انتخاب کنید.
▫️در قسمت Split Tunnels، گزینه Include IPs and domains رو انتخاب کنید و زمانی که ازتون خواست بهش مورد اضافه کنید، از منوی Selector گزینه IP Address رو انتخاب و قسمت Value هم آی پی سرور خودتون رو وارد کنید.
▫️بر روی گزینه Save profile کلیک کنید.
به بخش زیر مراجعه کنید:
Network > Connectors > Cloudflare Tunnels > Create a tunnel
▫️از قسمت Select your tunnel type گزینه Cloudflare رو انتخاب کنید.
▫️در قسمت Tunnel name، یک نام برای تونل خودتون انتخاب کنید.
▫️با فرض اینکه سرور شما لینوکس هستش، از قسمت Choose your environment گزینه Debian رو انتخاب کنید و بعد از اون دستوراتی که بهتون نمایش داده میشه رو بدون تغییر در کنسول سرورتون وارد کنید.
▫️در قسمت Route Traffic، بر روی گزینه CIDR کلیک و آی پی سرور خودتون رو وارد کنید.
▫️بر روی گزینه Save کلیک کنید.
به منوی زیر مراجعه کنید:
Traffic policies > Traffic settings > Proxy and inspection
▫️گزینه Allow Secure Web Gateway to proxy traffic را فعال و تیک تمامی موارد موجود در Select protocols to forward را بزنید.
به بخش زیر مراجعه کنید:
Traffic policies > Firewall policies > Network > Add a policy
▫️در قسمت Policy name، عنوان Access را وارد کنید.
▫️در قسمت Build an expression بخش Traffic بر روی گزینه Add condition کلیک کنید و Selector گزینه Destination IP را انتخاب و Operator را in قرار داده و در قسمت Value آی پی سرور خود را وارد کنید. (1)
▫️بر روی گزینه And کلیک کرده و Selector را بر روی Destination Port قرار دهید و Operator را in و در قسمت Value پورت سرور خود که معمولاً 22 است را وارد کنید. (2)
▫️در قسمت Identity بخش Selector را بر روی User Email قرار داده و Operator را بروی in تنظیم و در قسمت Value ایمیل های مد نظر خود را وارد کنید. (3)
▫️در قسمت Select an action گزینه Action را بر روی Allow قرار دهید. (4)
▫️بر روی گزینه Save policy کلیک کنید.
▫️مجدداً بر روی گزینه Add a policy کلیک کنید و نام آن را Block قرار دهید و بخش 1 و 2 را عیناً تکرار کنید و بخش 3 را انجام ندهید و در بخش 4 گزینه Block را انتخاب و ذخیره سازی رو انجام دهید.
❗️مطمئن شوید که در لیست قوانین، آیتم Access بالاتر از آیتم Block قرار دارد.
وارد سرور مجازی خود شوید و دستور زیر را وارد کنید:
nano /etc/ssh/sshd_config
▫️خطی که ListenAddress را دارد را از حالت کامنت خارج کنید و آنرا به
ListenAddress 127.0.0.1 تغییر دهید و فایل را ذخیره کنید.▫️دستور زیر را در کنسول خود وارد کنید:
sudo systemctl restart ssh
sudo ufw deny 22/tcp
تبریک!
حالا تنها کاربرانی که از طریق Zero Trust به ورک اسپیس شما وصل شوند می توانند از سرور مد نظر استفاده کنند.
7
نحوه نصب و استفاده از Zero Trust
▫️به این آدرس مراجعه و فایل نصبی سازگار با سیستم عامل خود را دانلود کنید.
▫️بعد از نصب و ورود، در منوی برنامه WARP بر روی گزینه Account کلیک کنید.
▫️بر روی گزینه Login to Cloudflare Zero Trust کلیک کنید و نام تیمی که در مرحله اول وارد کردید را انتخاب کنید.
▫️در صفحه باز شده آدرس ایمیل خود را وارد و کد ارسال شده به ایمیل را وارد کنید.
▫️پس از ورود به برنامه، دکمه اتصال را بزنید.
حالا می توانید به سرور توسعه خود تنها در صورت متصل بودن به Zero Trust وصل شوید.
▫️به این آدرس مراجعه و فایل نصبی سازگار با سیستم عامل خود را دانلود کنید.
▫️بعد از نصب و ورود، در منوی برنامه WARP بر روی گزینه Account کلیک کنید.
▫️بر روی گزینه Login to Cloudflare Zero Trust کلیک کنید و نام تیمی که در مرحله اول وارد کردید را انتخاب کنید.
▫️در صفحه باز شده آدرس ایمیل خود را وارد و کد ارسال شده به ایمیل را وارد کنید.
▫️پس از ورود به برنامه، دکمه اتصال را بزنید.
حالا می توانید به سرور توسعه خود تنها در صورت متصل بودن به Zero Trust وصل شوید.

