تولید کننده آموزش و محصولات مبتنی بر برنامه نویسی مدرن

هزار و یک نکته در سی پلاس پلاس نکته چهارم ( چرا نباید از Singleton استفاده کنیم ؟)

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

  1. آنها معمولا به عنوان شی گلوبال در نظر گرفته می‌شوند. بدی انها این است که وابستگی‌های کد را بجای افشا کردن در اینترفیس در کد مخفی می‌کنند. گلوبال کردن یک شی برای ارسال نکردن آن به اطراف یک بوی بد کد است .
  2. آن‌ها اصل مسئولیت واحد را زیر پا می‌گذارند. چون علاوه بر کار اصلی خود ساخت خود و مدیریت چرخه حیاط خود را نیز در دست دارند.
  3. آنها به شدت Coupling را بالا می‌برند و این باعث سختی تست آنها می‌شود.
  4. آنها طول عمر نرم‌افزار را در اختیار دارند و این برای یونیت تست که باید یک وضعیت به طور کامل خاتمه پیدا کند یک مشکل اساسی است چون باید هر واحد تست کاملا جدا از واحد‌های دیگر باشد. به همین دلیل برای یونیت تست به هیچ وجه نباید از سینگلتون استفاده کرد.

نظر شما در این مورد چیست ؟

۱۸ شهریور ۹۷ ، ۰۰:۰۰ ۱ نظر موافقین ۱ مخالفین ۰
بهنام صباغی

هزار و یک نکته در سی پلاس پلاس نکته سوم (کلمه کلیدی noreturn)

کلمه کلیدی noreturn برای مشخص کردن این نکته که تابع مقداری به صدا زننده باز نمیگرداند استفاده می‌شود. دقت کنید باز نگرداندن مقدار با برگرداندن مقدار void تفاوت دارد. این کلمه کلیدی برای توابعی که هیچ مقداری به صدا زننده فراخوانی نمی‌کنند استفاده می‌شود. ( مانند توابعی که برنامه را می‌بندند یا توابعی که حاوی حلقه بینهایت هستند یا توابعی که throw exceptions می‌کنند.

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

f();

g();

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

مثال استفاده :

 

۰۹ شهریور ۹۷ ، ۱۲:۰۳ ۰ نظر موافقین ۰ مخالفین ۰
بهنام صباغی

بررسی پرفورمنس ایتم سفارشی برای QML

با سلام در این پست قصد دارم توضیحی در مورد QtQuick Custom Item Performance بدم و بعد نقدی بر روش استفاده از ساخت ایتم از سی پلاس پلاس برای کیو ام ال داشته باشم .

در این پست توضیح داده که اگر بخوایم یک ایتم کاستوم بکشیم سه راه پیش رو داریم و بعد به روش های زیر اشاره کرده :

  1. کشیدن با استفاده از اوپن جی ال و QQuickItem ( یا استفاده از یک ایتم داخلی )

  2. کشیدن با استفاده از QPainter و QQuickPaintedItem

  3. کشیدن با canvas

ادامه مطلب...
۰۱ شهریور ۹۷ ، ۰۱:۳۳ ۲ نظر موافقین ۱ مخالفین ۰
بهنام صباغی

دیپلوی گرافیکی وابستگی‌های برنامه Qt Quick

QLD یک ابزار گرفیکی برای تهیه موارد مورد نیاز برای خروجی برنامه‌های QtQuick بر روی پلتفرم لینوکس است برنامه مشابه برای ویندوز و البته به صورت کنسولی که توسط خود کیوت توسعه یافته Windeployqt می‌باشد.

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

این ابزار توسط شهریار رزقی توسعه یافته است .

لینک گیتهاب ابزار QLD

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

۲۰ مرداد ۹۷ ، ۲۳:۰۲ ۱ نظر موافقین ۰ مخالفین ۰
بهنام صباغی

استفاده از Qt یا برنامه نویسی نیتیو برای موبایل

با سلام

با توجه به سوالات پیاپی دوستان در مورد برنامه نویسی توسط کیوت برای موبایل بهتر دونستم یک پست به این منظور منتشر کنم .

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

حالا که یک توضیح کلی از فریمورک کیوت داریم بهتره بررسی کنیم که آیا برنامه نویسی برای موبایل با کیوت بهتر هست یا برنامه نویسی با زبان نیتیو برای این منظور باید چندین فاکتور رو در نظر بگیریم

  • حجم خروجی که اگر در اندروید بررسی کنیم حجم خروجی یک اپ کیوت کمترین حجمش از 8 و خورده ای مگ شروع میشه که نسبت به اپ نیتیو یک مقدار بالاتر هست که البته با این حجم از اینترنت که این روزها توی ایران مصرف میشه این حجم دیگه بالا نیست .
  • از مشکلات دیگه ای که میتونه سر راه باشه برای برنامه نویسی با کیوت زبان سی پلاس پلاس هست که شاید توی کارهای خیلی سبک به مشکلی باهاش نخورید و لی در واقع توی سطح حرفه ای کار هر کسی نیست کار کردن با این زبان و باید توان و انرژی زیادی برای یاد گیری این زبان به صورت حرفه ای بگذارید وگرنه خروجی که میدید ممکنه براتون مشکلاتی ایجاد کنه که کمترینش میتونه نشت حافظه باشه البته اگر برنامه نویس زبان هایی بغیر سی و سی پلاس پلاس باشید احتمالا آشنایی زیادی باهاش ندارید کوتاه میتونم براتون بگم نشت حافظه یعنی مقداری از فضای رم گرفته میشه ولی آزاد نمیشه و این در طول زمان میتونه مشکل ساز باشه و این در صورتی پیش میاد که شما برنامه نویسی سی پلاس پلاس رو درست بلد نباشید و با سطح مبتدی یا متوسط برنامه نویسی کرده باشید که البته اشاره گر های هوشمند این مشکل رو تا حد خیلی خوبی حل کردند که البته استفاده از خود اونها هم نیاز به دانش سطح حرفه ای توی سی پلاس پلاس داره وگرنه ممکنه با اشاره گر های هوشمند هم باز نشت حافظه داشته باشید.
  • نکته دیگه ای که لازم هست بدونید این هست که برای استفاده از یک سری سرویس های اندروید مثل نوتیکیشن و ... نیاز هست کد جاوا توی پروژه سی پلاس پلاستون بزنید و با استفاده از JNI از اون استفاده کنید یعنی نیاز هست یک مقدار آشنایی با جاوا برای هندل کردن این قسمت داشته باشید .

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

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

  • استفاده از زبان طراحی فوق عالی QML که میتونید به راحتی باهاش ارتباط بر قرار کنید و طراحی های فوق حرفه ای UI رو در کمترین زمان ممکن و با بالاترین کیفیت ممکن ایجاد کنید .
  • پشتیبانی سی پلاس پلاس باعث میشه که شما برای کارهای خاص کتابخنه های از پیش آماده و پایداری داشته باشید که میتونند دنیا رو براتون قشنگ تر بکنند از جمله پردازش صدا و تصویر و ...
  • استفاده از کیوت باعث میشه کمی کد اضافه تر و البته بدون دست بردن توی هسته برنامه اصلی خروجی روی دیگر پلتفرم ها از جمله IOS رو بتونید بگیرید یعنی با هزینه خیلی کمتر نسبت به توسعه نیتیو جداگانه هر پلتفرم میتونید به کار ادامه بدید .
  • جمع شدن این همه کتابخانه در موضوعات عام و خاص باعث شده توی کارهای حرفه ای تر اصلا لنگ پیدا کردن کتابخانه نمونید تا حدی که بعضی از همین ماژول های کیوت توی سطح حرفه ای شاخه خودش پرکاربرد ترین هست .
  • پرفورمنس بالا به دلیل استفاده از سی پلاس پلاس که میتونه توی کارهای خاص مثل مثلا هوش مصنوعی و پردازش های گرافیکی و همینطور پردازش های محاسباتی به کمکتون بیاد .
  • جامعه کاربری فعال که بیشتر سوالات قبلا توش پاسخ داده شده و با یک جستجو میشه به جواب رسید و اگر هم جوابی نباشه میتونید با پرسیدن در کوتاه ترین زمان به پاسخ سوال دسترسی پیدا کنید .
  • مثال های فراوان خود کیوت و جامعه کاربری و همینطور پروژه های واقعی بسیار زیاد اوپن سورس که باعث میشه همیشه برای کاری که میخواید انجام بدید مثالی در دسترس داشته باشید .
  • داکیومنت فوق العاده برای استفاده از کتابخانه های مختلف فریمورک و البته مثال هایی در خلال توضیحات که به فهم هرچه بیشتر روند کارکرد کتابخانه کمک خواهند کرد .

و البته خوبی های دیگه ای که شاید الان من حضور ذهن ندارم بهشون اشاره کنم .

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

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

توسعه اپ هایی مثل انتی ویروس و ... که پردازش و کار با فایل زیاد دارند یا اکثر بازی ها که پردازش سه بعدی و گرافیکی دارند و همینطور اپ های هوش مصنوعی دار و ... همیشه بهتر هست با سی پلاس پلاس انجام بشه .

این نظرات شخصی و البه با توجه به تجربه بنده هست ممنون میشم بقیه دوستان هم نظراتشون رو منتشر کنند .

علی یارتون

۱۲ تیر ۹۷ ، ۱۵:۱۹ ۴ نظر موافقین ۰ مخالفین ۰
بهنام صباغی

اطلاعات زیاد کم ارزش یا اطلاعات کم پر ارزش

خب طبق معمول خیلی وقت ندارم ولی این عنوان رو دیدم توی دیجیاتو نتونستم ساکت بمونم

بازیکنی که روزانه ۱۲ ساعت پای Quiz of Kings می‌گذراند: کاملا ارزشش را داشت

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

خب اصلا به این که چقدر گرفته دیجیاتو که این تبلیغ محض رو بدون درج [رپورتاژ آگهی] توی عنوانش بذاره ولی از کنار این نتونستم بگذرم که به ملت توهم دانایی میدند با سوال و جواب های بی سر و ته و مسخره که توی هیچ مرحله ای از زندگی افراد به دردشون نمیخوره در واقع روی سوال و جواب و بالا بردن آگاهی تبلیغ میکنند ولی روز به روی مردم رو از مطالعه درست درمون در راستای یک هدف خاص و ارتقاع شخصیتی دور میکنند .

تمام اپ های این دسته چه بازی کلمات باشند چه پرسش و پاسخ ب چندین دلیل اصلا محتوای بدرد بخوری ندارند

  1. اول این که اینها عامه پسند هستند و سعی میکنند همه افراد از همه اقشار جامعه رو جذب کنند پس نمیتونند وارد مباحث سنگین بشند
  2. دلیل دیگه این هست که اینها میخواند مردم حس دانایی بکنند و قطعا کسی حاضر نمیشه بازی که سوالات و محتوای سنگین داره رو بازی کنه و مدام شکست بخوره پس سوالات آبکی میشند و بدون محتوا تا حس قدرت به افراد دست بده
  3. ابن بازی ها طراحی حداقلی دارند یعنی این که نمیشه توی یه سوال تست که باید توی زمان مشخص جواب داده بشه یک مبحث مهم و بزرگ و چالشی رو عنوان کرد چون کاربر ها توقع دارند با گزینه های مقابل هم روبرو بشند تا بتونند جواب رو پیدا کنند
  4. و در آخر اگر یک قدم عقب تر بریم حتی اگر فرض کنیم کاربر داره این مسائل رو یاد میگیره و یک مجموعه بزرگ از سوال و جواب های این چنینی هست بازم کمکی به کسی نمیکنه یعنی دونستن همه سوالات و جواب های مسخره و عمومی این بازی ها کمکی به فرد در زندگی نمیکنه نه از نظر شخصیتی نه از نظر موقعیت شغلی و اقتصادی اینها صرفا دارند افراد رو درگیر میکنند تا از مسیر باز بمونند

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

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

۰۹ تیر ۹۷ ، ۱۳:۳۲ ۰ نظر موافقین ۱ مخالفین ۰
بهنام صباغی

علف هرز

بچه که بودم وقت آزادم از درس رو توی گلخونه بابام مشغول بودم همیشه علف های هرز رو از خاک بیرون میکشیدیم و دور مینداختیم من اوایل درست نمیتونستم علف هرز رو از گل تشخیص بدم چون هردوتا گیاه بودند و سبز رنگ شناختشون مهارتی میخواست که شاید توقع داشتن اون مهارت از یه بچه زیاد باشه برای همین بعد از کلی تلاش که سعی میکردند از راه نشون دادن علف و گل بهم تفاوتهاشون رو بفهمونند آخرش میگفتند اونی که وسط گلدونه و از همه بزرگتره گله بقیه علف هرزند ولی مشکل اینجا بود که همیشه اینطوری نبود یعنی بعضی وقتا گله دقیقا وسط نبود یا بعضی وقتا یکی از این علف ها انقدر خوشگل بود و بزرگ که آدم دلش نمیاومد اون رو از خاک بیرون بکشه معمولا من گل و بقیه علف ها رو میکندم و علف بزرگه رو میذاشتم بمونه و البته کلیم سر این کارهام دعوام کرد بابام 🤣
یکم که بزرگ تر شدم دیگه میتونستم تشخیص بدم ولی هنوز به علف های هرز امید داشتم یروز یکیشون رو که از خاک بیرون اورده بودم تمیز شستم و توی یه گلدون جدا کاشتم و گذاشتمش یه جایی که کسی نبینه بعد یه مدت جون گرفت اوردم نشون بابام دادم بهم گفت
-‏ این به درد نمیخوره کسی حاضر نیست اینو بخره توی خونش نگهداری کنه
درکش برام سخت بود ولی باهاش کنار اومدم بعدها یه وقتایی بوته گوجه توی گلدون ها در میومد و باید با اونها هم مثل علف هرز برخورد میکردیم یعنی باید میکندیم مینداختیم دور ولی دیگه برام سخت نبود چون فهمیده بودم هر چیزی جایی داره جای گوجه توی گلدون گل نیست همینطور جای علف هرز هم توی گلدون نیست
از اونجا یاد گرفتم اگر جایگاهم رو نشناسم و توی یه جایگاه درست قرار نگیرم فرقی نمیکنه به اندازه بوته گوجه مفید باشم یا اندازه علف هرز به هر حال باهام برخوردی که باید نمیشه .

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

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

۰۱ تیر ۹۷ ، ۱۴:۰۰ ۱ نظر موافقین ۰ مخالفین ۰
بهنام صباغی

ارزش کار

ارزش کار به چیست ؟

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

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

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

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

ادامه مطلب...
۱۹ خرداد ۹۷ ، ۱۶:۲۳ ۰ نظر موافقین ۰ مخالفین ۰
بهنام صباغی

بهترین توسعه دهنده

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

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

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

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

یک عده تعداد ریپوزتوری های گیتهاب رو عامل بهترین شدن می‌دونند .

یک عده این که تا اخر عمر فقط با یک زبان و تکنولوژی توی یک حوزه کار کنی رو نشان حرفه ای شدن می‌دونند .

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

 

ادامه مطلب...
۱۷ خرداد ۹۷ ، ۲۲:۴۲ ۰ نظر موافقین ۱ مخالفین ۰
بهنام صباغی

بهترین زبان دنیا

بعضی وقتا دوستان عنوان می‌کنند زبان پی اچ پی بهترین زبان دنیاست یا هر زبان دیگه‌ای رو عنوان میکنند بهترین زبان دنیاست .

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

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

من توی این پست میخوام در مورد حوزه هایی که توشون کار کردم یا دوست دارم کار کنم و یا در موردشون تحقیق کردم و با افرادی که در اون حوزه کار میکردند آشنا هستم صحبت کنم .

ادامه مطلب...
۱۶ خرداد ۹۷ ، ۱۵:۱۸ ۱ نظر موافقین ۱ مخالفین ۰
بهنام صباغی