بهترین انتخاب واحد دانشگاه

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

باگ سایت دانشگاه شیخ‌بهایی
باگ سایت دانشگاه شیخ‌بهایی

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

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

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

جمع آوری اطلاعات

خب توی فاز اول باید اطلاعات درس‌ها رو دربیارم. با توجه به مشکلات امنیتی که گفتم به سادگی میشه SQL Inject کرد به سیستم و اطلاعات رو در  آورد. حتی اگه SQL معتبر نفرستین سیستم سخاوتمندانه اخطار می‌ده و راهنمایی‌تون میکنه. ولی من قصد ندارم که از دانشگاه اخراج بشم و کرکر هم نیستم، پس این گزینه رو رد می‌کنم و سعی میکنم از اون چیزی که همه بهش دسترسی دارن استفاده کنم. پس خیلی ساده با استفاده از یه لایبرری ۵۰ کیلوبایتی به اسم simple html dom، اطلاعات مورد نیازم رو از صفحه‌ی مربوطه دربیارم و بعد محاسبات مورد نیازم رو روش انجام بدم.

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

مشکل بعدیم تصحیح اطلاعات هست، من از ک و ی عربی توی زبان فارسی خوشم نمی‌اد! و مهم‌تر از اون من روی «سه شنبه ساعت ۱۰ (به مدت ۱ ساعت کلاس W210)» محاسبات نمی‌تونم انجام بدم. پس مجبورم این رشته‌ها رو اصلاح کنم و همچنین این ساعت‌ها رو به یه مفهوم قابل محاسبه برای خودم تبدیل کنم. خوشبختانه توی کل سیستم تمام اشتباهات یه جور هستن (یعنی اگه نوشته «یکشنبه»، همه جا همینه و میشه الگو توش درآورد.)

محاسبه و در آوردن خروجی

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

  • با حداقل اتلاف وقت بیشترین واحد رو بگیرم؛ مثلا سه روز ۱۸ واحد
  • زمان کافی قبل از روز امتحانش داشته باشه
  • با استادی که بهتر درس و نمره میده باشه
  • ترم متناسب باشه، خیلی سخت نباشه و خیلی هم آسون نباشه
  • درس‌هایی اولویت بیشتری دارن که پیش‌نیاز بقیه هستن

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

  • تداخل زمانی نداشته باشه
  • تداخل امتحانی نداشته باشه
  • پیش‌نیاز درس رو گذرونده باشم
  • بیش تر از ۲ درس عمومی نداشته باشه

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

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

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

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

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

پی‌.نوشت: این موضوع با استادم آقای مهدی ناصری مطرح کردم و خب میشه این کار رو از سمت آموزش، یعنی بهینه‌سازی ارائه درس‌های ترم بر اساس وضعیت دانشجوها هم انجام داد.