رفتن به مطلب
جامعه‌ی برنامه‌نویسان مُدرن ایران

بهنام صباغی

مدیران مرجع
  • تعداد ارسال ها

    54
  • تاریخ عضویت

  • آخرین بازدید

  • روز های برد

    17

آخرین بار برد بهنام صباغی در 8 آذر

بهنام صباغی یکی از رکورد داران بیشترین تعداد پسند مطالب است !

اعتبار در سایت

51 عالی

2 دنبال کننده

درباره بهنام صباغی

توسعه‌ دهنده بَک اِند
توسعه‌ دهنده فرانت اِند
میانجی گر‌ها
  • تاریخ تولد 12 مهر 1374

اطلاعات شبکه‌ای

موقعیت

  • شهر
    محلات

آخرین بازدید کنندگان نمایه

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

  1. بهنام صباغی

    سلام این پروژه رو دو سال پیش نوشتم یه نگاه بندازید برای اسکرول میتونید ببینید : GitHub - FONQRI/AndroidBookQmlSimple: This is a simple android book that i developed it by Qt framework and QML language but it's not so Principles. این تیکه کد هم برای اضافه کردن داینامیک هست میتونید توی دلیگیت محتوای متفاوتی رو توی هر صفحه با توجه به ایندکسش لود کنید : import QtQuick 2.9 import QtQuick.Window 2.2 import QtQuick.Controls 2.2 Window { visible: true width: 640 height: 480 title: qsTr("Hello World") id: root SwipeView { id: view anchors.fill: parent currentIndex: 1 height: parent.height - but.height width: parent.width contentItem: ListView { id: list model: 1 delegate: Page { background: Rectangle { color: index % 2 ? "yellow" : "blue" } Label { text: "Page1" anchors.centerIn: parent } } snapMode: ListView.SnapOneItem orientation: ListView.Horizontal } } Button { id: but text: "create" onClicked: { list.model++ indicator.count = list.model indicator.currentIndex = view.currentIndex indicator.update() } anchors.horizontalCenter: parent.horizontalCenter } PageIndicator { id: indicator count: view.count currentIndex: view.currentIndex anchors.bottom: view.bottom anchors.horizontalCenter: parent.horizontalCenter } } موفق باشید.
  2. بهنام صباغی

    -pipe
  3. بهنام صباغی

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

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

    با سلام من پروژه اولی که دور کاری کردم با پست قرارداد برام ارسال شد. پروژه دوم مدیر پروژه بودم و با کسی که میخواست قرارداد رو به صورت دورکاری بنویسه به صورت حضوری قرارداد بستیم. یعنی نشتیم دور هم یک روز نیازمندی های پروژه رو دقیق مشخص کردیم و مکتوبش کردیم و بعد قرارداد امضا شد. البته بیش از یک روز نیاز هست ولی ما قبلش یک سری صحبت های اولیه کرده بودیم.
  6. سلام من پیشنهاد میکنم از orm استفاده کنی . GitHub - lklacar/python-csvorm: Python CSV ORM اینم یه نمونش .
  7. بهنام صباغی

    تا حدودی هیچ کدوم در واقع کد خوب کدیه که خیلی کامنت نداشته باشه و خیلی توش حلقه فور نبینی البته این نظر حاج خانم کیت گرگوری هست که به گفته خودش از وقتی کد سی پلاس پلاس میزده که اصلا مایکروسافت کامپایلر سی پلاس پلاس نداشته. من دوره سی پلاس پلاس مدرنش رو دیدم تاکید میکرد که هی فرت و فرت کامنت نذارید. عقیدش اینه که اگر کسی داره کد رو میخونه و قراه بفهمه اول این که باید برنامه نویس باشه و این خودش تا مراحلی کار رو پیش میبره دوم این که مدام از فور استفاده نشده و تا جای ممکن از توابع معن‌یدار استفاده بشه مثلا از توابع سرفایل Algorithm خیلی استفاده می‌کرد که تا حد خوبی پوشش میده مسائلی که براشون فور میزنیم رو و نکته دیگه این که میگفت مثلا اگر داری یه کاری میکنی که نیاز به کامنت داره عنوان کارت رو بکن نام تابع و این کار رو توی اون تابع انجام بده البته اینو مطمئن نیستم ایشون گفته باشه ولی در کل توی تمیز نویسی تاکید بر اینه . تا جای ممکن باید کامنت توی کد کم باشه و باز به قول ایشون کد خودش باید گویا باشه و باهات حرف بزنه مثلا برای این مثالی که شما فرستادید میشه خیلی راحت بجای پیاده کردن این تابع از تابع std::sort استفاده کرد بجای این که خودمون پیاده کنیم. میدونم این مثال هست برای کامنت ولی نمیشه روی یه مثال کوچیک توضیح داد و تعمیم داد به برنامه های بزرگ باید کل برنامه دیده بشه . توی کدهای واقعی فقط جایی که خیلی خیلی پیچیده هستند باید یک توضیح کوتاه داده بشه و اگر داره استانداردی پیاده میشه یا علمی پیاده میشه که جدای از برنامه نویسیه مثل شبکه و یا ... بهتره فقط لینک به موضوع داده بشه و اگر جایی پیچیدگی برنامه نویسی داره یه کامنت کافیه براش من خودم به شخصه وقتی یه کد پر کامنت میبینم به همون اندازه ناراحت میشم که یه کد بی کامنت میبینم چون حقیقتا حال ندارم این همه کامنت رو بخونم ترجیه میدم کد رو بخونم تا متوجه موضوع بشم. چون کد کاری هست که داره انجام میشه ولی کامنت چیزیه که برنامه نویس دوست داشته پیاده کنه
  8. بهنام صباغی

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

    سلام اون مقدار بازگشتی تابع به چه معنی هست ؟ این توی هیچ کدوم از مثال ها مشخص نیستو توی گایدلاین سی پلاس پلاس ترجیه بر این گذاشته شده که وقتی داری خروجی میدی نام تایپت مشخص کننده باشه من الان هیچ چیزی به ذهنم نمیرسه وقتی اینو میبینم. برای مثال هم این مورد رو نوشته : class Date { // ... public: Month month() const; // do int month(); // don't // ... میتونید برای خوندن موارد دیگه برای کد نویسی بهتر و اصولی‌تر نگاهی بهش بندازید: C++ Core Guidelines در مورد بالا و پایین گذاشتن اون تایپ‌ها هم نکته ای که هست اینه که بهتره از کد مدل استفاده کنید استایل ها متفاوت هست و هرکدوم یک شکل کار می‌کنند. مثلا یکیشون در نظر میگیره که ول صفحه ای که بشه کد رو بدون اسکرول افقی توش دید باید 80 کاراکتر باشه و بعد اگر طولانی بشه میکشنه خودش مثلا تعریف تابع رو به تعداد خطوط بیشتر.
  10. بهنام صباغی

    من همین الان کدت رو بدون تغییر با openmp تست کردم زمان شگفت انگیز شد : real 0m6.534s user 0m49.599s sys 0m0.255s یعنی حدودا 6 ثانیه و نیم راضی هستی یا بهترش کنم ؟ ^_^ این هم کد که البته تغییری نکرده فقط سه خط ماکرو برای openmp اضافه شده : #include <array> #include <chrono> #include <functional> #include <iostream> #include <random> #include <utility> const unsigned int MAX_LENGTH = 100000; bool Compare(unsigned int FirstVariable, unsigned int SecondVariable) { if (FirstVariable < SecondVariable) return true; return false; } void SortArray(std::array<unsigned int, MAX_LENGTH> &MyArray, std::function<bool(unsigned int, unsigned int)> function) { #pragma omp parallel for for (unsigned int index = 0; index < MAX_LENGTH; ++index) { #pragma omp parallel for for (unsigned int AnotherIndex = 0; AnotherIndex < MAX_LENGTH; ++AnotherIndex) { if (function(MyArray[index], MyArray[AnotherIndex])) { std::swap(MyArray[index], MyArray[AnotherIndex]); } } } } void PrintArrayElements(const std::array<unsigned int, MAX_LENGTH> &MyArray) { for (const auto &item : MyArray) std::cout << item << std::endl; } void RandomizeArray(std::array<unsigned int, MAX_LENGTH> &MyArray) { std::mt19937_64 Random(static_cast<int>( std::chrono::high_resolution_clock::now().time_since_epoch().count())); std::uniform_int_distribution<> RandomGenerator(0, 1000); #pragma omp parallel for for (unsigned int index = 0; index < MAX_LENGTH; ++index) MyArray[index] = static_cast<unsigned int>(RandomGenerator(Random)); } int main() { std::array<unsigned int, MAX_LENGTH> MyOrginalArray; RandomizeArray(MyOrginalArray); SortArray(MyOrginalArray, Compare); PrintArrayElements(MyOrginalArray); return 0x0000; }
  11. بهنام صباغی

    اره دیگه اگر صرف زمان مهم بود کتابخونه معرفی میکردم که با پارالل کردن فور بدون تغییر زیاد توی کد بتونی سرعتت رو خیلی زیاد کنی مثلا استفاده از openmp میتونه خیلی کمک کنه
  12. بهنام صباغی

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

    سلام بر حاج قاسم با تست اول به طور طبیعی روی لینوکس و لپتاپ خودم با کامپایلر g++-8 خروجی شد : 315 ثانیه معادل 5.25 دقیقه حالا تست دوم با تنظیم کردن دو تا فلگ برای بهینه سازی فلگ های -O3 و -ffast-math نتیجه شد : 26 ثانیه بدون دست بردن توی کد تونستم با ست کردن فلگ بهینه سازی زمان رو کاهش بدم.
  14. با سلام یک نگاهی به ای پی ای پارسیجو بندازید اخرین باری که چک کردم تا 50 هزار درخواست در روز رایگان بود. https://addmap.parsijoo.ir/addmap/ موفق باشید.
  15. بهنام صباغی

    عه سلام فکر میکردم راهنمایی کردم الان دیدم نکردم . ببین باید ابجکت جیسانت رو درست کنی بعد یه تابع داره برای تبدیل به استرینگ : QJsonObject jsonObj; // assume this has been populated with Json data QJsonDocument doc(jsonObj); QString strJson(doc.toJson(QJsonDocument::Compact)); بعد میتونید استرینگ رو به روش دلخواه بفرستید به کیو ام ال و اونجا پارسش کنید.
×