تا به حال براتون پیش اومده که بخواین داکیومنت یک تکنولوژی رو بخونین ، و احساس کنید که براتون سخت یا حوصله سر بره؟
یکی از اصلیترین دلایل میتونه ضعف در زبان انگلیسی باشه.
بذارید با یک مثال واقعی توضیح بدم.
دوستی داشتم که تصمیم گرفت وب فرانت اند کار کنه .این پروسه یادگیری چیزی بیش از دو سال طول کشید.
در مقابل با شخصی آشنا شدم که معلم زبان بود و تصمیم به یاد گیری گرفت. نتیجه این شد که آقای معلم زبان در 6 ماه کلی چیز یاد گرفت و حتی در یک شرکت استخدام شد.
به راحتی هم داکیومنت میخوند و آموزش های انگلیسی با کیفیتی مشاهده میکرد.
شاید خیلی ها بگن برای شروع لازم نیست حتما انگلیسی رو فول باشیم و ...
این جمله غلط نیست ، اما اینکه هر چقدر انگلیسیتون خوب باشه سریع تر پیشرفت میکنید ، یک واقعیت غیر قابل انکاره.
پس پیشنهاد میکنم که واقعا روی انگلیسیتون کار کنید. خودتون مشاهده خواهید کرد که چقدر سرعت پیشرفتتون افزایش پیدا میکنه.
یکی از اصلیترین دلایل میتونه ضعف در زبان انگلیسی باشه.
بذارید با یک مثال واقعی توضیح بدم.
دوستی داشتم که تصمیم گرفت وب فرانت اند کار کنه .این پروسه یادگیری چیزی بیش از دو سال طول کشید.
در مقابل با شخصی آشنا شدم که معلم زبان بود و تصمیم به یاد گیری گرفت. نتیجه این شد که آقای معلم زبان در 6 ماه کلی چیز یاد گرفت و حتی در یک شرکت استخدام شد.
به راحتی هم داکیومنت میخوند و آموزش های انگلیسی با کیفیتی مشاهده میکرد.
شاید خیلی ها بگن برای شروع لازم نیست حتما انگلیسی رو فول باشیم و ...
این جمله غلط نیست ، اما اینکه هر چقدر انگلیسیتون خوب باشه سریع تر پیشرفت میکنید ، یک واقعیت غیر قابل انکاره.
پس پیشنهاد میکنم که واقعا روی انگلیسیتون کار کنید. خودتون مشاهده خواهید کرد که چقدر سرعت پیشرفتتون افزایش پیدا میکنه.
👍2
شما هم تا حالا شده که در نام گذاری فانکشن ، متغییر ها و ... به مشکل بخورین؟
قبل از ظهور AI وقتی به این مشکل میخوردم کلی بابتش فکر میکردم و گاها حسابی وقت میگرفت.
بعد که AI اومد ، این روند تسریع پیدا کرد و من ازش برای نام گذاری ها وقتی واقعا گیر میکردم ، کمک میگرفتم.
چند روز پیش سر انتخاب نام یک فانکشن به مشکل خوردم و خواستم از یک AI کمک بگیرم دلم نیومد😂.
چون همانطور که میدونید سریع لیمیت میخورن. این شد که به سرم زد یک ابزار توسعه بدم!
ابزاری که توی کامند لاین همیشه دم دستته ، و وسط کار وقتی گیر کردی کافیه فقط صداش بزنی و بگی مشکلت چیه.
من برای نام گذاری هر کدوم از این موارد : function , variable , constants , class ، یک پرامپت مخصوص نوشتم که نام های مخصوص بده.
و از اونجایی که ollama خیلی معروف شده (برنامه ای که به شما این امکان رو میده تا از بین کلی مدل هوش مصنوعی که داره هر کدوم رو خواستین روی سیستم خودتون نصب کنید و آفلاین و رایگان از هوش مصنوعی استفاده کنید)، من هم از ollama استفاده کردم و هم از openai api key. یعنی اگه api key دارید که هیچ ، اگه ندارید کافیه فقط یکی از مدل های ollama توی سیستمون نصب باشه.
در حال حاضر این ابزار قابلیت تولید نام با توضیحات رو داره و ابتداییه.
اما به نظرم پتانسیل خوبی داره و میتونه گامی در شروع استفاده از مدل های لوکال و رایگان ، در برنامه نویسی باشه! و کلی فیچر بهش اضافه کرد.
اسم این ابزار نامورا (namora) هست و برای استفاده کافیه از npm با دستور زیر نصبش کنید :
و بعد دستور namora رو بزنید.
✅ Git Hub :
https://github.com/rezadev8/namora
قبل از ظهور AI وقتی به این مشکل میخوردم کلی بابتش فکر میکردم و گاها حسابی وقت میگرفت.
بعد که AI اومد ، این روند تسریع پیدا کرد و من ازش برای نام گذاری ها وقتی واقعا گیر میکردم ، کمک میگرفتم.
چند روز پیش سر انتخاب نام یک فانکشن به مشکل خوردم و خواستم از یک AI کمک بگیرم دلم نیومد😂.
چون همانطور که میدونید سریع لیمیت میخورن. این شد که به سرم زد یک ابزار توسعه بدم!
ابزاری که توی کامند لاین همیشه دم دستته ، و وسط کار وقتی گیر کردی کافیه فقط صداش بزنی و بگی مشکلت چیه.
من برای نام گذاری هر کدوم از این موارد : function , variable , constants , class ، یک پرامپت مخصوص نوشتم که نام های مخصوص بده.
و از اونجایی که ollama خیلی معروف شده (برنامه ای که به شما این امکان رو میده تا از بین کلی مدل هوش مصنوعی که داره هر کدوم رو خواستین روی سیستم خودتون نصب کنید و آفلاین و رایگان از هوش مصنوعی استفاده کنید)، من هم از ollama استفاده کردم و هم از openai api key. یعنی اگه api key دارید که هیچ ، اگه ندارید کافیه فقط یکی از مدل های ollama توی سیستمون نصب باشه.
در حال حاضر این ابزار قابلیت تولید نام با توضیحات رو داره و ابتداییه.
اما به نظرم پتانسیل خوبی داره و میتونه گامی در شروع استفاده از مدل های لوکال و رایگان ، در برنامه نویسی باشه! و کلی فیچر بهش اضافه کرد.
اسم این ابزار نامورا (namora) هست و برای استفاده کافیه از npm با دستور زیر نصبش کنید :
npm i -g namora-cli
و بعد دستور namora رو بزنید.
✅ Git Hub :
https://github.com/rezadev8/namora
🔥4
از تجربه در یک مصاحبه بگم که بهم بر خورد واقعاً.
چند روز پیش تماس گرفتن و دعوت شدم برای مصاحبه حضوری.
امروز تایمم رو برای ساعت 2 و نیم ظهر خالی کردم و رفتم برای مصاحبه ، یک فرم دادن که یک سری سوالاش کلا عجیب بود
اطلاعات نزدیک ترین خویشاوندان هم توش پرسیده بودن 🤦♂
ده دقیقه نشستم فرم پر کردم ، یکی فرم رو گرفت گفت دانشجویی ؟ گفتم در آینده خیلی نزدیک بله.
گفت ما دانشجو قبول نمیکنیم فقط فول تایم.
اگه فکر میکنی قراره بری دانشگاه و فول تایم نیستی فرم رو ندم مهندس 😐
یکی نیست بگه عزیز من مگه تو رزومه من رو نخوندی ؟ من که توش همه چیز رو ذکر کرده بودم.
اینهمه هم وقت ما رو گرفتی.
هیچی نگفتم بهشون ولی ای کاش یه چیزی میگفتم.
حداقل شاید در ادامه در روند مصاحبشون تاثیر میذاشت🤦♂
چند روز پیش تماس گرفتن و دعوت شدم برای مصاحبه حضوری.
امروز تایمم رو برای ساعت 2 و نیم ظهر خالی کردم و رفتم برای مصاحبه ، یک فرم دادن که یک سری سوالاش کلا عجیب بود
اطلاعات نزدیک ترین خویشاوندان هم توش پرسیده بودن 🤦♂
ده دقیقه نشستم فرم پر کردم ، یکی فرم رو گرفت گفت دانشجویی ؟ گفتم در آینده خیلی نزدیک بله.
گفت ما دانشجو قبول نمیکنیم فقط فول تایم.
اگه فکر میکنی قراره بری دانشگاه و فول تایم نیستی فرم رو ندم مهندس 😐
یکی نیست بگه عزیز من مگه تو رزومه من رو نخوندی ؟ من که توش همه چیز رو ذکر کرده بودم.
اینهمه هم وقت ما رو گرفتی.
هیچی نگفتم بهشون ولی ای کاش یه چیزی میگفتم.
حداقل شاید در ادامه در روند مصاحبشون تاثیر میذاشت🤦♂
👍2
Dev Fuel
Wooow! یادش بخیر ، من هم سن ایشون بودم داشتم تو نوکیا مار بازی میکردم. (فقط خداکنه هیچ پدر ایرانی این ویدیو رو نبینه 😂)
حالا جالب اینه من نشستم ویدیوی ایشون رو دیدم ، و یک منبع خیلی خوب برای یادگیری Data Structures and Algorithms از داخلش پیدا کردم!
واقعا خودم یه فصلش رو خوندم خیلی جالب و جذاب بود پیشنهاد میکنم یه سر بهش بزنید :
https://tira.mooc.fi/kevat-2025/
واقعا خودم یه فصلش رو خوندم خیلی جالب و جذاب بود پیشنهاد میکنم یه سر بهش بزنید :
https://tira.mooc.fi/kevat-2025/
👏1
یک موضوعی هست که میخوام درباره اش حرف بزنم.
این موضوعی که الان بهش میخوام بپردازم مستقیما مربوط به برنامه نویسی نمیشه اما به شدت مهمه.
مدتی میشد که احساس میکردم یادگرفتن ، تمرکز کردن و به یاد نگه داشتن برام سخت شده!
به یاد دارم در دوران کودکی و نوجوانی وضعم خیلی بهتر بود. اما حالا چرا این اتفاق برام افتاده؟
تحقیق کردم دیدم به احتمال 99 درصد دچار مه مغزی شدم. و یکی از مهمترین دلایلش برای من دیر خوابیدن بود.
من شب ها خیلی راحت کار میکردم ، مزاحمتی برام نبود و در سکوت واقعا خوب کار میکردم. اما این عادت عواقب سنگینی برام داشت.
ساعت خوابم رو از 4 صبح رسوندم به یک ( در تلاش برای رسوندن به 11 ) و خب خیلی بهتر شد اوضاع.
اما هنوز تمرکز کردن رو یکم مشکل داشتم.
و توجه کردم دیدم از دوستان و آشنایان بعضی هاشون وضعشون از من خیلی بدتره.
گاها اصلا تو باغ نیستند بعضی ها و تمرکز واقعا براشون سخته.
صبر اندازه یک قطره هم نیست و یک لودینگ ساده رو نمیتونن تحمل کنن میگن تو اون فاصله بریم اینستایی ، یوتوبی ، ایکسی چیزی!
واقعا چیشد به این نقطه رسیدیم؟ جوابش مشخصه من بهش نمیپردازم خودتون بهتر میدونید.
همه اینها رو گفتم که در نهایت یک چیزی رو بهتون بگم.
دوستان ، تو این دورو زمونه اگه میخواهید موفق بشید ، کلیدش فقط و فقط یک چیزه.
من این رو بهتون میگم و بهش ایمان دارم :
تمرکز
برید ببینید چی تمرکزتون رو بالا میبره همون کار رو انجام بدید ، و بعد تکرارش کنید. اصلا تبدیل به عادت بکنید.
مواردی مثل ورزش کردن ، خواب به موقع ( اندازه خواب مهمه ولی نه به اندازه به موقع بودنش) ، تغذیه مناسب و ... .
به قول یارو گفتنی : شما نمیتونی یک دونه بکاری و بهش آب ندی ، خاک درست درمون ندی ، آفتاب ندی بعد هی بهش بگی : تو چرا رشد نمیکنی 😡 رشد کن دیگه!
ما آدما هم دقیقا همینیم. نمیخواد برای رشد کردن تقلای شدید بکنیم. کافیه فقط شرایط رشد رو برای خودمون فراهم کنیم.
این موضوعی که الان بهش میخوام بپردازم مستقیما مربوط به برنامه نویسی نمیشه اما به شدت مهمه.
مدتی میشد که احساس میکردم یادگرفتن ، تمرکز کردن و به یاد نگه داشتن برام سخت شده!
به یاد دارم در دوران کودکی و نوجوانی وضعم خیلی بهتر بود. اما حالا چرا این اتفاق برام افتاده؟
تحقیق کردم دیدم به احتمال 99 درصد دچار مه مغزی شدم. و یکی از مهمترین دلایلش برای من دیر خوابیدن بود.
من شب ها خیلی راحت کار میکردم ، مزاحمتی برام نبود و در سکوت واقعا خوب کار میکردم. اما این عادت عواقب سنگینی برام داشت.
ساعت خوابم رو از 4 صبح رسوندم به یک ( در تلاش برای رسوندن به 11 ) و خب خیلی بهتر شد اوضاع.
اما هنوز تمرکز کردن رو یکم مشکل داشتم.
و توجه کردم دیدم از دوستان و آشنایان بعضی هاشون وضعشون از من خیلی بدتره.
گاها اصلا تو باغ نیستند بعضی ها و تمرکز واقعا براشون سخته.
صبر اندازه یک قطره هم نیست و یک لودینگ ساده رو نمیتونن تحمل کنن میگن تو اون فاصله بریم اینستایی ، یوتوبی ، ایکسی چیزی!
واقعا چیشد به این نقطه رسیدیم؟ جوابش مشخصه من بهش نمیپردازم خودتون بهتر میدونید.
همه اینها رو گفتم که در نهایت یک چیزی رو بهتون بگم.
دوستان ، تو این دورو زمونه اگه میخواهید موفق بشید ، کلیدش فقط و فقط یک چیزه.
من این رو بهتون میگم و بهش ایمان دارم :
تمرکز
برید ببینید چی تمرکزتون رو بالا میبره همون کار رو انجام بدید ، و بعد تکرارش کنید. اصلا تبدیل به عادت بکنید.
مواردی مثل ورزش کردن ، خواب به موقع ( اندازه خواب مهمه ولی نه به اندازه به موقع بودنش) ، تغذیه مناسب و ... .
به قول یارو گفتنی : شما نمیتونی یک دونه بکاری و بهش آب ندی ، خاک درست درمون ندی ، آفتاب ندی بعد هی بهش بگی : تو چرا رشد نمیکنی 😡 رشد کن دیگه!
ما آدما هم دقیقا همینیم. نمیخواد برای رشد کردن تقلای شدید بکنیم. کافیه فقط شرایط رشد رو برای خودمون فراهم کنیم.
❤🔥2👍1
Forwarded from تواناتک Tavaanatech
⚠️ هشدار امنیتی جدی:
افزونه FreeVPN.One را فورا حذف کنید!
به گزارش منابعی مانند TechRadar و CSO Online افزونه FreeVPN.One پس از دریافت بهروزرسانیهای از جمله بعد از ۱۷ ژوئیه ۲۰۲ شروع به جمعآوری و ارسال تصاویر از صفحه نمایش کاربران بدون اطلاع آنها کرده است.
این تصاویر همراه با URL، شناسه تب و شناسه کاربر به سرورهای راه دور ارسال میشوند.
افزونه همچنین اطلاعاتی مانند موقعیت جغرافیایی و اطلاعات دستگاه کاربر را رمزگذاری کرده و ارسال میکند. محققان هشدار دادهاند که این رفتار کاملا مغایر با عملکرد واقعی VPN است و کاربران را توصیه کردهاند افزونه را فورا حذف کنند.
در صورتی که شما هم این افزونه را نصب کردهای، این توصیه ها را انجام دهید:
1️⃣ افزونه FreeVPN.One را فورا حذف نمایید.
2️⃣ از آنتیویروس مطمئنی برای اسکن دستگاه خود استفاده کنید.
3️⃣ رمزهای عبور برای سایتهایی که با این افزونه کار کردید را تغییر دهید.
💰 tavaanatech
افزونه FreeVPN.One را فورا حذف کنید!
به گزارش منابعی مانند TechRadar و CSO Online افزونه FreeVPN.One پس از دریافت بهروزرسانیهای از جمله بعد از ۱۷ ژوئیه ۲۰۲ شروع به جمعآوری و ارسال تصاویر از صفحه نمایش کاربران بدون اطلاع آنها کرده است.
این تصاویر همراه با URL، شناسه تب و شناسه کاربر به سرورهای راه دور ارسال میشوند.
افزونه همچنین اطلاعاتی مانند موقعیت جغرافیایی و اطلاعات دستگاه کاربر را رمزگذاری کرده و ارسال میکند. محققان هشدار دادهاند که این رفتار کاملا مغایر با عملکرد واقعی VPN است و کاربران را توصیه کردهاند افزونه را فورا حذف کنند.
در صورتی که شما هم این افزونه را نصب کردهای، این توصیه ها را انجام دهید:
Please open Telegram to view this post
VIEW IN TELEGRAM
توسعه سیستم عامل ، ساده ترین چالش هر توسعه دهنده
اگر بخوایم سیستم عامل خودمون رو توسعه بدیم ، باید چیکار کنیم؟🤔
چند تا بخش خیلی ساده داره که در چند دقیقه میشه فهمید و حلش کرد.
1️⃣ Bootloader (مرحله بوت شدن )
اینجا همه چیز از صفر شروع میشه. سیستم هنوز چیزی از دنیای سطح بالا نمیفهمه و باید بتونی با اسمبلی و دستور های خیلی پایین CPU کارت رو شروع کنی و سیستم رو از حالت خام ، وارد یک محیطی کنی که بتونه کدهای مثل C رو اجرا کنی.
مثل آب خوردنه.
2️⃣ Memory Management (مدیریت حافظه)
فقط این مرحله یکم سخته که اونم هیچی نداره فقط کافیه قبل توسعه این بخش ، به جای یک لیوان دو لیوان آب بنوشید.
سیستم عامل باید بدونه چه بخشی از RAM آزاد هست ، چه بخشی اشغال شده ، بتونه حافظه رو به پردازه(Process) ها بده و پس بگیره. و وقتی وارد بحث Virtual Memory (حافظه مجازی ) و paging بشی یکم داستان پیچیده تر میشه.(یکم زیادی کم پیچیده)
3️⃣ Process Management (مدیریت پردازهها)
سیستم عامل باید بتونه چند برنامه رو (ظاهرا) همزمان اجرا کنه. اگه CPU تکهستهای باشه، سیستم عامل صرفا بین برنامهها سریع سوییچ میکنه (context switch).
ولی توی CPUهای چند هستهای، بعضی پردازهها واقعا همزمان روی هستههای مختلف اجرا میشن.
که البته پیچیده نیست، چون فقط باید state هر پردازه (رجیسترها، حافظه، فایلها و …) ذخیره بشه و دوباره برگرده.
4️⃣ هر سختافزار (کیبورد، دیسک، کارت شبکه،…) زبان خودش رو داره. باید درایورهایی بنویسی که سیستمعامل بتونه باهاشون حرف بزنه.
هیچ چالشی نداره ، فقط مستندات سختافزار همیشه کامل نیستن و خیلی وقتها باید با آزمون و خطا جلو بری.
5️⃣ File System (سیستم فایل)
اینکه دادهها روی دیسک چطور ذخیره بشن و دوباره بخونی . ساختارهایی مثل FAT، ext4 و NTFS اینا دقیقاً همین بخش هستن.
6️⃣ Concurrency & Synchronization (همزمانی)
وقتی چند پردازه یا ترد همزمان میخوان به یک منبع مشترک دسترسی پیدا کنن، باید مکانیزمهایی مثل mutex، semaphore و … داشته باشی. (اینجا معمولا داستان deadlock و race condition هم سر و کلهشون پیدا میشه.)
خب ، فهمیدیم که توسعه یک سیستم عامل هیچی نداره و حالا که خودمون بلد شدیم ، دیگه وقت خودکفایی عه.
اگر بخوایم سیستم عامل خودمون رو توسعه بدیم ، باید چیکار کنیم؟🤔
چند تا بخش خیلی ساده داره که در چند دقیقه میشه فهمید و حلش کرد.
1️⃣ Bootloader (مرحله بوت شدن )
اینجا همه چیز از صفر شروع میشه. سیستم هنوز چیزی از دنیای سطح بالا نمیفهمه و باید بتونی با اسمبلی و دستور های خیلی پایین CPU کارت رو شروع کنی و سیستم رو از حالت خام ، وارد یک محیطی کنی که بتونه کدهای مثل C رو اجرا کنی.
مثل آب خوردنه.
2️⃣ Memory Management (مدیریت حافظه)
فقط این مرحله یکم سخته که اونم هیچی نداره فقط کافیه قبل توسعه این بخش ، به جای یک لیوان دو لیوان آب بنوشید.
سیستم عامل باید بدونه چه بخشی از RAM آزاد هست ، چه بخشی اشغال شده ، بتونه حافظه رو به پردازه(Process) ها بده و پس بگیره. و وقتی وارد بحث Virtual Memory (حافظه مجازی ) و paging بشی یکم داستان پیچیده تر میشه.(یکم زیادی کم پیچیده)
3️⃣ Process Management (مدیریت پردازهها)
سیستم عامل باید بتونه چند برنامه رو (ظاهرا) همزمان اجرا کنه. اگه CPU تکهستهای باشه، سیستم عامل صرفا بین برنامهها سریع سوییچ میکنه (context switch).
ولی توی CPUهای چند هستهای، بعضی پردازهها واقعا همزمان روی هستههای مختلف اجرا میشن.
که البته پیچیده نیست، چون فقط باید state هر پردازه (رجیسترها، حافظه، فایلها و …) ذخیره بشه و دوباره برگرده.
4️⃣ هر سختافزار (کیبورد، دیسک، کارت شبکه،…) زبان خودش رو داره. باید درایورهایی بنویسی که سیستمعامل بتونه باهاشون حرف بزنه.
هیچ چالشی نداره ، فقط مستندات سختافزار همیشه کامل نیستن و خیلی وقتها باید با آزمون و خطا جلو بری.
5️⃣ File System (سیستم فایل)
اینکه دادهها روی دیسک چطور ذخیره بشن و دوباره بخونی . ساختارهایی مثل FAT، ext4 و NTFS اینا دقیقاً همین بخش هستن.
6️⃣ Concurrency & Synchronization (همزمانی)
وقتی چند پردازه یا ترد همزمان میخوان به یک منبع مشترک دسترسی پیدا کنن، باید مکانیزمهایی مثل mutex، semaphore و … داشته باشی. (اینجا معمولا داستان deadlock و race condition هم سر و کلهشون پیدا میشه.)
خب ، فهمیدیم که توسعه یک سیستم عامل هیچی نداره و حالا که خودمون بلد شدیم ، دیگه وقت خودکفایی عه.
🤯2
چه قابلیت جالبی!!
نمیدونم این فیچر از چه زمانی اضافه شده ولی خیلی باحال و کاربردیه.
برای چنل هایی که فعالیت میکنند و داده های زیادی دارند ، چنل های مشابه رو نشون میده.
من چنل های مشابه رو دیدم و واقعا درست و هوشمندانه بود.
پاول جان دیگه داری توقع ما رو بالا میبری. در آپدیت بعدی منتظریم که تلگرام بدون نیاز به اینترنت کار کنه 👌
نمیدونم این فیچر از چه زمانی اضافه شده ولی خیلی باحال و کاربردیه.
برای چنل هایی که فعالیت میکنند و داده های زیادی دارند ، چنل های مشابه رو نشون میده.
من چنل های مشابه رو دیدم و واقعا درست و هوشمندانه بود.
پاول جان دیگه داری توقع ما رو بالا میبری. در آپدیت بعدی منتظریم که تلگرام بدون نیاز به اینترنت کار کنه 👌
🔥1
Forwarded from سید فرندز / برنامه نویسی / هک و امنیت / تکنولوژی (Mohammad Khoshnava)
Please open Telegram to view this post
VIEW IN TELEGRAM
امروز به یک چالش برخوردم که قبلش نیازه یکم راجع به فرآیند JWT Refresh Token توضیح بدم.
پس در اینجا راجع بهش توضیح میدم و پست بعدی چالشی که بهش برخورده بودم.
در یک پروژه داشتم بخش Auth رو تکمیل میکردم ، که قرار بود JWT Refresh Token هندل بشه.
ساز و کار کلی Refresh Token چطوریه؟
ببینید در این روش ما کلا دو تا توکن داریم. یکیش access token و یکیش refresh token .
وقتی کاربر لاگین میکنه ، ما این دوتا توکن رو میسازیم و میدیم به کلاینت.
مثلا کاربر وقتی به یک route ریکویست میزنه، اون اکسس توکن هست که ارسال میشه و باهاش احراز هویت میشه.
اکسس توکن هم طول عمرش خیلی کوتاهه مثلا نهایتا بین 15 تا 30 دقیقه قرار میدن. یا در کل بسته به نیاز پروژه ممکنه تغییر کنه.
وقتی اکسس توکن منقضی بشه نیازه که دوباره یک توکن جدید به کاربر بدیم.چون بدون این توکن نمیتونه به هیچ یک از روت های محافظت شده دسترسی داشته باشه.
اینجاست که پای refresh-token میاد وسط. وظیفه رفرش توکن اینه که اکسس توکن رو آپدیت کنه. همانطور که از اسمش پیداست یعنی رفرشش کنه.
اکسس توکن رو که مستقیما در response میدیم به به کلاینت. اما رفرش توکن رو چطور؟
من در این پروژه چون کلاینت مرورگر بود ، رفرش توکن رو توی کوکی مستقیما از سمت سرور ست کردم.
یعنی از سمت سرور مستقیما یک توکن به نام refresh_token به صورت http only در مرورگر کاربر ست کردم.
http only باعث میشه که ما از طریق کد های js به کوکی دسترسی نداشته باشیم. در نتیجه اگر هکری بخواد به این توکن دسترسی داشته باشه نمیتونه .
خب حالا چطور ما به واسطه refresh-token اکسس توکن کاربر رو آپدیت کنیم؟
در سمت سرور یک api میسازیم به اسم refresh-token . در اینجا کلاینت باید به این روت ریکویست بزنه.
وقتی ریکویست بزنه ، من در سرور به refresh-token که توی مرورگر کاربر به شکل http only ذخیره کرده بودم دسترسی دارم.
خب توی اینجا خیلی کارها میشه کرد. یکی از چیز هایی که من چک میکنم اینه که ببینم کاربر بلاک شده؟ رفرش توکنش معتبره؟ و ...
وقتی این کار ها انجام شد ، ما دوباره دو تا توکن میسازیم. یکیش یک اکسس توکن جدید و یکی هم رفرش توکن جدید.
عمر رفرش توکن هم باز بستگی به پروژه داره میتونید هر چند روز که بخواید بذارید. مثلا 7 روز.
خب ، فرض کنیم کاربر میاد به یک روت محافظت شده ریکویست میزنه ، ما توی گارد چک میکنیم که اکسس توکن معتبر هست؟ منقضی نشده؟
اگه شده بود خطا 401 میدیم به کلاینت.
اینجا برنامه نویس فرانت اند عزیز باید بیاد یک Silent Refresh راه بندازه. یعنی چی؟ یعنی وقتی به یک روتی ریکویست زدیم و توکن نامعتبر بود ، نباید بفرستیمش کاربر دوباره لاگین کنه. پس رفرش توکن اینجا چیکاره است؟
فرانت اند پروژه من با Nextjs بود و ریکویست ها رو با axios هندل میکردم. در نتیجه یک axiosInstance ساختم، و درونش کدی زدم که هر گاه بعد از ریکویست به هر روتی 401 دریافت کردی ، بیا در پس زمینه به /refresh-token در سرور ریکویست بزن و توکن های جدید رو بگیر. بدون اینکه کاربر متوجه این مراحل بشه.
اگر هم refresh-token نامعتبر بود یا منقضی شده بود هم که دیگه کاربر باید دوباره لاگین کنه.
پس در اینجا راجع بهش توضیح میدم و پست بعدی چالشی که بهش برخورده بودم.
در یک پروژه داشتم بخش Auth رو تکمیل میکردم ، که قرار بود JWT Refresh Token هندل بشه.
ساز و کار کلی Refresh Token چطوریه؟
ببینید در این روش ما کلا دو تا توکن داریم. یکیش access token و یکیش refresh token .
وقتی کاربر لاگین میکنه ، ما این دوتا توکن رو میسازیم و میدیم به کلاینت.
مثلا کاربر وقتی به یک route ریکویست میزنه، اون اکسس توکن هست که ارسال میشه و باهاش احراز هویت میشه.
اکسس توکن هم طول عمرش خیلی کوتاهه مثلا نهایتا بین 15 تا 30 دقیقه قرار میدن. یا در کل بسته به نیاز پروژه ممکنه تغییر کنه.
وقتی اکسس توکن منقضی بشه نیازه که دوباره یک توکن جدید به کاربر بدیم.چون بدون این توکن نمیتونه به هیچ یک از روت های محافظت شده دسترسی داشته باشه.
اینجاست که پای refresh-token میاد وسط. وظیفه رفرش توکن اینه که اکسس توکن رو آپدیت کنه. همانطور که از اسمش پیداست یعنی رفرشش کنه.
اکسس توکن رو که مستقیما در response میدیم به به کلاینت. اما رفرش توکن رو چطور؟
من در این پروژه چون کلاینت مرورگر بود ، رفرش توکن رو توی کوکی مستقیما از سمت سرور ست کردم.
یعنی از سمت سرور مستقیما یک توکن به نام refresh_token به صورت http only در مرورگر کاربر ست کردم.
http only باعث میشه که ما از طریق کد های js به کوکی دسترسی نداشته باشیم. در نتیجه اگر هکری بخواد به این توکن دسترسی داشته باشه نمیتونه .
خب حالا چطور ما به واسطه refresh-token اکسس توکن کاربر رو آپدیت کنیم؟
در سمت سرور یک api میسازیم به اسم refresh-token . در اینجا کلاینت باید به این روت ریکویست بزنه.
وقتی ریکویست بزنه ، من در سرور به refresh-token که توی مرورگر کاربر به شکل http only ذخیره کرده بودم دسترسی دارم.
خب توی اینجا خیلی کارها میشه کرد. یکی از چیز هایی که من چک میکنم اینه که ببینم کاربر بلاک شده؟ رفرش توکنش معتبره؟ و ...
وقتی این کار ها انجام شد ، ما دوباره دو تا توکن میسازیم. یکیش یک اکسس توکن جدید و یکی هم رفرش توکن جدید.
عمر رفرش توکن هم باز بستگی به پروژه داره میتونید هر چند روز که بخواید بذارید. مثلا 7 روز.
خب ، فرض کنیم کاربر میاد به یک روت محافظت شده ریکویست میزنه ، ما توی گارد چک میکنیم که اکسس توکن معتبر هست؟ منقضی نشده؟
اگه شده بود خطا 401 میدیم به کلاینت.
اینجا برنامه نویس فرانت اند عزیز باید بیاد یک Silent Refresh راه بندازه. یعنی چی؟ یعنی وقتی به یک روتی ریکویست زدیم و توکن نامعتبر بود ، نباید بفرستیمش کاربر دوباره لاگین کنه. پس رفرش توکن اینجا چیکاره است؟
فرانت اند پروژه من با Nextjs بود و ریکویست ها رو با axios هندل میکردم. در نتیجه یک axiosInstance ساختم، و درونش کدی زدم که هر گاه بعد از ریکویست به هر روتی 401 دریافت کردی ، بیا در پس زمینه به /refresh-token در سرور ریکویست بزن و توکن های جدید رو بگیر. بدون اینکه کاربر متوجه این مراحل بشه.
اگر هم refresh-token نامعتبر بود یا منقضی شده بود هم که دیگه کاربر باید دوباره لاگین کنه.
👏1
ما وقتی بخواهیم cookies یا authorization headers در مرورگر از سمت سرور ست کنیم ، باید در پروژمون در cors policy این فیلد credentials رو true بذاریم.
در سمت فرانت اند هم باید credentials برابر با true باشه.
من هم در axios و هم در سرور این رو true گذاشته بودم ، ولی نه کوکی ست میشد و نه وقتی فرانت اند ریکویستی میزد نتیجه ای میداد . ( Network Error میگرفتم.)
ابتدا فکر کردم قطعا مشکل از axios هست چون هربار credentials بر میداشتم خطای Network Error بر طرف میشد 🤨
اما credentials باید true میشد چون در غیر اینصورت سرور به cookies دسترسی نداشت.
پس از اینکه کلی توی issues های axios غلط زدم، تصمیم گرفتم سمت سرور رو چک کنم.
پس از کمی جستجو allowedHeaders که برابر با * گذاشته بودم رو برداشتم و همه چیز درست شد :/
من بر حسب عادت همیشه هنگام دولوپ allowedHeaders رو * میذاشتم.
خلاصه که اگر راهتون به اینورا خورد حواستون باشه allowedHeaders رو * نذارید که ممکنه دردسر بشه.
این چالش کوچولو هم بهانه ای شد به طرز کار JWT Refresh Token بپردازیم.
در سمت فرانت اند هم باید credentials برابر با true باشه.
من هم در axios و هم در سرور این رو true گذاشته بودم ، ولی نه کوکی ست میشد و نه وقتی فرانت اند ریکویستی میزد نتیجه ای میداد . ( Network Error میگرفتم.)
ابتدا فکر کردم قطعا مشکل از axios هست چون هربار credentials بر میداشتم خطای Network Error بر طرف میشد 🤨
اما credentials باید true میشد چون در غیر اینصورت سرور به cookies دسترسی نداشت.
پس از اینکه کلی توی issues های axios غلط زدم، تصمیم گرفتم سمت سرور رو چک کنم.
پس از کمی جستجو allowedHeaders که برابر با * گذاشته بودم رو برداشتم و همه چیز درست شد :/
من بر حسب عادت همیشه هنگام دولوپ allowedHeaders رو * میذاشتم.
خلاصه که اگر راهتون به اینورا خورد حواستون باشه allowedHeaders رو * نذارید که ممکنه دردسر بشه.
این چالش کوچولو هم بهانه ای شد به طرز کار JWT Refresh Token بپردازیم.
نظرتون چیه آموزش های کانال رو ببرم در یک وبلاگ یا جایی مثل ویرگول ، و در کانال خلاصه + لینکشون رو ارایه بدم؟ و کانال رو مرجعی از اخبار ، چالش ها و لینک مطالب اختصاصی کنیم.
Anonymous Poll
38%
بله
43%
خیر
14%
برایم اهمیتی ندارد
5%
نظرم را در کامنت مینویسم
Dev Fuel
امروز به یک چالش برخوردم که قبلش نیازه یکم راجع به فرآیند JWT Refresh Token توضیح بدم. پس در اینجا راجع بهش توضیح میدم و پست بعدی چالشی که بهش برخورده بودم. در یک پروژه داشتم بخش Auth رو تکمیل میکردم ، که قرار بود JWT Refresh Token هندل بشه. ساز و کار کلی…
ای کاش هرگز در این پروژه Refresh Token پیاده سازی نمیکردم
WebSocket هم داره و حالا باید یه حرکتی بزنم که اگه وسط کانکشن توکن منقضی شد کل سیستم نره رو هوا 💀
WebSocket هم داره و حالا باید یه حرکتی بزنم که اگه وسط کانکشن توکن منقضی شد کل سیستم نره رو هوا 💀
Dev Fuel
ای کاش هرگز در این پروژه Refresh Token پیاده سازی نمیکردم WebSocket هم داره و حالا باید یه حرکتی بزنم که اگه وسط کانکشن توکن منقضی شد کل سیستم نره رو هوا 💀
خب ، این مشکل رو به این شکل حل کردم که در فرانت اند یک تایمر ست کردم، اگر مثلا اکسس توکن ما از هر 15 دقیقه اکسپایر میشه ، ما از هر 13 دقیقه به سرور ریکویست میزنیم و توکن های جدید رو میگیریم.
چون پایداری برامون به شدت مهمه. نمیخوایم وسط ارتباط ناگهان به دلیل اکسپایر شدن توکن مشکلی پیش بیاد.
البته این روش هم معایب و مزایای خودشو داره . مثلا ممکنه که اینترنت کاربر در اون موقعیت قطع باشه یا هر مشکل دیگه ای.
که باید این ساید افکت ها رو هم به فکرش بود و یه جوری حلش کرد. مثلا اگر اینترنت کاربر در اون تایم قطع بود منتظر بمونیم تا اینترنتش وصل بشه و بعد بلافلاصه توکن جدید رو بگیریم.
خلاصه که یه سیستم احراز هویت ببینم یک روز میتونه وقت منو بگیره یا نه 😂
البته این کار مشکل رو حل نمیکنه. من توکن رو موقع کانکشن به سمت سرور میفرستادم. به این شکل
و بعد از ساخت ارتباط هم نمیشه این رو آپدیت کرد.
پس در این صورت که آپدیت کردن اکسس توکن در مرورگر به چه دردی میخوره؟
اینجا چه راهی میمونه برامون؟🤔
چون پایداری برامون به شدت مهمه. نمیخوایم وسط ارتباط ناگهان به دلیل اکسپایر شدن توکن مشکلی پیش بیاد.
البته این روش هم معایب و مزایای خودشو داره . مثلا ممکنه که اینترنت کاربر در اون موقعیت قطع باشه یا هر مشکل دیگه ای.
که باید این ساید افکت ها رو هم به فکرش بود و یه جوری حلش کرد. مثلا اگر اینترنت کاربر در اون تایم قطع بود منتظر بمونیم تا اینترنتش وصل بشه و بعد بلافلاصه توکن جدید رو بگیریم.
خلاصه که یه سیستم احراز هویت ببینم یک روز میتونه وقت منو بگیره یا نه 😂
البته این کار مشکل رو حل نمیکنه. من توکن رو موقع کانکشن به سمت سرور میفرستادم. به این شکل
auth: { accessToken },و بعد از ساخت ارتباط هم نمیشه این رو آپدیت کرد.
پس در این صورت که آپدیت کردن اکسس توکن در مرورگر به چه دردی میخوره؟
اینجا چه راهی میمونه برامون؟🤔
❤3👍1
Dev Fuel
خب ، این مشکل رو به این شکل حل کردم که در فرانت اند یک تایمر ست کردم، اگر مثلا اکسس توکن ما از هر 15 دقیقه اکسپایر میشه ، ما از هر 13 دقیقه به سرور ریکویست میزنیم و توکن های جدید رو میگیریم. چون پایداری برامون به شدت مهمه. نمیخوایم وسط ارتباط ناگهان به دلیل…
خب مرسی بابت شرکت در پاسخ این سوال بحث بر انگیز ، بریم که جواب من رو داشته باشیم :
من خودم دو تا راه به ذهنم رسید. یکیش این که در این موقعیت هر بار دوباره یک کانکشن جدید داشته باشیم تا توکن جدید رو در auth پاس بدیم، که خب اصلا منطقی نیست.
دوم اینکه یک فانکشن بنویسم و هر موقع نیاز به emit شد از سمت فرانت ، با اون emit بزنم.
و در payload توکن جدید رو اون گوشه موشه ها جاش بدیم و ارسال کنیم.
webSocket هم که بر پایه TCP هست و رمزنگاری هم لازم انجام میشه ، پس فکر نکنم مشکلی پیش بیاد.
من خودم از این روش استفاده کردم و داره کار میکنه.
من خودم دو تا راه به ذهنم رسید. یکیش این که در این موقعیت هر بار دوباره یک کانکشن جدید داشته باشیم تا توکن جدید رو در auth پاس بدیم، که خب اصلا منطقی نیست.
دوم اینکه یک فانکشن بنویسم و هر موقع نیاز به emit شد از سمت فرانت ، با اون emit بزنم.
و در payload توکن جدید رو اون گوشه موشه ها جاش بدیم و ارسال کنیم.
webSocket هم که بر پایه TCP هست و رمزنگاری هم لازم انجام میشه ، پس فکر نکنم مشکلی پیش بیاد.
من خودم از این روش استفاده کردم و داره کار میکنه.
Dev Fuel
وقتی ما میگیم پروژه ماژولاره یعنی چی؟🤔 ماژولار یعنی پروژه به چند بخش تقسیم شده. و هر بخش مسئولیت مشخص خودشو داره. مثلا بخش user , auth , payment و ... . هر ماژول میتونه شامل کنترلر، سرویس، مدل، روتر، middleware خودش باشه. کد ها از هم مستقل هستند و وابستگی…
یه چندتا جا در آگهی استخدامی دیدم که اشاره کرده بودن تسلط به معماری ماژولار.
یاد این پستم افتادم .
گفتم بذار یه اشاره ای بهش بکنم بچه هایی که تازه وارد چنل شدن ببیننش.
یاد این پستم افتادم .
گفتم بذار یه اشاره ای بهش بکنم بچه هایی که تازه وارد چنل شدن ببیننش.
چقدر این دنیای لامصب سریع داره پیشرفت میکنه تا میای با یه چیز انس بگیری یه چیز دیگه میاد.
آنقدر هم دارن ابزار ها زیاد و زیاد میشن که باید با همشون بتونی کار کنی.
درسته که اگه یک سری موارد پایه رو بلد باشی با اکثر اینا میتونی کار کنی ، ولی این سرعت بالای پیشرفت به من حس خوبی نمیده حقیقتا.
بزار رو راست باشم ، حس عقب موندن از قافله رو میده.
من خودم دوست دارم تو یه چیز دیپ بشم ، زمان بذارم ، ولی این دنیا میذاره مگه.
(البته تو ایران که باید همه فن حریف باشی)
بابا لامصبا یکم آروم برید برید جلو جایزه تیتاپ گذاشتن مگه.
اصلا هدف این دنیا رو فراموش کردیم والا
نیومدیم که مسابقه بدیم.
چطور دلتون میاد به بهانه پیشرفت ، اینهمه استرس و فشار کاری رو تحمل کنید که تهش چی؟
همه چیز اتوماسیون بشه بشینی تو خونه چه غلطی کنی 😒
پ.ن: روی صحبتم با این سرعت رشد خیلی بالای تکنولوژیه. نه کسایی که یادش میگیرن.
آنقدر هم دارن ابزار ها زیاد و زیاد میشن که باید با همشون بتونی کار کنی.
درسته که اگه یک سری موارد پایه رو بلد باشی با اکثر اینا میتونی کار کنی ، ولی این سرعت بالای پیشرفت به من حس خوبی نمیده حقیقتا.
بزار رو راست باشم ، حس عقب موندن از قافله رو میده.
من خودم دوست دارم تو یه چیز دیپ بشم ، زمان بذارم ، ولی این دنیا میذاره مگه.
(البته تو ایران که باید همه فن حریف باشی)
بابا لامصبا یکم آروم برید برید جلو جایزه تیتاپ گذاشتن مگه.
اصلا هدف این دنیا رو فراموش کردیم والا
نیومدیم که مسابقه بدیم.
چطور دلتون میاد به بهانه پیشرفت ، اینهمه استرس و فشار کاری رو تحمل کنید که تهش چی؟
همه چیز اتوماسیون بشه بشینی تو خونه چه غلطی کنی 😒
پ.ن: روی صحبتم با این سرعت رشد خیلی بالای تکنولوژیه. نه کسایی که یادش میگیرن.
👍4
Dev Fuel
خب ، این مشکل رو به این شکل حل کردم که در فرانت اند یک تایمر ست کردم، اگر مثلا اکسس توکن ما از هر 15 دقیقه اکسپایر میشه ، ما از هر 13 دقیقه به سرور ریکویست میزنیم و توکن های جدید رو میگیریم. چون پایداری برامون به شدت مهمه. نمیخوایم وسط ارتباط ناگهان به دلیل…
خب دوستان این روش رو پیشنهاد نمیکنم بزنید.
من بعد دو روز فکرم موند پیشش برگشتم یه حرکت دیگه زدم 😂
حالا این رو چرا پیشنهاد نمیکنم؟
اولا که هیچ تضمینی نیست تایمر درست کار کنه!
یعنی ممکنه به هر دلیلی این تایمر استاپ بشه و یا یک مدتی فریز بشه و یک سری مشکلات پیش بیاد. بعد کاربر یهو وسط کار میبینه سر از صفحه لاگین در اومده.
و اینکه در این صورت ما وقتی این تایمر رو ست میکنیم باید مطمین باشیم که این تایمر با اکسس توکن ما یکیه! یعنی دقیقا مطمین باشیم که آقا اکسس توکن مثلا ازش 15 دقیقه مونده، ما از هر 13 دقیقه عوضش میکنیم.
که خب نمیتونیم این رو مطمین باشیم به چندین دلیل.
پس چه روشی خوبه؟ اینکه به دنبال یک روش استیل و درست درمون باشیم نه اینکه بیام اینطوری سوسکی ردش کنیم 😂
یکی از روش هایی که به ذهنم اومد این بود که برای سوکت یک توکن جدید بسازیم در حین کانکشن. مثلا کاربر متصل میشه ، ما یک توکن 2 یا 3 ساعته میسازیم ، و تا زمانی که ارتباط وصله از این استفاده میکنیم!
(به نظرم بهترین روش همینه)
روش بعدی که یکم سم هستش و به ذهنم رسید این بود که زحمت تولید این رو هم به خودمون ندیم ، و هنگام ارتباط با سوکت از رفرش توکن استفاده کنیم 😂
قشنگ ماهیت رفرش توکن رو میبریم سوال ولی توی بعضی پروژه ها جوابه.
من بعد دو روز فکرم موند پیشش برگشتم یه حرکت دیگه زدم 😂
حالا این رو چرا پیشنهاد نمیکنم؟
اولا که هیچ تضمینی نیست تایمر درست کار کنه!
یعنی ممکنه به هر دلیلی این تایمر استاپ بشه و یا یک مدتی فریز بشه و یک سری مشکلات پیش بیاد. بعد کاربر یهو وسط کار میبینه سر از صفحه لاگین در اومده.
و اینکه در این صورت ما وقتی این تایمر رو ست میکنیم باید مطمین باشیم که این تایمر با اکسس توکن ما یکیه! یعنی دقیقا مطمین باشیم که آقا اکسس توکن مثلا ازش 15 دقیقه مونده، ما از هر 13 دقیقه عوضش میکنیم.
که خب نمیتونیم این رو مطمین باشیم به چندین دلیل.
پس چه روشی خوبه؟ اینکه به دنبال یک روش استیل و درست درمون باشیم نه اینکه بیام اینطوری سوسکی ردش کنیم 😂
یکی از روش هایی که به ذهنم اومد این بود که برای سوکت یک توکن جدید بسازیم در حین کانکشن. مثلا کاربر متصل میشه ، ما یک توکن 2 یا 3 ساعته میسازیم ، و تا زمانی که ارتباط وصله از این استفاده میکنیم!
(به نظرم بهترین روش همینه)
روش بعدی که یکم سم هستش و به ذهنم رسید این بود که زحمت تولید این رو هم به خودمون ندیم ، و هنگام ارتباط با سوکت از رفرش توکن استفاده کنیم 😂
قشنگ ماهیت رفرش توکن رو میبریم سوال ولی توی بعضی پروژه ها جوابه.
😁1
میخوام راجع به یک موضوع باحال صحبت کنم.
Embedding چیست؟🤔
Embedding در هوش مصنوعی راهی است برای تبدیل داده ها ( مثل عکس ، متن ، صدا ) به یک نمایش عددی. ( یعنی اعداد در داخل یک بردار ) که کامپیوتر بتونه اون رو پردازش و مقایسه کنه.
و این مقایسه مفهومی هستش. یعنی چی؟
مثلا من یک متن دارم به این شکل : "سلام ، امروز تولد دوستمه!" این متن تبدیل میشه به برداری از اعداد . مثلا :
[0.060749103,0.04511056,0.03989463,0.036276204 و ....]
خب حالا این اعداد به چه دردی میخورن؟
به درد های فرآواااان.
چندتا از کاربرد هاش رو مینویسم و بعد یک توضیح میدم.
1-جستوجوی هوشمند
2-پیشنهاد محتوا
3-تشخیص شباهت و خوشهبندی
4-ترجمه و پردازش زبان طبیعی
5-شناسایی تصاویر و صدا
مثلا فرض کنیم من درون دیتابیسم کلی مقاله دارم.
یکی از مقالهها عنوانش هست: "بهترین اتوموبیلهای جهان".
حالا وقتی یک شخص بیاد و در نوار جستجو بنویسه: "بهترین خودروهای جهان"، به نظرتون به نتیجهای میرسه؟
خیر. اگر بخواهیم عادی با مقایسه کلمات پیداشون کنیم، پیدا نمیشه.
اما وقتی تایتل مقاله را به برداری از اعداد (embedding) تبدیل کنیم، میتونیم نزدیکترین نتایج از نظر معنی و مفهوم را پیدا کنیم. یعنی کامپیوتر میتونه بفهمه که "خودرو" و "اتوموبیل" تقریبا همان چیز هستند و نتیجه درست رو بیاره!
حالا چطور نزدیکترین embeddingها پیدا میشوند؟
وقتی میخواهیم یک embedding را با بقیه مقایسه کنیم، از معیار شباهت برداری استفاده میکنیم، مثلا فاصله کسینوسی (Cosine Similarity) یا فاصله اقلیدسی (Euclidean Distance).
این الگوریتمها خیلی سریع میگن: «کدام بردارها به بردار من نزدیکترند؟»
به همین دلیل وقتی کاربر چیزی جستجو میکنه سیستم میتونه نتایج مرتبط و شبیه به هم را پیدا کنه. حتی اگر کلمات دقیقا یکی نباشند.
(همه این الگوریتم ها هم از قبل نوشته شده و آماده در اختیار ما هستند ، کافیه هر موقع خواستیم از این روش استفاده کنیم ، به سراغشون بریم.)
Embedding چیست؟🤔
Embedding در هوش مصنوعی راهی است برای تبدیل داده ها ( مثل عکس ، متن ، صدا ) به یک نمایش عددی. ( یعنی اعداد در داخل یک بردار ) که کامپیوتر بتونه اون رو پردازش و مقایسه کنه.
و این مقایسه مفهومی هستش. یعنی چی؟
مثلا من یک متن دارم به این شکل : "سلام ، امروز تولد دوستمه!" این متن تبدیل میشه به برداری از اعداد . مثلا :
[0.060749103,0.04511056,0.03989463,0.036276204 و ....]
خب حالا این اعداد به چه دردی میخورن؟
به درد های فرآواااان.
چندتا از کاربرد هاش رو مینویسم و بعد یک توضیح میدم.
1-جستوجوی هوشمند
2-پیشنهاد محتوا
3-تشخیص شباهت و خوشهبندی
4-ترجمه و پردازش زبان طبیعی
5-شناسایی تصاویر و صدا
مثلا فرض کنیم من درون دیتابیسم کلی مقاله دارم.
یکی از مقالهها عنوانش هست: "بهترین اتوموبیلهای جهان".
حالا وقتی یک شخص بیاد و در نوار جستجو بنویسه: "بهترین خودروهای جهان"، به نظرتون به نتیجهای میرسه؟
خیر. اگر بخواهیم عادی با مقایسه کلمات پیداشون کنیم، پیدا نمیشه.
اما وقتی تایتل مقاله را به برداری از اعداد (embedding) تبدیل کنیم، میتونیم نزدیکترین نتایج از نظر معنی و مفهوم را پیدا کنیم. یعنی کامپیوتر میتونه بفهمه که "خودرو" و "اتوموبیل" تقریبا همان چیز هستند و نتیجه درست رو بیاره!
حالا چطور نزدیکترین embeddingها پیدا میشوند؟
وقتی میخواهیم یک embedding را با بقیه مقایسه کنیم، از معیار شباهت برداری استفاده میکنیم، مثلا فاصله کسینوسی (Cosine Similarity) یا فاصله اقلیدسی (Euclidean Distance).
این الگوریتمها خیلی سریع میگن: «کدام بردارها به بردار من نزدیکترند؟»
به همین دلیل وقتی کاربر چیزی جستجو میکنه سیستم میتونه نتایج مرتبط و شبیه به هم را پیدا کنه. حتی اگر کلمات دقیقا یکی نباشند.
(همه این الگوریتم ها هم از قبل نوشته شده و آماده در اختیار ما هستند ، کافیه هر موقع خواستیم از این روش استفاده کنیم ، به سراغشون بریم.)
🔥3👍1