PDA

View Full Version : گفتگو: درخواست راهنمایی راجب شروع یک پروژه تقریبا حسابداری با کیوتی



winner1
یک شنبه 19 اردیبهشت 1395, 02:46 صبح
سلام خسته نباشین من از کیوتی اموزش اقای اسد زاده که تا مبحث شبکه بود رو خوندم میخوام بدونم من الان میتونم همچین پروژه ای که تازه بهم پیشنهاد داده شده (یک پروژه تقریبا حسابداری انبار داری) رو انجام بدوم یا هنوز زوده و باید فعلا مطالعه داشته باشم نسبت به سی پلاس و این پروژ رو با سی شارپ انجام بدم؟

ali_72
یک شنبه 19 اردیبهشت 1395, 07:25 صبح
سلام خسته نباشین من از کیوتی اموزش اقای اسد زاده که تا مبحث شبکه بود رو خوندم میخوام بدونم من الان میتونم همچین پروژه ای که تازه بهم پیشنهاد داده شده (یک پروژه تقریبا حسابداری انبار داری) رو انجام بدوم یا هنوز زوده و باید فعلا مطالعه داشته باشم نسبت به سی پلاس و این پروژ رو با سی شارپ انجام بدم؟

تجربه شخصی خودم
ی برنامه با دات نت نوشته بودم نیاز ب تحلیل برنامه نداشتم
چون ارتباط با سخت افزار داشتم دوست داشتم زبان برنامه نویسی برنامه م C++‎‎‎ باشه
و از کتابخونه های خوب Qt استفاده کنم و ی برنامه با کارایی بالا و سبک و خیلی حرفه ای تر از .net بنویسم
اما بعد از ماه ها وقت گذاشتن
کاربر نسخه دات نت رو ترجیح میده
ب چند دلیل:
1-سرعت برنامه م در خیلی از قسمت ها در دات نت بالاتره
2-در یک سری بخش ها با تحقیق و مطالعه هنوز ب نتیجه نرسیدم (در تمام فروم هایی ک میشناختم سوال پرسیدم) در نتیجه یه سری موارد در دات نت هست ک در نسخه جدید نیست
3-ی سری ضعف ها در نسخه دات نت بود ک قرار بود در نسخه جدید برطرف کنم ک موفق ب رفع اون نشدم

اینا ک گفتم منظورم ب هیچ وجه برتری دات نت ب Qt نیست
منظورم این بود ک نمیشه ب کاربر قول زمان و ی سری امکانات بدی (خدا رو شکر من قولی نداده بودم و کاربر نسخه دات نت انتخاب کرد و دردسری برا من نداشت و من میتونم هنوز رو پروژه م کار کنم) در صورتیکه هنوز خودت مسلط نیستی
البته نظر شخصی منه

pswin.pooya
یک شنبه 19 اردیبهشت 1395, 11:58 صبح
1-سرعت برنامه م در خیلی از قسمت ها در دات نت بالاتره

من فکر می کنم به برنامه نویسی بر می گرده. شما اگر C++ رو نتونید کنترل کنید سرعتش از هر چیز دیگه کندتر می شه. مثلا توی مورد شما می تونه:

1. کامپایل در مود debug باشه
2. نصب نبودن درست کارت گرافیک باشه (یکی از دوستان هم همین مورد رو داشت که بعدش ظاهرا حل شد)
3. استفاده بیش از حد و نامناسب از کدهای QML باشه. (که اصلا جریان QML به سی پلاس پلاس مربوط نیست)
4. ...

هرچند که QML در لحظه اول خیلی برای نوشتن برنامه ها جذاب به نظر میاد. اما کلا یه زبان اسکریپت هست و دقیقا پتانسیل مشابه دات نت رو داره. دلیل اصلی هم که دات نت کند هست همین ماشین مجازی اونه که QML هم همین مشکل رو داره. اگر شما میخوایین سرعت بالاتری داشته باشید برنامه های widget گزینه خیلی مناسبتری هستن.

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

winner1
یک شنبه 19 اردیبهشت 1395, 12:38 عصر
من فکر می کنم به برنامه نویسی بر می گرده. شما اگر C++‎ رو نتونید کنترل کنید سرعتش از هر چیز دیگه کندتر می شه. مثلا توی مورد شما می تونه:

1. کامپایل در مود debug باشه
2. نصب نبودن درست کارت گرافیک باشه (یکی از دوستان هم همین مورد رو داشت که بعدش ظاهرا حل شد)
3. استفاده بیش از حد و نامناسب از کدهای QML باشه. (که اصلا جریان QML به سی پلاس پلاس مربوط نیست)
4. ...

هرچند که QML در لحظه اول خیلی برای نوشتن برنامه ها جذاب به نظر میاد. اما کلا یه زبان اسکریپت هست و دقیقا پتانسیل مشابه دات نت رو داره. دلیل اصلی هم که دات نت کند هست همین ماشین مجازی اونه که QML هم همین مشکل رو داره. اگر شما میخوایین سرعت بالاتری داشته باشید برنامه های widget گزینه خیلی مناسبتری هستن.

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

ahmad.t1100
یک شنبه 19 اردیبهشت 1395, 13:32 عصر
بستگی به شما داره
اگه من قرار باشه یه برنامه صنعتی بنویسم که چند سکو باشه خوب صد در صد می رم سراغ پایتون و qt
اما اگه قرار برنامه شما روی ویندوز اجرا بشه و گزینه های ان چنانی هم نداره برو سراغ دات نت و اسکیوال سرور
در ضمن هزینه ایی هم که می خوان بهت پرداخت کنن در نظر بگیر .خخخ.باور کن پروژه های qt من دستمزدش 3 براره دات نته

winner1
یک شنبه 19 اردیبهشت 1395, 14:07 عصر
بستگی به شما داره
اگه من قرار باشه یه برنامه صنعتی بنویسم که چند سکو باشه خوب صد در صد می رم سراغ پایتون و qt
اما اگه قرار برنامه شما روی ویندوز اجرا بشه و گزینه های ان چنانی هم نداره برو سراغ دات نت و اسکیوال سرور
در ضمن هزینه ایی هم که می خوان بهت پرداخت کنن در نظر بگیر .خخخ.باور کن پروژه های qt من دستمزدش 3 براره دات نته
کار واسه توزیع عمدست یعنی دست خودمه انحصاری نیست میخوایم تو سطح کلی توزیع کنیم حاا نسبت به این بنظرت دات نت بهتره یا کیوت؟

ali_72
یک شنبه 19 اردیبهشت 1395, 14:42 عصر
3. استفاده بیش از حد و نامناسب از کدهای QML باشه. (که اصلا جریان QML به سی پلاس پلاس مربوط نیست)
[/QUOTE]

بریای طراحی رابط کاربری فقط از QML استفاده کردم
هر امکاناتی QML بهم داد رو استفاده کردم اگه یه کار با QML نشد رفتم سراغه C++‎‎‎
debug ک در حالت release انجام دادم بازم اونی نشد ک میخواستم
پایگاه داده من فایلهای متنی هست (xml)
انیمیشن خاصی هم ندارم
اصلا کد C++‎‎‎ خاصی هم ندارم :لبخند:
ی سری پراپرتی برای بایند اطلاعات سمت qml
کار با فایل های متنی
ارتباط با پورت سریال (سرعت تبادل اطلاعات این یکی خیلی بیشتر از دات نته :لبخند:)
سیستمم سخت افزار خوبی داره corei7 - ram 8 - vga 4
همه درایورهام نصبه و اپدیته

ممنون میشم اون مورد 4 رو بیشتر توضیح بدید

negative60
یک شنبه 19 اردیبهشت 1395, 17:17 عصر
پایگاه داده من فایلهای متنی هست (xml)

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

۱.یا لود کردن فایل رو به صورت اسینکرون انجام بدید

۲.یا از قبل فایل دیتابیس رو لود کنید

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


پروژه ای که تازه بهم پیشنهاد داده شده (یک پروژه تقریبا حسابداری انبار داری) رو انجام بدوم یا هنوز زوده و باید فعلا مطالعه داشته باشم نسبت به سی پلاس و این پروژ رو با سی شارپ انجام بدم؟


اگر هیچ تجربی با ++c در این زمینه ندارید و اگر مشکل زمان دارید این کار رو با ++c انجام ندید بهتره یکبار یک پروژه کامل دیتابیسی رو به عنوان تمرین انجام بدید

pswin.pooya
یک شنبه 19 اردیبهشت 1395, 22:28 عصر
پایگاه داده من فایلهای متنی هست (xml)

جریان xml کیوت یه مقدار فرق می کنه. اکثر ریدرهای xml استاندارد نیستن و توی موارد نادر ایراد می دن کیوت یکی از تک کتابخونه هایی هست که از xml به صورت استاندارد پشتیبانی می کنه. اگر خوندن و نوشتن xml کند هست می تونید از کتابخونه های دیگه استفاده کنید.


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

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


متاسفانه برنامه نویسی C++‎‎‎‎‎‎‎‎‎ این موارد رو داره. شما باید خیلی دقت کنید. و ابزارهای زیادی استفاده کنید تا موارد این چنینی رو پیدا کنید. من در حال حاضر دارم یک کتابخونه متن باز برای کیوت می نویسم که یکی از کلاسهای اون Profiler هست کار این کلاس اندازه گیری سرعت هر متد و یا بلوک خاص از برنامه هست. البته موارد دیگه مثل لوگر و فایل zip و ... هم قراره داشته باشه. در حال یکسری کلاسها آماده هستن و دارم یه کلاس می نویسم که امکانات سیستم و ... رو می گیره. (متاسفانه سمت ویندوز خیلی اذیتم کرده و تا حالا شاید نزدیک 2000 خط کد برای اینکار زده باشم. متاسفانه API ویندوز همیشه درست کار نمی کنه)


یه مورد دیگه هم که الان یادم افتاد اینه که برای نگهداری داده از چه نوع کانتاینری استفاده می کنید؟ و یا کلاس. مثلا خیلی ها به اشتباه فکر می کنن کانتاینر QMap کند هست با اینکه بعد از شاید 100 تا رکورد سرعت بیشتر باشه این کانتاینر یک میلیون داده رو می تونه با 36 مقایسه پیدا کنه. و خیلی ها به اشتباه از QVector و ... استفاده می کنند. من حتی خونده بودم سرعت QList هم از QVector بیشتره.

در حالت کلی اگر QML رو کنار بزاریم و لک سرعت شما توی QML زیاد نباشه. بعید می دونم برنامه شما کندتر باشه. یعنی به محل نزدیکتر هست. من خودم یه برنامه داشتم که با دات نت حداقل 50 درصد پردازنده رو اشغال می کرد همون برنامه رو بهش پردازش تصویر و هزار چیز دیگه هم اضافه کردم و با کیوت حتی 2 درصد هم اشغال نکرده بود. یعنی اگر پردازش تصویر نداشتم میزان اشغال CPU تقریبا صفر بود.

pswin.pooya
یک شنبه 19 اردیبهشت 1395, 22:29 عصر
و جواب سوال من؟ طبق تجربه؟

به نظر من به حرفهای دوست خوبم negative60 گوش کن.

آخ آخ یه مورد دیگه یادم رفت بگم و اون استاندارد IEE 754 هست که باعث می شه ساخت برنامه حسابداری یکم پیچیده بشه. اگر به اینجور موارد وارد نباشید شکست بدی می خورید.

ali_72
دوشنبه 20 اردیبهشت 1395, 07:39 صبح
جریان xml کیوت یه مقدار فرق می کنه. اکثر ریدرهای xml استاندارد نیستن و توی موارد نادر ایراد می دن کیوت یکی از تک کتابخونه هایی هست که از xml به صورت استاندارد پشتیبانی می کنه. اگر خوندن و نوشتن xml کند هست می تونید از کتابخونه های دیگه استفاده کنید.


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

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


متاسفانه برنامه نویسی C++‎‎‎‎‎‎‎‎‎‎‎‎‎ این موارد رو داره. شما باید خیلی دقت کنید. و ابزارهای زیادی استفاده کنید تا موارد این چنینی رو پیدا کنید. من در حال حاضر دارم یک کتابخونه متن باز برای کیوت می نویسم که یکی از کلاسهای اون Profiler هست کار این کلاس اندازه گیری سرعت هر متد و یا بلوک خاص از برنامه هست. البته موارد دیگه مثل لوگر و فایل zip و ... هم قراره داشته باشه. در حال یکسری کلاسها آماده هستن و دارم یه کلاس می نویسم که امکانات سیستم و ... رو می گیره. (متاسفانه سمت ویندوز خیلی اذیتم کرده و تا حالا شاید نزدیک 2000 خط کد برای اینکار زده باشم. متاسفانه API ویندوز همیشه درست کار نمی کنه)


یه مورد دیگه هم که الان یادم افتاد اینه که برای نگهداری داده از چه نوع کانتاینری استفاده می کنید؟ و یا کلاس. مثلا خیلی ها به اشتباه فکر می کنن کانتاینر QMap کند هست با اینکه بعد از شاید 100 تا رکورد سرعت بیشتر باشه این کانتاینر یک میلیون داده رو می تونه با 36 مقایسه پیدا کنه. و خیلی ها به اشتباه از QVector و ... استفاده می کنند. من حتی خونده بودم سرعت QList هم از QVector بیشتره.

در حالت کلی اگر QML رو کنار بزاریم و لک سرعت شما توی QML زیاد نباشه. بعید می دونم برنامه شما کندتر باشه. یعنی به محل نزدیکتر هست. من خودم یه برنامه داشتم که با دات نت حداقل 50 درصد پردازنده رو اشغال می کرد همون برنامه رو بهش پردازش تصویر و هزار چیز دیگه هم اضافه کردم و با کیوت حتی 2 درصد هم اشغال نکرده بود. یعنی اگر پردازش تصویر نداشتم میزان اشغال CPU تقریبا صفر بود.

خیلی ممنونم استاد عزیز بابت این همه راهنمایی و توضیح خوبتون
بله ی نکته + نسخه جدید نرم افزار اینه ک نسخه دات نت میزان زیادی cpu رو درگیر میکرد (همون حدود 50 درصد) ولی این نسخه جدید این مشکل رو فعلا نداشته.
برنامه من در لود اولیه برنامه و باز کردن فایل های xml و در حرکت بین صفحات از .net کندتر هست. ک طبق صحبت شما و دوست عزیز
negative60 (http://barnamenevis.org/member.php?311130-negative60)
باید ب خاطر کار با فایل های xml باشه.

pswin.pooya
دوشنبه 20 اردیبهشت 1395, 12:16 عصر
برنامه من در لود اولیه برنامه و باز کردن فایل های xml و در حرکت بین صفحات از .net کندتر هست. ک طبق صحبت شما و دوست عزیز

خواهش می کنم. برای پایگاه داده می تونید از sqllite استفاده بکنید و یا اینکه اگر می خوایید از xml استفاده کنید می تونید از کتابخونه های سبکتر استفاده کنید. با این حال چون مربوط به IO هست. نباید سرعت فرق کنه. (بین دات نت و کیوت) یا حداقل در سطح چشم گیر. هنوز برای من خیلی جالب هست که چرا سرعت کندتره.

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


من خودم تست نکردم اما می تونی از کامپایلر jit کیوت هم استفاده کنی که سرعت کد اسکریپت رو نزدیک کد C++‎ می کنه. این روش کاربرد خیلی زیادی داره مخصوصا جاهایی که سرعت لازمه

http://doc.qt.io/QtQuickCompiler/

SirErfan
یک شنبه 16 خرداد 1395, 10:40 صبح
هرچند که QML در لحظه اول خیلی برای نوشتن برنامه ها جذاب به نظر میاد. اما کلا یه زبان اسکریپت هست و دقیقا پتانسیل مشابه دات نت رو داره. دلیل اصلی هم که دات نت کند هست همین ماشین مجازی اونه که QML هم همین مشکل رو داره. اگر شما میخوایین سرعت بالاتری داشته باشید برنامه های widget گزینه خیلی مناسبتری هستن.
البته اینم اضافه کنم که این مقدار تاخیر برای برنامه های پایگاه داده ای اوکی هست. مگر اینکه کلاینت اونها انمیشن زیاد بخواد و سرعت بالا نیاز داشته باشه.
سلام ، میشه واضحتر بگین مشکل QML چیه ؟ یه زبان اسکریپتی هستش که به برنامه جون میده و اگه تو کیوت رابط کاربری برنامه رو باهاش طراحی کنی نه بیشتر واقعا UI فوق العاده جذاب و محشری رو میتونی باهاش طراحی کنی ! در حد HTML و CSS دست برنامه نویس رو باز میکنه واسه پیاده سازی UI من که برام خیلی جذابیت داره ،شما گفتین Widget گزینه مناسبتری هستش میشه دلیلش رو بگین ؟؟
ممنون

pswin.pooya
یک شنبه 16 خرداد 1395, 11:47 صبح
سلام ، میشه واضحتر بگین مشکل QML چیه ؟ یه زبان اسکریپتی هستش که به برنامه جون میده و اگه تو کیوت رابط کاربری برنامه رو باهاش طراحی کنی نه بیشتر واقعا UI فوق العاده جذاب و محشری رو میتونی باهاش طراحی کنی ! در حد HTML و CSS دست برنامه نویس رو باز میکنه واسه پیاده سازی UI من که برام خیلی جذابیت داره ،شما گفتین Widget گزینه مناسبتری هستش میشه دلیلش رو بگین ؟؟

1. کاربر برنامه های کاربردی به صورت روزانه با اونها کار می کنه و در نتیجه جذابیت ظاهری بیشتر از یه مدت نمی تونه اونها رو جذب کنه.
2. کاربرهای برنامه های کاربردی وقتی با برنامه ای کار می کنن انتظار دارن که با حداکثر سرعت ممکن کارشون انجام شه و حتی تاخیرهای در حد یک ثانیه هم می تونه براشون آزار دهنده باشه.
3. معمولا سیستم های اداری به روز نیستن و قدیمی بودن سیستم ها می تونه روی سرعت تاثیر زیادی داشته باشه.
4. معمولا سیستم های اداری درست کانفیگ نمی شن (مثلا کارت گرافیک اونها نصب نیست) و این می تونه بر روی عملکرد QML که با OpenGL کار می کنه (یا با یه درایور تحت پردازنده که درست اسمش درست یادم نیست) تاثیر زیادی بزاره.

کلا اگر سرعت براتون مهم نیست می تونید برنامه رو با سی شارپ یا حتی تحت وب بنویسید. چون در سطح یه برنامه مثل حسابداری چیز خاصی از دست نمی دین. (منظورم امکانات سی پلاس هست) و وقت طراحی برنامه این قانون یادتون باشه که برنامه ها برای سریعتر کردن کارها هستن نه کندتر کردن کارها. به عنوان مثال اگر برنامه ای نوشتید که باعث شد عملیات کاربر از چیزی که روی کاغذ انجام می ده کندتر بشه (یا حتی پیچیده تر) بدونید که یه جای کار رو اشتباه کردید و برنامه شما ایراد داره.