نمایش نتایج 1 تا 4 از 4

نام تاپیک: کتابخانه PCore

  1. #1

    کتابخانه PCore

    سلام دوستان من در حال نوشتن یک کتابخانه برای کیوت هستم که یکسری از کلاسهایی که برای برنامه نویسی روزمره به اونها نیاز هست رو داخلش داره. شما می تونید این کتابخونه رو بصورت متن باز از آدرس زیر دریافت کنید:
    https://github.com/pswin/pcore


    فعلا این کتابخانه در مراحل اولیه هست و کلاسها و امکانات زیر رو داره:

    سیستم لوگر:
    این سیستم برای لاگ گیری هست و قابلیت ثبت لاگ در فایل، شبکه و ... رو داره. از جمله مزیتهای این سیستم می شه به مورارد زیر اشاره کرد:
    1. همراه پیام های لوگ می تونید پارامتر ارسال کنید که به شما این قابلیت رو می ده بعدا بتونید فیلترهای دقیقتر و بهتر روی لاگهاتون انجام بدین.
    2. امکان لاگ گیری روی شبکه رو داره. که به شما امکان بررسی روند اجرای برنامه از راه دور رو می ده.
    3. چند سطح مختلف لاگ داره (Error و Warning و Trace و ... ) به شما این امکان رو میده که هر سطح رو فعال یا غیر فعال کنید و یا اینکه توی فایلهای مختلف و یا دستگاه های مختلف بصورت جدا لاگ کنید.
    4. یکسری ماکرو برای کارهای لاگ داره که امکان غیر فعال کردن و یا فعال کردن در مود های دیباگ و یا ریلیز داره به عنوان مثال می خوایین در مورد دیباگ لاگ های Trace توی کد باشن اما در مد ریلیز به صورت کامل از کد حذف بشن.





    سیستم رمز نگاری:
    یکی از کمبود های کیوت سیستم رمزنگاری هست. در PCore ما از کتابخونه OpenSSL که یکی از معتبرترین کتابخونه ها برای رمزنگاری هست استفاده کردیم و الگوریتم های زیر رو بصورت کلاسهای خیلی ساده آماده وارد کتابخونه کردیم:
    1. RSA
    2. AES
    3. DES


    کلاسهای اطلاعات سیستم:
    یکسری کلاس برای گرفتن اطلاعات سخت افزاری سیستم در نظر گرفته شده. این کلاسها جزئیات زیادی از سخت افزارهای مختلف را برمی گردونن. (البته هنوز این کلاسها در حال تکمیل هستند). البته میزان و دقت اطلاعاتی که برگردونده می شه کاملا وابسته به سیستم عامل و درایورهای نصب شده و ... داره. و حتی می تونه از یه نسخه به نسخه دیگه ویندوز اطلاعات برای سخت افزار یکسان فرق کنه. این نقص از کتابخونه من نیست بلکه از سیستم عاملها و داریورهاست. از جلمه اطلاعاتی که می تونید بگیرید:

    1. پردازنده
    2. رسانه های ذخیره سازی
    3. کارت گرافیک
    4. کارت صدا
    5. مانیتورها
    6. دستگاهای رابط ورودی (HID) (اضافه خواهد شد)
    7. رابطهای شبکه (اضافه خواهد شد)





    فشرده سازی داده:
    برای فشرده سازی داده یک کلاس تخصیص داده شده که از کتابخونه معروف zlib استفاده می کنه و در حال حاضر با دو الگوریتم deflate و gzip کار می کنه. البته فایلهای zip رو نمی تونه باز کنه. برای فایلهای فشرده احتمالا از یک کتابخونه دیگه استفاده کنیم و یه رابط روش بکشیم که بشه خیلی راحت با کیوت باهاش کار کرد. (در حال حاضر در حال تست کتابخونه ها هستیم که بهترین رو انتخاب کنیم)



    Globalization:
    یکی از زیر فضاهای نام اصلی PCore فضای نام جهانی سازی یا Globalization است. هدف این فضای نام فراهم کردن یه ساختار برای localization و ساخت برنامه های چند زبانه راحتر هست. از جمله کلاسهای این فضای نام عبارتند از:

    1. کلاس تقویم شمسی (دقت این تقویم بسیار بالا هست و کاملا الگوریتمیک کار می کنه. و نسبت به الگوریتمهای معمولی که استفاده می شه دقت فوقالعاده زیادی داره.)
    2. تقویم هجری: الگوریتمی که برای این تقویم استفاده شده رو از یکی از استاید دانشگاه زوریخ گرفتم. این الگوریتم یکی از بهترینها هست. منتها هنطور که می دونید تقویم هجری-قمری هیچ مبنای و الگوریتم درستی برای محاسبه نداره. دقت این کلاس یک روز هست و امکان داره تاریخی رو که می ده یک روز کمتر یا بیشتر باشه اما در اکثر موارد با دقت بالا کار میکنه.
    3. کلاس پارسر تاریخ: این کلاس میتونه متن رو تاریخ تبدیل کنه که در دو کلاس بالا برای تبدیل متن به تاریخ ازش استفاده شده
    4. کلاس Locale: این کلاس با توجه به استانداردهای ISO اطلاعات در موردی زبانها، واحدهای پولی، کشورها و ... رو می ده. (البته این کلاس فعلا در حال توسعه هست). دلیل نوشته شدن این کلاس اینه که کلاس معادل اون یعنی QLocale در کیوت از اطلاعات سیستم عامل استفاده می کنه که در برخی موارد اشتباه هستن. مثلا در مورد اسم ماه های شمسی.




    فضای نام هسته:
    در این فضای نام یکسری کلاسهای پایه برای کارهای اولیه وجود داره. از جمله اونها می شه به موارد زیر اشاره کرد:
    1. ماکروهای عملیات بیتی: به کمک این ماکروها می تونید عملیات بینی مثل خوندن از یک رنج ثابت از بیتها و ... رو به راحتی انجام بدید. (مثلا بیت چهارم تا ششم)
    2. کلاس پروفایلر: این کلاس برای عملیات پروفایلینگ ابتدایی طراحی شده که می تونه برای تست های کوچیک که دقت زیادی لازم ندارن مفید باشه.
    3. ....

      دوستان این پروژه به صورت فعال (Active) در حال توسعه هست و امکان اضافه شدن و یا حتی کم شدن کلاسها وجود داره. من سعی می کنم تغییرات رو اینجا اعلام کنم. همچنین خیلی خوشحال می شم در صورتی که نیازی به کلاس و یا امکانات خاصی احساس می کنید در میون بزارید تا در صورت امکان به پروژه اضافه اش کنیم.
    آخرین ویرایش به وسیله pswin.pooya : سه شنبه 01 تیر 1395 در 14:58 عصر

  2. #2

    نقل قول: کتابخانه PCore

    فوق العاده هست. همیشه دنبال یه کتابخانه اینطوری بودم !!!

  3. #3

    نقل قول: کتابخانه PCore

    یه فریم ورک برای کار با کش ها دارم اضافه می کنم. فرق کش با کانتاینرهایی مثل QMap اینه که شما می تونید اندازه رو محدود کنید و یا سیاست های دیگه برای کنترلش اعمال کنید. از جمله انقضای داده با گذشت زمان یا بیشترین تعداد دسترسی و ... . برای هر آیتمی که وارد کش می شه یه هزینه تعیین می کنیم و به کلاس کش می گیم که اجازه نداره از هزینه تعیین شده تجاوز کنه. این هزینه می تونه اندازه حافظه اشغال شده باشه و یا اینکه حتی تعداد آیتم باشه. مثلا هزینه ماکزیمم کش رو می دیم سه و برای هر آیتمی که اضافه می شه یک واحد هزینه در نظر می گیریم. و یا هزینه ماکزیمم رو میدیم یک مگابایت و هر آیتم رو که اضافه می کنیم به کمک sizeof و ... اندازه اون رو به عنوان هزینه می فرستیم.

    امروز اولین کلاسش رو یعنی کش مدل LRU رو اضافه کردم. این مدل کش زمانی که به محدودیت می رسه، آیتمی رو حذف می کنه که دیرتر از بقیه مورد دسترسی قرار گرفته و یکی از محبوب ترین مدلهای کش هست.

    شاید بگین چرا سیستم کش رو نوشتی و سیستم های آماده و یا حتی کلاسهای آماده ای مثل QCache استفاده نمی کنی:

    1. کلاس QCache فریم ورک کیوت Thread Safe نیست و نمی شه ازش توی کارهای چند نخی استفاده کرد. که استفاده ازش رو خیلی محدود می کنه.
    2. یکی دیگه از کلاسهای کش معروف پوکو هست که برای قفل هاش از موتوکس ها استفاده می کنه که باعث می شه خوندن افت کنه. در مقابل کلاس من از قفلهای ReadWrite استفاده می کنه که باعث می شه در حالت خوندن چندین نخ همزمان بتونن از کش بخونن.
    3. کلاس که نوشته شده از اشاره گر خالی بر نمی گردونه و از QSharedPointer ها استفاده می کنه که باعث می شه اگر نخی داده رو گرفت. و همزمان نخ دیگه اون داده رو منقضی کرد مشکلی پیش نیاد. در حقیقت داده ها تا زمانی که کار نخها باهاشون تموم نشده باقی می مونن و این باعث می شه خطاهای عجیب غریب پیش نیاد.
    4. شاید بگید چرا اشاره گر؟ چرا کپی داده رو بر نمی گردونی که اصلا مشکلی پیش نیاد. در حقیقت این روش به شدت رو مصرف حافظه می تونه تاثیر داشته باشه. فرض کنید شما 100 تا نخ دارین که داده 100 مگابایتی رو درخواست کردن. خب مشکلی که پیش میاد اینه شما اینجا 10 گیگ حافظه لازم دارین اما با این روش فقط همون 100 مگ حافظه مصرف می شه.

  4. #4

    نقل قول: کتابخانه PCore

    خیلی کار خوبی رو شروع کردی
    خسته نباشی
    امیدوارم بتونیم تو هرچه بهتر شدنش کمکت کنیم

قوانین ایجاد تاپیک در تالار

  • شما نمی توانید تاپیک جدید ایجاد کنید
  • شما نمی توانید به تاپیک ها پاسخ دهید
  • شما نمی توانید ضمیمه ارسال کنید
  • شما نمی توانید پاسخ هایتان را ویرایش کنید
  •