۳۰ توصیه از یک برنامهنویس سنیور: نکاتی که ای کاش زودتر میدونستیم! 🦠
۱. کد تمیز مهمتر از کد سریعه. بعداً که برگردی سراغ کدت، از خودت تشکر میکنی!
۲. مهارت های نرم(ارتباط، حل مسئله و...) رو جدی بگیر.
۳. همیشه فکر کن یه نفر دیگه قراره کدت رو بخونه - حتی اگه تنها توی پروژه کار میکنی.
۴. هر روز حداقل نیم ساعت مطالعه کن، مهم نیست چقدر شلوغی!
۵. سراغ فریمورک جدید نرو تا وقتی پایهت قوی نشده. جاوااسکریپت وانیلا رو خوب یاد بگیر، بعد برو سراغ ریاکت.
۶. گیت رو جدی بگیر. روزی میرسه که نجاتت میده و مهم نیست کجای رودمپ هستی، یادش بگیر.
۷. وقتی یه چیزی رو نمیدونی، با افتخار بگو نمیدونم. هیچکس همه چیز رو نمیدونه.
۸. کد ریویو فقط برای پیدا کردن باگ نیست. ازش برای یادگیری استفاده کن.
۹. با تیمت خوب رفتار کن. مهم نیست چقدر باهوشی، اگه نتونی با بقیه کار کنی، به درد نمیخوری!
۱۰. قبل از شروع کدنویسی، نحوه پیاده سازی تسک هارو تو ذهنت طراحی کن.
۱۱. هر تغییری رو تست کن، حتی اگه مطمئنی درسته.
۱۲. دیباگ کردن رو یاد بگیر، console.log همیشه جواب نمیده!
۱۳. امنیت رو از روز اول جدی بگیر. بعداً خیلی دیره.
۱۴. پرفورمنس مهمه، ولی نه به قیمت امنیت.
۱۵. داکیومنت بنویس. نه برای بقیه، برای خودت!
۱۶. هر ۶ ماه یه تکنولوژی جدید یاد بگیر.
۱۷. توی کامیونیتیها فعال باش. یه روزی به دردت میخوره.
۱۸. فقط به حقوق فکر نکن، به چیزی که یاد میگیری هم فکر کن. خروجی ما از شرکت و تیم نباید فقط بحث مالی باشه.
۱۹. تخصص و انرژیت رو ارزون در اختیار بقیه قرار نده.
۲۰. استکاورفلو و Gpt خوبه، ولی اول سعی کن خودت فکر کنی.
۲۱. کامنت بذار، ولی نه برای توضیح کد بد.
۲۲. پشت سیستم ورزش کن. کمردرد شوخی نداره.
۲۳. به چشمهات استراحت بده و قانون ۲۰-۲۰-۲۰ رو رعایت کن.
۲۴. زندگی فقط کد نیست. تفریح هم مهمه.
۲۵. تخمین زمانی رو ضرب در ۲ کن، باز هم کمه!
۲۶. تکنیکال دبت رو جدی بگیر. یه روز میاد سراغت.
۲۷. کمالگرایی رو بزار کنار و MVP بساز.
۲۸. از شکستهات یاد بگیر، همه اشتباه میکنن.
۲۹. صبور باش، همه یه روزی جونیور بودن.
۳۰. لذت ببر! برنامهنویسی قشنگترین شغل دنیاست.
شما چه تجربه ای دارید؟ 🤔
لیست رو اگه میتونید تکمیل تر کنید.
#tips
@CodeModule
۱. کد تمیز مهمتر از کد سریعه. بعداً که برگردی سراغ کدت، از خودت تشکر میکنی!
۲. مهارت های نرم(ارتباط، حل مسئله و...) رو جدی بگیر.
۳. همیشه فکر کن یه نفر دیگه قراره کدت رو بخونه - حتی اگه تنها توی پروژه کار میکنی.
۴. هر روز حداقل نیم ساعت مطالعه کن، مهم نیست چقدر شلوغی!
۵. سراغ فریمورک جدید نرو تا وقتی پایهت قوی نشده. جاوااسکریپت وانیلا رو خوب یاد بگیر، بعد برو سراغ ریاکت.
۶. گیت رو جدی بگیر. روزی میرسه که نجاتت میده و مهم نیست کجای رودمپ هستی، یادش بگیر.
۷. وقتی یه چیزی رو نمیدونی، با افتخار بگو نمیدونم. هیچکس همه چیز رو نمیدونه.
۸. کد ریویو فقط برای پیدا کردن باگ نیست. ازش برای یادگیری استفاده کن.
۹. با تیمت خوب رفتار کن. مهم نیست چقدر باهوشی، اگه نتونی با بقیه کار کنی، به درد نمیخوری!
۱۰. قبل از شروع کدنویسی، نحوه پیاده سازی تسک هارو تو ذهنت طراحی کن.
۱۱. هر تغییری رو تست کن، حتی اگه مطمئنی درسته.
۱۲. دیباگ کردن رو یاد بگیر، console.log همیشه جواب نمیده!
۱۳. امنیت رو از روز اول جدی بگیر. بعداً خیلی دیره.
۱۴. پرفورمنس مهمه، ولی نه به قیمت امنیت.
۱۵. داکیومنت بنویس. نه برای بقیه، برای خودت!
۱۶. هر ۶ ماه یه تکنولوژی جدید یاد بگیر.
۱۷. توی کامیونیتیها فعال باش. یه روزی به دردت میخوره.
۱۸. فقط به حقوق فکر نکن، به چیزی که یاد میگیری هم فکر کن. خروجی ما از شرکت و تیم نباید فقط بحث مالی باشه.
۱۹. تخصص و انرژیت رو ارزون در اختیار بقیه قرار نده.
۲۰. استکاورفلو و Gpt خوبه، ولی اول سعی کن خودت فکر کنی.
۲۱. کامنت بذار، ولی نه برای توضیح کد بد.
۲۲. پشت سیستم ورزش کن. کمردرد شوخی نداره.
۲۳. به چشمهات استراحت بده و قانون ۲۰-۲۰-۲۰ رو رعایت کن.
۲۴. زندگی فقط کد نیست. تفریح هم مهمه.
۲۵. تخمین زمانی رو ضرب در ۲ کن، باز هم کمه!
۲۶. تکنیکال دبت رو جدی بگیر. یه روز میاد سراغت.
۲۷. کمالگرایی رو بزار کنار و MVP بساز.
۲۸. از شکستهات یاد بگیر، همه اشتباه میکنن.
۲۹. صبور باش، همه یه روزی جونیور بودن.
۳۰. لذت ببر! برنامهنویسی قشنگترین شغل دنیاست.
شما چه تجربه ای دارید؟ 🤔
لیست رو اگه میتونید تکمیل تر کنید.
#tips
@CodeModule
🔥35👌9❤🔥1
چقدر از Event Loop در جاوااسکریپت اطلاعات دارید؟ 🦦
Event Loop یه مکانیزم خیلی مهم توی جاوااسکریپته که باعث میشه این زبان با وجود Single-Threaded بودن، بتونه غیر بلاککننده و (Asynchronous) کار کنه.
به زبان ساده Event Loop مسئول اینه که کارهای مختلف جاوااسکریپت رو مدیریت کنه و مطمئن بشه، کدهای ما به ترتیب و به درستی اجرا میشن.
اجزای اصلی Event Loop شامل موارد زیر هست 🦠
1. Call Stack
یک لیست (ساختار دادهای LIFO) که جاوااسکریپت توش توابع در حال اجرا رو نگه میداره. هر تابعی که صدا زده میشه میره روی استک و بعد از اجرا، ازش حذف میشه. این قلب تپنده اجرای کدهای همزمان (synchronous) هست.
2. Web APIs
وقتی یه کار غیربلاککننده مثل تایمر (setTimeout) یا ریکوستی(fetch) اجرا میشه، به Web APIs سپرده میشه. Web APIs این کارها رو در محیط مرورگر یا Node.js مدیریت میکنه و بعد از تموم شدن، نتیجه رو به Callback Queue میفرسته.
3. Callback Queue
یه صف که توابع آماده اجرا مثل تایمرها و Event Listeners در اون نگهداری میشن. وقتی Call Stack خالی بشه، Event Loop این صف رو یکییکی اجرا میکنه.
4. Microtasks Queue
وظایفی مثل Promise.then و Mutation Observers در این صف قرار میگیرن. این صف همیشه قبل از Callback Queue پردازش میشه و اولویت بیشتری داره.
5. Macrotasks Queue
وظایفی مثل setTimeout و setInterval در این صف قرار میگیرن. این صف بعد از Microtasks پردازش میشه و شامل کارهایی با اولویت پایینتره.
به زبان ساده، Event Loop مسئول اینه که کارهای مختلف جاوااسکریپت رو به ترتیب و به درستی اجرا کنه. این مکانیزم به جاوااسکریپت قدرت انجام عملیات سنگین مثل درخواستهای شبکه و انیمیشنها رو بدون قفل کردن برنامه میده.
#eventloop
@CodeModule
Event Loop یه مکانیزم خیلی مهم توی جاوااسکریپته که باعث میشه این زبان با وجود Single-Threaded بودن، بتونه غیر بلاککننده و (Asynchronous) کار کنه.
به زبان ساده Event Loop مسئول اینه که کارهای مختلف جاوااسکریپت رو مدیریت کنه و مطمئن بشه، کدهای ما به ترتیب و به درستی اجرا میشن.
اجزای اصلی Event Loop شامل موارد زیر هست 🦠
1. Call Stack
یک لیست (ساختار دادهای LIFO) که جاوااسکریپت توش توابع در حال اجرا رو نگه میداره. هر تابعی که صدا زده میشه میره روی استک و بعد از اجرا، ازش حذف میشه. این قلب تپنده اجرای کدهای همزمان (synchronous) هست.
2. Web APIs
وقتی یه کار غیربلاککننده مثل تایمر (setTimeout) یا ریکوستی(fetch) اجرا میشه، به Web APIs سپرده میشه. Web APIs این کارها رو در محیط مرورگر یا Node.js مدیریت میکنه و بعد از تموم شدن، نتیجه رو به Callback Queue میفرسته.
3. Callback Queue
یه صف که توابع آماده اجرا مثل تایمرها و Event Listeners در اون نگهداری میشن. وقتی Call Stack خالی بشه، Event Loop این صف رو یکییکی اجرا میکنه.
4. Microtasks Queue
وظایفی مثل Promise.then و Mutation Observers در این صف قرار میگیرن. این صف همیشه قبل از Callback Queue پردازش میشه و اولویت بیشتری داره.
5. Macrotasks Queue
وظایفی مثل setTimeout و setInterval در این صف قرار میگیرن. این صف بعد از Microtasks پردازش میشه و شامل کارهایی با اولویت پایینتره.
به زبان ساده، Event Loop مسئول اینه که کارهای مختلف جاوااسکریپت رو به ترتیب و به درستی اجرا کنه. این مکانیزم به جاوااسکریپت قدرت انجام عملیات سنگین مثل درخواستهای شبکه و انیمیشنها رو بدون قفل کردن برنامه میده.
از بحث Event Loop در اکثر مصاحبه ها سوال میاد و یادگیریش، بهتون در درک جاوااسکریپت خیلی کمک میکنه.
#eventloop
@CodeModule
🔥15👌4❤🔥3
Clerk، ابزاری کارآمد و ساده برای احراز هویت 😎
Clerk یک پلتفرم فوقالعادهست که تمام پیچیدگیهای مربوط به احراز هویت و مدیریت کاربران رو براتون هندل میکنه و دیگه نیازی نیست درگیر ساخت فرمهای پیچیده، مدیریت توکنها، احراز هویت دو مرحلهای و... باشید.
⚡️ سادگی و با چند خط کد، یه سیستم احراز هویت امن و مدرن رو به اپلیکیشنتون اضافه کنید.
‼️ چرا Clerk برای برنامهنویسها عالیه؟
✅ سرعت و سهولت یکپارچهسازی: با کتابخانههای آماده برای فریمورکها و زبانهای برنامهنویسی محبوب، خیلی سریع میتونید Clerk رو به پروژتون اضافه کنید.
✅ امنیت بالا: دیگه نگران آسیبپذیریهای امنیتی مربوط به احراز هویت نباشید. با رعایت بهروزترین استانداردهای امنیتی، خیالتون رو راحت میکنه.
✅ رابط کاربری قابل کاستومایز : ظاهر صفحات ورود و ثبتنام رو مطابق با برند و طراحی اپلیکیشنتون شخصیسازی کنید.
✅ پشتیبانی از روشهای مختلف احراز هویت: ورود با ایمیل، شماره تلفن، حسابهای شبکههای اجتماعی و...
✅ مدیریت آسان کاربران: داشبورد کاربری ساده و قدرتمند برای مدیریت کاربران و تنظیمات مربوط به اونها.
✅ صرفهجویی در زمان و هزینه: با استفاده از Clerk دیگه نیازی به صرف زمان و منابع برای توسعه و نگهداری سیستم احراز هویت اختصاصی ندارید.
اگر به دنبال یک راهحل حرفهای و کارآمد برای مدیریت احراز هویت کاربران میگردید، Clerk قطعاً گزینه خوبی هست، برای یادگیری این ابزار میتونید به داکیومنتش مراجعه کنید.
Document🌕
#authentication #clerk
@CodeModule
Clerk یک پلتفرم فوقالعادهست که تمام پیچیدگیهای مربوط به احراز هویت و مدیریت کاربران رو براتون هندل میکنه و دیگه نیازی نیست درگیر ساخت فرمهای پیچیده، مدیریت توکنها، احراز هویت دو مرحلهای و... باشید.
اگر به دنبال یک راهحل حرفهای و کارآمد برای مدیریت احراز هویت کاربران میگردید، Clerk قطعاً گزینه خوبی هست، برای یادگیری این ابزار میتونید به داکیومنتش مراجعه کنید.
Document
#authentication #clerk
@CodeModule
Please open Telegram to view this post
VIEW IN TELEGRAM
1🔥6⚡2👌2💔1
چند تا کامند کاربردی و کمتر شناخته شده از گیت 🦦
میدونستی به جز push و pull گیت کامند های دیگه ای هم داره؟ در این پست من چند کامند کمتر شناخته شده و کاربردی رو بهتون معرفی میکنم.
💎 git stash
زمانی که شما در برنچ A هستید و یهویی مجبورید به برنچ B سوییچ کنید و نمیخواید این تغییرات نیمهکاره رو کامیت کنید، git stash به دادتون میرسه. تغییراتتون رو جمع میکنه و میتونید بدون کامیت کردن به یک برنچ دیگه برید.
💎 conditional config
اینجوری بگم که با این قابلیت میتونید تعیین کنید یه تنظیم خاص تو گیت فقط تحت شرایط خاصی اعمال بشه. مثلا اگه در یک پروژه خاص بودید، یا برای یه ایمیل خاص، تنظیمات متفاوتی داشته باشی.
💎 git blame
این کامند برای وقتی هست که در تیم، یک قسمت از کد خراب شده و میخواید بدونید کدوم دولوپر کامیت کرده و مقصر کیه. با این کامند به راحتی میتونید بفهمید چه کسی اون فایل رو تغییر داده.
💎 git reflog
این کامند برای زمانی خوبه که یک خرابکاری کردی، مثلا یک کامیت پاک کردی و این کامند بهت نشون میده چه تغییراتی صورت گرفته. این کامند به طور پیشفرض فعال هست و تغییرات محلی رو ثبت میکنه. (مثلا زمانی که ما از کامند git log استفاده میکنیم)
💎 git diff —word —diff
به جای اینکه کل تغییرات رو خطبهخط رو ببینی، این کامند تغییرات رو کلمهبهکلمه نشون میده. برای وقتایی که کد زیاد داری، خیلی کمک میکنه.
💎 git push —force-with-lease
این یه جور فورس پوش هست، ولی با احتیاط! به جای اینکه فورس بزنی و تغییرات دیگران رو overwrite کنی، این تضمین میکنه که اگه کسی دیگه چیزی تو ریپازیتوری تغییر داده، پوش تو انجام نشه.
به صورت خلاصه این کامند ها قطعا یه روز به کارتون میاد و به نوبه خودشون کاربردی هستن. دقت کنید تعداد کامند های گیت حدودا بیشتر از ۱۵۰ تا هست و اگه علاقه مند به کشف باقی موارد هستید، میتونید از YouTube اقای Scott Chacon اطلاعات خوبی به دست بیارید. ایشون نویسنده کتاب معروف Git Pro، و یکی از بنیانگذاران گیت هاب هستن.
#git
@CodeModule
میدونستی به جز push و pull گیت کامند های دیگه ای هم داره؟ در این پست من چند کامند کمتر شناخته شده و کاربردی رو بهتون معرفی میکنم.
💎 git stash
زمانی که شما در برنچ A هستید و یهویی مجبورید به برنچ B سوییچ کنید و نمیخواید این تغییرات نیمهکاره رو کامیت کنید، git stash به دادتون میرسه. تغییراتتون رو جمع میکنه و میتونید بدون کامیت کردن به یک برنچ دیگه برید.
💎 conditional config
اینجوری بگم که با این قابلیت میتونید تعیین کنید یه تنظیم خاص تو گیت فقط تحت شرایط خاصی اعمال بشه. مثلا اگه در یک پروژه خاص بودید، یا برای یه ایمیل خاص، تنظیمات متفاوتی داشته باشی.
💎 git blame
این کامند برای وقتی هست که در تیم، یک قسمت از کد خراب شده و میخواید بدونید کدوم دولوپر کامیت کرده و مقصر کیه. با این کامند به راحتی میتونید بفهمید چه کسی اون فایل رو تغییر داده.
💎 git reflog
این کامند برای زمانی خوبه که یک خرابکاری کردی، مثلا یک کامیت پاک کردی و این کامند بهت نشون میده چه تغییراتی صورت گرفته. این کامند به طور پیشفرض فعال هست و تغییرات محلی رو ثبت میکنه. (مثلا زمانی که ما از کامند git log استفاده میکنیم)
💎 git diff —word —diff
به جای اینکه کل تغییرات رو خطبهخط رو ببینی، این کامند تغییرات رو کلمهبهکلمه نشون میده. برای وقتایی که کد زیاد داری، خیلی کمک میکنه.
💎 git push —force-with-lease
این یه جور فورس پوش هست، ولی با احتیاط! به جای اینکه فورس بزنی و تغییرات دیگران رو overwrite کنی، این تضمین میکنه که اگه کسی دیگه چیزی تو ریپازیتوری تغییر داده، پوش تو انجام نشه.
به صورت خلاصه این کامند ها قطعا یه روز به کارتون میاد و به نوبه خودشون کاربردی هستن. دقت کنید تعداد کامند های گیت حدودا بیشتر از ۱۵۰ تا هست و اگه علاقه مند به کشف باقی موارد هستید، میتونید از YouTube اقای Scott Chacon اطلاعات خوبی به دست بیارید. ایشون نویسنده کتاب معروف Git Pro، و یکی از بنیانگذاران گیت هاب هستن.
#git
@CodeModule
🔥21⚡2
😁63
Swagger این ابزار رو ببینه جیغ میکشه!
پکیج swagger-typescript-api یک ابزار قدرتمند و کاربردیه که بهتون کمک میکنه بر اساس Swagger پروژتون، کدهایی رو که شامل اینترفیسها، تایپها، و فانکشنهای مورد نیاز برای تعامل با API هستن، بهطور خودکار تولید کنید. کافیه آدرس swagger پروژه رو تحویلش بدید تا شیک و مجلسی، کل کوئری های مورد نیاز رو جنریت کنه.
قابلیتها و کاربردهای اصلی 👇🏻
1.تولید تایپها و اینترفیسها:
این پکیج فایل TypeScript تولید میکنه که شامل تمام تایپهای مربوط به دادههایی هست که API شما دریافت یا ارسال میکنه. این کار باعث جلوگیری از خطاهای تایپی و افزایش سرعت توسعه میشه.
2.ایجاد ریکوست فانکشن ها:
فانکشنهایی برای فراخوانی هر یک از endpointهای API تولید میکنه که مستقیماً با تایپهای TypeScript همخوانی دارن.
3.پشتیبانی از OpenAPI:
بهطور کامل از نسخههای OpenAPI (مانند OpenAPI 3.0) پشتیبانی میکنه.
4.سفارشیسازی بالا:
میتونید قالب(template)های خودتون رو برای تولید کد سفارشی استفاده کنید. در کل گزینههای متنوعی برای تنظیم ساختار خروجی فراهم هست.
به طور خلاصه این پکیج به شدت سرعت توسعه رو بالا میبره و با مدل تایپ های تمیز و مرتب، از خطاهای احتمالی پروژتون جلوگیری میکنه.
(این ابزار خوراک ریکت کوئری دولوپر ها هست)
🔗 Link
#tools #swagger
@CodeModule
پکیج swagger-typescript-api یک ابزار قدرتمند و کاربردیه که بهتون کمک میکنه بر اساس Swagger پروژتون، کدهایی رو که شامل اینترفیسها، تایپها، و فانکشنهای مورد نیاز برای تعامل با API هستن، بهطور خودکار تولید کنید. کافیه آدرس swagger پروژه رو تحویلش بدید تا شیک و مجلسی، کل کوئری های مورد نیاز رو جنریت کنه.
قابلیتها و کاربردهای اصلی 👇🏻
1.تولید تایپها و اینترفیسها:
این پکیج فایل TypeScript تولید میکنه که شامل تمام تایپهای مربوط به دادههایی هست که API شما دریافت یا ارسال میکنه. این کار باعث جلوگیری از خطاهای تایپی و افزایش سرعت توسعه میشه.
2.ایجاد ریکوست فانکشن ها:
فانکشنهایی برای فراخوانی هر یک از endpointهای API تولید میکنه که مستقیماً با تایپهای TypeScript همخوانی دارن.
3.پشتیبانی از OpenAPI:
بهطور کامل از نسخههای OpenAPI (مانند OpenAPI 3.0) پشتیبانی میکنه.
4.سفارشیسازی بالا:
میتونید قالب(template)های خودتون رو برای تولید کد سفارشی استفاده کنید. در کل گزینههای متنوعی برای تنظیم ساختار خروجی فراهم هست.
به طور خلاصه این پکیج به شدت سرعت توسعه رو بالا میبره و با مدل تایپ های تمیز و مرتب، از خطاهای احتمالی پروژتون جلوگیری میکنه.
(این ابزار خوراک ریکت کوئری دولوپر ها هست)
🔗 Link
#tools #swagger
@CodeModule
GitHub
GitHub - acacode/swagger-typescript-api: Generate the API Client for Fetch or Axios from an OpenAPI Specification
Generate the API Client for Fetch or Axios from an OpenAPI Specification - acacode/swagger-typescript-api
🔥63⚡10❤🔥2
حباب هوش مصنوعی شکست! 🫧
اخیراً یک مدل هوش مصنوعی به نام DeepSeek از چین معرفی شد که توجه بسیاری به خودش جلب کرد. این مدل زبانی عملکردی شبیه به GPT داره و از طریق پرامت های کاربران، پاسخهای خودش رو تولید میکنه اما تفاوت اصلی اون در هزینه ها و روشهای توسعه اون هست. گفته میشه DeepSeek با بودجه حدود ۵ تا ۶ میلیون دلار ساخته شده و در برخی آزمون ها حتی از مدل های پیشرفته تری مثل GPT بهتر عمل کرده. این اتفاق تأثیر زیادی روی بازار گذاشته به طوری که ارزش سهام شرکت هایی مثل انویدیا و open ai کاهش پیدا کرده.
قبل از این، شرکتهایی مثل انویدیا و open ai ادعا میکردن توسعه هوش مصنوعی به منابع سخت افزاری عظیم و سرمایه گذاری کلان نیاز داره. انویدیا با فروش سخت افزارهای ویژه به غولهای فناوری مانند آمازون و مایکروسافت سود زیادی کسب میکرد و open ai هم بر پیچیدگی توسعه مدلهای زبانی تأکید داشت، تا این فناوری رو در انحصار خودش نگه داره. اما ظهور دیپ سیک این narrative رو زیر سوال برد. تیم توسعه دهنده دیپ سیک نشون داد با بهینه سازی روشهای قدیمی و کاهش مصرف منابع، میشه مدلی کارآمد حتی روی سیستمهای گیمینگ معمولی ساخت، بدون نیاز به ابررایانه ها یا بودجه های میلیاردی 💸
یکی از نقاط قوت DeepSeek بازنگری در الگوریتم های سنتی یادگیری ماشین بود، که باعث شد مصرف حافظه و انرژی تا حد چشمگیری کاهش پیدا کنه. این بهینه سازی هزینههای توسعه رو از صدها میلیون دلار به کمتر از ۱۰ میلیون دلار رسوند. چنین دستاوردی نه تنها انحصار شرکتهای بزرگ رو شکست، بلکه اثبات کرد دانش کافی و خلاقیت میتونه محدودیت های مالی و سخت افزاری رو جبران کنه.
این اتفاق رو سرآغاز تحولی در حوزه هوش مصنوعی میتونیم بدونیم. حالا دیگه هر تیم کوچیک یا حتی افراد مستقل با دانش فنی مناسب امکان ساخت مدلهای رقابتی رو دارن. موفقیت دیپ سیک همچنین نشون میده ادعاهای شرکتهای بزرگ درباره ضرورت منابع انحصاری همیشه واقعی نیست و تنها راهی برای حفظ سلطه بازار هست. حالا چالش جدیدی پیش روی صنعت قرار گرفته: آیا این روند بازتر شدن فناوری ادامه پیدا میکنه یا غول های تکنولوژی راهی برای بازپسگیری انحصار پیدا میکنن؟ 🤔
🔗 همین الان DeepSeek رو امتحان کن
#ai
@CodeModule
اخیراً یک مدل هوش مصنوعی به نام DeepSeek از چین معرفی شد که توجه بسیاری به خودش جلب کرد. این مدل زبانی عملکردی شبیه به GPT داره و از طریق پرامت های کاربران، پاسخهای خودش رو تولید میکنه اما تفاوت اصلی اون در هزینه ها و روشهای توسعه اون هست. گفته میشه DeepSeek با بودجه حدود ۵ تا ۶ میلیون دلار ساخته شده و در برخی آزمون ها حتی از مدل های پیشرفته تری مثل GPT بهتر عمل کرده. این اتفاق تأثیر زیادی روی بازار گذاشته به طوری که ارزش سهام شرکت هایی مثل انویدیا و open ai کاهش پیدا کرده.
قبل از این، شرکتهایی مثل انویدیا و open ai ادعا میکردن توسعه هوش مصنوعی به منابع سخت افزاری عظیم و سرمایه گذاری کلان نیاز داره. انویدیا با فروش سخت افزارهای ویژه به غولهای فناوری مانند آمازون و مایکروسافت سود زیادی کسب میکرد و open ai هم بر پیچیدگی توسعه مدلهای زبانی تأکید داشت، تا این فناوری رو در انحصار خودش نگه داره. اما ظهور دیپ سیک این narrative رو زیر سوال برد. تیم توسعه دهنده دیپ سیک نشون داد با بهینه سازی روشهای قدیمی و کاهش مصرف منابع، میشه مدلی کارآمد حتی روی سیستمهای گیمینگ معمولی ساخت، بدون نیاز به ابررایانه ها یا بودجه های میلیاردی 💸
یکی از نقاط قوت DeepSeek بازنگری در الگوریتم های سنتی یادگیری ماشین بود، که باعث شد مصرف حافظه و انرژی تا حد چشمگیری کاهش پیدا کنه. این بهینه سازی هزینههای توسعه رو از صدها میلیون دلار به کمتر از ۱۰ میلیون دلار رسوند. چنین دستاوردی نه تنها انحصار شرکتهای بزرگ رو شکست، بلکه اثبات کرد دانش کافی و خلاقیت میتونه محدودیت های مالی و سخت افزاری رو جبران کنه.
این اتفاق رو سرآغاز تحولی در حوزه هوش مصنوعی میتونیم بدونیم. حالا دیگه هر تیم کوچیک یا حتی افراد مستقل با دانش فنی مناسب امکان ساخت مدلهای رقابتی رو دارن. موفقیت دیپ سیک همچنین نشون میده ادعاهای شرکتهای بزرگ درباره ضرورت منابع انحصاری همیشه واقعی نیست و تنها راهی برای حفظ سلطه بازار هست. حالا چالش جدیدی پیش روی صنعت قرار گرفته: آیا این روند بازتر شدن فناوری ادامه پیدا میکنه یا غول های تکنولوژی راهی برای بازپسگیری انحصار پیدا میکنن؟ 🤔
🔗 همین الان DeepSeek رو امتحان کن
#ai
@CodeModule
⚡21❤🔥2👌2🔥1
Trust Proxy توی Express.js چیه و دقیقاً چه کاری میکنه؟ 🤔
Trust Proxy یه تنظیم توی Express هست که به اپلیکیشن میگه آیا باید به اطلاعاتی که توی هدرهای X-Forwarded-For و X-Forwarded-Proto میاد، اعتماد کنه یا نه.
حالا این یعنی چی؟ یعنی وقتی برنامه بک اند یه سرور واسطهای (مثل Nginx یا Cloudflare) قرار داره، IP و پروتکل واقعی کاربر توی این هدرها قرار میگیره. Express بهطور پیشفرض به این اطلاعات اعتماد نداره اما اگه trust proxy رو فعال کنید، Express از این هدرها برای تعیین IP و پروتکل واقعی کاربر استفاده میکنه.
۲. Trust Proxy به چه دردی میخوره؟
وقتی که برنامه شما رو یه پراکسی معکوس (Reverse Proxy) یا یه لود بالانسر اجرا میشه، در حالت عادی Express فقط IP و اطلاعاتی که از سمت اون پراکسی دریافت کرده رو میبینه، نه اطلاعات اصلی کاربر. این یعنی ممکنه req.ip اشتباه باشه، req.protocol به جای
اینجاست که Trust Proxy به درد میخوره 👇🏻
- وقتی فعال بشه، Express مقدار واقعی IP کاربر رو از X-Forwarded-For میخونه.
- req.protocol رو بر اساس X-Forwarded-Proto تنظیم میکنه.
- req.hostname رو درست مقداردهی میکنه
۳. چجوری Trust Proxy رو توی Express فعال کنیم؟
خیلی ساده!
با این تنظیم:
- req.ip مقدار واقعی آیپی کاربر رو میده.
- req.protocol مقدار واقعی http یا https رو نشون میده.
۴. Trust Proxy چه مقدارهایی میگیره؟
مقدار
Trust Proxy یه تنظیم مهمه که وقتی برنامتون یه پراکسی مثل Nginx یا Cloudflare باشه، کمک میکنه Express اطلاعات واقعی کاربر رو تشخیص بده. اما باید دقت کنی که به هر پراکسیای اعتماد نکنید! برای امنیت بیشتر، فقط به آیپیهایی که واقعاً Proxyهای خودتون هستن اجازه بدید.
برای جزئیات بیشتر میتونید به مستندات رسمی Express در مورد TrustProxy مراجعه کنید، که این جنبه ها رو با عمق بیشتری توضیح میده.
#nodejs #express
@CodeModule
Trust Proxy یه تنظیم توی Express هست که به اپلیکیشن میگه آیا باید به اطلاعاتی که توی هدرهای X-Forwarded-For و X-Forwarded-Proto میاد، اعتماد کنه یا نه.
حالا این یعنی چی؟ یعنی وقتی برنامه بک اند یه سرور واسطهای (مثل Nginx یا Cloudflare) قرار داره، IP و پروتکل واقعی کاربر توی این هدرها قرار میگیره. Express بهطور پیشفرض به این اطلاعات اعتماد نداره اما اگه trust proxy رو فعال کنید، Express از این هدرها برای تعیین IP و پروتکل واقعی کاربر استفاده میکنه.
۲. Trust Proxy به چه دردی میخوره؟
وقتی که برنامه شما رو یه پراکسی معکوس (Reverse Proxy) یا یه لود بالانسر اجرا میشه، در حالت عادی Express فقط IP و اطلاعاتی که از سمت اون پراکسی دریافت کرده رو میبینه، نه اطلاعات اصلی کاربر. این یعنی ممکنه req.ip اشتباه باشه، req.protocol به جای
https
مقدار http
داشته باشه و کلی مشکل دیگه. اینجاست که Trust Proxy به درد میخوره 👇🏻
- وقتی فعال بشه، Express مقدار واقعی IP کاربر رو از X-Forwarded-For میخونه.
- req.protocol رو بر اساس X-Forwarded-Proto تنظیم میکنه.
- req.hostname رو درست مقداردهی میکنه
۳. چجوری Trust Proxy رو توی Express فعال کنیم؟
خیلی ساده!
const app = express();
app.set("trust proxy", true);
با این تنظیم:
- req.ip مقدار واقعی آیپی کاربر رو میده.
- req.protocol مقدار واقعی http یا https رو نشون میده.
اما... فعال کردنش به این سادگی هم نیست! چون ممکنه سرورهای پراکسی مختلفی جلوی اپلیکیشن باشن و تو نیاز داشته باشی مشخص کنی که به کدوم پراکسیها اعتماد داری.
۴. Trust Proxy چه مقدارهایی میگیره؟
مقدار
true
همیشه بهترین گزینه نیست. Express چند مدل مقدار رو قبول میکنه: app.set("trust proxy", false); // پیشفرض، هیچ پراکسیای رو قبول نمیکنه.
app.set("trust proxy", true); // به همه پراکسیها اعتماد میکنه.
app.set("trust proxy", "loopback"); // فقط به 127.0.0.1 اعتماد میکنه.
app.set("trust proxy", "127.0.0.1"); // فقط به این IP خاص اعتماد میکنه.
app.set("trust proxy", ["192.168.1.1", "10.0.0.1"]); // لیستی از پراکسیهای قابلاعتماد.
app.set("trust proxy", 2); // از آخرین دو پراکسی مقدار رو میخونه.
- مقدار 2 یعنی چی؟
وقتی مقدار 2 رو میدید، Express میاد ip واقعی کاربر رو از دو پراکسی آخر توی X-Forwarded-For استخراج میکنه. این کار به درد جایی میخوره که چند تا سرور بین کاربر و اپلیکیشن هستن.
- پس مقدار true بدیم یا نه؟
بهتره فقط به پراکسیهایی که میشناسی اعتماد کنید. مثلاً اگه سرور فقط Cloudflare یا Nginx قرار داره، میتونید فقط به اون آیپیها اعتماد کنین تا از IP Spoofing جلوگیری بشه.
Trust Proxy یه تنظیم مهمه که وقتی برنامتون یه پراکسی مثل Nginx یا Cloudflare باشه، کمک میکنه Express اطلاعات واقعی کاربر رو تشخیص بده. اما باید دقت کنی که به هر پراکسیای اعتماد نکنید! برای امنیت بیشتر، فقط به آیپیهایی که واقعاً Proxyهای خودتون هستن اجازه بدید.
برای جزئیات بیشتر میتونید به مستندات رسمی Express در مورد TrustProxy مراجعه کنید، که این جنبه ها رو با عمق بیشتری توضیح میده.
#nodejs #express
@CodeModule
⚡13👌3
یه جوری راجب همه چیز پست زدیم که دیگه واقعا ایده ندارم.
یه ساعت درگیر پست زدن راجب یه موضوع بودم، بعد ک تموم شد فهمیدیم راجب اون موضوع قبلا پست گذاشتیم :)))
نظرتون چیه یکم از دنیای جاوااسکریپت خارج بشیم و یه سری به باقی زبان و اکوسیستم ها بزنیم؟
یه ساعت درگیر پست زدن راجب یه موضوع بودم، بعد ک تموم شد فهمیدیم راجب اون موضوع قبلا پست گذاشتیم :)))
نظرتون چیه یکم از دنیای جاوااسکریپت خارج بشیم و یه سری به باقی زبان و اکوسیستم ها بزنیم؟
👌46⚡1
Code Module | کد ماژول
یه جوری راجب همه چیز پست زدیم که دیگه واقعا ایده ندارم. یه ساعت درگیر پست زدن راجب یه موضوع بودم، بعد ک تموم شد فهمیدیم راجب اون موضوع قبلا پست گذاشتیم :))) نظرتون چیه یکم از دنیای جاوااسکریپت خارج بشیم و یه سری به باقی زبان و اکوسیستم ها بزنیم؟
@CodeModuleGap
دوستان تازه وارد، گروه اصلی چنل اینه.
روزانه کلی بحث، پرسش و پاسخ و ... داریم. انتقادی، صحبتی یا سوالی چیزی داشتید اینجا میتونید مطرح کنید 💙
دوستان تازه وارد، گروه اصلی چنل اینه.
روزانه کلی بحث، پرسش و پاسخ و ... داریم. انتقادی، صحبتی یا سوالی چیزی داشتید اینجا میتونید مطرح کنید 💙
🔥15
از لودینگ های معمولی خسته شدی؟ برو سراغ skeleton 💀
سایت skeletonreact ابزاری برای ایجاد کامپوننتهای اسکلت انیمیشنی هست و از خروجی در قالبهایی نظیر React، React Native، Vue و Vanilla HTML پشتیبانی میکنه. انیمیشن های اسکلتی رو میتونیم به عنوان جایگزینی برای لودینگهای معمولی و خسته کننده در نظر بگیریم، و اونها به ما این قابلیت رو میدن که به کاربران پیشنمایشی از ساختار صفحات، مثل مکاننماهایی برای متون یا تصاویر ارائه بدیم تا تجربه کاربری بهتری در زمان بارگذاری دادهها فراهم بشه.
🔗 Link
#tools #skeleton
@CodeModule
سایت skeletonreact ابزاری برای ایجاد کامپوننتهای اسکلت انیمیشنی هست و از خروجی در قالبهایی نظیر React، React Native، Vue و Vanilla HTML پشتیبانی میکنه. انیمیشن های اسکلتی رو میتونیم به عنوان جایگزینی برای لودینگهای معمولی و خسته کننده در نظر بگیریم، و اونها به ما این قابلیت رو میدن که به کاربران پیشنمایشی از ساختار صفحات، مثل مکاننماهایی برای متون یا تصاویر ارائه بدیم تا تجربه کاربری بهتری در زمان بارگذاری دادهها فراهم بشه.
🔗 Link
#tools #skeleton
@CodeModule
🔥26⚡4👌1💔1
آرشیو کتاب ها و دوره های رایگان برنامه نویسی🔥
توی این پست یه آرشیو بهتون معرفی میکنم که بهتون منابعی نظیر کتابها و دورههای رایگان برای زبانها و تکنولوژیهایی مثل پایتون، جاوااسکریپت، ریاکت، جنگو، لینوکس و ... معرفی میکنه. با استفاده از این منابع، به راحتی میتونید مسیر یادگیری خودتون رو بدون هزینه و به زبان فارسی شروع کنید.
🔗 Link
#repository
@CodeModule
توی این پست یه آرشیو بهتون معرفی میکنم که بهتون منابعی نظیر کتابها و دورههای رایگان برای زبانها و تکنولوژیهایی مثل پایتون، جاوااسکریپت، ریاکت، جنگو، لینوکس و ... معرفی میکنه. با استفاده از این منابع، به راحتی میتونید مسیر یادگیری خودتون رو بدون هزینه و به زبان فارسی شروع کنید.
🔗 Link
#repository
@CodeModule
GitHub
GitHub - barnamenevisi/free-resources: آرشیو منابع رایگان آموزش برنامه نویسی به زبان فارسی ( هر کسی باید بتونه برنامه نویسی رو…
آرشیو منابع رایگان آموزش برنامه نویسی به زبان فارسی ( هر کسی باید بتونه برنامه نویسی رو یاد بگیره، مهم نیست پول داره یا نداره، به امید اینکه کسی به خاطر نداشتن پول از آموزش عقب نمونه ) - barnamenev...
🔥15👌1
TanStack Form بلاخره استیبل شد🗽
TanStack Form یک کتابخانه جدید از تیم TanStack هست که برای مدیریت فرم در پروژه های شما طراحی شده. این کتابخانه به تازگی استیبل شده و بهعنوان جایگزینی برای کتابخانههایی مثل React Hook Form و Formik در نظر گرفته میشه.
ویژگیهای اصلی TanStack Form👇🏻
پشتیبانی از چندین فریمورک و کتابخانه: این کتابخانه از React، Vue، Angular، Solid و Lit پشتیبانی میکنه.
بدون وابستگی خارجی: TanStack Form بدون وابستگی به کتابخانههای دیگه طراحی شده که منجر به حجم کم و عملکرد بهینه میشه.
پشتیبانی قوی از TypeScript: این کتابخانه با پشتیبانی از TypeScript، تجربه توسعه بهتری رو فراهم میکنه.
طراحی بدون رابط کاربری (Headless): امکان استفاده از کامپوننتها و هوکهای بدون رابط کاربری برای انعطافپذیری بیشتر در طراحی فرمها.
واکنشگرایی جزئی: بهبود عملکرد با بهروزرسانیهای جزئی در کامپوننتها.
اعتبارسنجی همزمان و غیرهمزمان: امکان تعریف قوانین اعتبارسنجی مختلف برای فیلدها و فرم.
برای اطلاعات بیشتر و نحوه استفاده، به داکیومنت این کتابخانه مراجعه کنید.
🔗 Link
#tanstack
@CodeModule
TanStack Form یک کتابخانه جدید از تیم TanStack هست که برای مدیریت فرم در پروژه های شما طراحی شده. این کتابخانه به تازگی استیبل شده و بهعنوان جایگزینی برای کتابخانههایی مثل React Hook Form و Formik در نظر گرفته میشه.
ویژگیهای اصلی TanStack Form👇🏻
پشتیبانی از چندین فریمورک و کتابخانه: این کتابخانه از React، Vue، Angular، Solid و Lit پشتیبانی میکنه.
بدون وابستگی خارجی: TanStack Form بدون وابستگی به کتابخانههای دیگه طراحی شده که منجر به حجم کم و عملکرد بهینه میشه.
پشتیبانی قوی از TypeScript: این کتابخانه با پشتیبانی از TypeScript، تجربه توسعه بهتری رو فراهم میکنه.
طراحی بدون رابط کاربری (Headless): امکان استفاده از کامپوننتها و هوکهای بدون رابط کاربری برای انعطافپذیری بیشتر در طراحی فرمها.
واکنشگرایی جزئی: بهبود عملکرد با بهروزرسانیهای جزئی در کامپوننتها.
اعتبارسنجی همزمان و غیرهمزمان: امکان تعریف قوانین اعتبارسنجی مختلف برای فیلدها و فرم.
برای اطلاعات بیشتر و نحوه استفاده، به داکیومنت این کتابخانه مراجعه کنید.
🔗 Link
#tanstack
@CodeModule
🔥15👌1
حالا بریم سراغ چیزی که همه رو توی شبکههای اجتماعی و جاهای دیگه هیجانزده کرده. طبق پستهایی که توی X دیدم و یه اعلامیه که ظاهراً 11 مارس 2025 توی وبلاگ تایپاسکریپت منتشر شده، تیم مایکروسافت داره روی یه نسخه کاملاً جدید کار میکنه که با زبان Go بازنویسی شده. یعنی کمپایلر تایپاسکریپت که الان با خودش نوشته شده و به جاوااسکریپت تبدیل میشه، قراره به یه برنامه مستقل و سریع با Go تبدیل بشه.
هنوز معلوم نیست این تغییر به Go روی خود زبان (مثل دستورات یا ویژگیها) اثر میذاره یا فقط کمپایلر رو عوض میکنه
#typescript #go #news
@CodeModule
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥22⚡2👌1
نوروز سال ۲۵۸۴ شاهنشاهی رو بهتون تبریک میگم دوستان🔥🥳
امیدوارم تموم قله های موفقیت رو فتح کنید و امسال، سال شما باشه💙
@CodeModule
امیدوارم تموم قله های موفقیت رو فتح کنید و امسال، سال شما باشه💙
@CodeModule
❤🔥48😁4👌2💔2
معماری میکرو فرانتاند چیه؟! 🪡
تا به حال شده به این فکر کنی که یه پروژه بزرگ مثل یه پازل پیچیدهاست که باید هر قطعهاش به درستی کنار هم قرار بگیره؟ حالا تصور کن که میتونستیم هر یک از این قطعات رو به صورت جداگونه و مستقل توسعه بدیم و بعد به هم وصل کنیم. اینجاست که مفهوم میکرو فرانتاند روشن میشه. میکرو فرانتاندها همونطور که از اسمشون پیداست بخشهای کوچکی از یه پروژه بزرگ هستن که به صورت مستقل و مجزا توسعه، تست و منتشر میشن.
مزایای استفاده از میکروفرانتاند 👇
مستقل بودن تیمها و توسعه سریعتر
هر تیم میتونه روی یک بخش خاص از پروژه کار کنه، بدون اینکه روی سایر بخشها تأثیر بذاره. این موضوع روند توسعه رو سریعتر و مدیریت رو سادهتر میکنه.
چند تکنولوژی در یک پروژه
در یک پروژه میشه از فریمورک و کتابخانه های مختلف مثل React، Vue یا Angular در قسمتهای مختلف استفاده کرد. این ویژگی برای پروژههای قدیمی که نیاز به مهاجرت تدریجی دارن، بسیار مفید هست.
بروزرسانی آسون و بدون تأثیر روی کل پروژه
هر میکروفرانتاند بهصورت مستقل دپلوی میشه و تغییرات در یک بخش، باعث خرابی یا مشکل در سایر بخشها نمیشه.
بهینهسازی عملکرد
بهجای لود شدن یک برنامه بزرگ، فقط بخشهای موردنیاز بارگذاری میشن که باعث بهبود زمان لود صفحه و تجربه کاربری میشه.
مقیاسپذیری بهتر
با افزایش کاربران و نیازهای پروژه، میشه بخشهای مختلف رو بهصورت مستقل گسترش داد.
با این رویکرد هر بخش از فرانتاند میتونه به صورت مستقل توسعه، تست و دیپلوی بشه. دقیقا مثل معماری میکروسرویس ها در بکاند. برای کسب اطلاعات بیشتر این مقاله رو میتونید مطالعه کنید.
#microfrontend
@CodeModule
تا به حال شده به این فکر کنی که یه پروژه بزرگ مثل یه پازل پیچیدهاست که باید هر قطعهاش به درستی کنار هم قرار بگیره؟ حالا تصور کن که میتونستیم هر یک از این قطعات رو به صورت جداگونه و مستقل توسعه بدیم و بعد به هم وصل کنیم. اینجاست که مفهوم میکرو فرانتاند روشن میشه. میکرو فرانتاندها همونطور که از اسمشون پیداست بخشهای کوچکی از یه پروژه بزرگ هستن که به صورت مستقل و مجزا توسعه، تست و منتشر میشن.
مزایای استفاده از میکروفرانتاند 👇
مستقل بودن تیمها و توسعه سریعتر
هر تیم میتونه روی یک بخش خاص از پروژه کار کنه، بدون اینکه روی سایر بخشها تأثیر بذاره. این موضوع روند توسعه رو سریعتر و مدیریت رو سادهتر میکنه.
چند تکنولوژی در یک پروژه
در یک پروژه میشه از فریمورک و کتابخانه های مختلف مثل React، Vue یا Angular در قسمتهای مختلف استفاده کرد. این ویژگی برای پروژههای قدیمی که نیاز به مهاجرت تدریجی دارن، بسیار مفید هست.
بروزرسانی آسون و بدون تأثیر روی کل پروژه
هر میکروفرانتاند بهصورت مستقل دپلوی میشه و تغییرات در یک بخش، باعث خرابی یا مشکل در سایر بخشها نمیشه.
بهینهسازی عملکرد
بهجای لود شدن یک برنامه بزرگ، فقط بخشهای موردنیاز بارگذاری میشن که باعث بهبود زمان لود صفحه و تجربه کاربری میشه.
مقیاسپذیری بهتر
با افزایش کاربران و نیازهای پروژه، میشه بخشهای مختلف رو بهصورت مستقل گسترش داد.
با این رویکرد هر بخش از فرانتاند میتونه به صورت مستقل توسعه، تست و دیپلوی بشه. دقیقا مثل معماری میکروسرویس ها در بکاند. برای کسب اطلاعات بیشتر این مقاله رو میتونید مطالعه کنید.
#microfrontend
@CodeModule
Medium
What is Microfrontend and Why You Should Know About It
In recent years, web applications have grown significantly in size and complexity. This has made traditional approaches to developing…
🔥12❤🔥2⚡1
RFC 4122 چیست؟ 🎲
RFC 4122 یک استاندارد فنی هست که توسط سازمان IETF (Internet Engineering Task Force) تعریف شده، و برای تولید UUID هست که به شناسههای GUID هم شناخته میشه. این استاندارد تعریف میکنه که UUID باید یک مقدار ۱۲۸ بیتی باشه که بهصورت یونیک تولید میشه. هدف اصلی این شناسهها اینه که بتونن بدون نیاز به یک مرجع مرکزی، آیدی های یونیک تولید کنن.
همونطور که گفتیم یکی از دلایل اصلی استفاده از UUIDها اینه که نیازی به یک مرجع متمرکز(Central Authority) برای تولیدشون وجود نداره. یعنی میتونن در هر سیستمی، بدون نگرانی از تداخل، آیدی های جدید تولید کرد. این ویژگی باعث میشه که UUIDها برای سیستمهای توزیعشده و محیطهایی که نیاز به id به فرد دارن، ایدهآل باشن. UUIDها میتونن به صورت خودکار و با سرعت بالا (تا ۱۰ میلیون آیدی در ثانیه) برای اهداف مختلفی مثل transaction IDs, database IDs, or session IDs و ... تولید و استفاده بشن.
IEEE 802 و ارتباط آن با UUID
IEEE 802 مجموعهای از استانداردهای مربوط به شبکههای کامپیوتری هست که در لایههای فیزیکی و پیوند داده مدل OSI فعالیت میکنن. این استانداردها در فناوریهای ارتباطی کاربرد داره.
در برخی نسخههای UUID، یکی از بخشهای این شناسه ۱۲۸ بیتی، از آدرس MAC دستگاه گرفته میشه. آدرس MAC یک مقدار ۴۸ بیتی منحصر به فرد هست که به هر کارت شبکه اختصاص داده شده و معمولاً از یک محدودهی آدرس اختصاصی، که توسط IEEE مدیریت و انتخاب میشه. استفاده از MAC در تولید UUID باعث میشه که شناسهها در بین دستگاههای مختلف یکتا باشن. اما به دلایل امنیتی و حریم خصوصی، این روش همیشه توصیه نمیشه و در برخی نسخههای UUID، روشهای دیگهای جایگزین اون شدن.
ساختار UUID بر اساس RFC 4122
UUIDها از ۱۲۸ بیت تشکیل شدن و به صورت یک استرینگ ۳۶ کاراکتری نمایش داده میشن. این رشته شامل ۳۲ کاراکتر هگزادسیمال (اعداد ۰-۹ و حروف a-f) و ۴ خط تیره (-) است که بخشهای مختلف UUID رو از هم جدا میکنن. فرمت کلی UUID به این صورته:
-
-
-
به صورت کلی RFC-4122 استانداردی هست که به ما اجازه میده، شناسههای منحصر به فرد رو بدون نیاز به هماهنگی با یک مرجع مرکزی تولید کنیم. برای اطلاعات بیشتر در مورد این استاندارد به داکیومنت مراجعه کنید.
#uuid #rfc4122
@CodeModule
RFC 4122 یک استاندارد فنی هست که توسط سازمان IETF (Internet Engineering Task Force) تعریف شده، و برای تولید UUID هست که به شناسههای GUID هم شناخته میشه. این استاندارد تعریف میکنه که UUID باید یک مقدار ۱۲۸ بیتی باشه که بهصورت یونیک تولید میشه. هدف اصلی این شناسهها اینه که بتونن بدون نیاز به یک مرجع مرکزی، آیدی های یونیک تولید کنن.
همونطور که گفتیم یکی از دلایل اصلی استفاده از UUIDها اینه که نیازی به یک مرجع متمرکز(Central Authority) برای تولیدشون وجود نداره. یعنی میتونن در هر سیستمی، بدون نگرانی از تداخل، آیدی های جدید تولید کرد. این ویژگی باعث میشه که UUIDها برای سیستمهای توزیعشده و محیطهایی که نیاز به id به فرد دارن، ایدهآل باشن. UUIDها میتونن به صورت خودکار و با سرعت بالا (تا ۱۰ میلیون آیدی در ثانیه) برای اهداف مختلفی مثل transaction IDs, database IDs, or session IDs و ... تولید و استفاده بشن.
IEEE 802 و ارتباط آن با UUID
IEEE 802 مجموعهای از استانداردهای مربوط به شبکههای کامپیوتری هست که در لایههای فیزیکی و پیوند داده مدل OSI فعالیت میکنن. این استانداردها در فناوریهای ارتباطی کاربرد داره.
در برخی نسخههای UUID، یکی از بخشهای این شناسه ۱۲۸ بیتی، از آدرس MAC دستگاه گرفته میشه. آدرس MAC یک مقدار ۴۸ بیتی منحصر به فرد هست که به هر کارت شبکه اختصاص داده شده و معمولاً از یک محدودهی آدرس اختصاصی، که توسط IEEE مدیریت و انتخاب میشه. استفاده از MAC در تولید UUID باعث میشه که شناسهها در بین دستگاههای مختلف یکتا باشن. اما به دلایل امنیتی و حریم خصوصی، این روش همیشه توصیه نمیشه و در برخی نسخههای UUID، روشهای دیگهای جایگزین اون شدن.
ساختار UUID بر اساس RFC 4122
UUIDها از ۱۲۸ بیت تشکیل شدن و به صورت یک استرینگ ۳۶ کاراکتری نمایش داده میشن. این رشته شامل ۳۲ کاراکتر هگزادسیمال (اعداد ۰-۹ و حروف a-f) و ۴ خط تیره (-) است که بخشهای مختلف UUID رو از هم جدا میکنن. فرمت کلی UUID به این صورته:
xxxxxxxx-xxxx-Mxxx-Nxxx-xxxxxxxxxxxx
-
x
یک عدد هگزادسیمال (۰ تا ۹ و A تا F) هست -
M
نسخهی UUID رو مشخص میکنه. -
N
مقدار variant رو تعیین میکنه.UUID از چندین بخش اصلی تشکیل شده؟
1. time_low (بخش پایین timestamp) – ۳۲ بیت
2. time_mid (بخش میانی timestamp) – ۱۶ بیت
3. time_hi_and_version (بخش بالایی timestamp + شماره نسخه) – ۱۶ بیت
4. clock_seq_hi_and_reserved (بخش بالایی شماره sequence + مقدار variant) – ۸ بیت
5. clock_seq_low (بخش پایینی شماره sequence) – ۸ بیت
6. node (شناسه گره، معمولاً MAC یا مقدار تصادفی) – ۴۸ بیت
انواع UUID و روشهای تولید آنها
1. نسخه ۱ (UUIDv1): بر اساس زمان و شناسه گره (معمولاً آدرس MAC) ساخته میشه. این نسخه تضمین میکنه که UUIDها به ترتیب زمانی تولید بشن.
2. نسخه ۲ (UUIDv2): مشابه نسخه ۱ هست اما برای استفاده در سیستمهای DCE Security طراحی شده.
3. نسخه ۳ (UUIDv3): بر اساس هش MD5 و یک نام (namespace) ساخته میشه.
4. نسخه ۴ (UUIDv4): به طور کامل تصادفی هست و از اعداد تصادفی برای تولید UUID استفاده میکنه.
5. نسخه ۵ (UUIDv5): مشابه نسخه ۳ است اما از الگوریتم هش SHA-1 استفاده میکنه.
به صورت کلی RFC-4122 استانداردی هست که به ما اجازه میده، شناسههای منحصر به فرد رو بدون نیاز به هماهنگی با یک مرجع مرکزی تولید کنیم. برای اطلاعات بیشتر در مورد این استاندارد به داکیومنت مراجعه کنید.
#uuid #rfc4122
@CodeModule
IETF Datatracker
RFC 4122: A Universally Unique IDentifier (UUID) URN Namespace
This specification defines a Uniform Resource Name namespace for UUIDs (Universally Unique IDentifier), also known as GUIDs (Globally Unique IDentifier). A UUID is 128 bits long, and can guarantee uniqueness across space and time. UUIDs were originally used…
⚡8🔥4