برنامه نویسی

هکتوبرفست! – هفته 2 – انجمن DEV

Summarize this content to 400 words in Persian Lang
این یک هفته پر حادثه بوده است! من در حین مرور مخزن mademost به طور تصادفی با این مشکل برخورد کردم. آن‌ها به دنبال کمک برای مشکلی بودند که در آن پست‌های زودگذر پس از بازخوانی یا راه‌اندازی مجدد برنامه از بین نمی‌روند. من برای رفع یک باگ ساده ثبت نام کردم، اما در نهایت به یک سوراخ خرگوش رسیدم که در آن پروژه های مختلف را در اینترنت پرش کردم و چیزهایی را یاد گرفتم که قبلاً هرگز تجربه نکرده بودم.

مهم ترین

در صورتی که نمی دانید Mattermost یک سرویس چت منبع باز و خود میزبان است که برای سازمان ها و شرکت ها طراحی شده است. این یک جایگزین منبع باز برای Slack یا Microsoft Teams است. مدت‌هاست که می‌بینم که نام آن‌ها در بین علاقه‌مندان منبع باز بسیار توصیه می‌شود. همچنین یک پروژه بزرگ است. فکر می‌کردم شرکت کردن و مشارکت کردن چالش خوبی است. در مورد چالش ها، چند مورد وجود داشت:

چالش شماره 1 – راه اندازی

فکر می‌کردم سواری‌های پردست‌انداز بیشتری بعداً به وجود می‌آیند، اما هرگز انتظار نداشتم روند راه‌اندازی یک ترن هوایی باشد!

من سند توسعه دهنده آنها را باز کردم و بلافاصله به راه اندازی سرور توسعه دهنده هدایت شدم. من چند ساعتی را در آنجا گذراندم، بیشتر به کشف وابستگی ها و عیب یابی کامپایلر go. هنگامی که سرور را راه اندازی کردم، متوجه شدم که حتی به آن نیازی ندارم… سرور جامعه آنها برای آزمایش برنامه های تلفن همراه نیز به خوبی کار می کند.

درس آموخته شده – قبل از غواصی در پروژه، کمی تحقیق کنید.

من به سمت انبار موبایل رفتم و از مستندات بسیار ضعیف شوکه شدم. تنها اطلاعات مفید برای من راهنمای راه‌اندازی بود، و حتی آن هم با متون و اسکرین شات‌های قدیمی پر شده بود.

بنابراین من تقریباً در خودم بودم: مدتی را صرف آزمایش نسخه‌های مختلف Android SDK و شبیه‌سازها کردم. در طول ساخت اولیه با خطایی مواجه شدم که ساعت‌ها تحقیق کردم و در نهایت با نصب یک نسخه جاوا دیگر حل شد. بعد به ذهنم خطور کرد: من به حال خودم نیستم! این یک پروژه متن باز است. فقط از روی کنجکاوی، در سرور انجمن جستجو کردم – بله! افرادی بودند که دقیقاً به همین مسائل برخورد کردند و در کانال مشارکت کننده به آنها پاسخ داده شد.

درس آموخته شده – به دنبال راه حل در اطراف جامعه باشید. در صورت لزوم سوال بپرسید.

چالش شماره 2 – مکان یابی فایل ها

همانطور که قبلا اشاره کردم، این یک پروژه غول پیکر بود. این برنامه با React Native ساخته شده است که من هیچ تجربه ای با آن نداشتم. کد به سختی توضیح داده شد، و مطمئناً کمکی نکرد که هیچ سند مفیدی وجود نداشت. فقط کمی وحشت کردم.

موضوع مربوط به نوع خاصی از پست ها به نام “پست های زودگذر” است. من با جستجوی فایل های مربوط به “پست” یا “گذرا” شروع کردم. البته تعداد آنها خیلی زیاد بود. باید جای دیگری را جستجو می کردم.

اولین کار من مربوط به رفرش کردن یک کانال بود، بنابراین یک جستجوی دیگر در “رفرش” انجام دادم. در آنجا توانستم به سرعت تابعی را پیدا کنم که نامیده می شود onRefresh(). من یک پیام ورود به سیستم را در این تابع اضافه کردم، ابزار اشکال زدایی را راه اندازی کردم. لیست را می کشم و پیام ظاهر می شود. موفقیت!

کد نویسی تا الان ساده ترین قسمت بود. از آنجایی که Posts لیست قبلاً در محدوده بود، تنها کاری که من باید انجام می‌دادم این بود که آنها را تکرار کرده و با آن تماس گرفتم removePost تابعی که قبلا وجود داشت:

const removalPromises = posts.
filter((post) => post.type === PostTypes.EPHEMERAL).
map((post) => removePost(serverUrl, post));
await Promise.all(removalPromises);

وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

به روشی مشابه، فایل مربوط به کار دوم مربوط به راه اندازی برنامه را نیز پیدا کردم. این یکی کمی پیچیده تر بود زیرا بسیاری از فایل ها کلیدواژه “راه اندازی” یا “شروع” را در خود داشتند. در نهایت از طریق یک سری از console.log()، من توانستم آن را بفهمم.

چالش شماره 3 – کد ناهمزمان

صادقانه بگویم، من هرگز به درستی درک نکردم که کدهای همگام از مدرسه چگونه کار می کند. در ابتدا زیاد به آن فکر نکردم، زیرا درک من از توابع async محدود به await کلمه کلیدی

پس از ثبت روابط عمومی، اولین نظری که دریافت کردم مربوط به عمل async در کد من بود. فقط آنجا متوجه اهمیت آن شدم. من وارد حالت تحقیق شدم و متوجه شدم آنقدرها هم که می ترسیدم سخت نیست. با تجربه ماه های گذشته توانستم به راحتی آن را درک کنم و تغییرات درخواستی را در روابط عمومی ایجاد کنم.

چالش شماره 4 – نمایه سازی پایگاه داده و مهاجرت

در روابط عمومی من، یکی از نگهدارنده ها اشاره کرد که از آنجایی که من یک تابع جدید برای پرس و جو از پایگاه داده برای نوع پست ایجاد کردم، باید PR دیگری برای ایندکس کردن ستون ایجاد کنم.

من دروغ نخواهم گفت آن زمان حتی نمی دانستم «مهاجرت پایگاه داده» یعنی چه. باز هم، من در این مورد تحقیق کردم و به نظر کار ساده ای بود. از یکی از نگهدارنده ها در سرور جامعه هم پرسیدم. او پیوندی به یک PR مشابه به من ارائه کرد که شامل تغییراتی در پایگاه داده نیز بود. من به راحتی توانستم فایل ها را پیدا کنم.

این برنامه از WatermelonDB به عنوان پایگاه داده خود استفاده می کرد که من نیز قبلاً در مورد آن چیزی نشنیده بودم. از مستندات آنها، من به سرعت یاد گرفتم که چگونه یک شاخص به طرحواره اضافه کنم. با این حال، من همچنین متوجه شدم که آنها از افزودن شاخص برای مهاجرت پشتیبانی نمی کنند. در واقع آنها درخواست مشارکت داشتند.

چیزی که من از همان کد WatermelonDB متوجه شدم این است که آنها یک تابع “ناامن” را برای اجرای پرس و جوهای SQL به طور مستقیم در طول مهاجرت ارائه می دهند.

من یک بار دیگر این موضوع را در سرور جامعه مطرح کردم و یک چت طولانی با نگهبانان داشتم. در نهایت، آن‌ها تصمیم می‌گیرند فعلاً با تابع ناامن حرکت کنند و منتظر مشارکت در بالادست باشند.

چالش های بیشتری در راه است؟

این جایی است که من تا به حال ترک کردم. نگهدارنده از من خواست تا قبل از انجام PR دوم آزمایشاتی را انجام دهم، بنابراین در آینده نزدیک روی این موضوع تمرکز خواهم کرد. اولین روابط عمومی من در حال حاضر در مرحله دوم بررسی است. چه کسی می داند چه مشکلات جدیدی ممکن است پیش بیاید؟

این یک هفته پر حادثه بوده است! من در حین مرور مخزن mademost به طور تصادفی با این مشکل برخورد کردم. آن‌ها به دنبال کمک برای مشکلی بودند که در آن پست‌های زودگذر پس از بازخوانی یا راه‌اندازی مجدد برنامه از بین نمی‌روند. من برای رفع یک باگ ساده ثبت نام کردم، اما در نهایت به یک سوراخ خرگوش رسیدم که در آن پروژه های مختلف را در اینترنت پرش کردم و چیزهایی را یاد گرفتم که قبلاً هرگز تجربه نکرده بودم.

مهم ترین

صفحه اول Mattermost

در صورتی که نمی دانید Mattermost یک سرویس چت منبع باز و خود میزبان است که برای سازمان ها و شرکت ها طراحی شده است. این یک جایگزین منبع باز برای Slack یا Microsoft Teams است. مدت‌هاست که می‌بینم که نام آن‌ها در بین علاقه‌مندان منبع باز بسیار توصیه می‌شود. همچنین یک پروژه بزرگ است. فکر می‌کردم شرکت کردن و مشارکت کردن چالش خوبی است. در مورد چالش ها، چند مورد وجود داشت:

چالش شماره 1 – راه اندازی

فکر می‌کردم سواری‌های پردست‌انداز بیشتری بعداً به وجود می‌آیند، اما هرگز انتظار نداشتم روند راه‌اندازی یک ترن هوایی باشد!

من سند توسعه دهنده آنها را باز کردم و بلافاصله به راه اندازی سرور توسعه دهنده هدایت شدم. من چند ساعتی را در آنجا گذراندم، بیشتر به کشف وابستگی ها و عیب یابی کامپایلر go. هنگامی که سرور را راه اندازی کردم، متوجه شدم که حتی به آن نیازی ندارم… سرور جامعه آنها برای آزمایش برنامه های تلفن همراه نیز به خوبی کار می کند.

درس آموخته شده – قبل از غواصی در پروژه، کمی تحقیق کنید.

من به سمت انبار موبایل رفتم و از مستندات بسیار ضعیف شوکه شدم. تنها اطلاعات مفید برای من راهنمای راه‌اندازی بود، و حتی آن هم با متون و اسکرین شات‌های قدیمی پر شده بود.

بنابراین من تقریباً در خودم بودم: مدتی را صرف آزمایش نسخه‌های مختلف Android SDK و شبیه‌سازها کردم. در طول ساخت اولیه با خطایی مواجه شدم که ساعت‌ها تحقیق کردم و در نهایت با نصب یک نسخه جاوا دیگر حل شد. بعد به ذهنم خطور کرد: من به حال خودم نیستم! این یک پروژه متن باز است. فقط از روی کنجکاوی، در سرور انجمن جستجو کردم – بله! افرادی بودند که دقیقاً به همین مسائل برخورد کردند و در کانال مشارکت کننده به آنها پاسخ داده شد.

درس آموخته شده – به دنبال راه حل در اطراف جامعه باشید. در صورت لزوم سوال بپرسید.

چالش شماره 2 – مکان یابی فایل ها

همانطور که قبلا اشاره کردم، این یک پروژه غول پیکر بود. این برنامه با React Native ساخته شده است که من هیچ تجربه ای با آن نداشتم. کد به سختی توضیح داده شد، و مطمئناً کمکی نکرد که هیچ سند مفیدی وجود نداشت. فقط کمی وحشت کردم.

نتیجه جستجو وقتی تایپ کردم

موضوع مربوط به نوع خاصی از پست ها به نام “پست های زودگذر” است. من با جستجوی فایل های مربوط به “پست” یا “گذرا” شروع کردم. البته تعداد آنها خیلی زیاد بود. باید جای دیگری را جستجو می کردم.

اولین کار من مربوط به رفرش کردن یک کانال بود، بنابراین یک جستجوی دیگر در “رفرش” انجام دادم. در آنجا توانستم به سرعت تابعی را پیدا کنم که نامیده می شود onRefresh(). من یک پیام ورود به سیستم را در این تابع اضافه کردم، ابزار اشکال زدایی را راه اندازی کردم. لیست را می کشم و پیام ظاهر می شود. موفقیت!

کد نویسی تا الان ساده ترین قسمت بود. از آنجایی که Posts لیست قبلاً در محدوده بود، تنها کاری که من باید انجام می‌دادم این بود که آنها را تکرار کرده و با آن تماس گرفتم removePost تابعی که قبلا وجود داشت:

const removalPromises = posts.
    filter((post) => post.type === PostTypes.EPHEMERAL).
    map((post) => removePost(serverUrl, post));
await Promise.all(removalPromises);
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

به روشی مشابه، فایل مربوط به کار دوم مربوط به راه اندازی برنامه را نیز پیدا کردم. این یکی کمی پیچیده تر بود زیرا بسیاری از فایل ها کلیدواژه “راه اندازی” یا “شروع” را در خود داشتند. در نهایت از طریق یک سری از console.log()، من توانستم آن را بفهمم.

چالش شماره 3 – کد ناهمزمان

صادقانه بگویم، من هرگز به درستی درک نکردم که کدهای همگام از مدرسه چگونه کار می کند. در ابتدا زیاد به آن فکر نکردم، زیرا درک من از توابع async محدود به await کلمه کلیدی

پس از ثبت روابط عمومی، اولین نظری که دریافت کردم مربوط به عمل async در کد من بود. فقط آنجا متوجه اهمیت آن شدم. من وارد حالت تحقیق شدم و متوجه شدم آنقدرها هم که می ترسیدم سخت نیست. با تجربه ماه های گذشته توانستم به راحتی آن را درک کنم و تغییرات درخواستی را در روابط عمومی ایجاد کنم.

چالش شماره 4 – نمایه سازی پایگاه داده و مهاجرت

در روابط عمومی من، یکی از نگهدارنده ها اشاره کرد که از آنجایی که من یک تابع جدید برای پرس و جو از پایگاه داده برای نوع پست ایجاد کردم، باید PR دیگری برای ایندکس کردن ستون ایجاد کنم.

من دروغ نخواهم گفت آن زمان حتی نمی دانستم «مهاجرت پایگاه داده» یعنی چه. باز هم، من در این مورد تحقیق کردم و به نظر کار ساده ای بود. از یکی از نگهدارنده ها در سرور جامعه هم پرسیدم. او پیوندی به یک PR مشابه به من ارائه کرد که شامل تغییراتی در پایگاه داده نیز بود. من به راحتی توانستم فایل ها را پیدا کنم.

این برنامه از WatermelonDB به عنوان پایگاه داده خود استفاده می کرد که من نیز قبلاً در مورد آن چیزی نشنیده بودم. از مستندات آنها، من به سرعت یاد گرفتم که چگونه یک شاخص به طرحواره اضافه کنم. با این حال، من همچنین متوجه شدم که آنها از افزودن شاخص برای مهاجرت پشتیبانی نمی کنند. در واقع آنها درخواست مشارکت داشتند.

چیزی که من از همان کد WatermelonDB متوجه شدم این است که آنها یک تابع “ناامن” را برای اجرای پرس و جوهای SQL به طور مستقیم در طول مهاجرت ارائه می دهند.

نظر نگهبان در این مورد

من یک بار دیگر این موضوع را در سرور جامعه مطرح کردم و یک چت طولانی با نگهبانان داشتم. در نهایت، آن‌ها تصمیم می‌گیرند فعلاً با تابع ناامن حرکت کنند و منتظر مشارکت در بالادست باشند.

چالش های بیشتری در راه است؟

این جایی است که من تا به حال ترک کردم. نگهدارنده از من خواست تا قبل از انجام PR دوم آزمایشاتی را انجام دهم، بنابراین در آینده نزدیک روی این موضوع تمرکز خواهم کرد. اولین روابط عمومی من در حال حاضر در مرحله دوم بررسی است. چه کسی می داند چه مشکلات جدیدی ممکن است پیش بیاید؟

نوشته های مشابه

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *

دکمه بازگشت به بالا