پروپوزال برای پروژه دانشگاه - شهاب الدّین موحّدی

برای پروژه من در درس پروژه، دو ایده مطرح شد که توصیف هر یک را نوشتم:

  1. پنهان‌نگاری (Steganography) داده در تصویر
  2. تبدیل‌کننده فایل اکسل و میزبانی داده‌های آن از طریق API

توصیف و نیازمندی‌های هر ایده (specification and requirements) به شرح ذیل است:

ایده 1: پنهان‌نگاری (Steganography) داده در تصویر

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

ابزاری توسعه داده شود، که بتوان با دادن فایل عکس و متن، متن را به صورت bit به bit در هر پیکسل از عکس درج کند، و عکس خروجی در ظاهر تغییر خاصی نکند، و سپس بتوان همان عکس خروجی را به ابزار داد تا متن را از آن استخراج کند.

توصیف فنی

با گرفتن عکس ورودی (که می‌بایست از فرمت فشرده‌سازی نباشد و فرمتی Lossless مثل PNG باشد)، پیکسل‌های تصویر به صورت تک به تک استخراج شوند. سپس از هر پیکسل، رنگ‌های RGB استخراج شود. که در این صورت با سه عدد 8 بیتی مواجه می‌شویم. هر کدام از این اعداد، به مبنای 2 (binary) تبدیل شوند، سپس بیت 1، با اولین بیت از داده ورودی جایگزین شود. این فرایند در هر رنگ از هر پیکسل ادامه یابد تا داده به صورت کامل در پیکسل‌ها قرار گیرد. در صورت نیاز، هدر نیز می‌تواند پیش از داده در بیت‌ها ذخیره شود.

پس از این، پیکسل‌ها تک‌به‌تک در فایل تصویر جدید با فرمت PNG نهاده و ذخیره شوند. تصویر خروجی نباید تفاوت معنا دار در ظاهر داشته باشد، و نیز حجم آن نباید جز برای ترمیم پیکسل‌های lossy، فشرده شده، و نیز تکمیل لایه آلفا (transparency) افزایش یابد.

این ابزار برای استفاده از طریق CLI است.

بخش‌های اختیاری

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

1. انتشار این پروژه به صورت Open-source در GitHub

این که سورس پروژه به صورت متن‌باز (Open-source) در GitHub یا سرویس مشابه برای توسعه‌دهندگان منتشر شود.

1. انتشار این ایزار در یک package manager برای استفاده و نصب عموم

این که این ابزار در یک package manager برای استفاده و نصب عموم منتشر باشد. این نیازمند آن است که ابزار قابلیت نصب در سیستم را داشته باشد و وابستگی‌ها (depenencies) و runtime مورد نیاز آن در سیستم میزبان موجود باشند.

3. توسعه یک UI تحت وب برای ابزار

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

ایده 2: تبدیل‌کننده فایل اکسل و میزبانی داده‌های آن از طریق API

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

توصیف فنی

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

  • نام محصول
  • شماره/کد محصول
  • برند
  • رنگ
  • قیمت
  • توضیحات

کدی توسعه داده شود که در API خود دو مسیر (route) داشته باشد. در یک route، اپراتور باید فایل اکسل را آپلود نماید و در route دیگر، داده‌های آن فایل اکسل به صورت JSON برگردانده شود.

بخش‌های اختیاری

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

1. احرازهویت برای دریافت اطلاعات از API

این که برای دریافت اطلاعات از API، نیاز باشد کاربر token ای از پیش تعریف شده را در header های HTTP Request خود به API بنویسد، در غیر این صورت، داده برگردانده نشود و خطا دهد.

2. صفحه‌بندی داده‌ها

این که داده‌ها به صورت صفحه‌های 100 تایی در هر درخواست برگردانده شوند. کاربر شماره صفحه را در query string در HTTP Request خود می‌نویسد.

3. صفحه‌بندی داده‌ها به صورت داینامیک

این که داده‌ها به صورت داینامیک و با توجه به معیار "تعداد مورد در هر صفحه" که کاربر در query string در HTTP Request خود می‌نویسد.