ساخت Labeler NearBy
Table of Contents
اولین هکاتون من
در بخشهای پایانی تابستان 2022، واقعاً میخواستم روی یک پروژهٔ هیجانانگیز کار کنم. تازه دورهٔ کارشناسیام را تمام کرده بودم و بهصورت تماموقت بهعنوان مهندس نرمافزار کار میکردم. واقعاً میخواستم روی یک پروژهٔ جانبی وقت بگذارم و در آن زمان، به اندازهٔ کافی وقت آزاد برای این کار داشتم. واقعاً نمیدانستم روی چه چیزی کار کنم، تا اینکه در اوت 2022 وبسایتی به نام Devpost را پیدا کردم. Devpost وبسایتی است که مسابقات نرمافزاری به نام هکاتون را میزبانی میکند. هنگام گشتوگذار در Devpost، هکاتونی به نام NEAR MetaBUILD III پیدا کردم که هکاتونی بود که توسط سازمان NEAR Protocol میزبانی میشد.
NEAR چیست؟
NEAR Protocol یک بلاکچین است که از قراردادهای هوشمند و ارز دیجیتال NEAR پشتیبانی میکند. این پلتفرم عمدتاً بهخاطر کارمزدهای تراکنش بسیار پایین، پشتیبانی از قراردادهای هوشمند، داشتن شبکهٔ آزمایشی رسمی خودش، و محیط توسعهدهندهٔ عالیاش شناخته میشود، زیرا این امکان را دارید که قراردادهای هوشمند را با Rust و/یا Java Script بنویسید. با این حال میتوانید از طریق ویدیوی فوقالعادهٔ CoinGecko، نمای کلی بهتری از NEAR Protocol بهدست آورید:
در همین زمان، Coinbase رسماً پشتیبانی از NEAR Protocol را بهعنوان یک کوین قابل معامله در پلتفرم خود آغاز کرد. این موضوع اهمیت زیادی داشت، چون Coinbase به این معروف است که وقتی نوبت به انتخاب کوینهایی میرسد که روی پلتفرم خود پشتیبانی میکنند، بسیار سختگیر است. این موضوع به قابلاعتمادتر شدن NEAR کمک کرد. هنوز هم میتوانید تا همین امروز NEAR را در Coinbase معامله کنید.
چرا متعهد شویم؟
بعد از مدتی فکر کردن، تصمیم گرفتم زمانم را صرف رقابت در هکاتون NEAR MetaBUILD III کنم. دلیل من این بود:
- کریپتو از بین نمیرود و فناوریای است که باقی خواهد ماند. پس منطقی بود که مقداری زمان برای یادگیری این فناوری سرمایهگذاری کنم.
- هکاتون پاداشهای عالیای داشت، از 20,000 دلار تا 100,000 دلار بهصورت NEAR، اگر یکی از برندگان میشدید.
- هکاتون یک موعد مشخص داشت، یعنی پروژه نمیتوانست مثل بسیاری از پروژههای جانبی معمولاً برای ماهها کش پیدا کند.
- این پروژه یک تجربهٔ یادگیری عالی و یک معرفی خوب به هکاتونها میبود
- در بدترین حالت، هکاتون به من اجازه میداد یک پروژهٔ عالی برای نشاندادن در رزومهام بسازم.
با در نظر گرفتن همهٔ اینها، در 26 اوت 2022 با دوست نزدیکم از دانشگاه تماس گرفتم و ما شروع به برنامهریزی برای این هکاتون کردیم. برنامهریزی شده بود که هکاتون در 23 سپتامبر 2023 آغاز شود و در 21 نوامبر 2022 به پایان برسد. هرچند موعد نهایی در پایان هکاتون تا 24 نوامبر 2023 تمدید شد. چون ما یک ماه زودتر بودیم، تصمیم گرفتیم این زمان را صرف یادگیری و طوفان فکری کنیم تا ببینیم برای این هکاتون دوماهه روی چه چیزی کار خواهیم کرد. در آن ماه اول، یک نمای کلی از کریپتو و بلاکچینها بهدست آوردیم. در تستنت NEAR مرور و تمرین کردیم، NEAR SDK را بررسی کردیم و چند قرارداد هوشمند را مستقر کردیم.
ایده
بعد از اینکه معرفی بسیار خوبی به همهچیزِ بلاکچین و NEAR داشتیم، شروع به طوفان فکری دربارهٔ ایدهها کردیم. من میخواستم این پروژه چیزی بیش از یک «پروژهٔ هکاتونی» باشد؛ چیزی باشد که بتواند به محصولی تبدیل شود که دیگران بتوانند از آن استفاده کنند و همچنین نمونهای باشد از اینکه کریپتو چگونه میتواند برای چیزهایی فراتر از صرفاً معامله مفید باشد.
با این ذهنیت، در ابتدا تصمیم گرفتیم چیزی شبیه Unreal Engine Blueprint بسازیم، اما برای ایجاد و استقرار آسان قراردادهای هوشمند روی بلاکچین NEAR بدون نیاز به کدنویسی. با این حال، یک هفته پیش از شروع هکاتون، از این ایده صرفنظر کردیم چون سادهاش این بود که منطقی به نظر نمیرسید. چرا باید کسی زحمت بکشد از ابزار ما برای ساخت قراردادهای هوشمند NEAR استفاده کند اگر هنوز برای آنها مورد استفادهٔ عملیای وجود نداشت؟ این مثل توسعهٔ ابزاری میبود که بسیاری از مردم به آن نیاز نداشتند.
تنها یک هفته تا شروع هکاتون باقی مانده بود که دوباره طوفان فکری را آغاز کردیم و به این ایده رسیدیم:
یک پلتفرم غیرمتمرکز که در آن پژوهشگران هوش مصنوعی بتوانند
برچسبگذاری داده را به برچسبزنها در سراسر جهان برونسپاری کنند
نام پروژه را «Labeler NearBy» گذاشتیم. تصمیم ما برای انتخاب این ایده بر اساس دلایل زیر بود:
- توسعهٔ هوش مصنوعی برای آموزش به برچسبگذاری انسانیِ داده نیاز دارد.
- پیدا کردن و مدیریت افراد ماهر برای برچسبگذاری مجموعهدادههای خاص دشوار است.
- این ایده پیشتر با موفقیت توسط شرکتی به نام Scale AI پیادهسازی شده است، همانطور که از یافتن تناسب محصول و بازار توسط آنها مشخص است.
- خدمات متمرکزی مانند Scale AI نگرانیهایی ایجاد میکنند، زیرا سازمانها باید دادههای خود را به شرکت برچسبگذاری ارسال کنند و آن شرکت سپس برچسبزنهای انسانی را بهصورت جهانی برونسپاری میکند. پس از فرایند برچسبگذاری، شرکت دادههای برچسبخورده را به سازمان بازمیگرداند. این کار کنترل روی دادههای آموزشی ارزشمند را از بین میبرد، دادههایی که میتوانند توسط شرکت برچسبگذاری برای آموزش مدلهای خودش استفاده شوند. غیرمتمرکز کردن این خدمت بهنظر یک راهحل منطقی میرسید.
- ما پروژههای بسیار کمی را در فضای برنامههای غیرمتمرکز (dApp) پیدا کردیم که روی این ایده کار میکردند، و این فرصتی برای ما فراهم میکرد تا در این حوزه نوآوری کنیم و پیشگام باشیم.
برای کمک به کاهش پیچیدگی، تصمیم گرفتیم که Labeler NearBy فعلاً فقط از دادههای تصویری پشتیبانی کند.
ارسال
با انتخاب ایده و شروع رسمی هکاتون، من و دوستم ساخت Labeler NearBy را آغاز کردیم. ما دو ماه روی پروژهمان کار کردیم تا اینکه پیشنویس نهایی پروژهمان را در 24 نوامبر 2022 به Devpost ارسال کردیم. پروژهمان را در Devpost ارسال کردیم و همچنین یک نسخه از ارسالمان را در Github ایجاد کردیم. این وبلاگ همهٔ جنبههای فنی و فرایند توسعهٔ Labeler NearBy را پوشش نمیدهد. با دانستن این موضوع، برای یادگیری بیشتر دربارهٔ نحوهٔ کار Labeler NearBy یا مشاهدهٔ ارسال نهایی ما، لطفاً به یکی از لینکهای زیر مراجعه کنید:
Labeler NearBy از دو پایگاه کد تشکیل شده است: ln-researcher و ln-labeler. این پایگاههای کد تحت مجوز MIT کاملاً متنباز هستند و میتوان آنها را از طریق لینکهای زیر مشاهده کرد:
در اینجا یک نمای کلی از اینکه Labeler NearBy (LN) چگونه کار میکرد آورده شده است:
یک پژوهشگر برای آموزش مدل هوش مصنوعی خود به تصاویر برچسبخورده نیاز دارد. برای انجام این کار، پژوهشگر از LN استفاده میکند تا دادههای خود را میزبانی کند و راهی برای برچسبزنها فراهم کند تا دادههای او را برچسبگذاری کنند. این کار از طریق ln-researcher انجام میشود، یک سرویس وب خودمیزبان که از یک API، قراردادهای هوشمند پژوهشگر، و یک پایگاه دادهٔ محلی Postgres تشکیل شده است. برای برچسبزن، یک فرانتاند وب فراهم میشود (فراهم میشد) که به آنها امکان میداد به تصاویر پژوهشگر دسترسی پیدا کنند و آنها را برچسبگذاری کنند. در فرایند برچسبگذاری، هر تصویر سه بار توسط برچسبزنهای مختلف برچسبگذاری میشود. فقط برچسبزنی که بهترین برچسبها را دارد، که از طریق یک سیستم رأیگیری تعیین میشود، با کوینهای NEAR پاداش میگیرد. برنامهٔ وب مسئول این فرایند ln-labeler نام دارد. پژوهشگر هر عملیات برچسبگذاری را تأمین مالی میکند، و کوینهای NEAR را میتوان بهراحتی از طریق Coinbase به دلار تبدیل کرد. همهٔ منطقهای تراکنش توسط قراردادهای هوشمند میزبانیشده روی بلاکچین NEAR Protocol مدیریت میشوند.
میتوانید ویدیوی دموی Labeler NearBy ما را برای هکاتون در اینجا ببینید:
بزرگترین دستاورد
ویژگیای که بیش از همه به پیادهسازی آن افتخار میکنم تابعی به نام getImage() است. این تابع بهعنوان یک نقطهٔ پایانی API در ln-researcher عمل میکند و نقش بسیار مهمی در خط لولهٔ داده بین پژوهشگران و برچسبزنها در Labeler NearBy (LN) ایفا میکند.
این نقطهٔ پایانی API به پژوهشگران امکان میدهد تصاویر خود را بهصورت امن و قابلاعتماد برای برچسبگذاری توزیع کنند. وظایف برچسبگذاری از طریق یک قرارداد هوشمند NEAR روی بلاکچین NEAR Protocol مدیریت میشوند، در حالی که دادهٔ تصویر توسط پژوهشگر از طریق ln-researcher میزبانی میشود.
این نقطهٔ پایانی یک سری بررسی امنیتی انجام میدهد تا اطمینان حاصل شود که فقط برچسبزنِ اختصاصیافته میتواند به تصویر دسترسی داشته باشد. این شامل بررسی امضای درخواست و بررسی قرارداد هوشمند مرتبط برای تأیید وجود وظیفه و اختصاص آن به برچسبزنِ درخواستکننده است.
پس از آنکه درخواست در API خودمیزبان ln-researcher پژوهشگر اعتبارسنجی شد، تابع تصویر را از پایگاه دادهٔ محلی Postgres بازیابی میکند، تصویر را رمزگذاری میکند و آن را به برچسبزنِ مجاز تحویل میدهد؛ برچسبزن نیز سپس میتواند تصویر را برای برچسبگذاری رمزگشایی کند. همزمان، تابع وضعیت تصویر را در پایگاه داده بهروزرسانی میکند و پیشرفت برچسبخورده شدن تصویر را نشان میدهد. در سراسر این فرایند، از کلیدهای RSA هم از طرف پژوهشگر و هم برچسبزن برای احراز هویت استفاده میشود. در حالی که از رمزگذاری AES برای رمزگذاری تصویر استفاده میشود.
این نقطهٔ پایانی نقش حیاتی در مدیریت توزیع امن و کنترلشدهٔ تصاویر از پژوهشگران به برچسبزنها ایفا میکند. این کار انتقال امن داده را تضمین میکند و فرایند برچسبگذاری تصویر را بهطور مؤثر ردیابی و مدیریت میکند. علاوه بر این، این فرایند این پتانسیل را دارد که نیاز به استفاده از HTTPS را، دستکم برای این نقطهٔ پایانی، از بین ببرد.
این نقطهٔ پایانی/تابع خاص آزمایش شد و ثابت شد که کار میکند. در ادامه، یک نمودار که کارکرد کلی Labeler NearBy را نشان میدهد آمده است، از جمله نمایش روشنی از اینکه نقطهٔ پایانی/تابع مذکور چگونه کار میکند:
نتیجه
متأسفانه، واقعیت تلخ این است که ما نتوانستیم این پروژه را تا مهلت هکاتون بهطور کامل به پایان برسانیم. بیشتر پروژه تکمیل شده بود، مانند ln-researcher، اما فرانتاند (ln-labeler) کامل نشد و ما نتوانستیم یک دموی زنده مستقر کنیم. با اینکه بکاند (ln-researcher) در اصل کامل شده بود، بدون یک فرانتاند درستوحسابی و بدون دموی زنده، هیچکس نتوانست ایدهی Labeler NearBy را امتحان کند. نه تنها این، بلکه داوران هم نتوانستند پروژه را امتحان کنند و بهجای آن مجبور شدند ارسال را بخوانند، کد را بررسی کنند، و/یا خودشان تلاش کنند آن را اجرا کنند. و این باعث شد شانس ما برای برنده شدن عملاً به صفر درصد برسد. این موضوع در ۱۵ دسامبر ۲۰۲۲ تأیید شد، زمانی که برندگان هکاتون اعلام شدند و ما جزو آنها نبودیم.
باختن
من از پنهان کردن این واقعیت که نتیجهی نهایی این هکاتون ناامیدکننده بود، خودداری نمیکنم. ماهها روی این پروژه سرمایهگذاری شد و من برای این پروژه چشمانداز بزرگی داشتم، چون فکر میکردم ابزاری بسیار مفید برای پژوهشگران فراهم خواهد کرد.
من برای پروژههایی که انجام میدهم یک استاندارد روشن دارم: یا موفق میشوند یا شکست میخورند؛ حد وسطی وجود ندارد. پس این پروژه یک شکست بود، چون تا مهلت مقرر بهطور کامل تکمیل نشد و برای کاربران بالقوه همچنان غیرقابلدسترسی باقی ماند.
اما مهم است به یاد داشته باشیم که شکست بخش طبیعی زندگی است. موفقیتهای ما بر پایهی درسهایی ساخته میشوند که از شکستهای خود میآموزیم. هرچند نتیجهی این هکاتون ناامیدکننده بود، اما هنگام توسعه و ساخت یک پروژه/محصول همچنان بینشهای ارزشمندی ارائه کرد.
درسهای آموختهشده
درسهای اصلیای که از این تجربه گرفتم به شرح زیر بود:
- پروژهای که انتخاب کردیم پیش از آنکه بتوانیم روی آن تکرار و بهبود انجام دهیم، به ویژگیهای زیادی نیاز داشت که باید از ابتدا ساخته میشدند. منظورم چیست؟ خب، این پروژه نیاز داشت تقریباً همهی اجزای ایده پیش از آنکه حتی بتوانیم ایده را آزمایش کنیم، ساخته شوند. منطقیتر بود که پروژهای را انتخاب کنیم که اجزای ضروری کمتری برای عملکرد داشته باشد. با این کار، میتوانستیم اجزای ضروری را سریعتر بسازیم و زودتر روی پروژه تکرار کنیم. با انجام این کار، میتوانستیم آسانتر به مهلت برسیم و پروژهای بسازیم که شاید سادهتر بود اما کاملتر. YC، یک شتابدهندهی استارتاپهای فناوری، تأکید میکند که باید سریع راهاندازی کنید، با کاربران صحبت کنید، و تکرار کنید. ما باید همین کار را با پروژهی این هکاتون انجام میدادیم.
- ما مدت زمانی را که ساخت این پروژه میبرد دستکم گرفتیم. این اولین هکاتون ما بود و اولین باری بود که یک برنامهی غیرمتمرکز (dapp) میساختیم. نه تنها این، بلکه من بهصورت تماموقت بهعنوان مهندس نرمافزار کار میکردم و دوستم در حال تکمیل کارشناسی ارشدش بود. با این حال، فکر میکردیم ۲ ماه کافی خواهد بود. منطقیتر بود که دامنهی پروژه را کاهش دهیم و/یا یک عضو دیگر به تیم پیدا کنیم که میتوانست بار کاری ما را کاهش دهد.
- وینستون چرچیل بهطور مشهور گفته است: “کمال دشمن پیشرفت است”. من با این پروژه مثل یک محصول کسبوکار به مصرفکننده (B2C) رفتار میکردم، در حالی که در واقعیت این فقط یک پروژهی هکاتون بود و در نهایت حداکثر یک محصول حداقلی قابلارائه (MVP). بنابراین از همان ابتدا، زمان زیادی را روی جزئیات کوچک هدر دادم، در حالی که باید وقتم را صرف میکردم تا ویژگیهای اصلی بهاندازهی کافی کار کنند.
علاوه بر این درسهای ارزشمند، مهارتهای جدیدی نیز به دست آوردهام که هم در پروژههای شخصیام و هم در تلاشهای حرفهایام بسیار ارزشمند بودهاند. این مهارتها شامل موارد زیر است:
- توسعهی APIها با استفاده از Node.js، JavaScript، و Express.js
- راهاندازی و استفاده از PostgreSQL برای مدیریت داده
- بهکارگیری PostgresSQL در توسعهی API با استفاده از بستههایی مانند PG.
- استفاده از RSA (رمزنگاری نامتقارن) و AES (رمزنگاری متقارن) برای افزایش امنیت دادهها.
نتیجهگیری
در مجموع، خوشحالم که در این هکاتون شرکت کردیم، با وجود اینکه از نتیجهی نهایی ناراحت بودم. از درسها و مهارتهای ارزشمندی که هنگام کار روی Labeler NearBy به دست آوردم سپاسگزارم، زیرا آنها مرا به توسعهدهندهی بهتری تبدیل کردهاند و بهطور چشمگیری به توسعهی پروژهی بعدیام کمک کردهاند: Notify-Cyber.
یادداشتهای دیگر
- ممکن است به Labeler NearBy بازگردم، اما فعلاً این پروژه در “تعلیق بلندمدت” است
- در حال حاضر، Labeler NearBy باید فقط روی تستنت NEAR اجرا شود. این پروژه به توسعه، آزمایش، و حسابرسی بیشتری نیاز دارد.