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

تمامی فعالیت ها

این جریان به طور خودکار بروزرسانی می شود     

  1. امروز
  2. کامبیز اسدزاده

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

    برای پیداکردن نشانه های حیات در سیاره های دیگر می توان از فضاپیماهای کنونی هم استفاده نمود. اما آنها وسیله اختصاصی این امر نیستند و احتمال دارد نتوانند به درستی این ماموریت را به انجام برسانند. در همین راستا، ناسا به تازگی دستگاهی ساخته تا شواهد درست و کاملی در این مورد بیابد. آنها نام «لپ تاپ شیمیایی» را برای اختراع جدید خود انتخاب کرده اند. این لپ تاپ که در اصل یک ربات محسوب می شود نخستین وسیله ای خواهد بود که به طور اختصاصی برای کشف آمینو اسید و اسیدهای چرب (که عناصر ضروری حیات هستند) در کره های دیگر ساخته شده. این ربات با باتری کار می کند و برای انجام وظایفش به نمونه های مایع نیاز دارد. از آنجا که یافتن مایع در سیارات دیگر چندان آسان نیست، مکانیسم آن مشابه قهوه ساز طراحی شده. به این صورت که از آب داغ برای خارج نمودن عناصر ارگانیک مواد بهره می گیرد. یعنی نمونه مورد نظر به همراه آب درون مخزن آن قرار داده شده و تا 212 درجه فارنهایت گرم می شوند. در آخر، لپ تاپ شیمیایی ناسا، آب حاوی نمونه را با رنگ فلورسنت که به مولکول های آمینو اسید و اسیدهای چرب می چسبد، مخلوط و سپس آنها را به میکروچیپی در داخل دستگاه ارسال می کند تا مولکول ها از هم جدا شوند. در نهایت، دانشمندان با عبور دادن مولکول ها از لیزر، نشانه های حیاتی موردنظرشان را جستجو می کنند. البته لازم به یادآوری است که هر نوع اکتشاف جدید برای عملی شدنش به سال ها زمان نیاز دارند و مریخ نورد جدید ناسا نیز از این قاعده مستثنا نیست و تا سال 2021 میلادی روی سطح هیچ سیاره دیگری (همانند اروپای ژوپیتر یا انسلادوس زحل) فرود نخواهد آمد.البته تا آن زمان هم قرار نیست این دستگاه اختراعی بی استفاده بماند. مثلا می توان از آن برای آزمایش های زیست محیطی یا در صنعت داروسازی برای تشخیص داروی تقلبی بهره گرفت.
  3. کامبیز اسدزاده

    سلام، چرا از انواع نگه‌دارنده‌هایی مثل SwipeView، StackLayout، StackView یا Loader استفاده نمی‌کنید؟ کد‌های زیر رو به عنوان جزء‌ها (Component) در نظر بگیرید: کد مربوط به First.qml import QtQuick 2.11 Rectangle { id: root color: "green" width: 500 height: 500 Text { text: "Component One" } } کد مربوط به Second.qml import QtQuick 2.11 Rectangle { id: root color: "red" width: 500 height: 500 Text { text: "Component Two" } } در نهایت کد مربوط به main.qml به صورت زیر خواهد بود که توسط StackLayout به مدیریت اجزا می‌پردازید: import QtQuick 2.12 import QtQuick.Window 2.12 import QtQuick.Layouts 1.3 import QtQuick.Controls 2.4 Window { visible: true width: 640 height: 480 title: qsTr("Hello World") ColumnLayout { width: parent.width RowLayout { width: parent.width Button { text: "First" onClicked: { layout.currentIndex = 0 } } Button { text: "Second" onClicked: { layout.currentIndex = 1 } } } StackLayout { id: layout currentIndex: 0 //Define First Component First { /*ToDo...*/ } //Define Second Component Second { /*ToDo...*/ } } } }
  4. با سلام. در بخشی از برنامه‌ام نیاز دارم کامپوننتی داشته باشم که بتواند در حین اجرا کامپوننت‌های دیگر را در خود نمایش دهد. برای مثال اگر دکمه A کلیک شد، Test1 نمایش داده شود و اگر B کلیک شد Test2. برای واضح شدن سوال به کد زیر نگاه کنید: //Test1.qml import QtQuick 2.0 Rectangle { id: root color: "blue" Text { text: "Test 1" } } //Test2.qml import QtQuick 2.0 Rectangle { id: root color: "blue" Text { text: "Test 1" } } //main.qml import QtQuick 2.0 import QtQuick.Controls 2.3 ApplicationWindow { //Container for the component Item { id: container } Button { onClicked: //make container display Test1 } Button { onClicked: //make container display Test2 } } container را چگونه پیاده‌سازی کنم، یا اگر component خاصی هست که اینکار را انجام می‌دهد ممنون می‌شوم راهنمایی کنید.
  5. دیروز
  6. سروش ربیعی

    هدر فایل کامپایل نمیشه. بخشی از هدر که در کد وارد شده کامپایل میشه. داخل ممکنه تعریف‌هایی وجود داشته باشه. مثلا: header.hpp: static const SomeComplexStruct; در این صورت خوب مسلماً فایلی که این هدر رو اینکلود کرده باشه حافظهٔ بزرگتری اشغال می‌کنه (هم توی ایمیج هم توی رانتایم). ولی در حالت کلی همهٔ چیزهایی که توی هدر هستند کامپایل نمیشن. مثلا اگر هدرها تماماً از اعلان‌های کلاس‌ها و توابع تشکیل شده باشند چیزی کامپایل نمیشه. (معمولاً داخل هدر فقط اعلان قرار داده میشه) مثال: // header.hpp struct bar { int x; int y; double z; }; class foo { public: bar x; bar y; bar z; }; #include <iostream> #include "header.hpp" // does not matter int main() { std::cout << "Hello World!\n"; return 0; } خروجی هر دو حالت: .file "main.cpp" .text .section .rodata .type _ZStL19piecewise_construct, @object .size _ZStL19piecewise_construct, 1 _ZStL19piecewise_construct: .zero 1 .local _ZStL8__ioinit .comm _ZStL8__ioinit,1,1 .LC0: .string "Hello World!\n" .text .globl main .type main, @function main: .LFB1493: .cfi_startproc pushq %rbp .cfi_def_cfa_offset 16 .cfi_offset 6, -16 movq %rsp, %rbp .cfi_def_cfa_register 6 leaq .LC0(%rip), %rsi leaq _ZSt4cout(%rip), %rdi call _ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc@PLT movl $0, %eax popq %rbp .cfi_def_cfa 7, 8 ret .cfi_endproc .LFE1493: .size main, .-main .type _Z41__static_initialization_and_destruction_0ii, @function _Z41__static_initialization_and_destruction_0ii: .LFB1977: .cfi_startproc pushq %rbp .cfi_def_cfa_offset 16 .cfi_offset 6, -16 movq %rsp, %rbp .cfi_def_cfa_register 6 subq $16, %rsp movl %edi, -4(%rbp) movl %esi, -8(%rbp) cmpl $1, -4(%rbp) jne .L5 cmpl $65535, -8(%rbp) jne .L5 leaq _ZStL8__ioinit(%rip), %rdi call _ZNSt8ios_base4InitC1Ev@PLT leaq __dso_handle(%rip), %rdx leaq _ZStL8__ioinit(%rip), %rsi movq _ZNSt8ios_base4InitD1Ev@GOTPCREL(%rip), %rax movq %rax, %rdi call __cxa_atexit@PLT .L5: nop leave .cfi_def_cfa 7, 8 ret .cfi_endproc .LFE1977: .size _Z41__static_initialization_and_destruction_0ii, .-_Z41__static_initialization_and_destruction_0ii .type _GLOBAL__sub_I_main, @function _GLOBAL__sub_I_main: .LFB1978: .cfi_startproc pushq %rbp .cfi_def_cfa_offset 16 .cfi_offset 6, -16 movq %rsp, %rbp .cfi_def_cfa_register 6 movl $65535, %esi movl $1, %edi call _Z41__static_initialization_and_destruction_0ii popq %rbp .cfi_def_cfa 7, 8 ret .cfi_endproc .LFE1978: .size _GLOBAL__sub_I_main, .-_GLOBAL__sub_I_main .section .init_array,"aw" .align 8 .quad _GLOBAL__sub_I_main .hidden __dso_handle .ident "GCC: (Ubuntu 7.3.0-27ubuntu1~18.04) 7.3.0" .section .note.GNU-stack,"",@progbits
  7. قاسم رمضانی منش

    با تشکر از توضیحات شما @فرهاد شیری . بنده اون لینکی که پیشنهاد داده بودید و به‌علاوه موارد دیگری هم در این زمینه خوانده بودم. و دقیقاً سعی کردم مثالی مرتبط به این موضوع بزنم. پس یه نگاه دیگه به فایل هدری که مثال زده بودم بکنید : class Base{ public : Base(){std::cout << "BASE#c";} ~Base(){std::cout << "BASE#d";} }; void AnotherTest (void){} void AndAnotherTest(void){} در فایل main.cpp من تنها یک بار تابع AndAnotherTest() را فراخوانی کرده بودم. که مسلماً طبق چیزی که گفتید : و بنده به این صورت برداشت کردم : که ابتدا تمام کد های فایل هدر من کامپایل شده و سپس در زمان لینک ، لینکر می‌بایست تنها لینکی به تابع AndAnotherTest() داشته باشد. و فقط هم این تابع در خروجی کد من باشد. من برای تست این موضوع از تعریف یک کلاس و دو تابع استفاده کردم. از آن‌جایی که میدونستم کلاس تنها یه نقشه از ساختمان است. پس تا زمانی که از این نقشه نمونه‌سازی نشوند ، نباید هیچ حافظه‌ای یا کامپایلی برای کد های این کلاس درنظر گرفته بشه. که تا این قسمت با توجه به خروجی اسمبلی من درست بود و حرفی از کلاس Base زده نشده بود. اما درمورد دوتا تابع بعدی که دقیقا هر دو کامپایل و درخروجی کد من بودن. در مقایسه هایی که کردم (که تماماً در طوماری که بالا ارسال کردم ، ذکر شده) متوجه شدم تنها تفاوت در فایلی که من تابع را فراخوانی و در فایلی که فراخوانی نکرده بودم تنها یک خط در خروجی اسمبلی بود ؛ اون‌هم دستور فراخوانی تابع AndAnotherTest() : [ghasem@clibcore output]$ cat --number JustHeader | egrep "(AnotherTest|AndAnotherTest)" > OnlyHeaderGREP [ghasem@clibcore output]$ cat --number UseOneFunction | egrep "(AnotherTest|AndAnotherTest)" > UseOneFunctionGREP [ghasem@clibcore output]$ diff JustHeader UseOneFunction 55d54 < call _Z14AndAnotherTestv در مورد هدرفایل iostream هم. متغیرها و توابعی که به صورت static یا non-member function تعریف شده‌اند ، خروجی اسمبلی‌شان در فایل نهایی من هست. به غیر از tamplate-function و template-class و class ها که آن‌ها دقیقا برای کامپایل شدن نیاز به استفاده شدن را دارند. الان دلیل این اتفاق : وجود کد اسمبلی تابع استفاده نشده در فایل هدر ، در خروجی نهایی فایل ترجمه شده به اسمبلی من چیست ؟ و آیا راهی برای جلوگیری از این موضوع هست ؟
  8. فرهاد شیری

    البته در بعضی شرایط شاید بهتر باشه بعضی از این توابع را خودتون باز نویسی کنید در شرایط خاص نرم افزاری ، اما در اکثر مواقع خیر بهتره از همین استاندارد ها استفاده کنید. اونهم به این علت که احتمال خطا خیلی کمتر هست یا نزدیک به صفر هست چون این توابع در شرایط مختلف تست شده اند تبدیل به استاندارد شده اند اون هم نه توسط یک نفر بلکه توسط یک تیم چند صد نفری ... دقیقا همین اتفاق می افتد منتهی نه در خروجی کامپایل شما بلکه در زمان تبدیل به کد ماشین توسط خود کامپایلر و لینکر این انعقاد انجام می شود و خروجی باینری شما ترکیبی از کد های کامپایل شده شما خواهد بود به اضافه کلاسها و توابع استاندارد ++C که شما در برنامه خود استفاده کرده اید، به صورت پویا به کد ماشین برنامه شما پیوند زده می شود. پس ماکروهایی هم که در هدر های استاندارد مشاهده میکنید در زمان کامپایل تاثیر گذار هستند ولی در حجم باینری فایل خروجی یا تاثیر خیلی کمی دارند ویا اصلا تاثیری نخواهند داشت. معمولا هم به همین دلیل توصیه میشود که مثلا بجای استفاده از دستور using namespace std دقیقا به تابعی که لازم دارید اشاره کنید std::cout دراین روش در خروجی باینری فایل تاثیر گذار خواهد بود. پیشنهاد میکنم این لینکها را هم مطالعه کنید. فرق بین کامپایل استاتیک و داینامیک
  9. pooya hafez

    سلام، آیا ممکن هست در مورد منطق، ساختار و اساس کاریِ کامپایلر و همچنین تعامل آن با سیستم عامل‌ (پلتفرم‌های) مختلف توضیحاتی ارائه دهید؟ با سپاس.
  10. کامبیز اسدزاده

    مبنای امتیازات مرجع

    مقدمه نقد و بررسی‌ و ارسال نظرات کارشناسی سایت مرجع‌آی‌او استریم با هدف شناساندن هرچه بیشتر و بهتر زبان‌ها و فناوری‌های برنامه‌نویسی به مخاطب و همچنین کمک به تصمیم‌گیری در رابطه با نحوه‌‌ی تجزیه و تحلیل برنامه نویسی و کسب تجربه می‌باشد که در کنار آن علاوه بر آن، هدفِ این مرجع شناساندن متخصصین به جامعه و به کار گیری تجربیات صحیح و مطلوب به جامعه‌ی استارتاپی کشور است. توضیحات کلی در نقد و بررسی‌هایِ آی او استریم، پیش از خواندن متن سوالات و پاسخ‌ها می‌توانید به طور کاملا خلاصه با نکات مثبت و منفی موضوعات مطرح شده و همچنین نظر کلی اساتید و مراجع را در مورد آن‌ها بررسی کنید. لازم بذکر است دلیل امتیاز دهی تنها نباید مبنا بر اساس حل مشکل باشد! بنابراین امتیاز‌ها باید در زمانی ارسال شوند که از صحت پاسخ و همچنین نتیجه‌ی درست و مستند شده‌ی آن اطمینان شود. نحوه‌ی کار با سیستم امتیاز‌دهی تصویر زیر مربوط به ابزار امتیاز‌دهی است، در صورتی که پاسخ داده شده به سوال شما بر اساس مستندات، منطق و علوم مربوطه صحت داشته و دیگر اساتید آن را تایید می‌کنند می‌توانید در این صورت از ابزار مربوطه برای اعلام نظر خود استفاده کنید. در صورتی که بر اساس مستندات از قبل ثابت شده نظر بر پاسخ منفی باشد از دکمه‌ی فلِش به پایین استفاده کنید. در صورتی که پاسخ مثبت و علمی باشد از دکمه‌ی فلش رو به بالا برای امتیاز مثبت به پاسخ استفاده کنید. بدون هیچ امتیازی دارای امتیاز منفی دارای امتیاز مثبت مطالبی که دارای بیش از ۵ امتیاز می‌باشد به صورت برجسته نمایان خواهد شد. امتیاز به موضوعات، عناوین و فایل‌ها بخش امتیاز به فایل‌ها، تاپیک‌ها و موضوعات بر اساس سیستم امتیاز دهی ستاره‌ای مشخص می‌شود. این امتیاز موجب می‌گردد تا فایل یا موضوع مربوطه بر اساس درجاتی که کسب کرده است بین موضوعات مختلف در سطحی که نیاز است نمایان شوند. بدون امتیاز به موضوع دارای امتیاز به موضوع اعتبار‌ها امتیاز کل کاربر همراه با مرحله‌ای که در آن قرار دارد، نمایش می‌یابد. میانگین اعتبار از کمترین امتیاز ممکن (۲۰-) آغاز شده و به بهترین امتیاز ممکن (۲۰+) ختم می‌شود که توسط واکنش کاربران نسبت به هر یک از فعالیت‌های شما بر روی مرجع خواهد بود. برای مثال در صورتی که شما هرگونه به‌روز رسانی بر روی پست‌های خود، وضعیت خود و دیگر فعالیت‌های خود بر روی مرجع دارید، کاربران دیگر می‌توانند آن را بر اساس برداشت و حِسی که نسبت به آن عمل دارند، یکی از پنج حالت را اعمال کنند که شامل می‌باشد. واکنش به شکلک ناراحت (خنثی) هیچ امتیازی اعمال نمی‌کند. واکنش به شکلک خندان (۱+) یک امتیاز به موضوع یا مطلب شما اعمال می‌کند. واکنش به شکلک سردرگم (خنثی) هیچ امتیازی اعمال نمی‌کند. واکنش به جام (۱+) یک امتیاز اعمال می‌کند. واکنش به ستاره‌ی دنباله‌دار (۱+) یک امتیاز مثبت اعمال می‌کند. واکنش به شکلک قلب (پسندیدن ۱+) یک امتیاز مثبت را اعمال می‌کند. واکنش به قلب شکسته (۱-) یک امتیاز منفی اعمال می‌کند و آن را از امتیاز کل شما کم می‌کند. محیط رقابتی شما می‌توانید به لیستی از بهترین پرچم‌داران، بهترین کاربران و سوابق آن‌ها در مرجع دسترسی داشته باشید و برای بهتر شدن و نشان داده شدن در این لیست با یک دیگر رقابت کنید. همچنین شما می‌توانید اقدام به دنبال کردن یکدیگر و مشاهده‌ی مطالب به صورت برجسته بر اساس طرفداران خود را در اختیار داشته باشید.
  11. قاسم رمضانی منش

    (عذرخواهی میکنم مطالبی ارسالی این پست به دلیلی خروجی اسمبلی کدها طولانی و خارج از حوصله است. لذا متن‌های بین کدها با سبک دُرُشت و اندازه ۱۸ نوشته شده است) خب مگه اون هدر فایلی که اضافه میکنیم کامپایل نمیشه ؟ الان یک نمونه تستی که من نوشتم : header.hpp class Base{ public : Base(){std::cout << "BASE#c";} ~Base(){std::cout << "BASE#d";} }; void AnotherTest (void){} void AndAnotherTest(void){} main.cpp #include <iostream> #include "header.hpp" int main(){ return 0; } خروجی اسمبلی زیر را تولید کرده : .file "main.cpp" .text .section .rodata .type _ZStL19piecewise_construct, @object .size _ZStL19piecewise_construct, 1 _ZStL19piecewise_construct: .zero 1 .local _ZStL8__ioinit .comm _ZStL8__ioinit,1,1 .text .globl _Z11AnotherTestv .type _Z11AnotherTestv, @function _Z11AnotherTestv: .LFB1524: .cfi_startproc pushq %rbp .cfi_def_cfa_offset 16 .cfi_offset 6, -16 movq %rsp, %rbp .cfi_def_cfa_register 6 nop popq %rbp .cfi_def_cfa 7, 8 ret .cfi_endproc .LFE1524: .size _Z11AnotherTestv, .-_Z11AnotherTestv .globl _Z14AndAnotherTestv .type _Z14AndAnotherTestv, @function _Z14AndAnotherTestv: .LFB1525: .cfi_startproc pushq %rbp .cfi_def_cfa_offset 16 .cfi_offset 6, -16 movq %rsp, %rbp .cfi_def_cfa_register 6 nop popq %rbp .cfi_def_cfa 7, 8 ret .cfi_endproc .LFE1525: .size _Z14AndAnotherTestv, .-_Z14AndAnotherTestv .globl main .type main, @function main: .LFB1526: .cfi_startproc pushq %rbp .cfi_def_cfa_offset 16 .cfi_offset 6, -16 movq %rsp, %rbp .cfi_def_cfa_register 6 movl $0, %eax popq %rbp .cfi_def_cfa 7, 8 ret .cfi_endproc .LFE1526: .size main, .-main .type _Z41__static_initialization_and_destruction_0ii, @function _Z41__static_initialization_and_destruction_0ii: .LFB2010: .cfi_startproc pushq %rbp .cfi_def_cfa_offset 16 .cfi_offset 6, -16 movq %rsp, %rbp .cfi_def_cfa_register 6 subq $16, %rsp movl %edi, -4(%rbp) movl %esi, -8(%rbp) cmpl $1, -4(%rbp) jne .L7 cmpl $65535, -8(%rbp) jne .L7 movl $_ZStL8__ioinit, %edi call _ZNSt8ios_base4InitC1Ev movl $__dso_handle, %edx movl $_ZStL8__ioinit, %esi movl $_ZNSt8ios_base4InitD1Ev, %edi call __cxa_atexit .L7: nop leave .cfi_def_cfa 7, 8 ret .cfi_endproc .LFE2010: .size _Z41__static_initialization_and_destruction_0ii, .-_Z41__static_initialization_and_destruction_0ii .type _GLOBAL__sub_I__Z11AnotherTestv, @function _GLOBAL__sub_I__Z11AnotherTestv: .LFB2011: .cfi_startproc pushq %rbp .cfi_def_cfa_offset 16 .cfi_offset 6, -16 movq %rsp, %rbp .cfi_def_cfa_register 6 movl $65535, %esi movl $1, %edi call _Z41__static_initialization_and_destruction_0ii popq %rbp .cfi_def_cfa 7, 8 ret .cfi_endproc .LFE2011: .size _GLOBAL__sub_I__Z11AnotherTestv, .-_GLOBAL__sub_I__Z11AnotherTestv .section .init_array,"aw" .align 8 .quad _GLOBAL__sub_I__Z11AnotherTestv .hidden __dso_handle .ident "GCC: (GNU) 8.2.1 20181105 (Red Hat 8.2.1-5)" .section .note.GNU-stack,"",@progbits و کد زیر : #include <iostream> #include "header.hpp" int main(){ AndAnotherTest(); return 0; } خروجی اسمبلی زیر را تولید کرده : .file "main.cpp" .text .section .rodata .type _ZStL19piecewise_construct, @object .size _ZStL19piecewise_construct, 1 _ZStL19piecewise_construct: .zero 1 .local _ZStL8__ioinit .comm _ZStL8__ioinit,1,1 .text .globl _Z11AnotherTestv .type _Z11AnotherTestv, @function _Z11AnotherTestv: .LFB1524: .cfi_startproc pushq %rbp .cfi_def_cfa_offset 16 .cfi_offset 6, -16 movq %rsp, %rbp .cfi_def_cfa_register 6 nop popq %rbp .cfi_def_cfa 7, 8 ret .cfi_endproc .LFE1524: .size _Z11AnotherTestv, .-_Z11AnotherTestv .globl _Z14AndAnotherTestv .type _Z14AndAnotherTestv, @function _Z14AndAnotherTestv: .LFB1525: .cfi_startproc pushq %rbp .cfi_def_cfa_offset 16 .cfi_offset 6, -16 movq %rsp, %rbp .cfi_def_cfa_register 6 nop popq %rbp .cfi_def_cfa 7, 8 ret .cfi_endproc .LFE1525: .size _Z14AndAnotherTestv, .-_Z14AndAnotherTestv .globl main .type main, @function main: .LFB1526: .cfi_startproc pushq %rbp .cfi_def_cfa_offset 16 .cfi_offset 6, -16 movq %rsp, %rbp .cfi_def_cfa_register 6 call _Z14AndAnotherTestv movl $0, %eax popq %rbp .cfi_def_cfa 7, 8 ret .cfi_endproc .LFE1526: .size main, .-main .type _Z41__static_initialization_and_destruction_0ii, @function _Z41__static_initialization_and_destruction_0ii: .LFB2010: .cfi_startproc pushq %rbp .cfi_def_cfa_offset 16 .cfi_offset 6, -16 movq %rsp, %rbp .cfi_def_cfa_register 6 subq $16, %rsp movl %edi, -4(%rbp) movl %esi, -8(%rbp) cmpl $1, -4(%rbp) jne .L7 cmpl $65535, -8(%rbp) jne .L7 movl $_ZStL8__ioinit, %edi call _ZNSt8ios_base4InitC1Ev movl $__dso_handle, %edx movl $_ZStL8__ioinit, %esi movl $_ZNSt8ios_base4InitD1Ev, %edi call __cxa_atexit .L7: nop leave .cfi_def_cfa 7, 8 ret .cfi_endproc .LFE2010: .size _Z41__static_initialization_and_destruction_0ii, .-_Z41__static_initialization_and_destruction_0ii .type _GLOBAL__sub_I__Z11AnotherTestv, @function _GLOBAL__sub_I__Z11AnotherTestv: .LFB2011: .cfi_startproc pushq %rbp .cfi_def_cfa_offset 16 .cfi_offset 6, -16 movq %rsp, %rbp .cfi_def_cfa_register 6 movl $65535, %esi movl $1, %edi call _Z41__static_initialization_and_destruction_0ii popq %rbp .cfi_def_cfa 7, 8 ret .cfi_endproc .LFE2011: .size _GLOBAL__sub_I__Z11AnotherTestv, .-_GLOBAL__sub_I__Z11AnotherTestv .section .init_array,"aw" .align 8 .quad _GLOBAL__sub_I__Z11AnotherTestv .hidden __dso_handle .ident "GCC: (GNU) 8.2.1 20181105 (Red Hat 8.2.1-5)" .section .note.GNU-stack,"",@progbits و در کد اسمبلئ که هیچ یک از توابع فایلheader.hpp استفاده نشده است. خروجی اسمبلی توابع فایل header.hpp موجود هست : [ghasem@clibcore tmp]$ cat --number OnlyHeader | egrep "(AnotherTest|AndAnotherTest)" 11 .globl _Z11AnotherTestv 12 .type _Z11AnotherTestv, @function 13 _Z11AnotherTestv: 27 .size _Z11AnotherTestv, .-_Z11AnotherTestv 28 .globl _Z14AndAnotherTestv 29 .type _Z14AndAnotherTestv, @function 30 _Z14AndAnotherTestv: 44 .size _Z14AndAnotherTestv, .-_Z14AndAnotherTestv 92 .type _GLOBAL__sub_I__Z11AnotherTestv, @function 93 _GLOBAL__sub_I__Z11AnotherTestv: 109 .size _GLOBAL__sub_I__Z11AnotherTestv, .-_GLOBAL__sub_I__Z11AnotherTestv 112 .quad _GLOBAL__sub_I__Z11AnotherTestv و در کدی که فقط تابع AndAnotherTest() استفاده شده است : [ghasem@clibcore tmp]$ cat --number UseOneFunction | egrep "(AnotherTest|AndAnotherTest)" 11 .globl _Z11AnotherTestv 12 .type _Z11AnotherTestv, @function 13 _Z11AnotherTestv: 27 .size _Z11AnotherTestv, .-_Z11AnotherTestv 28 .globl _Z14AndAnotherTestv 29 .type _Z14AndAnotherTestv, @function 30 _Z14AndAnotherTestv: 44 .size _Z14AndAnotherTestv, .-_Z14AndAnotherTestv 55 call _Z14AndAnotherTestv 93 .type _GLOBAL__sub_I__Z11AnotherTestv, @function 94 _GLOBAL__sub_I__Z11AnotherTestv: 110 .size _GLOBAL__sub_I__Z11AnotherTestv, .-_GLOBAL__sub_I__Z11AnotherTestv 113 .quad _GLOBAL__sub_I__Z11AnotherTestv و تنها تفاوت این دو در فراخوانی تابع AndAnotherTest() هست : [ghasem@clibcore output]$ cat --number JustHeader | egrep "(AnotherTest|AndAnotherTest)" > OnlyHeaderGREP [ghasem@clibcore output]$ cat --number UseOneFunction | egrep "(AnotherTest|AndAnotherTest)" > UseOneFunctionGREP [ghasem@clibcore output]$ diff JustHeader UseOneFunction 55d54 < call _Z14AndAnotherTestv در حالی که من از پاسخ شما @سروش ربیعی فهمیدم که گفتید هدرفایل‌ها تاثیری در حجم برنامه‌ٔ‌نهایی نداره. اما مثال بالا که زدم با وجود اینکه هیچ فراخوانی از توابع نشده بود بازم هم کد های هدرفایل کامپایل شد. و اما بخشی که منو گیج کرده ! ما در این فایل هم هدرفایل iostream و هم header.hpp را وارد برنامه کرده ایم. توابعی که در header.hpp بود تماما کامپایل شده و در خروجی اسمبلی هست. اما خبری از توابع و دستورات iostream نیست. این خروجی اسمبلی بدون هدرفایل iostream هست : .file "main.cpp" .text .globl _Z11AnotherTestv .type _Z11AnotherTestv, @function _Z11AnotherTestv: .LFB0: .cfi_startproc pushq %rbp .cfi_def_cfa_offset 16 .cfi_offset 6, -16 movq %rsp, %rbp .cfi_def_cfa_register 6 nop popq %rbp .cfi_def_cfa 7, 8 ret .cfi_endproc .LFE0: .size _Z11AnotherTestv, .-_Z11AnotherTestv .globl _Z14AndAnotherTestv .type _Z14AndAnotherTestv, @function _Z14AndAnotherTestv: .LFB1: .cfi_startproc pushq %rbp .cfi_def_cfa_offset 16 .cfi_offset 6, -16 movq %rsp, %rbp .cfi_def_cfa_register 6 nop popq %rbp .cfi_def_cfa 7, 8 ret .cfi_endproc .LFE1: .size _Z14AndAnotherTestv, .-_Z14AndAnotherTestv .globl main .type main, @function main: .LFB2: .cfi_startproc pushq %rbp .cfi_def_cfa_offset 16 .cfi_offset 6, -16 movq %rsp, %rbp .cfi_def_cfa_register 6 movl $0, %eax popq %rbp .cfi_def_cfa 7, 8 ret .cfi_endproc .LFE2: .size main, .-main .ident "GCC: (GNU) 8.2.1 20181105 (Red Hat 8.2.1-5)" .section .note.GNU-stack,"",@progbits و تفاوت آن با خروجی اسمبلی‌ای که هدرفایل iostream وجود داشته است : [ghasem@clibcore output]$ diff WithIostream WithoutIostrea 3,10d2 < .section .rodata < .type _ZStL19piecewise_construct, @object < .size _ZStL19piecewise_construct, 1 < _ZStL19piecewise_construct: < .zero 1 < .local _ZStL8__ioinit < .comm _ZStL8__ioinit,1,1 < .text 14c6 < .LFB1518: --- > .LFB0: 26c18 < .LFE1518: --- > .LFE0: 31c23 < .LFB1519: --- > .LFB1: 43c35 < .LFE1519: --- > .LFE1: 48c40 < .LFB1520: --- > .LFB2: 60c52 < .LFE1520: --- > .LFE2: 62,113d53 < .type _Z41__static_initialization_and_destruction_0ii, @function < _Z41__static_initialization_and_destruction_0ii: < .LFB2001: < .cfi_startproc < pushq %rbp < .cfi_def_cfa_offset 16 < .cfi_offset 6, -16 < movq %rsp, %rbp < .cfi_def_cfa_register 6 < subq $16, %rsp < movl %edi, -4(%rbp) < movl %esi, -8(%rbp) < cmpl $1, -4(%rbp) < jne .L7 < cmpl $65535, -8(%rbp) < jne .L7 < movl $_ZStL8__ioinit, %edi < call _ZNSt8ios_base4InitC1Ev < movl $__dso_handle, %edx < movl $_ZStL8__ioinit, %esi < movl $_ZNSt8ios_base4InitD1Ev, %edi < call __cxa_atexit < .L7: < nop < leave < .cfi_def_cfa 7, 8 < ret < .cfi_endproc < .LFE2001: < .size _Z41__static_initialization_and_destruction_0ii, .-_Z41__static_initialization_and_destruction_0ii < .type _GLOBAL__sub_I__Z11AnotherTestv, @function < _GLOBAL__sub_I__Z11AnotherTestv: < .LFB2002: < .cfi_startproc < pushq %rbp < .cfi_def_cfa_offset 16 < .cfi_offset 6, -16 < movq %rsp, %rbp < .cfi_def_cfa_register 6 < movl $65535, %esi < movl $1, %edi < call _Z41__static_initialization_and_destruction_0ii < popq %rbp < .cfi_def_cfa 7, 8 < ret < .cfi_endproc < .LFE2002: < .size _GLOBAL__sub_I__Z11AnotherTestv, .-_GLOBAL__sub_I__Z11AnotherTestv < .section .init_array,"aw" < .align 8 < .quad _GLOBAL__sub_I__Z11AnotherTestv < .hidden __dso_handle با یه نگاه کردن به فایل iostream : #ifndef _GLIBCXX_IOSTREAM #define _GLIBCXX_IOSTREAM 1 #pragma GCC system_header #include <bits/c++config.h> #include <ostream> #include <istream> namespace std _GLIBCXX_VISIBILITY(default) { _GLIBCXX_BEGIN_NAMESPACE_VERSION extern istream cin; extern ostream cout; extern ostream cerr; extern ostream clog; #ifdef _GLIBCXX_USE_WCHAR_T extern wistream wcin; extern wostream wcout; extern wostream wcerr; extern wostream wclog; #endif static ios_base::Init __ioinit; _GLIBCXX_END_NAMESPACE_VERSION } #endif ظاهرا دلیل اون تفاوت هم مشخص هست. اما تکلیف مابقی هدرفایل هایی که داخل iostream وارد شده اند چیست ؟ مگه توابع و متغیر های آنها نیز کامپایل نمیشود ؟ پس چرا مثل خروجی کد اسمبلی‌ توابع موجود در header.hpp در سورس اسمبلی نهایی نیست ؟ (و باز عذرخواهی میکنم بابت طولانی بودن پست )
  12. GornerLabo

    با این تکه کد حل شد QByteArray ba; ba.resize(100); ba.fill(0x00); ba[0] = 0x01; port->write(ba); port->flush();
  13. سروش ربیعی

    اضافه کردن فایل‌های هدر هیچ تأثیری در حجم برنامهٔ نهایی نداره. فقط توابعی که کامپایل شدن (کد باینری برای اون‌ها تولید شده) در باینری نهایی جا می‌گیرن.
  14. هفته گذشته
  15. با سلام. درحال بررسی کدهای کتابخانه‌های استاندارد سی‌پلاس‌پلاس بودم ، که متوجه موردی شدم ؛ تقریبا بیشتر توابع و کلاس‌هایی که از کتابخانه‌های استاندارد استفاده میکنیم دارای مقدار زیادی وابستگی به توابع و فایل‌های دیگر دارند. برای مثال تابع std::swap که برای جابه‌جایی دو نوع استفاده میشود به این‌صورت میباشد : template<typename _Tp, size_t _Nm> inline typename std::enable_if<__is_swappable<_Tp>::value>::type swap(_Tp (&__a)[_Nm], _Tp (&__b)[_Nm]) noexcept(std::__is_nothrow_swappable<_Tp>::value) { for (size_t __n = 0; __n < _Nm; ++__n) swap(__a[__n], __b[__n]); } که برای کامپایل نیاز به این موارد در دو فایل move.h و type_traits دارند : template<typename _Tp, _Tp __v> struct integral_constant { static constexpr _Tp value = __v; typedef _Tp value_type; typedef integral_constant<_Tp, __v> type; constexpr operator value_type() const noexcept { return value; } #if __cplusplus > 201103L #define __cpp_lib_integral_constant_callable 201304 constexpr value_type operator()() const noexcept { return value; } #endif }; template<bool __v> using __bool_constant = integral_constant<bool, __v>; typedef integral_constant<bool, true> true_type; typedef integral_constant<bool, false> false_type; template<bool, typename _Tp = void> struct enable_if { }; namespace __swappable_details { using std::swap; struct __do_is_swappable_impl { template<typename _Tp, typename = decltype(swap(std::declval<_Tp&>(), std::declval<_Tp&>()))> static true_type __test(int); template<typename> static false_type __test(...); }; struct __do_is_nothrow_swappable_impl { template<typename _Tp> static __bool_constant< noexcept(swap(std::declval<_Tp&>(), std::declval<_Tp&>())) > __test(int); template<typename> static false_type __test(...); }; } template<typename _Tp> struct __is_swappable_impl : public __swappable_details::__do_is_swappable_impl { typedef decltype(__test<_Tp>(0)) type; }; template<typename _Tp> struct __is_swappable : public __is_swappable_impl<_Tp>::type { }; template<typename _Tp> struct __is_nothrow_swappable_impl : public __swappable_details::__do_is_nothrow_swappable_impl { typedef decltype(__test<_Tp>(0)) type; }; template<typename _Tp> struct __is_nothrow_swappable : public __is_nothrow_swappable_impl<_Tp>::type { }; خب ! سوال اول بنده اینجاس که در چنین مواردی ، بهتر نیست که تابعstd::swap را با توجه به نیازی که داریم خودمان پیاده‌سازی کنیم ؟ و اینکه آیا این حجم از کد و استفاده از template ها هزینه پِرفُورْمَنْس زیادی ندارد ؟ و سوال دوم : تمام این کدها در دو فایل move.h و type_traits قرار دارد (که مسلماً این فایل ها هم وابستگی‌های دیگری به دیگر فایل‌ها دارند). آیا ما نمی‌توانیم مثلا فقط تابع std::swap را در برنامه‌ی خود فراخوانی کنیم که این حجم از کد احتیاج به کامپایل نداشته باشد ؟ برای نمونه در زبان برنامه‌نویسی پایتون ، با استفاده از دستور import ما یک ماژول را وارد برنامه میکنیم : import time در این روش تمام ماژول time به فایل‌ما اضافه خواهند شد. درصورتی که ما فقط از ماژول time نیاز به تابع sleep داشته باشیم کافی است که از قابلت from ... import ... استفاده کنیم : from time import sleep آیا این حرکت در C++ نیز امکان‌پذیر هست ؟
  16. الهه انصاری

    شاخص عملکرد کلیدی (KPI)

    اگر شما یک تیم را مدیریت می‌کنید، به احتمال زیاد در مورد شاخص‌های عملکرد کلیدی (Key Performance Indicator, KPI) شنیده اید. صرف نظر از این که آیا شما با آنها آشنا هستید و یا هنوز در ذهنتان این سوال وجود دارد که «دقیقا KPI چیست؟»، اجازه دهید قبل از این که به بعضی نمونه‌ها و معادلات نمونه برای مهمترین معیارها برسیم، یک دوره‌ی تجدید نظر کوتاهی داشته باشیم. قبل از پرداختن به تعدادی نمونه، ابتدا KPI را تعریف کنیم. به زبان ساده، KPI نوعی اندازه گیری عملکرد است که به شما کمک می‌کند تا بدانید بخش یا سازمان شما چگونه کار می‌کند. KPI خوب باید به عنوان یک قطب نما عمل کند و به شما و تیمتان کمک کند تا متوجه شوید که آیا مسیر درستی را برای رسیدن به اهداف استراتژیک خود در نظر گرفته‌ اید. برای موثر بودن، KPI باید شرایط زیر را داشته باشد: به خوبی تعریف شده و قابل سنجش باشد. باید با سراسر سازمان و بخش شما در ارتباط باشد. باید برای دستیابی به هدف شما ضروری باشد. قابل اعمال به خط کسب و کار (Line of Business, LoB) یا بخش شما باشد. مشکل این است که هزاران کاندید برای انتخاب KPIها را وجود دارد. اگر شما مورد اشتباهی را انتخاب کنید، چیزی را اندازه گیری خواهید کرد که با اهدافتان همخوانی ندارد. بنابراین، چگونه باید KPIهای مناسب را برای سازمان خود انتخاب کنید؟ بهترین راه برای رسیدن به این هدف، تحقیق و درک برخی از مهم‌ترین KPIها است. بدین ترتیب، شما درک بهتری خواهید داشت که انتخاب کدام یک برای کسب و کار شما مفید است و کدام سودی نخواهد داشت. ۱۸ مثال و تعریف از KPIها معیارهای مالی ۱. سود: نیاز به تعریف نیست اما باید خیلی به آن توجه کنید زیرا یکی از مهمترین شاخص‌های عملکردی موجود است. سود حاشیه‌ای ناخالص (gross margin) و سود حاشیه‌ای خالص (net profit margin) را آنالیز کنید تا متوجه شوید که آیا سازمانتان بازدهی بالایی داشته است یا خیر. ۲. هزینه: هزینه‌ی بهره‌ وری را اندازه گیری کنید . بهترین راه‌های کاهش و مدیریت هزینه‌ها را بیابید. ۳. درآمد LoB در مقابل هدف: این مورد یک مقایسه بین درآمد واقعی شما و درآمد پیش بینی شده‌ی شما است. نمودار کردن و تجزیه و تحلیل اختلاف بین این دو عدد کمک خواهد کرد که متوجه شوید بخش تحت مدیریت شما چگونه عملکردی دارد. ۴. هزینه‌ی محصولات فروخته‌ شده: با در نظر گرفتن تمامی هزینههای تولیدی برای محصولی که شرکت شما در حال فروش است، می‌توانید ایده‌ی بهتری برای قیمت گذاری بر اساس هزینه‌ی محصولات و سود حاشیه‌ای واقعی (actual profit margin) خود داشته باشید. این اطلاعات در تعیین این که چگونه در رقابت کسب و کار پیروز شوید نقش کلیدی دارد. ۵. روز فروش برجسته (Day Sales Outstanding, DSO): حساب‌های دریافتی خود را در نظر بگیرید و آن‌ها را به تعداد کل فروش‌های اعتباری تقسیم کنید. این عدد را به تعداد روزهای محدوده‌ی زمانی که مورد بررسی قرار می دهید، ضرب کنید. تبریک می‌گوییم، شما DSO خود را حساب کردید! هرچه این عدد کوچکتر باشد، یعنی این که سازمان شما در جمع آوری بدهی‌ها بهتر عمل می‌کند. این فرمول را هر ماه، هر سه ماه یا هر سال را اجرا کنید تا ببینید که وضعیتتان چه روندی دارد. ۶. میزان فروش برحسب منطقه: از طریق تجزیه و تحلیل این که کدام منطقه اهداف فروش ما را برآورد می‌کنند، می‌توانید بازخورد بهتری برای مناطق کم درآمد داشته باشید. ۷. هزینه‌های LoB در مقابل بودجه: مخارج واقعی خود را با بودجه‌ی پیش بینی شده‌ی خود مقایسه کنید. درک این که در در کدام قسمت از برنامه‌ی خود متزلزل شده اید، می‌تواند در آینده به شما برای ایجاد یک بودجه‌ی عالی‌تر اداری کمک کند. معیار‌های مشتری ۸. ارزش طول عمر مشتری (CLV): صرفه جویی در هزینه تنها (یا بهترین) راه برای بهینه سازی جذب مشتری شما نیست. CLV به شما کمک می‌کند که ارزش سازمان خود را از طریق یک رابطه‌ی بلند مدت با مشتری درک کنید. از این شاخص عملکرد برای محدود کردن کانالی استفاده کنید که به شما کمک میکند تا بهترین مشتریان را برای بهترین قیمت به دست آورید. ۹. هزینه‌ی جذب یا خرید مشتری (CAC): هزینههای جذب خود را به تعداد مشتریان جدید در محدوده ی زمانی مورد بررسی تقسیم کنید. با این روش شما مقدار عددی CAC را محاسبه کردید! CAC یکی از مهم‌ترین معیارهای تجارت الکترونیک محسوب می‌شود زیرا می‌تواند به شما در ارزیابی اثربخشی هزینه‌های بازاریابی کمک کند. ۱۰. رضایت و حفظ مشتری (CSR): این مورد، در ظاهر خیلی ساده است. مشتری‌ها را شاد کنید و آن‌ها همچنان مشتری شما خواهند بود. با این حال، بسیاری از شرکت‌ها معتقدند که برای سهامداران ارزش بیشتری نسبت به مشتریان دارد. شما می‌توانید از شاخص‌های عملکرد چندگانه از جمله نمرات رضایت مشتری و درصد مشتریانی که خریدشان را تکرار می‌کنند، برای سنجش CSR استفاده کنید. ۱۱. امتیاز پیش‌برنده‌ی خالص (Net Promoter Score, NPS): مقدار عددی NPS یکی از بهترین‌ شاخص‌های حاکی از رشد بلند مدت شرکت است. برای تعیین نمره‌ی NPS خود، بررسی‌های سه ماهه‌ی خود را به مشتریان ارسال کنید تا ببینید که چقدر احتمال دارد سازمان شما را به کسانی که می‌شناسند توصیه کنند. ابتدا با اولین بررسی خود، یک حالت پایه‌ای بسازید و اقدامات لازم را انجام دهید تا بتوانید این تعداد را در سه ماهه‌های متوالی افزایش دهید. ۱۲. تعداد مشتریان: این شاخص عملکرد نیز مانند سود نسبتا ساده است. با تعیین تعداد مشتریانی که کسب کرده اید و از دست داده اید، میتوانید بیشتر درک کنید که آیا شما نیازهای مشتریان خود را برآورده می‌کنید یا خیر. معیار‌های فرآیندی ۱۳. تیکت‌های پشتیبانی مشتری (Customer Support Tickets): تجزیه و تحلیل تعداد تیکت‌های جدید، تعداد تیکت‌های بررسی شده و زمان بررسی به شما کمک خواهد کرد که بهترین بخش خدمات را در صنعت خود ایجاد کنید. ۱۴. درصد ضایعات محصول: تعداد واحدهای معیوب را بیابید و آن را به تعداد کل واحدهای تولید شده در محدوده‌ی زمانی مورد بررسی تقسیم کنید. واضح است که این عدد هر چقدر پایین‌تر باشد، بهتر است. ۱۵. اندازه گیری کارایی LoB: میزان کارایی و بهره‌وری را می‌توان در هر صنعتی اندازه گیری کرد. به عنوان مثال در صنعت تولید می‌توانید کارایی سازمان خود را با تجزیه و تحلیل تعداد واحدهای تولید شده در هر ساعت و میزان زمان کارکرد کارخانه خود، اندازه گیری کنید. معیار‌های نیروی انسانی ۱۶. نرخ گردش کار کارکنان (Employee Turnover Rate, ETR): برای تعیین ETR، تعداد کارکنانی که شرکت را ترک کرده اند به میانگین کارکنان تقسیم کنید. اگر ETR بالایی دارید، وقت خود را صرف بررسی فرهنگ محل کار خود، بسته‌های کاری و محیط کار کنید. ۱۷. درصد پاسخ به فرصت‌های شغلی باز: هنگامی که شما درصد بالایی از متقاضیان واجد شرایط را برای موقعیت‌های شغلی باز خود درخواست می‌کنید، می‌دانید که مخاطبان مناسب را پیدا می‌کنید. این امر به افزایش تعداد مصاحبه شوندگان نیز منجر خواهد شد. ۱۸. رضایت کارکنان: اگر کارکنان شما خوشحال باشند، سخت‌تر کار و تلاش می‌کنند؛ به همین سادگی! ارزیابی رضایتمندی کارکنان از طریق نظرسنجی و معیارهای دیگر برای سلامت اداری و سازمانی شما حیاتی است. ۱۳ مثال و تعریف مفید دیگر از KPIها معیار‌های نیروی انسانی ۱. نرخ بازنشستگی: این معیار برای هر سازمانی که یک طرح نیروی کار استراتژیک را توسعه می‌دهد بسیار مهم است. این مورد را می‌توان با بررسی تعداد کارکنانی که بازنشسته شده اند به عنوان درصدی از کل تعدادکارکنان به دست آورد. اگر نیروی کار پیری نداشته باشید، گردش مالی نیز معیار خوبی است. ۲. دانش به دست آمده با آموزش: این مورد به شرکت کمک می‌کند تا اثربخشی آموزش کارمندان را ببیند. با ایجاد یک امتحان و نظارت بر درصد نرخ قبولی و درصد متوسط نمره می‌توان این مورد را بررسی کرد. اگر شما یک سازمان بزرگ‌تر هستید، قبل از آموزش می‌توانید از یک پیش آزمون (pre-test) استفاده کنید و سپس بعد از تمرین از یک پس آزمون (post-test) برای مشخص کردن آن چه که کارکنان آموخته اند، کمک بگیرید. ۳. ارتقاء داخلی در مقابل استخدام خارجی (Internal Promotions Vs. External Hires): این معیار نسبت تعداد کارکنان مشغول کار در یک شرکت (ارتقاء داخلی) به تعداد استخدام‌های خارجی را مشخص می‌کند. این امر می‌تواند به طور خاص در برنامه ریزی جانشینی‌های سازمانی موثر باشد. ۴. نسبت رقابت پذیری دستمزد (Salary Competitiveness Ratio, SCR): برای ارزیابی میزان رقابت پذیری گزینه‌های جبران خسارت استفاده می‌شود. این نسبت با تقسیم حقوق و دستمزد شرکت به حقوق و دستمزد متوسط ارائه شده توسط رقبا یا بخش‌های دیگر صنعت شما تعیین می‌شود. معیارهای مشتری ۵. نرخ تعویض مشتری (Customer Churn Rate): این معیار درصد مشتریانی را نشان می‌دهد که یا دیگر خرید خود را تکرار نمی‌کنند و یا خدمات خود را در طول یک دوره‌ی معین متوقف می‌کنند. محاسبه‌ی این معیار با تقسیم تعداد مشتریان از دست رفته در یک دوره بر تعداد کل مشتریان در شروع دوره انجام می‌پذیرد. اطمینان حاصل کنید که تعداد مشتریانی را در نظر بگیرید که باید در آن دوره تجدید سرویس انجام دهند. ۶. میزان تماس‌های دریافتی از طریق کانال‌های ارتباطی مختلف: پیگیری تعداد درخواست‌های پشتیبانی از طریق تلفن و ایمیل به شما این امکان را می‌دهد تا ببینید مشتریان کدام روش را ترجیح می‌دهند. این بررسی را می توانید به صورت ماهانه تکرار کنید. ۷. درصد مشتریانی که «خیلی» و «شدیدا» راضی هستند: تعیین این معیار فرصتی است برای بررسی بیشتر آن چه که مشتریانِ خوشحال را راضی می‌کند و باید در طول یک زمان مشخص و مناسب بررسی شود. بنابراین سوالات خود را در نظر سنجی‌ها مربوط به هم مطرح کنید. محاسبه‌ی این معیار بسیار ساده است بدین صورت که نسبت مشتریان «خیلی» و «شدیدا» راضی را به کل تعداد پاسخ دهندگان محاسبه می‌کنید. ۸. بازدید‌های جدید و تکراری وب سایت: این امکان را برای شرکت‌ها فراهم می‌کند تا ترافیک وب سایت خود را متفاوت کرده و بینش خاصی را بر روی مشتریان بالقوه‌ی خود ایجاد کنند. این معیار با تقسیم تعداد بازدید کنندگان جدید به کل تعداد بازدیدها به دست می‌آید. معیارهای مالی ۹. جریان نقدی از فعالیتهای تامین مالی: این معیار نشان دهنده‌ی قدرت مالی سازمان میباشد و به صورت زیر محاسبه می‌گردد: (سهام / پول نقدی پرداخت شده به عنوان سود سهام و بازپرداخت بدهی) - (پول نقد دریافت شده از اوراق بهادار یا بدهی) = (جریان نقدی از فعالیت‌های تامین مالی) ۱۰. متوسط هزینههای سالانه برای سرویس یک مشتری: این مقدار متوسط مورد نیاز برای خدمت به یک مشتری است که با تقسیم مجموع هزینه‌ها به تعداد کل مشتریان حاصل می‌شود. ۱۱. EBITDA: خلاصه شده‌ی "Earnings Before Interest, Taxes, Depreciation, & Amortization" است که مقدار درآمد را بعد از در نظر گرفتن هزینه‌ها و کم کردن بهره، مالیات و استهلاک محاسبه می‌کند. ۱۲. هزینه‌های نوآوری: این معیار میزان پولی را که سازمان برای نوآوری هزینه می‌کند، نشان می‌دهد. بعضی از سازمان‌ها این هزینه را جهت تحقیق و توسعه در نظر می‌گیرند و ممکن است که سازمان‌های دیگر دارای شرایط حسابداری متفاوت باشند. در نهایت، اگر شما از این معیار استفاده میکنید، نوآوری را به عنوان یک استراتژی کلیدی قبول دارید. ۱۳. نسبت ارزش ماندگاری مشتری به هزینه‌ی خرید مشتری: نسبت ارزش ماندگاری مشتری به هزینه‌ی جذب مشتری، در صورت مطلوب، باید بیشتر از یک باشد. اگر هزینه‌ی به دست آوردن مشتری بیشتر از سود آن باشد، در این صورت این مشتری سودآور محسوب نمی‌شود. چگونه KPI‌ مناسب را انتخاب کنم؟ KPIهای مناسب برای شما ممکن است KPIهای مناسبی برای یک سازمان دیگری نباشند. اطمینان حاصل کنید که در مورد بسیاری از شاخصهای عملکرد کلیدی تحقیق کرده اید، در این صورت میتوانید تعیین کنید که کدام یک برای صنعت شما مناسب است. تعیین اهداف KPI به شما در درک و مقابله با اهدافتان کمک خواهد کرد و سپس آن‌ها را در بخش خود ادغام کنید. KPIها نه تنها باید با صنعت شما بلکه با استراتژی شما نیز منطبق باشند.
  17. فرهاد شیری

    تمام برنامه ها در زمان شروع در یک نخ به نام Main Thread اجرا می شوند. نخ های ایجاد شده توسط برنامه درسطح کاربر هستند. اصولا نخ ها در دو سطح کاربر و سطح هسته ایجاد می شوند. که هر پلت فرم برنامه نویسی هم برای خود از یک تکنولوژی برای مدیریت نخ ها استفاده میکند . برای اطلاعات بیشتر می تونید مباحث آپارتمان نخ ها و STA single thread apartement رامطالعه کنید. بنابراین وقتی که یک نخ اصلی برنامه اجرا می شود توسط سیستم عامل عملیات Timing , priority , state,... کنترل می شود و اینکه شما بتونید برنامه ای بنویسید که از تمام هسته های پردازشگر در جهت اجرای بهتر برنامه خود استفاده نمایید باید برنامه شما قابلیت موازی کردن عملیات ها ویا همزمانی پروسه هارا داشته باشد در این صورت شما با استفاده از کتابخانه های همزمانی می توانید در زمان ایجاد حوضچه های نخ Thread Pool نحوه استفاده از هسته ها را برای این حوضچه ها تعریف کنید که مثال بتوانند از تمام هسته ها به طوری که هسته های دیگر در اجرای وظایف خود دچار اختلال نشوند، اجرا شوند. مثلا تصور کنید یک مجموعه از داده عددی را می خواهید سورت کنید همانطور که می بینید با استفاه از حوضچه های نخ می توانید به صورت موازی عملیات هر بخش را دریک نخ اجرا کنید و خروجی هر نخ را با نخ های دیگه ادغام کنید تا در نهایت کل مجموعه مرتب شود. procedureparallelmergesort(id, n, data, newdata) begin data = sequentialmergesort(data) for dim = 1 to n data = parallelmerge(id, dim, data) endfor newdata = data end البته این الگوریتم اجرا برای شما نمایش میده! و از آنجائیکه نوشتن برنامه های موازی کار بسیار پیچیده ای می باشد و معمولا به تجربه ای زیاد نیاز دارید بهتر است از کتابخانه های موازی سازی که خیلی بهینه این قبیل موازی سازی را برای شما انجام می دهند استفاده نمایید
  18. الهه انصاری

    ساختار شکست کار (WBS)

    ساختار شکست کار (Work Breakdown Structure, WBS) یک پروژه‌ی کلیدی قابل ارائه است که کار گروه را به بخش‌های مدیریتی سازماندهی می‌کند. پیکره‌ی دانش مدیریت پژوه (Project Management Body of Knowledge، PMBoK) ساختار شکست کار را به عنوان «تجزیه‌ی سلسله مراتبی تحویل محتوای کار انجام شده توسط تیم پروژه» تعریف می‌کند. ساختار شکست کار به صورت بصری دامنه‌ی کار را به دسته‌های مدیریتی تقسیم می‌کند که یک تیم پروژه می‌تواند درک کند، به طوری که هر سطح از این ساختار تعریف و جزئیات بیشتری را برای ما فراهم می‌کند. شکل زیر یک ساختار تجزیه و تحلیل کار را با سه سطح تعریف می‌کند. ساختار شکست کار یک راه آسان برای درک نحوه‌ی عملکرد یک WBS به عنوان یک نقشه یا طرح خاص از پروژه است. در شروع کار WBS‌ پروژه را یک انتزاع سطح بالای قابل ارائه در نظر می‌گیرد و در ادامه با استفاده از سلسله مراتب کلی زیر به زیر مجموعه‌هایی تجزیه می‌شود. ساختار شکست کار قابل ارائه تیم پروژه، WBS‌ را با مشخص کردن عملکرد‌های قابل اجرای اصلی، تقسیم آن‌ها به سیستم‌های کوچک‌تر و زیر مجموعه‌ها ایجاد می‌کند. این فرآورده‌های فرعی تا زمانی که یک فرد بتواند به آن‌ها اختصاص یابد، بیشتر تجزیه می‌شوند. در این سطح، بسته‌های کاری (work packages) خاص مورد نیاز برای تولید زیر مجموعه‌های قابل اجرا، شناسایی و دسته بندی می‌گردند. بسته‌ی کاری نشان دهنده‌ی لیستی از وظایف برای تولید واحد خاصی از کار است. اگر یک زمان بندی دقیق از پروژه را مد نظر داشته باشید، می‌توانید وظایف مربوط به یک بسته‌ی کاری را به عنوان تکالیفی که افراد تیم باید در زمان خاص و با سطح تلاش مشخص به پایان برسانند، شناسایی کنید. از دیدگاه هزینه، این بسته‌های کاری معمولا گروه بندی شده و برای تولید نتیجه ی مورد نظر به بخش خاصی اختصاص داده شده می‌شوند. این بخش‌ها یا حساب‌های هزینه‌ای (cost accounts)، در یک ساختار شکست سازمانی تعریف می‌شوند و بودجه‌ای جهت تولید فرآورده‌های فرعی به آن‌ها اختصاص می‌یابد. با ادغام حساب‌های هزینه‌ای از ساختار شکست سازمانی و ساختار شکست پروژه، کل سازمان می‌تواند پیشرفت‌های مالی را علاوه‌ بر عملکرد پروژه دنبال کند. چرا از ساختار شکست کار (WBS) استفاده کنیم؟ ساختار شکست کار علاوه بر تعریف و سازماندهی پروژه، مزایای متعددی دارد. بودجه‌ی پروژه می‌تواند به سطوح بالای ساختار شکست کار اختصاص داده شود و بودجه‌های بخش‌ها می‌توانند به سرعت بر مبنای WBS هر پروژه محاسبه شوند. با تخصیص برآورد هزینه‌ی زمان و هزینه برای بخش‌های خاصی از WBS، برنامه و بودجه‌ی پروژه می‌تواند به سرعت توسعه یافته و پیش روی کند. به محض اجرای پروژه، بخش‌های مختلف این ساختار می‌توانند جهت شناسایی عملکرد هزینه‌های پروژه و مسائل و مشکلات حول سازمان‌ها ردیابی شوند. برای کسب اطلاعات بیشتر در مورد تخصیص زمان، قانون ۱۰۰٪ را ببینید. همچنین یک WBS میتواند برای شناسایی خطرات بالقوه در یک پروژه‌ مورد استفاده قرار گیرد. اگر ساختار WBS دارای شاخه‌ای است که به خوبی تعریف نشده، آن را یک ریسک تعریف دامنه در نظر می‌گیریم. این خطرات باید در گزارش پروژه ردیابی شده و به هنگام اجرای پروژه دنبال شوند. با ادغام WBS و ساختار شکست سازمانی، مدیر پروژه میتواند نقاط ارتباطی را شناسایی کرده و یک طرح ارتباطی را در سراسر سازمان پروژه بسازد. هنگامی که یک پروژه در حال سقوط است، ارجاع به WBS به سرعت نتایج عمده‌ای را که تحت تاثیر بسته‌ی کاری شکست خورده هستند و یا به تازگی تحویل داده شده اند، شناسایی می‌کند. WBS همچنین این امکان را برای ما فراهم می‌کند تا وضعیت زیر مجموعه‌های قابل ارائه را به صورت رنگی کد گذاری و مشخص کنیم. اختصاص دادن رنگ قرمز به «دیر شدن»، زرد به «در معرض خطر»، سبز برای «هدف» و آبی برای «نتایج تکمیل شده» می‌تواند یک راه موثر برای ایجاد نقشه‌ی حرارتی (heat-map) پیشرفت پروژه باشد و توجه مدیریت را به بخش‌های کلیدی ساختار شکست کار جلب کند. دستورالعملهای ساختار شکست کار دستورالعمل‌های زیر باید هنگام ایجاد یک WBS در نظر گرفته شوند: سطح بالا نشان دهنده‌ی محصول قابل ارائه‌ی نهایی یا همان پروژه است. زیر مجموعه‌های قابل ارائه (sub-deliverables) شامل بسته‌های کاری است که به بخش یا واحدی از سازمان اختصاص یافته است. نیاز نیست که تمام عناصر WBS نسبت به همان سطح تعریف شوند. یک بسته‌ی کاری، خود کار، مدت زمان و هزینه‌های مربوط به وظایف مورد نیاز برای تولید زیر مجموعه‌ها را تعریف می‌کند. مدت زمان انجام هر بسته‌ی کاری نباید بیش از 10 روز طول بکشد. بسته‌های کاری باید مستقل از بسته‌های کاری دیگر در ساختار شکست کار باشند. بسته‌های کاری منحصر به فرد هستند و نباید در طول WBS تکرار شوند. ابزار مورد نیاز برای ایجاد یک WBS ایجاد WBS، یک تلاش تیمی است که تصویری از ورودی‌ها و چشم اندازی چندگانه از پروژه‌ی هدف را برای گروه فراهم می‌کند. یک روش موثر این است که جلسه‌ی طوفان مغزی با سازمانهای مختلفی که با این پروژه درگیر هستند، ترتیب داد. تیم پروژه می‌تواند از ابزارهای ساده (low-technology tools) مانند یک تخته سفید، کارت‌های یادداشت چسبی برای شناسایی نتایج عمده، زیر مجموعه‌ها و بسته‌های کاری خاص استفاده کند. این کارت‌ها را می‌توان به دیوار چسباند و مجددا سازماندهی کرد زیرا تیم همواره در مورد نتایج اصلی و بسته‌های کاری درگیر در پروژه بحث می‌کند. رویکرد low-technology، بسیار آسان است اگرچه در تیم‌های توزیع شده عملکرد خیلی خوبی ندارد. چندین ابزار وجود دارد که از نقشه برداری ذهنی، طوفان مغزی و WBS‌پشتیبانی می‌کند. MatchWare MindView یک بسته‌ی نرم افزاری ساده برای استفاده از ذهن است که از ساختار WBS، طرح‌های پروژه، نمودارهای گانت پشتیبانی می‌کند و به راحتی با پروژه‌های مایکروسافت برای توصیف بیشتر ساز و کار پروژه سازگار است. شکل زیر یک مثال از WBS را به کمک ابزار MAtchWare MindView نشان می‌دهد. نمایش یک WBS با کمک MIndView مزیت کلیدی MatchWare MindView، تفسیر راحت WBS به زمان بندی و برنامه‌ی سطح بالای پروژه است. فرمت طبیعی ساختار شکست کار، برنامه‌ی زمانی پروژه است. مدیر پروژه به راحتی می‌تواند برآوردهای بودجه و مدت زمان تعیین شده را در یک ابزار نقشه برداری ذهنی به کار بندد. این برآورد بودجه و مدت زمان می‌تواند به راحتی به اکسل مایکروسافت و یا پروژه‌ی مایکروسافت برای برنامه ریزی و تجزیه و تحلیل اضافی منتقل شود. مدیران پروژه به دنبال ابزارهایی هستند که به کارشان سرعت بخشند و به کاهش میزان بار اجرایی که همراه با فرآیندهای مدیریتی پروژه است، کمک کنند.
  19. قاسم رمضانی منش

    نه هیچ برنامه‌ای به‌طور خودکار در چند ترد اجرا نمیشه. مرسی بابت پاسخ. بله الان که با خوندن فایل /proc/PID/status متوجه شدم که کلا این برنامه از یک thread بیشتر استفاده نمیکنه :).
  20. سروش ربیعی

    نه هیچ برنامه‌ای به‌طور خودکار در چند ترد اجرا نمیشه. دلیل این که تعداد زیادی هسته رو درگیر می‌بینید سرعت بالای context switch هست. برای این که ببینید هر پردازه چند ترد ایجاد کرده از دستور زیر استفاده کنید: ps huH p با خوندن اطلاعات procfs هم میشه: cat /proc//status | grep Threads
  21. بهنام صباغی

    -pipe
  22. قاسم رمضانی منش

    دقیقا متوجه نشدم منظورتان را از محیط توسعه . مشخصات سیستمی که این برنامه را اجرا کرده : OS: Fedora release 29 (Twenty Nine) x86_64 Kernel: 4.19.6-300.fc29.x86_64 CPU: Intel i7 M 620 (4) @ 2.667GHz GPU: NVIDIA NVS 3100M Memory: 3801MiB و کامپایلر g++ (GCC) 8.2.1 20181105 (Red Hat 8.2.1-5) بدون دستکاری فلگ‌ها استفاده با چه فلگ هایی این عمل صورت میگیره ؟
  23. بهنام صباغی

    سلام بستگی به محیط توسعه و ... داره ولی امکان مالتر ترد کامپایل شدن وجود داره میتونید با فلگ تنظیم کنید با چند ترد برنامه کامپایل بشه.
  24. با سلام ! آیا برنامه ها به صورت خودکار در حالت Multi Threading اجرا میشوند ؟ بنده قطعه کد زیر را کامپایل و اجرا گرفته ام : main.cpp #include <iostream> int main(void){ constexpr double long AnotherIndex = 999999999999999999; for(double long index=0;index <= AnotherIndex;++index){ std::cout << index << std::endl; } return 0x0000; } بعد از اجرا ، خروجی برنامه ی htop به اینصورت بود : 1 [|||||||||||||||||||||| 71.9% ] Tasks: 166, 738 thr; 4 running 2 [||||||||||||||||||| 60.30%] Load average: 2.94 1.88 1.61 3 [||||||||||||||||||||||| 74.1% ] Uptime: 04:50:24 4 [|||||||||||||||||| 56.6% ] Mem[||||||||||||||||||||||||2.76G/3.71G] Swp[||| 790M/7.99G] PID USER PRI NI VIRT PES SHR S CPU% MEM% TIME+ Command 18991 ghasem 20 0 5616 1692 1544 R 89.1 0.0 1:13.01 /tmp/Opt/main یعنی زمان اجرای این برنامه هر چهار هسته ی پردازنده درگیر خواهد شد ! ... آیا کامپایلر به صورت خودکار متناسب با پردازش Multi Threading کد را کامپایل میکند ؟ یا اینکه این‌کار به عهده سیستم عامل می‌باشد ؟
  25. فرهاد شیری

    البته در تکمیل فرمایش جناب اسدزاده! بله در واقع تفاوت Class و Struct در زبان ++C مربوط به همین دسترسی به خصیصه های پیش فرض تعریف شده است. اما اغلب برنامه نویسانی که از زبان C به ++C مهاجرت کرده اند معمولا برای مدل کردن داده های خود از struct استفاده میکند چون ضمن خوانایی بیشتر از نظر مفهومی هم خیلی بهتر هست و البته شاید یک دلیل هم اینکه از struct استفاده میکنیم برای این هست که وقتی شما می خواهید داده های تودرتو با struct و union ایجاد کنید، مطمنا تعریف struct بسیار ملموس تر و قابل فهم تر از استفاده از تعریف class می باشد مثل کد زیر... static struct ITEM_STRUCT{ char*strName; int nCmdLen; int nIndLen; union stUnion { int ix; int iy; struct iS { char * isC; int isZ; } } stU1,stU2 ; int getIndLen(int ItemType) { if (ItemType != INT_ACK) return nIndLen; else { if(gbGenerateAx) return nIndLen+1; else return nIndLen; } } }
  26. کامبیز اسدزاده

    با توجه به پاسخی که در مورد دلیلش یافتید، در تکمیل روش جنابِ @فرهاد شیری روش‌های مختلفی برای تعاریف کلاس‌ها از نوع template در فایل cpp وجود دارد که قبل از C++17 روش زیر یکی از روش‌های رایج است که در آن شما کلاس را با انواع صریح تعریف می‌کنید. کد مربوط به فایل .h به صورت زیر خواهد بود: #ifndef ENTITY_H #define ENTITY_H #include <iostream> #include <string> template<class T> #define ENTITY_INT template class Entity<int>; #define ENTITY_STRING template class Entity<std::string>; #define ENTITY_BOOL template class Entity<bool>; #define ENTITY_DOUBLE template class Entity<double>; /*! * \brief The Entity class */ class Entity { public: Entity(); ~Entity(); /*! * \brief Function * \param t */ void Function(const T &t) const; }; #endif // ENTITY_H همچنین کد مربوط به فایل .cpp به صورت زیر پیاده سازی خواهد شد: #include "entity.h" template<class T> Entity<T>::Entity() { } template<class T> Entity<T>::~Entity() { } template<typename T> void Entity<T>::Function(const T &t) const { std::cout << "T = " << t << std::endl; } ENTITY_INT ENTITY_STRING ENTITY_BOOL ENTITY_DOUBLE روش استفاده: #include <iostream> #include "entity.h" int main(void) { Entity<int> *en = new Entity<int>; en->Function(10); delete en; Entity<double> *en2 = new Entity<double>; en2->Function(2000.23); delete en2; Entity<std::string> *en3 = new Entity<std::string>; en3->Function("Hello, World!"); delete en3; } نکته: در استاندارد ۱۷ استفاده از پارامتر‌های auto نیز برای بهینه نویسی بیشتر مفید هستند.
  27. کامبیز اسدزاده

    تفاوتی که بین struct و class وجود دارد بین دسترسی‌های پیشفرض آنها است؛ در class عضو‌ مربوطه به صورت پیشفرض دارای دسترسی خصوصی (private) بوده و در struct با دسترس عمومی (public) تعریف می‌شوند. در مثال زیر عضو x مربوط به struct به صورت پیشفرض دارای دسترسی عمومی می‌باشد و عضو x مربوط به class دارای دسترسی خصوصی است. struct Demo { Demo() {} int x; }; class Demo { Demo() {} int x; }; در مثال زیر هر دوی ساختار و کلاس مربوط به Demo دارای دسترسی‌های یکسان یعنی هر دو عمومی (public) هستند. struct Demo { Demo() {} int x; }; class Demo { public: Demo() {} int x; };
  28. با سلام. بنده خروجی کد اسمبلی تولید شده Struct و Class را بررسی کردم ظاهرا که خروجی یکسانی دارند ! آیا واقعا دیگر تفاوتی بین کلمه‌کلیدی struct و class در سی‌پلاس‌پلاس نیست ؟ struct.cpp struct AnotherType{ public : int StructType; }; int main(){ AnotherType Object; return 0; } class.cpp class AnotherType{ public : int ClassType; }; int main(){ AnotherType Object; return 0; } و خروجی های اسمبلی تولید شده : struct.cpp [ghasem@clibcore test]$ g++ -S struct.cpp -o Struct && cat Struct .file "struct.cpp" .text .globl main .type main, @function main: .LFB0: .cfi_startproc pushq %rbp .cfi_def_cfa_offset 16 .cfi_offset 6, -16 movq %rsp, %rbp .cfi_def_cfa_register 6 movl $0, %eax popq %rbp .cfi_def_cfa 7, 8 ret .cfi_endproc .LFE0: .size main, .-main .ident "GCC: (GNU) 8.2.1 20181105 (Red Hat 8.2.1-5)" .section .note.GNU-stack,"",@progbits class.cpp [ghasem@clibcore test]$ g++ -S class.cpp -o Class && cat Class .file "class.cpp" .text .globl main .type main, @function main: .LFB0: .cfi_startproc pushq %rbp .cfi_def_cfa_offset 16 .cfi_offset 6, -16 movq %rsp, %rbp .cfi_def_cfa_register 6 movl $0, %eax popq %rbp .cfi_def_cfa 7, 8 ret .cfi_endproc .LFE0: .size main, .-main .ident "GCC: (GNU) 8.2.1 20181105 (Red Hat 8.2.1-5)" .section .note.GNU-stack,"",@progbits و برای اطمینان خروجی حاصل از دستور diff Struct Class : [ghasem@clibcore test]$ diff Struct Class 1c1 < .file "struct.cpp" --- > .file "class.cpp"
  1. نمایش فعالیت های بیشتر
×