پرچمداران
-
در همه بخش ها
- همه بخش ها
- فایل
- دیدگاه فایل
- نقد و بررسی فایل
- مقالات
- مقاله دیدگاه
- مقاله نقد و بررسی
- صفحات استاتیک
- صفحه دیدگاه
- صفحه نقد و بررسی
- کتابخانهها
- کتابخانه دیدگاه
- کتابخانه نقد و بررسی
- رویداد
- دیدگاه های رویداد
- بازبینی رویدادها
- تصاویر
- دیدگاه های تصویر
- نقد های تصویر
- آلبوم ها
- نظر های آلبوم
- نقد های آلبوم
- پست ها
- نوشتههای وبلاگ
- دیدگاه های وبلاگ
- بروزرسانی وضعیت
- پاسخ های دیدگاه ها
-
تاریخ سفارشی
-
همه زمان ها
4 خرداد 1397 - 9 فروردین 1403
-
سال
8 فروردین 1402 - 9 فروردین 1403
-
ماه
9 اسفند 1402 - 9 فروردین 1403
-
هفته
2 فروردین 1403 - 9 فروردین 1403
-
امروز
9 فروردین 1403
-
تاریخ سفارشی
جمعه, 26 مرداد 1397 - جمعه, 26 مرداد 1397
-
همه زمان ها
مطالب محبوب
در حال نمایش مطالب دارای بیشترین امتیاز در جمعه, 26 مرداد 1397 در همه بخش ها
-
2 امتیازبا درود، وجود کتابخانههای متعدد برای توسعهی رباتهای تلگرام برای زبانها و چهارچوبهای مختلف، و عدم وجود یک کتابخانه بهروز برای ++C و کیوت باعث شد تا توسعهی این پروژه را آغاز کنم. امیدوارم این پروژه برای توسعهدهندگان مفید واقع شود. عنوان: پروژهی TarnaBot توضیحات: یک کتابخانه بر پایه فریمورک کیوت (Qt) که به توسعهدهندگان امکان برنامهنویسی رباتهای تلگرام را میدهد. زبانها و فناوریهای استفاده شده: ++C فریمورک ها و کتابخانهها: کیوت (Qt) نسخه ۵ ابزارِ ساخت: qmake نوع پروژه: متن باز (Open source) مجوز: LGPL v3 نویسندگان: علی رشیدی وضعیت: در حال توسعه - پایدار (stable) مثالها و مستندات به زودی اضافه خواهند شد.
-
1 امتیازمراحل ساخت برنامه در زبان سیپلاسپلاس پیش نویس ۰.۶ قبل از هر چیز به اینفوگرافی زیر توجه کنید که مراحل ساخت برنامه در سیپلاسپلاس را نشان میدهد. مقدمهای بر همگردانی (کامپایل) و اتصال (لینک کردن) این سند مرور مختصری در رابطه با مراحل را برای شما فراهم میکند تا به شما در درک دستورات مختلف برای تبدیل و اجرای برنامهٔ خودتان کمک کند. تبدیل مجموعهای از فایلهای منبع و هدر در سیپلاسپلاس به یک فایل خروجی و اجرایی در چندین گام (به طور معمول در چهار گام) پیشپردازنده (Preprocessors)، کامپایل و گردآوری (Compilation)، اسمبلر (Assmbler) و پیوند دهنده (Linker) تقسیم میشود. قبل از هر چیز اگر در محیط توسعهٔ Qt Creator داخل فایل .pro مقدار زیر را وارد کنید، تا بتوانید فایلهای ساخته شدهٔ موقت در زمان کامپایل را مشاهده کنید. QMAKE_CXXFLAGS += -save-temps این دستور اجازهٔ آن را خواهد داد تا فایلهایی با پسوند .ii و .s در شاخهٔ بیلد پروژه تولید شوند که در ادامه به آنها اشاره شده است. تعریف پیشپردازنده پیشپردازندهها (Preprocessors) درواقع دستوراتی هستند که اجازه میدهند تا کامپایلر قبل از آغاز کردن مراحل کامپایل دستوراتی را دریافت کند. پیشپردازندهها توسط هشتگ (#) مشخص میشوند این نماد در سی++ مشخص میکند که دستور فوق از نوع پیشپردازنده میباشد که نتیجهٔ آن در قالب ماکرو (Macro) در دسترس خواهد بود. برای مثال ماکروی __DATE__ توسط پیشپردازندهها از قبل تعریف شده است که مقدار تاریخ و زمان را بازگشت میدهد. بنابراین هرکجا که از آن استفاده شود کامپایلر آن را جایگزین متن خواهد کرد. در شکل زیر مرحلهای که از پیشپردازندهها استفاده میشود آمده است: پیشپردازنده، کامپایل (گردآوری کردن)، لینک (پیوند کردن) و ساخت برنامه اجرایی فرایند تبدیل مجموعهای از فایلهای متنی هِدر و سورس سی++ را «ساخت» یا همان Building میگویند. از آنجایی که ممکن است کُد پروژه در بسیاری از فایلها هدر و سورس سی++ توسعه و گسترش یابدمراحل ساخت در چند گام کوچک صورت میگیرد. یکی از رایجترین موارد در مراحل گردآوری (ترجمهٔ یک کد سیپلاسپلاس به دستورالعملهای قابل فهم ماشین) است. اما گامهای دیگری نیز وجود دارد، پیشپردازنده و لینک (پیوندها) این بخش به طور خلاصه توضیح میدهد که چه اتفاقی در هر یک از مراحل رُخ میدهد. یک کامپایلر یک برنامهٔ خاص است که پردازش اظهارات (دستورات) نوشته شده در یک زبان برنامهنویسی خاص را به یک زبان ماشین که قابل فهم برای پردازنده میباشد تبدیل کند. به طور معمول یک برنامهنویس با استفاده از یک ویرایشگر که به محیط توسعهٔ یکپارچهٔ نرمافزار (IDE) مشهور است توسط زبان برنامهنویسی مانند ++C دستورات (اظهارات) را مینویسد. فایل ایجاد شده با نام (filename.cpp در زبان برنامهنویسی سیپلاسپلاس) شامل محتوایی است که معمولاً به عنوان دستورات برنامهنویسی سطح بالا نامیده میشود. سپس برنامهنویس کامپایلرِ مناسب برای زبان برنامهنویسی مانند سی++ را اجرا میکند و نام فایلهایی که حاوی دستورات هستند را برای کامپایل مشخص میکند که این انتخاب و مشخص سازی توسط IDE به راحتی قابل مدیریت است. پس از آن، کار کامپایلر این است که فایلهای منبع .cpp را جمع آوری کرده و پیشپردازندهها را بررسی کند تا دستورات احتمالی را اجرا نماید که نتیجهٔ این مرحله در فایلی با پسوند .ii ر قالب filename.ii تولید میشود که در این فرایند نیز خط به خط کُدهای موجود در آنها را بررسی میکند تا خطاهای احتمالی نحو (سینتکس - Syntax) بررسی میشود و آنها را به طور ترتیبی به دستورالعملهای سطح ماشین تبدیل کند. توجه داشته باشید که هر نوع پردازندهٔ کامپیوتر دارای مجموعهای از دستورالعملهایِ ماشین خودش است. بنابراین کامپایلر تنها برای سی++ نیست، بلکه برای اهداف و مقاصد خاص هر پلتفرم است. پس کدهایی که توسط پیشپردازنده سیپلاسپلاس به زبان اسمبلی برای معماری مورد نظر در پلتفرم مقصدترجمه شدهاند نتایج آن در فایلی با پسوند .ss در قالب filename.ss قابل نمایش هستند که در حالت عادی قابل رویت نیست. توجه داشته باشید که باید در این مرحله باید مشخص شود برنامه قرار است توسط چه نوع پردازندهای تحتِ چه نوع معماری مونتاژ (اسمبل) شود. برای مثال پردازندهها با انواع معماریهای مختلف وجود دارند که برخی از آنها به صورت x86-x64، x64، ARMv7، aarch64 غیره ... میباشند. شکل یک (کامپایل یک فایل منبع ++C) مرحلهٔ سوم را در نظر داشته باشید که عمل کامپایل فایل سیپلاسپلاس در دو مرحله قبلی یک فایل اجرایی را تولید نمیکند. برنامهای که توصیف شده است، احتمالاً توابعی را در رابطهای برنامهنویسی (API) و یا توابع ریاضی یا توابع مرتبط با I/O را فراخوانی کند که ممکن است شامل فایلهای هدر مانند iostream یا fstream و حتی ماژولهای دیگری که در زبان تعبیه شدهاند را داشته باشد که فایل تولید شده توسط کامپایلر در این مرحله یک فایل شیء نامیده میشود که با پسوند .o به صورت filename.o تولید خواهد شد که علاوه بر دستورالعملهای تبدیل شده به کد ماشین، شامل توابع و دستورالعملهای خارجی نیز میباشد. هرچند در این مرحله دستورات تبدیل به دستورالعملهای قابل فهم توسط پردازنده شدهاند اما فعلاً قابل اجرا نیستند چرا که باید این توابع خارجی افزوده شده را به آن لینک کرد که در مرحلهٔ بعد یعنی مرحلهٔ چهارم اتفاق میافتد. در نهایت مرحلهٔ چهارم فایل با پسوند .o که شامل کدهای تولید شده توسط کامپایلر به زبان ماشین است که پردازندهها میتوانند این دستورات را درک کنند که همراه با کدهای تولید شدهٔ هر کتابخانهٔ دیگری که مورد نیاز است توسط لینکر (لینک شده) و در نهایت جهت تولید یک فایل اجرایی مورد استفاده قرار میگیرند که نوع آن فایل از نوع اجرایی یا در واقع Executable File خواهد بود. شرح کامل فرایند ساخت فایل اجرایی اکثر پروژهها دارای مجموعهای از فایلهای هدر سی++ هستند، که امکان ماژولار شدن در آن را فراهم میکند و مجموعهای از آن میتواند به عنوان بخشهای کوچکی از برنامه محسوب شوند. برای ساخت چنین پروژههایی هر فایل سیپلاسپلاس باید کامپایل شود و سپس فایلهای ساخته شده در قالب شیء (آبجکت) باید همراه توابع و کتابخانههای دیگر لینک (پیوند) شوند. البته هر گام از مراحل کامپایل شامل یک مرحله پیشپردازنده است که دستورالعمل # عمل تغییرات و اصلاحیهها را در فایل متن اعمال میکند. شکل زیر فرایند ساخت چند فایل به صورت همزمان را نشان میدهد: در ادامهٔ این مقاله، مطلبی مرتبط با تنظیمات بیشتر از کامپایلر آمده است که میتوانید آن را مورد مطالعه قرار دهید.
-
1 امتیازبا سلام، همانطور که میدانید سیستمهای مدیریت محتوا به عنوان سیستم پویا برای مدیریت محتوای یک وبسایت بسیار مفید هستند. حال آنکه یک سیستم مدیریت محتوا فراتر از یک سیستم نرمافزاری جهت مدیرین محتوای وبسایت توسعه یابد بسیار مفید خواهد بود. قابلیتها و ویژگیها با استفاده از سیستم مدیریت محتوای جگوار (Jaguar) ما میتوانیم برای مشتریان خود یک سیستم مدیریت چند منظوره با قابلیتهای کاملاً پویا ارائه دهیم که هر استارتاپی میتواند کسبوکار خود را تحت آن توسعه دهد. این سیستم دارای قابلیتهای چند سکویی و چند منظوره میباشد که یکی از قابلیتهای برجستهٔ آن پشتیبانی از سیستم چند زبانه میباشد. این سیستم در پلتفرمهای وب، موبایل و دسکتاپ توسعه داده شده است. عنوان: پروژهٔ جگوار (Jaguar) توضیحات: سیستم مدیریت محتوای چند منظوره و پیشرفته زبانها و فناوریهای استفاده شده: زبانهای Php7, JavaScript, CSS3, HTML5 فریم وُرک و کتابخانهها: کتابخانهٔ JQuery , Angular.JS, BootStrap4 نوع پروژه: تجاری (انحصاری شرکتِ Dotwaves LLC) نویسندگان: کامبیز اسدزاده وضعیت: در حال توسعه حق چاپ و تکثیر: شرکت داتویوز این محصول بر پایه موتور سِل توسعه داده شده است. برخی از تصاویر مرتبط با این محصول:
-
1 امتیازسلام .امیدوارم اشتراک گذاری ها و اطلاع رسانی هاتون حالا حالا ها ادامه داشته باشه... خدا قوت
-
1 امتیازهمانطور که میدانید، در سیپلاسپلاس برای ساخت یک کلاس انتزاعی (در قالب یک ساختار) یا همان Interface تحت کلمات کلیدی virtual امکانپذیر است. به طور کلی کلاسی که متُدهای آن به صورت مجازی اعلان میشوند و شامل هیچ تعریف قبلی نیستند به عنوان کلاس انتزاعی (Abstract) یاد میشوند. برای مثال کلاس زیر را در نظر بگیرید: class Person { public: Person(); virtual ~Person(); virtual void print() = 0; //... }; کلاس Person به عنوان یک کلاس انتزاعی تعریف شد است. چرا که اعضای این کلاس فقط اعلان شده اند و به تنهایی هیچ کاری یا واکنشی را نسبت به خود ندارند. کلمهٔ کلیدی virtual برای تعریف یک تابع از نوع مجازی ضروری است و اَصل پلئومورفیسم (چند ریختی / چند شکلی) را دربر دارد. در اصل اگر قرار باشد کلاسی بنویسید که مربوط به یک ماشین باشد (هر ماشین چه از نوع زمینی، چه از نوع صنعتی، و چه از نوعهای دیگر) دارای کلید استارت (روشن/خاموش)، دارای قدرت موتور و یک سری ویژگیهایی است که ممکن است در هر یک از آنها یکسان و یا متفاوت عمل کند. برای این منظور بهتر است کلاسی به صورت انتزاعی پیاده سازی شده و سپس در هر بخش هر یک از متدها را نسبت به نیاز سفارشی سازی کنیم. فرض میکنیم که نیاز است در یک بازی کلاسی برای دریافت اطلاعات یک خودرو، هواپیمای جنگنده و یا غیره... ایجاد شود. کلاس انتزاعی ما درای ویژگیهای ثابت غیر قابل توسعه و ویژگیهایی دارای قابلیت بازتعریف (جهت توسعه توسط کاربر) را فراهم کرده ایم. به مثال زیر دقت کنید: class Machine { public: Machine() {} virtual ~Machine() {} enum class Start {ON, OFF}; virtual bool start(const Start &start) const final { return true; } virtual std::string name(const std::string &nameValue) const final { return nameValue; } virtual int gears(const int &gears) const final { return gears; }; virtual int power(const int &powerValue) const { return powerValue; } virtual int cylinders(const int &totalValue) const final { return totalValue; } virtual int length(const int &lengthValue) const final { return lengthValue; } virtual int width(const int &widthValue) const final { return widthValue; } virtual std::string engineType() const = 0; }; class Porsche : public Machine { public: enum class EngineType { eSuper, eJuniur, e64, e356, e550, e911 }; enum class Color { White, Black, Red, Blue, Green }; Porsche(EngineType type) { etype = type; } ~Porsche() {} std::string color(const Porsche::Color &colorValue) const { switch (colorValue) { case Color::Black : eColor = "Black"; break; case Color::White : eColor = "White"; break; case Color::Blue : eColor = "Blue"; break; case Color::Red : eColor = "Red"; break; case Color::Green : eColor = "Green"; break; } return eColor; }; std::string engineType() const override { switch (etype) { case EngineType::eSuper : eTypeResult = "Super"; break; case EngineType::eJuniur : eTypeResult = "Juniur"; break; case EngineType::e64 : eTypeResult = "64"; break; case EngineType::e356 : eTypeResult = "356"; break; case EngineType::e550 : eTypeResult = "550"; break; case EngineType::e911 : eTypeResult = "911 Turbo"; break; } return eTypeResult; } private: EngineType etype; mutable std::string eTypeResult; mutable std::string eColor; }; class Aircraft : public Machine { public: enum class EngineType { e2SI, e3W, eAce, eSaturn}; Aircraft(EngineType type) { etype = type; } ~Aircraft() {} int power(const int &powerValue) const override { return powerValue; } std::string engineType() const override { switch (etype) { case EngineType::e2SI : eTypeResult = "2SI"; break; case EngineType::e3W : eTypeResult = "3W"; break; case EngineType::eAce : eTypeResult = "ACE"; break; case EngineType::eSaturn : eTypeResult = "Saturn AL-31 Series"; break; } return eTypeResult; } private: EngineType etype; mutable std::string eTypeResult; }; کلاس Machine دارای مشخصههایی از نوع سطح دسترسی final و pure میباشد که توابع از نوع دسترسی final یک بار برای تمامی کلاسهای ماشینها تعریف شده و توابع pure برای توسعه در نظر گرفته شده اند. در ادامه ما کلاسی برای خودروی Porsche و کلاسی را برای هواپیمای جنگنده Aircraft در نظر گرفتهایم که دارای ویژگیهای اختصاصی باز تعریف شده تحت نامهای engineType و غیره میباشد. تابع اول برای مشخص سازی نوع موتور ماشین (برای خودرو و هواپیما) و تابع بعدی برای مشخص سازی نوع کد رنگ پیاده سازی شده است. دقت کنید که تابع engineType از کلاس والد مشتق و باز توسعه یافته است که توسط کلمهٔ کلیدی override مشخص شده است. این کلمه به کامپایلر اعلان میکند که تابع تعریف شده دقیقاً همان تابع تعریف شده در کلاس والد است (با همان پارامتر و همان نام و همان نوع) در صورتی که این کلمه استفاده نشود تابع باز تعریف شده توسط کامپایلر خطا گرفته خواهد شد. این کلمه کلیدی برای هشدار به کاربری است که قرار است بر اساس کلاس والد کلاس مخصوص خود را توسعه دهد و صرفاً جهت اطلاع رسانی توسط کامپایلر به کاربر مورد استفاده قرار میگیرد. توابع از نوع دسترسی final توابعی هستند که کاربر به هیچ عنوان نمیتواند آنها را دستکاری و باز توسعه دهد. برای مثال تابع name به دلیل اینکه نام در تمامی ماشینها از نوع و ورودی یکسانی برخوردار هستند به صورت ثابت تعریف شده است تا کاربر نتواند این ساختار را به هم بزند. زمانی از final استفاده کنید که قرار نباشد ساختار اصلی متدی از کلاس مشتق شده تغییر یابد. همانطور که مشخص است در کلاس پایه ما توابعی را به صورت ثابت تعریف کرده ایم که نیازی نباشد توسعه دهنده مجدداً ساختاری را تولید کند که ممکن نیست خارج از این قالب باشد. حال وقتی قرار باشد وضعیت روشن بودن یا خاموش بودن یک خودرو را بررسی کنیم کافی است متد start را صدا بزنیم، این خاصیت در هواپیمای جنگنده هم وجود دارد بنابراین در هر دوی آنها یکسان است. اما ممکن است برخی از ویژگیها متفاوت باشد. برای مثال قدرت موتور یک خودرو با یک هواپیمای جندگنده یکسان نیست اما ساختار کلاس آنها مسلماً یکی است. بنابراین کافی است از کلاس Machine مشتق گرفته و در کلاس خودرو و هواپیمای جنگنده آنها را به آن صورتی که نیاز داریم باز تعریف (توسعه) دهیم. نتیجهٔ بر اساس نیازی که از کلاس والد داشتهایم به صورت زیر خواهد بود: Car Start Status : 1 Name : Cayman Engine Type : 911 Turbo Total Gears : 8 Power : 6300 Rpm Total Cylinders : 6 Color : Red Width : 1939 mm Length : 4855 mm Aircraft Start Status : 1 Name : Su 35 Engine Type : Saturn AL-31 Series روشی که در مورد آن توضیح دادیم، در پیاده سازی انواع پروژههای بزرگ و پیچیده (در صنعت بازیسازی، نرمافزارهای یکپارچه و غیره...) کاربرد بسیاری دارید. به عنوان مثال یک موتور بازی سازی پیشرفته و یا کتابخانهها و فریمورکهای توسعه محصول از چنین ویژگیهایی برخوردار میباشند. این پُست ممکن است بهروز رسانی شود.?
-
1 امتیازمقدمه گاهی اوقات ارزش این را دارد که چند قدم به عقب برداریم و از دید یک تازهکار دنیای توسعه را نگاهی بیاندازیم. امروزه که استقبال زیادی از فریمورک (framework) انگولار میشود، پرسشهای زیادی در مورد انگولار در ذهن توسعه دهندهها به وجود آمده پرسشهایی مانند: انگولار چیست؟ چرا باید انگولار را استفاده کنیم؟ چه موقع نباید از انگولار استفاده کنیم؟ در این مقاله من پاسخ این پرسشها و مطالب بیشتری را میدهم. نگاهی خواهیم انداخت به این که انگولار چیست، چگونه راهاندازی شد و چه زمانی استفاده از انگولار ایدهی خوبی است. بگذارید از ابتدا شروع کنیم و ببینیم چگونه فریمورک انگولار راه اندازی شد؟ انگولار چگونه راهاندازی شد؟ انگولار به عنوان یک پروژهی جانبی شروع شد. در سال 2009، میسکو هِوِری (Miško Hevery) و آدام ابرونز (Adam Abrons) پروژهای را تحت عنوان <angular/> منتشر کردند که به توسعه دهندهها و طراحان کمک میکرد تا با استفاده از تگ (tag) های ساده HTML وب اپلیکیشنهایی (Web application) بسازند. نام "Angular" از براکت های زاویهدار یا <> میآید، که تمام تگهای HTML را احاطه میکنند. میسکو ایدهی پشت این فریمورک را در مصاحبهای که در سال 2013 انجام شد شرح داد: چون دامین angular.com گرفته شده بود - که هنوز هم گرفته شده - حامیها نام کتابخانه را به GetAngular تغییر دادند و سایت کوچکی را قرار دادند که دربارهی امکانات فریمورک صحبت میکرد. تصویر زیر وبسایت انگولار در سال 2009 را نشان میدهد: پس از مدت کوتایی میسکو شروع به کار برای گوگل کرد، و در 2010 در حال کار کردن روی پروژه ای به نام google feedback بود. میسکو برد گرین (Brad Green) مدیر خود را قانع کرد تا پروژه را با استفاده از پروژه جانبی انگولار او باز نویسی کند و مقدار زمان و کدی که تیم توانست ذخیره کند کمک کرد تا گوگل را برای قدرتی که انگولار ارائه میداد متقاعد کند. کمی بعد از موفقیت در بازنویسی Google Feedback، همان تیم کتابخانه را متنباز کردند و سرانجام نسخه 1.0 از انگولار در ماه می سال 2011 منتشر شد. طی چند سال آمار استفاده از انگولار صعود کرد، و امروز گوگل استفادهی نیم میلیون توسعه دهنده از انگولار را به رخ میکشد. انگولار چه میکند؟ انگولار یک فریمورک جاوا اسکریپت است که به توسعه دهندهها در ساختن برنامه کمک میکند. این کتابخانه تعدادی امکانات را ارائه میکند که پیاده سازی نیازمندیهای پیچیدهی برنامههای مدرن را بدیهی و آسان میکند. مانند پیوند داده (data binding)، مسیریابی (routing) و انیمیشنها (animations). همچنین انگولار قراردادهایی را برای چگونگی توسعه برنامه (application) فراهم میکند، که میتواند برای تیمهای بزرگی که نیاز دارند با هم روی یک کد پایه کار کنند بسیار مفید باشد. انگولار تنها کتابخانه جاوا اسکریپت است که راهنمای استایل (style) جامع را با تعدادی دستورالعمل محتاطانه درباره چگونگی نوشتن کد با فریمورک ارائه میدهد. چه زمانی باید انگولار را استفاده کرد؟ از دید تکنیکی شما میتوانید هر چیزی با انگولار بسازید، اما انگولار در پروژه های پیچیده که شامل داده میشوند به بهترین شکل عمل میکند. اگر شما نگاهی به برنامههای متنوع ساخته شده توسط انگولار که در اینجا لیست شده بیاندازید، خواهید دید عموما برنامههایی هستند که دادهها را از فرم (form) ها جمعآوری کرده و با آن کاری میکنند. این به این معنی نیست که شما باید برای استفاده از انگولار در پروژهی خود فرم داشته باشید. توسعه دهندهها تعداد تعجب برانگیزی از بازی با انگولار به خوبی چیزهایی مثل برنامههای واقعیت مجازی ساختهاند! با این حال اکثر آموزشهایی که خواهید یافت دربارهی برنامههایی از نوع فرمدار خواهد بود. برای مثال مستندات انگولار آموزشی دربارهی ساخت برنامهای است که شما با استفاده از فرم، قهرمان هایی را میسازید و آنها را در لیستی مشاهده میکنید. انگولار در برنامههای با پایه فرم خوب عمل میکند، همچنین برای برنامههای بزرگ و پیچیده بسیار مناسب است. همچنین انگولار نه آسانترین فریمورک جاوا اسکریپ است و نه کوچکترین؛ بنابراین اگر در حال ساخت چیز کوچکی هستید کتابخانههای سادهتری مثل جیکوئری خواهید یافت که مناسبتر هستند. مشابهاً انگولار بسیار مناسب برنامههایی است که توسط تیمهای متوسط الی بزرگ ساخته شدهاند. اگر شما خودتان در حال کار بر روی برنامهای هستید، ممکن است قرارداد های انگولار را بیشتر از نیاز خود ببینید. انگولار همچنین برای برنامههایی مناسب است که نیاز دارند در محیطهای توسعه مختلفی اجرا شوند. اگر شما برنامهای دارید که باید به خوبی یک برنامهی ویندوزی یا مک اجرا شود، میتوانید یکی از آموزشهای آنلاین برای اجرای برنامهی انگولار خود با پروژه معروف الکترون را دنبال کنید. اگر شما برنامهای دارید که باید به خوبی برنامه اندروید و ios اجرا شود، میتوانید با استفاده از NativeScript برنامهی خود را در یک محیط بومی واقعی موبایل رندر (Render) کنید. در بعضی موارد حتی میتوانید این کد را بین پلتفرمهای مختلف به اشتراک بگذارید. چه کسی پشتیبان انگولار است؟ تیم هستهی انگولار آرایهای عظیم از افراد و جامعهی (community) انگولار را شامل میشود که در دنیا گسترده شدهاند. که میشود گفت بیشتر توسعههای روز به روز انگولار توسط کارمندان گوگل انجام شده است. صفحه دربارهی انگولار تقریباً 20 کارمند گوگل را در تیم هسته انگولار لیست کرده است و تمام برترین مشارکت کنندهها در پروژه انگولار در گوگل کار میکنند. که میشود گفت گوگل انگولار را کنترل میکند، خود کتابخانه هنوز تا مقدار زیادی تلاش جامعه است. بیشتر از 2000 فرد در یکی از مخزنهای (repositories) متنباز انگولار مشارکت داشتهاند. راهنما و آموزشهای بیشمار نوشته شده توسط جامعه در دسترس هستند، و شرکتهای مختلفی به توسعه دهندهها برای قدرت بیشتر پیشنهاد آموزش و تجهیز شدن به انگولار را میدهند. چه نسخه ای از انگولار را استفاده کنم؟ در زمان نوشتن این مقاله دو نسخه مشهور انگولار موجود هستند. نسخه یک در وبسایت https://angularjs.org در دسترس است و نسخه ی آپدیت شدهی همان کتابخانهای است که میسکو و تیم در سال 2011 منتشر کردند. نسخه ی مشهور دیگر انگولار اکنون به سادگی "Angular"خوانده میشود و در وبسایت https://angular.io در دسترس است. انگولار مدرن کاملا شکل دوباره طراحی شدهی نسخه یک برای مرورگرها، جریانهای کار و پلتفرمهای توسعه جدیدتر است.
-
1 امتیازکتابخانه cURL یک پروژه نرمافزاری کامپیوتر است که یک کتابخانه و ابزار خط فرمان را برای انتقال داده ها با استفاده از پروتکلهای مختلف را فراهم میکند. چیزی که موجب محبوبیت این کتابخانه شده است پشتیبانی از پروتکلهای کثیری مانند DICT, FILE, FTP, FTPS, Gopher, HTTP, HTTPS, IMAP, IMAPS, LDAP, LDAPS, POP3, POP3S, RTMP, RTSP, SCP, SFTP, SMB, SMTP, SMTPS, Telnet و TFTP میباشد. همچنین cURL گواهینامه های SSL را نیز پشتیبانی میکند. پروژه cURL با دو عنوان libcurl و cURL در سال ۱۹۹۷ توسط دانیل استنبرگ معرفی شد. به طور کلی libcurl یک کتابخانه انتقال داده سمت-کاربر است و cURL یک خط فرمان جهت دریافت و ارسال داده تحت آدرس url است. برای مثال کد زیر نمونه ای از نحوه عملکرد این کتابخانه جهت استفاده از متد Get برای کار با پروتکل HTTP میباشد: #include <stdio.h> #include <curl/curl.h> int main(void) { CURL *curl; CURLcode res; curl = curl_easy_init(); if(curl) { curl_easy_setopt(curl, CURLOPT_URL, "http://example.com"); /* example.com is redirected, so we tell libcurl to follow redirection */ curl_easy_setopt(curl, CURLOPT_FOLLOWLOCATION, 1L); /* Perform the request, res will get the return code */ res = curl_easy_perform(curl); /* Check for errors */ if(res != CURLE_OK) fprintf(stderr, "curl_easy_perform() failed: %s\n", curl_easy_strerror(res)); /* always cleanup */ curl_easy_cleanup(curl); } return 0; }