نرم افزار های open source اصلا چه فایده ای دارند !؟

شاید پیش خودتون بگین که خب معلومه دیگه ، این ها نرم افزار های مجانی هستن ولی واسه ما که برای همه نرم افزار ها کرک داریم فرق چندانی نمیکنن. خب این درسته :) ولی بیاین یک کاربرد باحال و مفید دیگه رو بررسی کنیم.قصد من اصلا و اصلا آموزش نیست بلکه میخوام یک کاربرد ساده که در آخرین پروژه خودم، ازش استفاده کردم رو با شما به اشتراک بگذارم و روش کارم رو توضیح بدم.خب اول، پروژه من چی بوده ؟ پروژه من یک پروژه شخصی برای تست کردن یک سری قابلیت های فریمورک جنگو هست که برای احراز هویت کاربرانش از JWT استفاده میکنه.حالا JWT چیه؟ به زبون خیلی ساده یک کاربر وارد سیستم میشه ( لاگین میکنه ). بعد سیستم برای اون دو عدد token زمان دار ایجاد میکنه که شامل access و refresh هست. خب حالا هربار که کاربر بخواد وارد سیستم بشه باید توی هدر ِ رکوئستی که به سرور میفرسته، این توکن (access) رو بفرسته و هر بار زمان این توکن تمام شد، درخواست دوباره به سیستم میده ولی به کمک توکن refresh.خب این کار باعث میشه که کاربر هربار نیاز به لاگین کردن نداشته باشه.حالا برای استفاده از این روش، هر فریمورک مثل جنگو یا نود، یسری پکیج دارن که استفاده از این روش رو برای ما ممکن میکنن؛ نکته مهم اینه که هم جنگو و هم پکیجی که این کار رو براش میکنه، به اسم simple JWT ، هر دو متن باز هستن. و این خوبه!!پس مشکل کجاست دیگه ؟ پکیج رو به پروژه اضافه کن و تموم دیگه نه ؟ نهههه !مشکل کجاست ؟من برای این پروژه، میخواستم که کاربر ها بتوانند هم زمان هم با ایمیل یا نام کاربری به سیستم وارد شوند. این قابلیت رو در خود جنگو تنظیم کردم و این کار را با نوشتن یک مدل user که تغییر یافته مدل پیش فرض خود جنگو بود و نوشتن یک authentication backend مخصوص کردم ولی مشکل من پکیج simple jwt بود.طبق داکیومنت های این پکیج، سیستم احراز هویتش به این شکل کار میکند که یا فقط با ایمیل و یا فقط توسط نام کاربری میتوانست احراز رو انجام بده ؛ و این بدهه! چون من جفتش رو همزمان میخوام.خیلی داکیومنت رو گشتم ولی راه حلی نگفته بود پس تصمیم گرفتم برم کد پکیج رو بخونم! دقیقا. نکته این پست همینه؛ کد خوندن.حالا خوندن کد چه کمکی میکنه و چطوری بخونیم ؟در قدم اول خوندن کد, خیلی به تمیز نوشتن برنامه هاتون کمک میکنه و مثل یک الگو میتونید ازشون استفاده کنید.بعد از اون میرسیم به قسمت باحال داستان. یعنی عوض کردنش.مگه میشه کد یکی دیگه رو عوض کرد؟ آرههههه چرا که نشه. اصلا مهم ترین قابلیت open source همینشه.شما میتونی کد بقیه رو هر جور که میخوای عوض کنی و ازش استفاده کنی.چطوری ؟ اینجاس که github وارد بازی میشه. همین الان اگه اکانت گیت هاب نداری و بلد نیستی با گیت کار کنی برو بساز و یار بگیر. ( ویدیو های جادی رو میتونین توی کانال یوتیوبش تماشا کنین خیلی باحالن )ساختی؟ باریکلا. :")خب داشتم میگفتم ... گیت هاب به دو صورت به شما کمک میکنه: فورک کردن ( fork ) اون پروژه مد نظرتون و عوض کردنش به نحوی که میخواین.باز نوشتن (override) توابع و متغیر های تعریف شده در اون کلاس.من برای پروژم از روش دوم استفاده کردم چون خیلی تغییر بزرگی لازم نداشت و شدنی بود.حالا خوندن کد یک سختی داره اونم اینه که خب چطوری بشینیم n خط کد رو بخونیم؟ اصلا ممکن نیست و کاملا درسته این حرف.شما باید کارکرد و ساختار کلی از کد رو بفهمین. لازم نیست خط به خط کد رو بخونید. مثلا من نیاز داشتم اون قسمت که کاربران رو احراز میکنه رو پیدا کنم و تغییرش بدم. و اینم میدونستم که این تابع یا کلاس باید توی قسمت serializer ها باشه. پس وارد گیت هاب پروژه مربوطه شدم و ساختارش رو نگاه کردم.بعدش وارد پوشه مربوطه شدم و روی فایلی که حدس میزدم در اونجا میتونم درست کنم کدم رو کلیک کردم. تعدادی کلاس در اونجا وجود داشت و کد کلاس اول رو که خوندم سریع متوجه شدم که تابع authenticate که مربوط به احراز هویت هست داخل همین کلاسه و به همین راحتی تیکه کدی که میخواستم پیدا شد.در این مرحله من که بسیار خوشحالم از کشف خودم تو زمان کم، سریع vs code رو باز میکنم و دست به کار میشم.اولین کار اینه که کلاسی که پیدا کرده بودم رو اضافه کنم به فایل serializer خودم، تا اونجا بتونم تغییرش بدم.حالا یک کلاس تعریف میکنم و از کلاس پکیج ارث بری میکنم تا بتونم قابلیت هاشو تغییر بدم.همینطور که میبینین من با تغییر چند خط کد تونستم به چیزی که میخوام برسم و نام کاربری و ایمیل رو به احراز هویت سیستم مورد نظرم اضافه کردم و این کار رو با خوندن چند خط کد انجام دادم.مرسی که تا اینجا با من بودین.به هکر های خفن بودن ادامه بدید. تا پست بعدی خدافززززز.