درباره ایونتیتیروایت یک مسیر · مهر ۱۴۰۵

داستان ایونتیتی؛
از یه مشکل دانشگاهی
تا یه ایده بزرگ‌تر

ایونتیتی با یه مسئله نسبتاً ساده تو دانشگاه فسا شروع شد.

از اینجا شروع شد

همه‌چی از یه مشکل ساده شروع شد

اگه بخوام داستان ایونتیتی رو تعریف کنم، باید برگردم به روزهایی که توی دانشگاه با یه مشکل تکراری روبه‌رو می‌شدیم.

تو دانشگاه فسا، هر انجمن علمی برای برگزاری رویدادها و ثبت‌نام شرکت‌کننده‌ها روش خودش رو داشت. یکی توی پیوی تلگرام ثبت‌نام می‌کرد، یکی گوگل‌فرم می‌ساخت، یکی می‌گفت به یه شماره پیام بدین یا زنگ بزنین و یکی هم می‌گفت برای ثبت‌نام باید حضوری به محل انجمن توی دانشگاه مراجعه کنین!

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

از اون طرف، اطلاع‌رسانی رویدادها هم همیشه اون‌طور که باید پیش نمی‌رفت. بارها پیش می‌اومد که دانشجوها بعد از پر شدن ظرفیت یه رویداد یا حتی بعد از تموم شدن زمان برگزاریش، تازه از وجودش باخبر می‌شدن و می‌پرسیدن: «چرا زودتر اطلاع‌رسانی نکردین؟ ما اصلاً خبر نداشتیم!»

این مشکل فقط برای دانشجوها نبود. انجمن‌ها هم برای مدیریت ثبت‌نام‌ها و پیگیری شرکت‌کننده‌ها دردسر داشتن و نظارت بر رویدادها و گزارش‌گیری از اون‌ها هم برای امور فرهنگی دانشگاه کار راحتی نبود.

کم‌کم این سؤال برامون جدی شد: چرا باید برای پیدا کردن و ثبت‌نام توی یه رویداد دانشگاهی، این‌همه مسیر مختلف رو طی کنیم؟ چرا یه جای مشخص وجود نداشته باشه که بشه رویدادها رو دید، اطلاعاتشون رو پیدا کرد و برای شرکت توشون ثبت‌نام کرد؟

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

پس تصمیم گرفتیم خودمون دست‌به‌کار بشیم.

قبل از ایونتیتی، یه شروع دیگه هم وجود داشت

قبل از اینکه توسعه ایونتیتی رو شروع کنیم، رضا مردانی، از دانشجوهای ورودی ۱۴۰۰ مهندسی کامپیوتر دانشگاه فسا، پروژه‌ای به اسم «رویدادنگار دانشگاه فسا» ساخته بود.

رضا کدهای پروژه رو در اختیارمون گذاشت و ما ریپازیتوریش رو به گیت‌هاب کمیته برنامه‌نویسی دانشگاه فسا منتقل کردیم و یه مقدار روش کار کردیم.

واقعاً بابت کاری که انجام داده بود ازش ممنونم. رویدادنگار پروژه خوبی بود و ایده‌های مختلفی ازش گرفتیم. اما هرچی بیشتر بررسیش کردیم، بیشتر متوجه شدیم که چیزی که توی ذهن ماست، با ساختار و نیازهای اون پروژه تفاوت داره. از طرفی، پروژه با قالب‌های خود جنگو (Django Templates) ساخته شده بود و ما برای توسعه چیزی که مدنظرمون بود، به معماری متفاوتی نیاز داشتیم.

در نهایت تصمیم گرفتیم به‌جای ادامه دادن همون پروژه، از ابتدا و بر اساس نیازهایی که شناسایی کرده بودیم جلو بریم. این بار با استفاده از Django REST Framework برای بک‌اند و Vue و Nuxt برای فرانت‌اند.

این تصمیم، شروع مسیر ایونتیتی به شکلی بود که امروز می‌شناسیمش.

Django TemplatesDjango REST Framework
Vue + Nuxt

از لیست کردن نیازها تا اولین خطوط کد

قبل از اینکه سراغ کدنویسی بریم، باید می‌فهمیدیم دقیقاً چه چیزی می‌خوایم بسازیم.

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

بعد از اون، نیازها رو مرتب کردیم، درباره امکانات موردنیاز تصمیم گرفتیم و طراحی اولیه دیتابیس رو انجام دادیم. حدود یه ماه تحقیق و طراحی طول کشید تا بالاخره به مرحله‌ای رسیدیم که بشه کدنویسی رو شروع کرد.

اوایل آبان ۱۴۰۴ بود؛ زمانی که ترم هفتم دانشگاه بودم و اولین خطوط کد ایونتیتی رو نوشتم.

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

ولی خب، ماجرا همیشه به همین سادگی پیش نمی‌ره!

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

برای ایونتیتی هم همین اتفاق افتاد. هرچی بیشتر جلو رفتیم، بیشتر متوجه شدیم که ایده اولیه چقدر جای رشد داره. دیتابیس و ساختاری که اول طراحی کرده بودیم، با چیزی که به‌مرور شکل گرفت، تفاوت زیادی پیدا کرد.

ایده‌ای که قرار بود صرفاً یه سایت برای مدیریت رویدادهای انجمن‌های دانشگاه فسا باشه، کم‌کم به پلتفرمی تبدیل شد که می‌تونه برای دانشگاه‌های دیگه هم کاربرد داشته باشه و زمینه ارتباط و همکاری بین دانشگاه‌ها رو فراهم کنه.

پشت صحنه ایونتیتی

توسعه ایونتیتی یه کار کاملاً انفرادی نبود، حتی با اینکه بخش بک‌اند پروژه رو خودم توسعه دادم.

از همون مراحل اولیه، دوست‌های زیادی توی شناسایی نیازها، طراحی دیتابیس، بررسی ایده‌ها و تصمیم‌گیری‌های مختلف کنارم بودن. بارها پیش اومد که برای انتخاب یه راه‌حل یا بررسی یه قابلیت باهاشون مشورت کنم. از همه‌شون بابت وقتی که گذاشتن و کمک‌هایی که کردن ممنونم.

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

همکاری توی توسعه فرانت‌اند و بک‌اند باعث شد بخش‌های مختلف سامانه در کنار هم شکل بگیرن و تصویر روشن‌تری از محصول نهایی داشته باشیم.

البته اضافه شدن فرانت‌اند فقط به معنی قشنگ‌تر شدن ظاهر سایت نبود! وقتی امکان کار کردن با سامانه و تست کردنش راحت‌تر شد، مشکلات و باگ‌هایی هم خودشون رو نشون دادن که قبلاً به این سادگی قابل مشاهده نبودن.

گاهی یه بخش درست کار می‌کرد، ولی وقتی قرار بود با بخش دیگه ارتباط برقرار کنه، مشکل به وجود می‌اومد. گاهی هم یه قابلیت در شرایط عادی مشکلی نداشت، اما با تغییر اطلاعات یا طی کردن یه مسیر متفاوت، نتیجه اون چیزی نمی‌شد که انتظار داشتیم.

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

چالشی فراتر از کدنویسی

یکی از مهم‌ترین چالش‌های من در مسیر توسعه ایونتیتی، بردن پروژه از مرحله کدنویسی به مرحله اجرا بود.

تا قبل از این پروژه، با بعضی از ابزارها و فناوری‌هایی که برای اجرای ایونتیتی استفاده کردم، تجربه جدی و عملی نداشتم. کار با Docker، Nginx و ساختار مبتنی بر کانتینر، این بار فقط یه تمرین آموزشی نبود؛ قرار بود ازشون برای اجرای یه پروژه واقعی استفاده کنم که کاربران واقعی قراره باهاش کار کنن.

همین موضوع باعث شد بخش جدیدی از دنیای توسعه نرم‌افزار رو از نزدیک تجربه کنم؛ بخشی که با نوشتن کد تموم نمی‌شه و مسائلی مثل راه‌اندازی، پایداری، ارتباط بین اجزا و آماده کردن پروژه برای استفاده واقعی هم به همون اندازه اهمیت پیدا می‌کنن.

در کنار این‌ها، تست کردن سامانه با سناریوهای مختلف و پیدا کردن مشکلاتی که بین بخش‌های مختلف به وجود می‌اومدن هم بخش قابل‌توجهی از مسیر رو تشکیل می‌داد.

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

ایونتیتی، پروژه دانشگاهی من هم شد!

یه خاطره جالب دیگه از ایونتیتی مربوط به ترم هشتم دانشگاهمه.

ما یه درس سه‌واحدی به اسم «پروژه» داشتیم و من تصمیم گرفتم ایونتیتی رو به‌عنوان پروژه دانشگاهیم ارائه کنم. به این ترتیب، پروژه‌ای که با یه نیاز واقعی و یه ایده شخصی شروع شده بود، تبدیل به موضوع پروژه دانشگاهی من هم شد.

آخر ترم، دکتر نصیری لطف کرد و نمره 19.5 رو بهم داد که بابتش واقعاً ممنونشم.

فقط هنوز یه سؤال بی‌جواب باقی مونده: اون نیم‌نمره دقیقاً کجا کم شد؟!

مقیاس پروژه بود؟ کیفیتش بود؟ اصلاً مقیاس و کیفیت پروژه توی ارزیابی نمره تأثیری داشتن یا نه؟ یا یه قابلیت مهم رو پیاده نکرده بودم که خودمم خبر نداشتم؟ شاید هم دلیل دیگه‌ای داشته. به‌هرحال، این نیم‌نمره هنوز برام یه معماست!

البته حالا که ایونتیتی قراره تو دنیای واقعی هم استفاده بشه، یه جورایی همه‌مون می‌تونیم به بهتر شدنش کمک کنیم. اگه شما هم موقع کار با ایونتیتی به مشکلی برخوردین، حتماً از طریق آیدی پشتیبانی بهم خبر بدین تا برطرفش کنم. شاید بالاخره بفهمم اون نیم‌نمره کجا گم شده بود (: فقط امیدوارم باگ‌هایی که پیدا می‌کنین از نیم‌نمره بیشتر نشن!

ایونتیتی امروز چه کاری انجام می‌ده؟

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

در کنار این امکانات، برای همکاری بین انجمن‌ها و گزارش‌گیری و نظارت دانشگاه‌ها هم قابلیت‌هایی در نظر گرفته شده که هنوز جای توسعه و تکمیل دارن.

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

البته هنوز همه‌چیز به نقطه‌ای که براش تصور کردیم نرسیده. ایونتیتی هنوز مسیر زیادی برای رشد و بهتر شدن پیش رو داره؛ اما حالا از یه نیاز واقعی شروع شده و به سامانه‌ای رسیده که می‌تونه بخشی از اون نیازها رو برطرف کنه. ادامه مسیر هم قراره با شناخت بهتر نیازها و کامل‌تر کردن امکاناتش شکل بگیره.

دانشجو
پیدا کردن رویداد، دیدن جزئیات و ثبت‌نام
برگزارکننده
ایجاد و مدیریت رویداد و پیگیری ثبت‌نام‌کننده‌ها
انجمن و دانشگاه
همکاری، گزارش‌گیری و نظارت؛ در مسیر توسعه و تکمیل

چرا اسمش شد Eventity؟

اسم ایونتیتی از ترکیب سه مفهوم شکل گرفته: Event، University و Community.

Event؛ رویداد. نقطه شروع همه‌چیز همین بود. کارگاه‌ها، دوره‌های آموزشی، همایش‌ها، مسابقات و برنامه‌های مختلفی که در دانشگاه‌ها برگزار می‌شن. فرصت‌هایی که می‌تونن تجربه‌های ارزشمندی بسازن، به شرطی که آدم‌ها بتونن به‌موقع از وجودشون باخبر بشن.

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

و در نهایت، Community؛ اجتماع. چون به نظرم ارزش یه رویداد فقط به محتوای اون محدود نمی‌شه. آدم‌هایی که توی یه کارگاه کنار هم می‌شینن، توی یه همایش با هم آشنا می‌شن یا در قالب یه انجمن همکاری می‌کنن، می‌تونن اتفاق‌های خیلی بزرگ‌تری رو رقم بزنن. گاهی یه رویداد فقط شروع یه آشناییه؛ آشنایی‌ای که ممکنه به یه دوستی، یه همکاری یا حتی تغییر مسیر آینده یه نفر منجر بشه.

این سه مفهوم، ایده اصلی اسم Eventity رو شکل می‌دن: رویدادهایی در فضای دانشگاهی که آدم‌ها رو به هم نزدیک‌تر می‌کنن و زمینه شکل‌گیری یه اجتماع رو فراهم می‌کنن.

آینده‌ای که برای ایونتیتی تصور می‌کنم

دوست دارم ایونتیتی خیلی فراتر از یه سامانه برای دانشگاه خودمون بره.

تصورم اینه که یه روزی دانشگاه‌ها، انجمن‌ها و دانشجوهای سراسر کشور بتونن از ایونتیتی استفاده کنن؛ دانشجوها از فرصت‌های دانشگاه‌های دیگه باخبر بشن، انجمن‌ها تجربه‌هاشون رو به اشتراک بذارن و دانشگاه‌ها راحت‌تر برای برگزاری رویدادهای مشترک با هم ارتباط برقرار کنن.

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

البته رسیدن به چنین هدفی زمان می‌بره و به تلاش و همکاری افراد زیادی نیاز داره. ولی به نظرم مهم اینه که یه قدم از جایی که هستیم برداریم و برای بهتر کردنش تلاش کنیم.

ایونتیتی با یه مسئله نسبتاً ساده تو دانشگاه فسا شروع شد؛ اما هرچی بیشتر بهش فکر کردم، بیشتر دیدم که این مسئله می‌تونه راهی برای ساختن چیزی بزرگ‌تر باشه.

حرف آخر

ایونتیتی رو ساختیم چون باور داریم فرصت‌های خوب دانشگاهی نباید فقط به خاطر اینکه ازشون خبر نداریم، از دست برن.

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

این داستان ایونتیتی تا اینجای مسیره؛ پروژه‌ای که با یه نیاز واقعی تو دانشگاه فسا شروع شد، در طول توسعه تغییر کرد و حالا قراره مسیرش رو ادامه بده.

و امیدوارم داستانش به همین‌جا ختم نشه.

میلاد ولی‌زاده