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

پرچمداران

  1. کامبیز اسدزاده

    کامبیز اسدزاده

    بنیـــان گذار


    • امتیاز

      3

    • تعداد ارسال ها

      319


  2. فرهاد شیری

    فرهاد شیری

    مدیران مرجع


    • امتیاز

      1

    • تعداد ارسال ها

      134


  3. قاسم رمضانی منش

    قاسم رمضانی منش

    میانجی گر‌ها


    • امتیاز

      1

    • تعداد ارسال ها

      61



مطالب محبوب

در حال نمایش مطالب دارای بیشترین امتیاز در یکشنبه, 20 مرداد 1398 در همه بخش ها

  1. 1 امتیاز
    معمولا یکی از چالش های برنامه نویسی شی گراء که همواره بر سر راه برنامه نویسان وجود دارد، Map شدن دیتاهای موجود در بانک های اطلاعاتی در کلاس های model می باشد. به این ترتیب که بتوان داده ها را در فیلدهایی که در کلاسهای مدل که تعریف شده اند را به این داده ها متصل نمود به همین علت بعد از این Map شدن داده ها باید متدهایی جهت یکپارچه سازی داده ها در این کلاسهای model تعریف نمود تا هم بتوان مقادیر این داده ها را بازیابی کرد وهم بتوان به راحتی این داده ها را به روز رسانی نمود. در صورتی که تجربه کار با entity framework ها را داشته باشید، قطعا متوجه شده اید که وقتی داده ها را به Property کلاسهای مدل Map میکنیم به راحتی با خود همین خصیصه های تعریف شده هم عملیات بازیابی را انجام می دهیم و هم به راحتی مقدار های جدید فیلدهای مرتبط به خصیصه راهم به روز رسانی می نماییم، که با این کارهم بازدهی برنامه بالاتر خواهد بود وهم از نوشتن متدهای پردردسر هم راحت میشویم. با ذکر این مقدمه قصد دارم کلاسی را خدمتتان معرفی کنم که جهت تعریف property ها استفاده می شود، البته استفاده از خصیصه ها در entity framework یکی از کاربرد property می باشد. با استفاده از کلاس زیر می توانید انواع مختلف داد های رایج را به صورت خصیصه تعریف کنید و به راحتی بدون نیاز به تعریف متدهای اضافی از این خصیصه ها استفاده نمایید. البته به علت اینکه این خصیصه ها قابلیت تعریف const را دارا می باشند بسیار مناسب پردزاش های چند نخی می باشند. #ifndef PROPERTY_H_ #define PROPERTY_H_ #include "MyException.h" #include "typeinfo" template<typename Tp> struct CProperty{ typedef Tp property_type; private: inline void setLength(property_type& rhs) throw(MyException){ const_cast<size_t&> (length) = (reinterpret_cast<std::string*>(&rhs))->length(); } const property_type m_property; public: /*Preorder: * default constructor is commented! because if * uncommented and create new object from this and no passed * default value property and when compile the program compiler * no sending error but show error in linker program. */ //CProperty(); //Preorder: copy constructor CProperty(const CProperty<property_type>& rhs): m_property(rhs.m_property) ,length(0) ,data(get()) {} //Preorder: copy operator const CProperty& operator=(const CProperty<property_type>& rhs){ const_cast<property_type&>(m_property) = rhs.m_property; return *this; } /*Preorder: * when create new property must pass the default value of * property! */ explicit CProperty(const property_type& rhs) : m_property(rhs) ,length(0) ,data(get()) { operator =(rhs); } //PreOrder: setter method inline void operator=(const property_type& rhs) throw(MyException){ const_cast<property_type&>(m_property) = rhs; if(strcmp(typeid(property_type).name(),"Ss") == 0) setLength(const_cast<property_type&>(rhs)); } //override comapre method in string class inline bool operator==(const property_type& rhs) throw(MyException){ return get().compare(rhs) == 0; } inline bool operator==(const property_type& rhs) const throw(MyException){ return get().compare(rhs) == 0; } operator Tp() { return m_property; } operator Tp() const { return m_property; } //get the value property property_type& get(){ return *(reinterpret_cast<property_type*>(&const_cast<property_type&>(m_property))); } const property_type& get() const { return *(reinterpret_cast<property_type*>(&const_cast<property_type&>(m_property))); } const size_t length; const property_type data; }; typedef struct CProperty<bool> Bool; typedef struct CProperty<int> Int; typedef struct CProperty<std::string> String; #endif /* PROPERTY_H_ */ و به راحتی به روش های زیر هم می توانید از کلاس فوق استفاده کنید. /*define and set new string property in direct mode*/ const String myStr1("test1"); String myStr2("test1"); /*change property value.l*/ //myStr1 = "change test1"; std::cout << "My String 1 property is:(" << myStr1.data << ") and this length is:(" << myStr1.length << ") " << '\n'; std::cout << "My String 2 property is:(" << (string)myStr2 << ") and this length is:(" << myStr2.length << ") " << '\n'; /*comapre two strings*/ if(myStr2 == myStr1) std::cout << "myStr2 and myStr1 is equal!" << '\n'; else std::cout << "myStr2 and myStr1 is not equal!" << '\n'; /*define boolean property*/ Bool bol(false); std::cout << bol << '\n'; Bool bol2(false); std::cout << bol << '\n'; if((bool)bol2 == (bool)bol) std::cout << "bol2 and bol is equal!" << '\n'; else std::cout << "bol2 and bol is not equal!" << '\n'; /*define int property*/ Int myInt(10); //myInt = 20; //change property در صورتی که ابهام وجود داشت بفرمایید. و اگر هم پیشنهادی و یا انتقادی داشته باشید، خوشحال خواهم شد مطرح کنید. موفق باشید
  2. 1 امتیاز
    استارتاپ چیست و چگونه راه اندازی می‌شود استارتاپ یا استارت‌آپ یک سرمایه‌گذاری به شکل کارآفرینی است که طی آن یک شرکت نوپا ایده‌ی جدیدی برای کسب‌و‌کار ارائه می‌دهد. طبق تعریف استیو بلنک، پروفسور دانشگاه استنفورد، استارتاپ یک سازمان است که برای پیدا کردن یک مدل کسب‌و‌کار تکرارپذیر و مقیاس‌پذیرراه‌اندازی می‌شود. البته اختلاف ‌بر سر تعریف استارتاپ زیاد است؛ اما نکته‌ی مشترک در همه‌ی آن‌ها این است که بر اساس یک ایده‌ی خلاقانه و جدید فعالیت آن‌ها آغاز می‌شود. این ایده‌ها بازار نیازمندی‌ها را هدف قرار می‌دهند و با ارائه‌ی یک محصول یا خدمات جدید و استفاده از تکنولوژی، خیلی سریع رشد پیدا می‌کنند. از آنجایی که هدف از راه‌اندازی یک استارتاپ پیدا کردن مدل کسب‌و‌کار است؛ عمر آن نمی‌تواند طولانی باشد و معمولا بعد از گذشت چند سال به موفقیت می‌رسد یا بودجه‌ی آن تمام می‌شود و شکست می‌خورد. استارتاپ‌ها برای شروع فعالیت خود لزوما نیازی به ثبت شدن شرکت ندارند و از هرجا و با هر تعداد بنیان‌گذار می‌توانند فعالیت خودشان را آغاز کنند. بودجه‌ی راه‌اندازی استارتاپ‌های معمولا کم است؛ اما اگر ایده‌ی خوبی داشته باشند خیلی زود می‌توانند مورد حمایت سرمایه‌گذاران قرار بگیرند. اصطلاحات رایج در استارتاپ افرادی که با استارتاپ‌ها درگیر هستند معمولا از اصطلاحات خاصی برای بیان مقاصد خود استفاده می‌کنند. در ادامه به معرفی چند نمونه از این اصطلاحات می‌پردازیم. Lean Startup متودولوژی لین استارتاپ (Lean Startup) یا نوپای ناب به شما یاد می‌دهد که چگونه یک استارتاپ را هدایت کنید، چه موقع آن را تغییر دهید و از چه راه‌هایی برای رشد آن استفاده کنید. لین استارتاپ یک رویکرد علمی برای ساختن و مدیریت کردن استارتاپ‌ به شما می‌دهد و کمک می‌کند که محصول خودتان را سریع‌تر به دست مشتری برسانید. بسیاری از استارتاپ‌ها با ایده‌ی ساختن محصول مورد نیاز مردم راه‌اندازی می‌شوند. آن‌ها ماه‌ها و حتی سال‌ها زمان صرف می‌کنند که محصول خود را به بهترین نحو شکل دهند بدون اینکه آن را به مشتری نشان بدهند. همین موضوع باعث شکست خوردن بسیاری از آن‌ها می‌شود. زیرا آن‌ها با مشتری‌ها صحبت نمی‌کنند و در مورد محصولات خود از آن‌ها بازخورد نمی‌گیرند. زمانی که مشتری‌ها نتوانند با یک استارتاپ ارتباط برقرار کنند، به ایده‌ی آن اهمیتی نمی‌دهند و درنتیجه استارتاپ شکست می‌خورد. Unicorn Startup استارتاپ تک شاخ یا یونیکورن استارتاپ (Unicorn Startup) به استارتاپ‌هایی گفته می‌شود که رشد سریعی دارند و به ارزش بیش از ۱ میلیارد دلار می‌رسند. این لغت اولین بار در سال ۲۰۱۳ توسط سرمایه‌گذاری به نام آیلین لی ارائه شد و او از میان حیوانات افسانه‌ای، تک شاخ را به‌عنوان نماد این مدل استارتاپ‌ انتخاب کرد. ازجمله بزرگ‌ترین استارتاپ‌هایی که در این دسته جا می‌گیرند می‌توان به Uber ،Xiaomi ،Airbnb ،Dropbox و Pinterest اشاره کرد. بنیان‌گذار استارتاپ (Founder) به شخصی که استارتاپ را راه‌اندازی می‌کند بنیان‌گذار گفته می‌شود. این اشخاص معمولا علاقه‌ای به کار کردن برای دیگران ندارند و باور دارند که می‌توانند با تلاش‌های بی‌وقفه‌ی خود دنیا را تغییر دهند. این افراد می‌توانند با تعدادی از دوستان خود در این راه شریک شوند و وظایف سنگین را بین خودشان تقسیم کنند. راه‌اندازی یک استارتاپ به هیچ عنوان کار راحتی نیست و در طی آن، به بنیان‌گذاران آن فشار زیادی وارد خواهد شد. اما اگر فعالیته‌های آن‌ها موفقیت‌آمیز باشد، نتیجه‌ی آن هم از نظر احساسی و هم از نظر مالی بسیار خوب خواهد بود. شتاب‌دهنده‌ی استارتاپ (Startup Accelerators) شتاب‌دهنده‌ها شرکت‌هایی هستند که روی استارتاپ‌هایی با ایده‌های جالب و البته کاربردی سرمایه‌گذاری می‌کنند. این شرکت‌ها درصدی از مالکیت استارتاپ را می‌گیرند؛ اما در عوض خدماتی مانند آموزش توسط مربی‌ها و آشنا کردن آن‌ها با سرمایه‌گذاران و متخصصان آن رشته را برایشان فراهم می‌کنند. درواقع این شرکت‌ها شانس موفقیت استارتاپ‌ها و پیدا کردن سرمایه‌ی بالقوه برای فعالیت‌هایشان را بالا می‌برند. استارتاپ ویکند (Startup Weekend) استارتاپ ویکند یک رویداد آموزشی-تجربی ۵۴ ساعته است که معمولا در آخر هفته برگزار می‌شود. در این رویداد افراد مختلفی مانند علاقه‌مندان به استارتاپ، توسعه‌دهندگان، برنامه‌نویسان، مدیران کسب‌و‌کارها، بازاریاب‌ها و طراحان گرافیک حضور دارند. ایده‌ها در این رویداد مطرح می‌شوند و افراد گروه تشکیل می‌دهند تا طرح اولیه یا دموی ایده‌ی خود را پیاده‌سازی کنند. استارتاپ گرایند (Startup Grind) استارتاپ گرایند یک برنامه‌ی جهانی است که در آن از کارآفرینان موفق دعوت می‌شود تا داستان موفقیت‌ و چالش‌های استارتاپ خود را با دیگران به اشتراک بگذارند. افراد می‌توانند در این برنامه با پروژه‌های یکدیگر آشنا شوند و از تجربیات هم استفاده کنند. تجارت B2B این اصطلاح کوتاه شده‌ی عبارت Business to Business است و به کسب‌و‌کاری گفته می‌شود که محصولات و خدمات خود را به یک کسب‌و‌کار دیگر ارائه می‌دهد. این نوع تجارت در مقابل تجارت بی تو سی (B2C) قرار دارد. تجارت B2C تجارت B2C مخفف عبارت Business to customers است و به کسب‌و‌کارهایی گفته می‌شود که محصولات و خدمات خود را به مشتری‌های عرضه می‌کنند. تجارت C2C نوعی از سرویس است که کاربران با استفاده از آن، خدمات و کالاهای خود را به دیگر کاربران عرضه می‌کنند. وب‌سایت‌ها و سرویس‌های خرید و فروش اجناس دست دوم، از نمونه‌های تجارت Customer to Customer هستند. سرمایه‌ی بذری (Seed Funding) همان‌طور که یک گیاه از یک بذر شروع به رشد می‌کند، یک استارتاپ نیز از یک سرمایه‌ی اولیه شروع می‌شود. به سرمایه‌ای که در مرحله‌ی اولیه راه‌اندازی استارتاپ در اختیارش قرار می‌گیرد، سرمایه‌ی بذری گفته می‌شود. واگذاری (Vesting) به نوعی تخصیص سهامی گفته می‌شود که طی آن بعد از گذشت مدت زمانی، مقدار سهم تعیین‌شده به کارمندان داده می‌شود. به‌عنوان مثال اگر به یک کارمند ۲۰۰ سهام طی ۱۰ سال داده شود، یعنی بعد از گذشت هر سال ۲۰ سهم به او اختصاص پیدا می‌کند. این کار به کارمندان انگیزه می‌دهد که عملکرد خوبی داشته باشند و برای مدت زمان زیادی در شرکت کار کنند. بنچمارک (Benchmark) به فرآیندی گفته می‌شود که یک استارتاپ برای اندازه‌گیری موفقیت فعلی خود از آن استفاده می‌کند. سرمایه‌گذاران میزان موفقت استارتاپ‌ها را بر اساس بنچمارک‌ها می‌سنجند. به‌عنوان مثال وقتی می‌گوییم شرکت A به بنچمارک درآمد X در طی ۲ سال رسیده است یعنی این استارتاپ توانسته است طی ۲ سال میزان فروش خود را به X برساند. بوت‌استرپ (Bootstrapped) زمانی که گفته می‌شود یک شرکت بوت‌استرپ است، یعنی بودجه‌ی آن توسط خود کارآفرین یا بودجه‌ی خود شرکت تأمین شده است. وام موقت (Bridge loan) این نوع وام به Swing loan نیز معروف است و به مساعده‌هایی گفته می‌شود که بر اساس میزان درآمد به یک شخص داده می‌شود و فاصله‌ی بین درآمدهای عمده‌ را پر می‌کند. فروش (Buyout) یک استراتژی معمول برای خروج است که طی آن سهام شرکت به فروش می‌رسد و به خریداران آن اجازه‌ی کنترل شرکت داده می‌شود. سرمایه (Capital) به دارایی‌های مالی گفته می‌شود که در حال حاضر برای استفاده در دسترس هستند. کارآفرینان از سرمایه برای آغاز استارتاپ استفاده می‌کنند و مقدار آن را افزایش می‌دهند تا به رشد استارتاپ کمک کنند. دو دلیجنس (Due diligence) به ارزیابی و تحلیل سرمایه‌گذاران از وضعیت و پتانسیل‌های سرمایه‌گذاری گفته می‌شود. این ارزیابی می‌تواند شامل بررسی سوابق مالی و اندازه‌گیری ROI باشد. بازده سرمایه‌گذاری یا بازگشت سرمایه (ROI) همان‌طور که از نامش پیدا است، برگشت سرمایه را مورد بررسی قرار می‌دهد. درواقع به پولی گفته می‌شود که به یک سرمایه‌گذار به‌عنوان درصدی از سرمایه‌‌گذاری خود در استارتاپ برگشت داده می‌شود. به‌عنوان مثال اگر یک سرمایه‌گذار مبلغ ۲ میلیون دلار برای خرید ۲۰ درصد سهام یک شرکت خرج کند و شرکت با مبلغ ۴۰ میلیون دلار به فروش برسد، این یعنی آن سرمایه‌گذار مبلغ ۸ میلیون دلار از فروش شرکت دریافت خواهد کرد. خروج (Exit) برخی بنیان‌گذاران و سرمایه‌گذاران استارتاپ این‌گونه پولدار می‌شوند؛ Exit به متدی گفته می‌شود که یک سرمایه‌گذار و یک کارآفرین سرمایه‌ی خودشان را از شرکت خارج می‌کنند. خروج معمولا در زمان IPO و M&A اتفاق می‌افتد. آی‌پی‌او (IPO) زمانی است که یک استارتاپ سهام خودش را در یک فراخوان بورس برای فروش به مردم پیشنهاد می‌دهد. در این حالت یک شرکت خصوصی تبدیل به سهامی عام می‌شود و دیگر یک استارتاپ نیست. مالکیت و ادغام (Merge & Acquisition) زمانی است که استارتاپ توسط یک شرکت بزرگ‌تر خریداری یا با آن ادغام می‌شود. این اتفاق به صورت دوستانه (همراه با توافقنامه) یا خصمانه (بدون توافقنامه) صورت می‌گیرد. توافقنامه عدم ‌افشاگری (NDA) NDA مخفف عبارت Non-disclosure agreement است و به توافقنامه‌ای گفته می‌شود که طی آن هر ۲ طرف از اطلاعات حساس و محرمانه مانند اسرار تجارت محافظت می‌کنند و آن را با شخص سوم به اشتراک نمی‌گذارند. پیوت (Pivot) زمانی است که استارتاپ جهت استراتژی‌های خودش را سریعا تغییر می‌دهد. معمولا این تغییرات به دلیل عدم بازدهی اتفاق می‌افتند و طی آن بر ویژگی‌های دیگر محصولات یا مشتری‌ها تمرکز می‌شود. مذاکره در آسانسور (Elevator Pitch) فرض کنید در یک آسانسور با یک سرمایه‌گذار هم مسیر شده‌اید و تنها ۳۰ تا ۱۲۰ ثانیه فرصت دارید او را متقاعد کنید که روی ایده‌ی شما سرمایه‌گذاری کند. به ‌عبارتی شما باید در این چند ثانیه مشکل، راه‌حل آن و بازار مشتری‌ها را برای سرمایه‌گذار توضیح بدهید و او را متقاعد کنید. نرم‌افزار به‌عنوان سرویس (SaaS) به یک محصول نرم‌افزاری گفته می‌شود که از راه دور به وسیله‌ی اینترنت یا سیستم رایانش ابری کنترل می‌شود. چگونه یک استارتاپ راه‌اندازی کنیم شما برای ساختن یک استارتاپ موفق به ۳ چیز احتیاج دارید: ایده‌ی ساختن محصولی که مشتری‌ها واقعا به آن علاقه داشته باشند، پیدا کردن یک هم‌بنیان‌گذار و کم کردن هزینه‌ها تا جای ممکن. اکثر استارتاپ‌هایی که شکست می‌خورند، معمولا در عمل کردن به یکی از این ۳ مورد ناموفق هستند. درواقع شما به یک ایده‌ی خاص و عالی برای شروع کردن استارتاپ خود نیازی ندارید. کافی است تکنولوژی جدیدی به کاربران معرفی کنید که در حال حاضر از آن برخوردار نیستند. این تکنولوژی جدید باید بتواند نیازهای آن‌ها را به بهترین نحو از بین ببرد. در ادامه بیشتر در مورد مراحل راه‌اندازی استارتاپ بخوانید. ۱- ببینید دنیا چه چیزی کم دارد اگر دقت کنید متوجه می‌شوید که سیستم‌های تاکسیرانی قبل از پیدایش Uber بسیار کسالت‌آور بودند. یا اینکه قبل از پیدایش اسپیس‌ایکس مردم علاقه‌ی چندانی به فضا نداشتند. شما نیز باید فکر کنید و ببینید چه چیزی در دنیا کم است و سعی کنید ایده‌ی جدیدی برای آن ارائه دهید. ۲- آن را یادداشت کنید مهم نیست که چقدر باهوش هستید. مطمئنا بعد از گذشت مدتی برخی جزئیات ایده‌ی خود را فراموش خواهید کرد. افکار شما و مکالماتی که در این زمینه با دیگران انجام می‌دهید بسیار ارزشمند هستند پس تمام افکار و جزئیات مکالمات خود را یادداشت کنید. ۳- یک نمونه‌ی اولیه بسازید بسیاری از ایده‌های خلاقانه‌ی ما حتی بهترین‌ها، متأسفانه هیچ موقع به دنیای واقعی وارد نمی‌شوند و شما حتی اگر آن‌ها را یادداشت کنید، بازهم بعد از گذشت مدتی فراموششان خواهید کرد. تنها چیزی که می‌تواند مانع از فراموش شدن آن‌ها شود، تهیه‌ی یک نمونه‌ی اولیه است. آن‌ها را برنامه‌نویسی کنید یا به‌صورت فیزیکی طراحی کنید و بسازید. بسیاری از مردم در همین مرحله متوقف می‌شوند بنابراین اگر بتوانید از آن گذر کنید، یک قدم از دیگران جلوتر خواهید بود. ۴- نمونه‌ی اولیه را به ۱۰۰ نفر نشان دهید حالا شما باید از نقطه‌ی آسایش خود خارج شوید و نمونه‌ی اولیه خود را به دیگران نشان بدهید و نظر آن‌ها را جویا شوید. بهتر است این ۱۰۰ نفر از میان افراد کاملا ناشناس انتخاب شوند تا شناختن شما در بازخوردشان نسبت به محصول تأثیری نگذارد. چرا ۱۰۰ نفر؟ زیرا شما در این مرحله به چشم‌اندازی وسیع برای بازخوردها احتیاج خواهید داشت. ۵- تکرار کنید مردم کمی هستند که در اولین تلاش خود موفق می‌شوند و شانس اینکه شما جزو این دسته باشید بسیار کم است. بنابراین خودتان را برای طراحی کردن مجدد همه چیز کنید. ۶- یک هم‌بنیان‌گذار (Co-Founder) پیدا کنید زمانی که احساس کردید نمونه‌ی اولیه‌تان به نتیجه رسیده است، به دنبال یک شریک بگردید تا حاضر باشد سال‌های عمر خود را صرف عملی کردن این ایده کند. ۷- کسب‌و‌کار خود را ثبت کنید بعد از صحبت کردن با شریک یا شرکای خود و تعیین توافقات، بهتر است شرکت خودتان را ثبت کنید. می‌توانید مراحل ثبت شرکت را به‌طور کامل در این مقاله مطالعه کنید. ۸- به دنبال سرمایه‌گذار باشید و اولین نسخه را تولید کنید اگر بودجه‌ی کافی برای تولید کردن اولین نسخه از محصول خود ندارید، بهتر است یک سرمایه‌گذار پیدا کنید. بهتر است در حین پیدا کردن سرمایه‌گذار کار تولید را متوقف نکنید؛ زیرا هر استارتاپی نمی‌تواند بودجه‌ی مورد نظر خود را از سرمایه‌گذاران دریافت کند. ۹- راه‌اندازی کنید هرچقدر نسخه‌ی اولیه‌تان ناقص بود، آن را راه‌اندازی کنید. ویژگی‌های اضافه، واسط کاربری بهتر، افزایش سرعت اجرا و دیگر موارد مربوط به بهینه‌سازی از جمله مواردی هستند که می‌توانند در آینده نیز به محصول اصلی اضافه شوند. ۱۰- با کاربران همراه باشید مشتری‌های خود را تحت نظر داشته باشید و ببینید آیا برمی‌گردند یا خیر. اگر برنگشتند، علت را پیدا کنید. ۱۱- دوباره راه‌اندازی کنید هر چقدر احتیاج بود، محصول خود را بعد از اعمال تغییرات دوباره راه‌اندازی کنید. حتی اگر مشاهده کردید که تعداد کمی از مردم دوباره به شما مراجعه کردند، باز هم به کارتان ادامه دهید؛ زیرا این یعنی در حال تولید یک محصول باارزش هستید. ۱۲- محصول را به ۱۰۰۰ نفر نشان دهید شاید رقم بالایی به نظر نرسد؛ اما اولین ۱۰۰۰ نفر نقاط ضعف محصول شما را شناسایی خواهند کرد. از آنجایی که شما هنوز ناشناخته هستید، شاید لازم باشد این افراد را به‌صورت دستی استخدام کنید. هیچ ایرادی ندارد حتی اگر شده لپ‌تاپ آن‌ها را قرض بگیرید و وب‌سایت‌ خود را به آن‌ها نشان بدهید و نظرشان را جویا شوید. ۱۳- رشد کنید پاول گراهام، دانشمند علوم کامپیوتر و سرمایه‌گذار، استارتاپ‌ها را تشویق می‌کند که در هفته ۵ درصد رشد داشته باشند. اگر ۴ سال به همین ترتیب ادامه دهید، در طی گذشت این مدت به تعداد ۲۵ میلیون کاربر خواهید رسید. به‌ عبارت‌ دیگر، تبدیل به یکی از بزرگ‌ترین استارتاپ‌ها خواهید شد. ۱۴- به موفقیت برسید شما می‌توانید شرکت خودتان را به شخص دیگری بفروشید یا سرمایه‌گذاران را قانع کنید که با شما همکاری کنند. شما تا اینجا موفق شده‌اید استارتاپ خود را به نتیجه برسانید؛ بعد از این به خودتان بستگی دارد که بخواهید آن را ادامه دهید یا آن را به صاحبان جدیدش واگذار کنید.
  3. 1 امتیاز
    درود، بستگی داره که پروژه شما دقیقاً بر چه اساسی باشه، وقتی صحبت از بحث نرم‌افزاری هست مسلماً به تنهایی میشه بخش بزرگی از اون رو حداقل تا زمان قبل از تجاری شدن توسعه بدین. اما وقتی محصول شما وارد بازار میشه بحث رقابتی پیش میاد و برای این مسئله شما باید تلاش‌های بسیاری داشته باشید مثل، دریافت و اعمال تجربیات‌کاربری، تبلیغات، توسعه و سرمایه‌گذاری‌های مختلف در زیرساخت‌ها و مسائل مشابه. محصولتون هم تا زمانی که ناقص باشه و ایرادات احتمالی و فنی داشته باشه نمیشه بهش گفت MVP. بنابراین از فرایند چرخه‌ی تولید نرم‌افزار حتماً تبعیت کنید تا این موضوع رو مشخص کنه. در کل بهتره وقتی ایده‌ای به ذهنتون می‌رسه از استاندارد‌هایی که بسیاری از مشکلات رو شفاف و راه‌حل‌ها رو به درستی مشخص می‌کنند دنبال کنید. مثل اعتبار‌سنجی‌های اولیه، تحقیقات بازار، استفاده از بوم‌ناب و یا بوم مدل کسب‌و‌کار. درضمن، هر چقدر هم محصول شما کامل از آب در بیاد، بهتره برای توسعه و موفقیت‌های آینده‌ به فکر تشکیل تیمی باشید که از پس توسعه و پشتیبانی اون خواهد آمد. موفق باشید.
  4. 1 امتیاز
    توضیحات موردنیاز، قبلاً در این‌پیوند داده شده. حال بیاید ببینیم در عمل چگونه‌است ؟ Static Library یا کتابخانه‌های استاتیک : معمولاً تحت عنوان Archives هم شناخته می‌شوند، یک Static Library شامل مجموعه‌ای از Object-Fileها هست. Object-Fileها سورس‌های کامپایل‌ شدهٔ ما به زبان‌ماشین هستند. این فایل‌ها قابل اجرا نیستند چراکه هنوز کتابخانه‌های موردنیازشان Link نشده. برای کامپایل به‌صورت Object-File از فلگ -c استفاده می‌کنیم : $> cc -c func.c $> cc -c main.c $> cc *.o -o output در اینجا ما سورس‌کدهای func.c و main.c را فقط کامپایل کردیم و بعد (در خط سوّم) Object-Fileها را به کامپایلرمان دادیم تا عمل لینک کردن کتابخانه‌ها و خروجی‌نهایی را تولید کند. برای ساخت Static Library ما از Object-File‌ها به همراه برنامهٔ ar استفاده می‌کنیم، به این‌صورت که اوّل Object-Fileها را تولید می‌کنیم : $> cc -c func1.c $> cc -c func2.c و حالا یک کتابخانه متشکل از Object-Fileها برای ساخت Static-Libraryمان خروجی می‌گیریم : $> ar rcs libfunc.a func1.o func1.o خب ! در این قسمت دو نکتهٔ کوچک و مهم وجود دارد : فایل‌هایی که با استفاده از فلگ -c کامپایل می‌کنید، خروجی‌حاصل فایلی با همان نام فایل ورودی به همراه پسوند .o می‌باشد. اسم کتابخانهٔ شما باید به‌صورت lib*.(a|os) باشد. و این‌چیزی هست که Linker به دنبال آن برای لینک‌کردن می‌گردد. برای کتابخانه‌های‌استاتیک ما از پسوند .a استفاده می‌کنیم و برای کتابخانه‌های‌داینامیک از .so . حال برای استفاده از این کتابخانه‌ما نیاز به دوکار کوچک داریم هنگام کامپایل نهایی داریم : $> cc main.c -L. -lfunc -o output فلگ -L برای مشخص کردن دایرکتوری‌ای که کتابخانهٔ ما در آن قرار دارد استفاده می‌شود. (میدانیم که در UNIX هر دایرکتوری دارای دو لینک می‌باشد؛ یک . (dot) که اشاره به دایرکتوری جاری دارد و.. (dot-dot) که اشاره به دایرکتوری-پدر (parent-directory یا دایرکتوری بالایی دارد). فلگ -l برای مشخص کردن اسم کتابخانهٔ ما استفاده می‌شود، دیدید که ما فقط اسم func را آوردیم، چرا که خود تصور می‌کند اوّل اسم فایل lib و پسوند آن .a یا .so می‌باشد. یک نمونهٔ عملی را می‌توانید از این‌قسمت امتحان کنید : در این مثال از GNU Make استفاده شده است، درصورتی‌که آشنایی ندارید می‌توانید از این‌قسمت با GNU Make آشنا بشوید. امّا نکته‌ای که قابل ذکر هست : در این‌جا شما فقط کتابخانه‌ای که خودتان نوشتید را به‌صورت Static لینک کردید، کتابخانه‌هایی مثل glibc به‌صورت خودکار درحالت Dynamic لینک می‌شوند. Shared Library یا کتابخانه‌ داینامیک : در این روش بازهم ما نیاز به Object-Fileهای سورس‌کد‌ها داریم، با تفاوت اینکه باید فلگ -fPIC یا -fpic را اضافه کنیم که به معنی Position-independent Code می‌باشد؛ می‌دانید که Shared Libraryها یک‌بار فقط در حافظه بارگذاری می‌شوند از این رو نیاز است که سورس‌کدماشینی که تولید می‌شوند وابسته به این نباشد که در جای به خصوصی از حافظه بارگذاری شود. خب Object-Fileها را به صورت PIC کامپایل می‌کنیم : $> cc -c -fPIC add.c $> cc -c -fPIC sub.c حال باید کتابخانهٔ‌اشتراکی خود را با استفاده از فلگ -shared ایجاد کنیم : $> cc -shared add.o sub.o -o libmat.so در اینجا ما از فلگ -shared استفاده کردیم و Object-Fileهای تولیدشده را به عنوان ورودی وارد کرده‌ایم. و حالا می‌توانیم از shared library خودمان استفاده کنیم : $> cc main.c -o output -L. -lmath حال بیاید برنامه را اجرا کنیم : $> ./output ./output: error while loading shared libraries: libmat.so: cannot open shared object file: No such file or directory چرا ؟ به خاطر اینکه linker در آدرس‌های تعریف شده به دنبال کتابخانهٔ‌اشتراکی libmat.so می‌گردد. راه‌های مختلفی برای مشخص کردن مسیر کتابخانهٔ خودمان وجود دارد. انتقال کتابخانهٔ خود به آدرس /usr/lib دستکاری LD_LIBRARY_PATH ... راه‌های مختلف را می‌توانید از لینک‌های زیر دنبال کنید : https://renenyffenegger.ch/notes/development/languages/C-C-plus-plus/GCC/create-libraries/index https://www.cprogramming.com/tutorial/shared-libraries-linux-gcc.html موفق‌وپیروز باشید .
  5. 1 امتیاز
    این چشم‌انداز احتمالاً برای دوست‌‌داران کتابخانه‌ی قدرتمند Qt و طرفدارانش جذاب باشد! بنابراین من سعی کرده‌ام تا نتایج پست رسمی کیوت را در رابطه با چشم‌انداز فنی برای آینده‌ی کیوت نسخه‌ی ۶ است در اختیار شما قرار دهم. تقریباً ۷ سال پیش کیوت نسخه‌ی ۵.۰ منتشر شد! از آن زمان بسیاری از چیز‌ها در دنیای اطراف ما تغییر پیدا کرده است. و اکنون وقت آن رسیده است که چشم‌انداز جدیدی را از نسخه‌ی جدید‌تر تعریف کنیم. بنابراین در این پست ما به معرفی مهمترین مواردی که به کیوت ۶ مرتبط است را می‌پردازیم. به نقل از مدیر فنی کیوت Lars Knoll، کیوت ۶ دقیقاً ادامه‌ی کارهایی است که در نسخه‌ی ۵ انجام داده شده است. بنابراین توسعه باید به گونه‌ای باشد که کاربران نباید اذیت شوند. اما نسخه‌ی جدید می‌تواند یک آزادی بالاتر را در اجرای ویژگی‌های جدید، عملکرد و پشتیبانی بهتر از شرایط امروز و فردا از آنچه در حال حاضر می‌توان در سری ۵ داشته باشیم را به ما خواهد داد. همانطور که جزئیات بیشتر در زیر شرح داده شده است، کیوت ۶ هدف زیادی از سازگاری با نسخه‌ی قبلی خود یعنی کیوت ۵ را خواهد داشت. همچنین ما در حال توسعه روی نسخه‌ی ۵ نیز هستیم که قصد داریم برخی از ویژگی‌های کیوت ۶ را در نسخه‌های کیوت ۵.۱۴ و کیوت ۵.۱۵ LTS معرفی کنیم. بنابراین با ثابت نگه‌داشتن ویژگی‌ها در کیوت ۵.۱۴، بیشترِ تمرکزِ تحقیق و توسعه به سمت کیوت ۶ تغییر خواهد یافت. بنابراین انتظار می‌رود کیوت ۶ تا پایان سال ۲۰۲۰ آماده شود. قبل از اینکه همه به چیز‌های جدید بپردازیم، بیایید برخی از ارزش‌های پایه از هسته‌ی اصلی کیوت را برای کاربران خود یادآوری کنیم تا چیز‌هایی که نمی‌خواهیم تغییر کنند را تعریف کنیم. چه چیزی Qt را برای کاربران ما ارزشمند می‌کند؟ کیوت محصولی است که در بازار‌های مختلفی مورد استفاده قرار می‌گیرد، ارزش‌های اصلی در هسته‌ی کیوت برای مشتریان و کاربران ما عبارتند از: ماهیت چند-سکویی آن، به کاربران این امکان را می‌دهد تا برنامه‌های خود را با استفاده از این فناوری به تمامی سیستم‌عامل‌های رو میزی، موبایل و سیستم‌های تعبیه شده (اِمبِد‌ها) مستقر کنند. مقایس پذیری آن از دستگاه‌های کم مصرف و یک منظوره تا برنامه‌های دسکتاپ پیچیده و یا سیستم‌های متصل شده. رابط‌های برنامه‌نویسی و ابزار‌ها و مستندات در سطح جهانی، ایجاد برنامه‌ها را ساده‌تر می‌کند. حفظ، ثبات (پایداری) و سازگاری، امکان حفظ بانک بزرگی از کد‌ها با حداقل تلاش برای نگه‌داری آن‌ها. یک اکو سیستم بزرگ توسعه‌دهنده با بیش از ۱ میلیون کاربر. یک نسخه‌ی جدید از کیوت باید خواسته‌های محصول ما را مطابق با نیاز‌های بازار تنظیم کند، و در عین حال پنج ویژگیِ بالا را به خوبی حفظ کند. بازار دسکتاپ، ریشه‌ی پیشنهادات و یک بازار قوی و مهم برای کیوت است؛ در این مرحله است که بیشترین تماس‌ها با ما و در انجمن‌های کیوت از طرف کاربران صورت می‌گیرد که باید سالم نگه‌ داشتن و رشد آن مهم باشد. بزرگترین بخش از رشد کیوت نیز مربوط به دستگاه‌های تعبیه شده و متصل شده می‌باشد؛ صفحات نمایش لمسی به تعداد تصاعدی در حال افزایش است که در کنار آن افزایش قیمت سخت‌افزار برای این دستگاه‌ها وجود دارد. چیپست‌های کم مصرف، میکرو‌کنترلر‌ها، همراه با صفحه نمایش لمسی به اندازه‌های کوچک در همه جا استفاده می‌شوند. بسیاری از این دستگاه‌ها عملکردی نسبتاً ساده‌ای دارند، اما به رابط کاربری صیقلی و صافی نیاز دارند. بنابراین حجم زیادی از این دستگاه‌ها ایجاد می‌شود و ما باید اطمینان حاصل کنیم که می‌توانیم با ارائه‌ی خود آن فضا را هدف قرار دهیم تا بتوانیم قوبل مقیاس پذیری خود را عملی کنیم. در عین حال، رابط‌های کاربری در طیف دستگاه‌‌ها همچنان به افزایش پیچیدگی ادامه می‌دهند که شامل هزاران صفحه مختلف و برنامه‌های بسیاری است. ادغام عناصر سه بعدی و دو بعدی در یک رابط کاربری مشترک خواهد بود که در کنار آن استفاده از واقعیت افزوده و مجازی نیز وجود خواهد داشت. عناصر هوش مصنوعی بیشتر در حوزه‌ی برنامه‌ها و دستگاه‌ها مورد استفاده قرار می‌گیرد و ما نیاز به روش‌های آنسان برای ادغام با آن‌ها داریم. رشد شدید تعداد دستگاه‌های متصل به هم و همچنین الزامات بسیار بالاتر در تجربه‌کاربر باعث می‌شود تا برای ساده سازی ایجاد برنامه‌ها و دستگاه‌ها، روی ابزار‌های کلاس جهانی تمرکز کنیم. هماهنگ سازی و ادغام طراحان UX در گردش کار توسعه یکی از اهداف است؛ اما بسیاری از زمینه‌های دیگر وجود خواهد داشت که ما باید برای ساده سازی زندگی کاربران تلاش کنیم. کیوت ۶ یک نسخه‌ی اصلی و جدید برای Qt خواهد بود؛ هدف اصلی با چنین نسخه‌ی اصلی و جدید، آماده سازی کیوت برای شرایط مورد نیاز در سال ۲۰۲۰ و بعد از آن، تمیز کردن کد‌های پایه‌ی ما و حفظ آسان‌تر است. به همین ترتیب تمرکز روی آن مواردی خواهد بود که نیاز به تغییرات معماری در کیوت دارند و بدون شکستن برخی از سازگاری‌ها با سری‌های کیوت ۵ قابل انجام نیست. در زیر برخی از تغییرات اساسی که ما باید در کیوت ایجاد کنیم برای مناسب‌تر کردن آن برای سال‌های آینده ارائه شده است. نسل بعدی کیو‌اِم‌اِل (QML) زبان QML و فناوری Qt Quick فناوری‌های اصلی رشد سال‌های گذشته‌ی ما بوده است. روش‌های بصری ایجاد واسط‌های کاربری با استفاده از آن فناوری‌ها نقطه فروش بی نظیری از پیشنهاد ما است. اما QML، همانطور که برای کیوت ۵ ایجاد شده است، دارای تعداد زیادی تغییرات ناگهانی و محدودیت است. این به نوبه‌ی خود به این معنا است که، امکان پیشرفت‌های چشم‌گیری وجود دارد که ما قصد داریم با کیوت ۶ آن‌ها را پیاده سازی کنیم. معرفی وابستگی زیاد به نوع (strong typing)، در واقع وابستگی کم به نوع باعث می‌شود تا کاربران تغییرات زیادی را در کد‌های پایه‌ی خود اعمال کنند. یک سیستم از نوع وابستگی قوی به IDE‌ها و سایر ابزار‌ها اجازه می‌دهد تا کاربران در این کار ما را پشتیبانی کنند و نگهداری آن به طرز چشمگیری کاهش می‌یابد. همچنین ما قادر به تولید کد بسیار بهتر و کاهش سربار خواهیم بود. اعمال JavaScript به عنوان یک ویژگی اختیاری، با توجه به این موضوع، داشتن یک موتور کامل جاوا اسکریپت هنگام استفاده از QML می‌تواند مشکلات را پیچیده‌تر کند و به خصوص هنگام هدف قرار دادن سخت‌افزار کم مصرف مانند میکرو کنترلرها یک مشکل اصلی محسوب می‌شود. اما در بسیاری از موارد استفاده از آن بسیار مفید است. حذف نسخه سازی QML، با ساده کردن برخی از قوانین بررسی و جستجو و تغییرات در برخی از خواص می‌توانیم نیاز به نسخه را در QML حذف کنیم. این به نوبه‌ی خود منجر به ساده سازی‌های زیاد در موتور کیو‌ام‌اِل می‌شود. حجم کار در حفظ فناوری کیوت کوئیک و ساده‌تر کردن استفاده از QML و Qt Quick را برای کاربران بسیار ساده‌تر خواهد کرد. حذف ساختار داده‌های تکراری بین QObject و QML در حال حاضر، برخی از ساختار داده‌ها بین meta-object و QML کپی و تکرار می‌شوند و عملکرد (کارایی و پرفرمنس) را در استارتاپ برنامه کاهش می‌دهد و باعث افزایش مصرف حافظه نیز می‌گردد. بنابراین با متحد کردن ساختار‌های داده‌ها، ما قادر خواهیم بود بخشی اعظمی از آن را حذف کنیم. خودداری کردن از ساختار‌های داده تولید شده این مربوط به نکته‌ی قبل است، جایی که در حال حاضر بسیاری از ساختار‌های داده تکراری در زمان اجرا تولید می‌شوند. باید تولید اکثر آن‌ها در زمان کامپایل کاملاً امکان‌پذیر باشد. پشتیبانی از کامپایل QML برای بهره‌وری از کد‌های بومی C++، با وابستگی زیاد به نوع و قوانین جستجوی ساده‌تر، می‌توانیم QML را به کد‌های بومی C++ تبدیل کنیم که نتیجه‌ی آن به طور قابل توجهی عملکرد زمان اجرا را افزایش می‌دهد. پشتیبانی از پنهان کردن جزئیات اجرا، روش و خصوصیات «خصوصی» یک نیاز طولانی مدت است تا بتوانید داده‌ها و عملکرد‌ها را در اجزای QML پنهاد کنید. هماهنگ‌سازی و ادغام بهتر ابزار‌ها، مدل کد‌های ما غالباً برای QML ناقص است و باعث می‌شود که تغییر مکان و خطاها را در زمان کامپایل غیر ممکن کند. با تغییرات فوق، می‌توان تشخیص کامپایلر را ارائه داد که بتواند با C++ و همچنین پشتیبانی از آن پالایشِ کد‌ها را بهبود بخشد. نسل بعدی گرافیک‌ها بسیاری از موارد در حوزه‌ی گرافیک در نسخه‌ی کیوت ۵ تغییر یافته‌اند. این باعث می‌شود که برای حفظ رقابت و توسعه در پُشته انجام شود. با کیوت ۵، ما از رابط‌های برنامه‌نویسی OpenGL را برای گرافیک‌های ۳ بعدی استفاده کردیم. از آن زمان به بعد، میزبانی از رابط‌‌های برنامه‌نویسی جدید نیز تعریف شده است. بنابراین وُلکان (Vulkan) جانشین مشخصی برای OpenGL در لینوکس است، اپل نیز مِتال (Metal) را تحت فشار قرار داد تا آن را جایگزین کند و مایکروسافت DirectX را دارد. این بدان معنی است که کیوت در آینده مجبور است به صورت یکپارچه با تمام رابط‌های برنامه‌نویسی کار کند. برای اینکه این ویژگی امکان‌پذیر باشد، باید یک لایه‌ی جدید که رابط‌های برنامه‌نویسی گرافیکی را انتزاع می‌کند مانند (QPA برای ادغام سکو) به نام رابط سخت‌افزاری RHering تعریف شود. ما نیز باید زیر ساخت‌های ارائه شده‌ی خود (Qt Quick Scenegraph، QPainter و پشتیبانی ۳ بعدی) را در بالای آن لایه قرار دهیم. مجموعه‌ی رابط‌های برنامه‌نویسی گرافیکی مختلف باعث می‌شود که ما از زبان‌های مختلف سایه‌زنی پشتیبانی کنیم. ابزار Qt Shader به عنوان یک ماژول به ما کمک می‌کند تا سیستمِ سایه‌زنی را به صورت هم‌زمان (کراس‌-کامپایل) و در زمان اجرا کامپایل کنیم. بحث ۳ بعدی نقش مهم و مهمتری را ایفا می‌کند، و پشتیبانی فعلی ما یک راه حل یکپارچه برای ایجاد رابط کاربری (UI) ‌هایی که حاوی هر دو عنصر ۲ و ۳ بعدی باشد را ندارد. ادغام QML با محتوا از Qt3D و یا Qt 3D Studio در حال حاضر کار دشواری است و باعث سر‌ریز شدن برخی از کارایی‌ها و عناصر نمایشی می‌شود. علاوه بر این همگام سازی انیمیشن‌ها و انتقال‌ها بر روی یک فریم با سطح فریم بین محتوای ۲ و ۳ بعدی غیر ممکن است. ادغام جدید محتوای ۳ بعدی با فناوری کیوت کوئیک با هدف حل این مشکل ایجاد شده است. در این حالت، یک سیستم ساخت (رندر) کامل و جدید به شما امکان می‌دهد تا محتوای ۲ و ۳ بعدی را با هم ظبط کنید. با این کار QML به زبان UI تعریف و تبدیل می‌شود که سه بعدی هستند و نیاز به فرمت UIP برطرف می‌شود. ما یک پیش‌نمایش از کیوت کوئیک جدید با پشتیبانی سه بعدی در حال حاضر با کیوت ۵.۱۴ ارائه می‌دهیم که اطلاعات بیشتر در یک پست جداگانه ارائه خواهد شد. سرانجام پشته‌ی گرافیکی جدید نیاز به پشتیبانی از خط لوله‌ی برای چیز‌های گرافیکی هستند که این امکان را می‌دهد تا آن‌هایی که در زمان کامپایل برای سخت افزار مورد نظر تهیه شده‌اند آماده کرده و از موارد مورد نظر استفاده کند. برای مثال، فایل‌های PNG را به بافت‌های فشرده تبدیل می‌کند و بسیاری از آن‌ها را به بافت (Texture) تبدیل کند. سایه‌ها و مِش‌ها را به قالب‌های باینری بهینه شده و موارد دیگر تبدیل خواهد کرد. همچنین هدف ما این است که یک موتور متحد برای پوسته/ظاهر در کیوت ۶ ارائه دهیم که به ما این امکان را می‌دهد تا از نظر ظاهری و احساسات بر روی دسکتاپ و موبایل آن را بر روی هر دو فناوری کیوت‌ ویجت و کیوت‌ کوئیک ارائه کنیم. ابزار یکپارچه و سازگار ابزار‌های گرافیکی ما برای ساخت رابط‌های کاربری به دو بخش با استودیو کیوت ۳ بعدی (Qt 3D Studio) و استودیو طراحی کیوت (Qt Design Studio) تقسیم بندی شده‌اند. علاوه بر آن، استودیو ۳ بعدی اند;ی از بقیه کیوت جدا شده است که باعث می‌شود کمی بیشتر سعی بر آن شود! ابزار‌های طراحی نیز به ایجاد محتوا مانند، محتوای ساخته شده در Photoshop، Sketch، Illustrator، Maya، 3DsMax و دیگر موارد ادغام شده است. ابزار‌های توسعه به توجه زیادی برای تمرکز دارد تا بتوانیم بهترین‌ها را در پشتیبانی کلاس برای QML، C++ و پایتون ارائه دهیم. یک ابزار متحد و یکپارچه این اجازه را می‌دهد که یک طراح UX بتواند از قابلیت‌های طراحی در کیوت کریتور استفاده کند و طراحان می‌توانند از ویژگی‌های ابزار‌های توسعه‌دهنده مانند تهیه یک پروژه یا آزمایش روی یک دستگاه بهره‌مند شوند. ابزار ساخت QMake به عنوان ابزار ساخت در کیوت ۵ مورد استفاده قرار می‌گیرد که تعداد زیادی تغییرات ناگهانی و محدودیت‌ها خواهد دارد. برای کیوت ۶، هدف ما این است که CMake را به عنوان سیستم ساخت ثالث و استاندارد برای ساخت خود کیوت استفاده کنیم. چرا که سی‌میک تاکنون پرکاربرد‌ترین سیستم ساخت در جهان برای سی‌پلاس‌پلاس بوده است و ادغام هرچه‌بهتر آن کاملاً مورد نیاز است. البته پشتیبانی از QMake ادامه خواهد داشت، اما آن را توسعه نخواهیم داد یا از آن برای ساخت فریم‌ورک کیوت استفاده نخواهیم کرد. بهبود رابط‌های برنامه‌نویسیC++ سی‌پلاس‌پلاس طی سال‌های گذشته تغییرات بسیار زیادی کرده است؛ در حالی که ما مجبور بودیم کیوت ۵.۰ را روی سی‌پلاس‌پلاس ۹۸ پایه‌گذاری کنیم. اما اکنون می‌توانیم به سی‌پلاس‌پلاس ۱۷ برای پایه‌گذاری کیوت ۶ اطمینان کنیم. این بدان معنی است که C++ عملکرد بسیار بیشتری را نسبت به زمان توسعه و اجرای کیوت ۵ که در دسترس نبود ارائه خواهد کرد. هدف ما با کیوت ۶ بهتر شدن با یکپارچه‌سازی و ادغام قابلیت‌ها بدون از دست دادن پشتیبانی و سازگاری از روش‌های پیشین (رو به عقب یا همان backward compatibility) است. برای کیوت ۶، هدف ما این است که برخی از قابلیت‌های معرفی شده با QML و فناوری Qt Quick را از طرف C++ در دسترس قرار دهیم. بنابراین ما در تلاش برای معرفی یک سیستم خاص برای QObject و کلاس‌های مرتبط هستیم. موتور اتصال دهنده را از QML در هسته‌ی کیوت ادغام می‌کنیم و آن را از سی‌پلاس‌پلاس در دسترس قرار می‌دهیم. این سیستم خاص از موتور اتصال به کاهش قابل توجهی در سربار زمان کار و مصرفه حافظه در اتصال منجر می‌شود و آن‌ها را برای همه‌ی قسمت‌های Qt، نه تنها Qt Quick قابل دسترس می‌کند. پشتیبانی از زبان با کیوت ۵.۱۲، پشتیبانی از پایتون معرفی شده است. همچنین مرورگر را به عنوان پلتفرم جدید از طریق کیوت برای وِب اسمبلی اضافه کرده‌ایم. پس از انتشار کیوت ۶.۰ نگه‌داشتن و گسترش بیشتر بر روی سطح چند‌-سکویی بخش مهمی از اهداف و مسیر توسعه‌ی سری‌های کیوت ۶ خواهد بود. سازگاری با کیوت ۵ و افزایش سازگاری‌ها و بهبود‌ها سازگاری با نسخه‌های قدیمی‌تر بسیار مهم است، بنابراین وقتی کیوت ۶ را توسعه می‌دهیم یک نیاز اساسی محسوب می‌شود. توسط چهارچوب کیوت میلیون‌ها خط کد نوشته شده است و هرگونه تغییرات در ناسازگاری که انجام شود هزینه‌ای را برای کاربران خواهد داشت. علاوه‌ بر این، کار بیشتری برای تغییرات در کیوت ۶ نیاز است تا کاربران کم کم با آن سازگار شوند که منجر به هزینه‌های بیشتر از طرف تیم توسعه‌ی کیوت برای حفظ آخرین نسخه کیوت ۵ خواهد بود. به این ترتیب، ما باید به فکر جلوگیری از ساطع شدن خطاهای احتمالی در زمان کامپایل و یا زمان اجرا برای کاربران می‌شود باشیم. در حالی که ما نیاز به حذف بخش‌هایی از کیوت خواهیم داشت، باید اطمینان حاصل کنیم که کاربران ما از عملکرد مورد نیاز خود برخوردار هستند. این بدان معنا است که کلید‌هایی مانند Qt Widgets و سایر قسمت‌هایی که توسط بخش بزرگی از کاربران ما مورد استفاده قرار می‌گیرد، در دسترس باشد. ما در حال برنامه‌ریزی برای افزایش بسیاری از پیشرفت‌ها در کلاس‌های اصلی و عملکردی هستیم که در سری کیوت ۵ نتوانستیم انجام دهیم. هدف این است که سازگاری کامل منبع را حفظ کنیم، اما از آنجا که می‌توانیم سازگاری باینری را با کیوت ۶ بشکنیم، می‌توانیم پاک‌سازی‌ها و اصطلاحات کاملاً زیادی را انجام دهیم که در کیوت ۵ نمی‌توانستیم آن را عملی کنیم. با این وجود، ما باید به جلو پیش برویم و برخی از پاک‌سازی‌ها که در کیوت ۵ در مورد کلاس‌ها، توابع و یا ماژول‌ها عنوان شده بود را در کیوت ۶ به طور کامل اعمال کنیم. این کار باعث می‌شود ما روی مبنای کد‌گذاری شده‌ی فعلی تمرکز بیشتر و بهتری داشته باشیم. با این حال، انتقال به دور از قسمت‌های منسوخ شده باید تا حد امکان ساده باشد و کاربران ما می‌توانند با استفاده از کیوت ۵.۱۵ «پشتیبانی بلند مدت» به صورت ایده‌آل این کار را انجام دهند. هدف ما باید این باشد که کیوت ۶ به اندازه‌ی کافی با نسخه‌ی ۵.۱۵ سازگار باشد تا فرد بتواند به راحتی یک بخش اعظمی از کد خود را حفظ کند، به طوری که کد آن در هر دو نسخه‌ی ۵ و ۶ قابل کامپایل باشد. بازار و ساختار فنی محصول علاوه بر بهبود چهارچوب و ابزار‌های کیوت، هدف ما ایجاد بازار جدیدی برای قطعات و ابزار‌های توسعه است. این بازار بر روی کاربران مستقیم ما متمرکز خواهد شد که برنامه‌های کاربردی و دستگاه‌های تعبیه شده را طراحی و توسعه می‌دهند؛ به این ترتیب این یک مرکز تجمع اصلی برای اکو سیستم کیوت خواهد بود که این امکان را به شخص ثالث می‌دهد تا نسخه‌های اضافی خود را در کیوت منتشر کنند و هم محتوای رایگان و تجاری را که برای آن هزینه پرداخت می‌کنند. کیوت طی سال‌های گذشته رشد بسیار زیادی داشته است، تا جایی که ارائه‌ی نسخه‌ی جدید آن یک کار مهم است. با استفاده از کیوت ۶ فرصتی برای باز‌سازی محصولات ارائه شده ما وجود دارد و یک محصول اصلی و کوچکتر که شامل چهارچوب‌ها و ابزار‌های اساسی است. ما از بازار استفاده خواهیم کرد تا چهارچوب و ابزار‌های اضافی خود را ارائه دهیم، نه به عنوان یک بسته‌نرم‌افزاری وابسته به کیوت! چشم‌انداز فنی تا اولین نسخه‌ی کیوت ۶ تکامی خواهد یافت. اگرچه معتقد هستیم که این سند بسیاری از مهمترین نکات را برای نسخه‌ی بعدی کیوت معرفی می‌کند اما مطمئناً کامل نیست. اگر شما هم ایده‌ی دیگری دارید می‌توانید آن را با ما در میان بگذارید.
این صفحه از پرچمداران بر اساس منطقه زمانی تهران/GMT+04:30 می باشد
×
×
  • جدید...