JavaRush /وبلاگ جاوا /Random-FA /چگونه یک آزمون مصاحبه به یک کتابخانه منبع باز تبدیل شد
Roman Beekeeper
مرحله

چگونه یک آزمون مصاحبه به یک کتابخانه منبع باز تبدیل شد

در گروه منتشر شد
سلام به همه، انجمن JavaRush! کمی در مورد خودم: من از بهار 2016 به عنوان مهندس نرم افزار جاوا مشغول به کار هستم. من عاشق آمدن به اینجا و حل مشکلاتی هستم که در دوران تحصیلم حل نکردم. امروز در مورد کتابخانه به شما خواهم گفت - مقایسه تصویر . این یک کتابخانه منبع باز است که به صورت عمومی در GitHub در دسترس است . چگونه یک کار تست مصاحبه به یک کتابخانه منبع باز تبدیل شد - 1هدف این مقاله این است که نشان دهد ایجاد یک محصول متن باز فقط اتلاف وقت نیست، نه! این یک تجربه غنی است که از جنبه‌های مختلف به دست می‌آید، زمانی که شما بر کل فرآیند توسعه کنترل دارید، زمانی که نیاز دارید در تمام جزئیات به دقت بپردازید. منبع باز دنیای اطراف شماست. شوخی ندارم، در طول وجود این کتابخانه با افرادی از کشورهای مختلف مانند آمریکا، هند، چین، مصر، روسیه، آلمان، اوکراین، سوئد، نیوزلند، نروژ ارتباط برقرار کردم. یعنی این تجربه واقعی در توسعه مشترک، یافتن مصالحه، بررسی کد و غیره است. این مقدمه بود، حالا به ترتیب شروع می کنیم:

تست. آغاز آگوست 2017

همه چیز از آنجا شروع شد که من با یکی از شرکت ها مصاحبه ای داشتم که در آن اولین قدم نوشتن یک کار آزمایشی بود. وظیفه این بود که کدی بنویسیم که دو عکس هم اندازه را با هم مقایسه کند، تفاوت بین آنها را پیدا کند، آنها را گروه بندی کند و یک مستطیل در اطراف آنها بکشد. عکس اول هست:
چگونه یک کار تست مصاحبه به یک کتابخانه منبع باز تبدیل شد - 2
عکس دوم هم هست:
چگونه یک کار تست مصاحبه به یک کتابخانه منبع باز تبدیل شد - 3
لازم بود که تفاوت ها را پیدا کنید و آنها را مانند شکل زیر دور بزنید:
چگونه یک کار تست مصاحبه به یک کتابخانه منبع باز تبدیل شد - 4
همانطور که می بینید، در قسمت Username که با یک مثلث قرمز دایره شده است، تفاوت وجود دارد . شرح دقیق تر کار . تصمیم گرفتم که می خواهم این کار را نه تنها از نظر عملکردی به درستی انجام دهم، بلکه به زیبایی نیز انجام دهم تا خجالت آور نباشد. برای انجام این کار، تصمیم گرفتم که این را به عنوان یک پروژه در GitHub منتشر کنم . من مدتهاست که می خواستم GitHub را مطالعه کنم و تجربه کار با آن را کسب کنم. پس از یک نگاه سریع، متوجه شدم که خوب است خدمات شخص ثالث را برای تجزیه و تحلیل کیفیت کد، ایجاد پوشش کد با آزمایش و غیره اضافه کنم. ابزارهای زیر را اضافه کرد:
  • Codacy - کیفیت کد. واقعا ارزش توجه دارد.

  • Travis CI یک ابزار CI (ادغام پیوسته) است که یک پروژه را می سازد، آزمایش ها را اجرا می کند و می گوید که آیا پروژه با موفقیت ساخته شده است یا خیر. به عنوان مثال، اگر یکی از تست ها در نتیجه تغییرات جدید قبول نشد، می گوید که ساخت پروژه ناموفق بوده و آن را قرمز می کند.

  • روپوش ابزاری است که نشان می دهد چند درصد از کد شما تحت پوشش تست ها قرار گرفته است.

  • BetterCode Hub ابزار دیگری برای تجزیه و تحلیل کیفیت کد است. یک چیز بسیار مفید که نه تنها به شما می گوید چه چیزی بد است، بلکه دلیل آن را نیز شرح می دهد و به کتابی پیوند می دهد تا بتوانید در مورد آن اطلاعات کسب کنید.

هر یک از این سرویس‌ها نشان مخصوص به خود را با نتایج داده‌ها، مانند پروژه پوشش کد دارند. و این نشان را می توان در توضیحات اصلی پروژه - فایل README اضافه کرد. کار آماده بود - من آن را برای بررسی فرستادم. پس از بررسی، من بلافاصله، از حافظه جدید، برای هر نظر یک شماره Github ایجاد کردم ، که سپس به من در بهبود این پروژه کمک می کند. هیچ کار بهبودی از سوی کارفرما وجود نداشت، بنابراین مدتی پروژه را فراموش کردم ...

مسیر کتابخانه جولای 2018

لوگو

در یک نقطه، متوجه شدم که مردم اغلب از پروژه من بازدید می کنند و این هر روز اتفاق می افتد. من از این موضوع شگفت زده شدم، و حتی بیشتر از این که حدود یک سال بعد یک ISSUE ایجاد شد، که در آن نوشته شده بود که یک طراح گرافیک خاص به من پیشنهاد ایجاد یک لوگو برای پروژه خود را می دهد. آنها می گویند که او دوست دارد این کار را برای محصولات منبع باز انجام دهد و این کار را کاملا رایگان انجام خواهد داد. ما شروع به همکاری کردیم. چندین گزینه پیشنهاد شد، اما در نهایت ما در این مورد تصمیم گرفتیم:
چگونه یک کار تست مصاحبه به یک کتابخانه منبع باز تبدیل شد - 5
در آن زمان هنوز جوان بودم و با جامعه منبع باز آشنا نبودم، و حقیقت چنین پیشنهادی برایم عجیب بود و پرسیدم چرا او این کار را می کند؟ که او پاسخ داد: "للز اوه، فقط به این دلیل که من عاشق مشارکت در پروژه های منبع باز هستم. نوعی هدف زندگی..." ( خود موضوع اینجاست ). آن زمان بود که برای اولین بار احساس کردم که چقدر عالی است وقتی افراد مختلف شما را از طریق پروژه های منبع باز پیدا می کنند و چیزهای جالبی ارائه می دهند!

نقص جانبی اول

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

استفاده از خط فرمان پاییز 2018

مرحله بعدی توسعه، ارتباط با یک سوئدی (رناتو آتایدس) بود که می خواست از طریق خط فرمان از کتابخانه استفاده کند و برای این کار لازم بود تغییرات و اضافات ایجاد شود. من دوباره از این موضوع شگفت زده و متعجب شدم. بعد از اینکه طراح گرافیک برایم نوشت، شگفتی من تا حدودی کمتر بود، اما همچنان بسیار زیاد بود. این فکر که کسی واقعاً به کد من نیاز دارد من را پر از احساسات باورنکردنی کرد. او تغییرات لازم را انجام داد و کد را آماده کرد. من یک بررسی کد انجام دادم، یعنی به تغییرات نگاه کردم، نظراتی وجود داشت که تغییر کردند و تغییرات قبلاً در کتابخانه بود. من این تغییرات را به عنوان نسخه 2.0 تعیین کردم. مرحله بعدی افزودن کتابخانه به Maven Central - یک مخزن مرکزی بود، که از آنجا می توانید آن را برای هر پروژه ای دانلود کنید و از آن به عنوان یک وابستگی استفاده کنید. در آن زمان من حتی از راه دور نمی دانستم چگونه این کار را انجام دهم، بنابراین گفتم سرم شلوغ است و از او خواستم تمام مراحلی را که برای راه اندازی پروژه لازم است انجام دهد. اما معلوم شد که این اصلا کافی نیست و جالب ترین چیز ایجاد ارتباط با Maven Central بود. این یک درد وحشی است که اولین بار نتوانستم انجامش دهم و تنها در 15 آوریل بود که توانستم پروژه را در Maven Central منتشر کنم. آسان نبود، اما همانطور که دیگران دوست دارند بگویند، "هرکسی که می خواهد کد جاوا خود را منتشر کند، از این طریق عبور می کند." قبل از اینکه کتابخانه را منتشر کنم، بالاخره متوجه شدم که با نقص هایی که برای مدت طولانی وجود داشت چه کنم و چگونه انجام دهم و نسخه جدید v2.0.2 را منتشر کردم که در آن از همه کسانی که به من کمک کردند تشکر کردم، شرح دادم که چه کاری و چگونه انجام دادم. .

انتشار در Maven Central. بهار 2019

برای انتشار صحیح یک کتابخانه، باید درک خوبی از نسخه سازی و نحوه تنظیم صحیح نسخه ها داشته باشید. من به این طرح پایبند خواهم بود:
  • XX.YY.BBBB ، که در آن XX یک به روز رسانی نسخه اصلی است که مستلزم تغییراتی است که با نسخه قبلی ناسازگار است (به عنوان مثال، تغییر نتیجه برگشتی در روش ها).
  • YY یک به روز رسانی جزئی است - یک تغییر یا گسترش داخلی که آنچه BBBB است را تغییر نمی دهد - اینها نقص هایی هستند که برطرف شده اند.
  • مثلا ورژن 2.0.2 یعنی نسخه اصلی 2 هستش هیچ آپدیت جزئی نداشت و دو تا آپدیت برای نقص هست.
در مرحله بعد، فهمیدن نحوه تنظیم صحیح groupId و artifactId مهم بود . آنها باید یک بار انتخاب می شدند و بیشتر مورد استفاده قرار می گرفتند. و بسته ای را می سازند که کد در آن ذخیره شده است. Was: ua.comparison.image اکنون: com.github.romankh3.image.comparison و این به وضوح بهتر است، زیرا همه می دانند که این پروژه ای از GitHub است و می توان آن را از شخصی با نام مستعار romankh3 پیدا کرد. وقتی همه این کارها را انجام دادم، نسخه جدید v2.1.0 را منتشر کردم .

ارتباط با سوئدی ها می 2019

پس از انتشار کتابخانه، سوئدی دیگری (Mika Kytöläinen) به من ایمیل زد و از دوستش خواست که تغییراتی در کتابخانه من ایجاد کند. او می گوید که واقعا به این کار نیاز دارد و اگر این کار را انجام دهیم و سریع انجام دهیم، بسیار خوشحال خواهد شد. البته با تغییراتی که لازم بود مخالف نبودم. او پیشنهاد کرد یک پیکربندی ضخامت خط اضافه شود که یک مستطیل ترسیم کند. مانند، برای کسانی که بینایی ضعیفی دارند، این یک تغییر مفید خواهد بود. کد را آماده کرد . با اضافه کردن چند تغییر دیگر، نسخه v2.2.0 را منتشر کردم

ارتباط با یک آلمانی می 2019

پس از این، یک آلمانی موضوعی ایجاد کرد که در آن می‌گوید می‌خواهم از آن برای آزمایش استفاده کنم، اما عملکردی ندارد. او پیشنهادهای زیادی ارائه کرد که بسیار جالب بودند، او پیشنهاد کرد که به جای بازگرداندن تنها تصویر حاصل با نتیجه در نتیجه مقایسه، مجموعه ای از داده ها را برگردانید: آنچه مقایسه شد، نتیجه (در صورت لزوم) و وضعیتی که در آن وجود دارد. MATCH، MISMATCH، SIZE_MISMATCH خواهد بود. حتی تغییرات را ایجاد کرد. اما اصلاً کد قبلی را در نظر نگرفتند و عجولانه ساخته شدند. من آنها را رد کردم و پیشنهاد دادم که آنها را هر طور که صلاح بدانم اجرا کنم. با وجود این، او بیشتر پاسخ داد و من تصمیم گرفتم که خودم این کار را انجام دهم و نسخه جدیدی منتشر کنم. در همان زمان، Mika Kytöläinen یک قابلیت جالب دیگر را پیشنهاد کرد - اضافه کردن مناطقی که در مقایسه گنجانده نمی‌شوند. این یک مورد واقعی است. و همه اینها در نسخه 3.0.0 منتشر شد

استفاده در یک پروژه واقعی

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

پیدا کردن طاقچه

پس از آن، متوجه شدم که جایگاه واقعی کتابخانه من استفاده از آن در آزمایشات است. برای انجام این کار، تصمیم گرفتم نوعی انجمن برای آزمایش کنندگان پیدا کنم و در مورد آن برای آنها بنویسم تا بازخوردی دریافت کنم و شهرت را افزایش دهم. من یک انجمن روسی زبان پیدا کردم و مقاله ای در آنجا منتشر کردم: سازماندهی تصاویر آزمایشی - مقایسه دو نمونه مشابه . در آن من بازخورد واقعی در مورد کد و عملکرد دریافت کردم که آن را اعمال کردم و نسخه جدید v3.2.0 و سپس v.3.3.0 را منتشر کردم .

اکنون

این کتابخانه در حال حاضر دارای 60 ستاره در Github و دارای 33 فورک است. من فکر می کنم با توجه به این واقعیت که من آن را به هیچ وجه تبلیغ نکردم، به جز مقاله ای در انجمن اتومات، بسیار جالب است. با تشکر از همه کسانی که تا آخر خواندند. در واقع معلوم شد که این مقاله بسیار طولانی تر از آن چیزی است که من انتظار داشتم. مقاله ای در مورد نحوه انتشار یک کتابخانه در Maven Central. اگر چیزی برای اضافه کردن دارید بنویسید! اگر چیزی برای بهبود کتابخانه دارید، بنویسید! همه چیز را خواهم خواند و زمان مناسبی را به آن اختصاص خواهم داد. هر کسی که مقاله را دوست داشت و آن را مفید یافت - به آن امتیاز دهید و در نظرات بنویسید. همچنین در اکانت github من مشترک شوید romankh3 مقالات دیگر من را نیز ببینید:
نظرات
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION