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

وبلاگ‌ها

نوشته‌های ویژه

  • فرهاد شیری

    امنیت در نرم افزارهای تولید شده با زبان ++C

    توسط فرهاد شیری

    با توجه به اهمیت امنیت نرم افزار، شرکت های بزرگ دنیا به ارائه راهکارهایی چون طراحی زبان ها و محیط های برنامه نویسی و مفسر و مترجم هایی با قابلیت های کنترل امنیتی بر روی سیستم عامل و بسیاری از راهکارهای دیگر پرداخته اند اما با توجه به عدم توانایی راهکارها در کنترل تمامی موارد امنیتی، عدم امکان پیاده سازی راهکارهای امنیتی بر روی برخی ساختارها، ایجاد محدودیت برای دسترسی به برخی منابع و امکانات و مشکلات کوچک و بزرگ دیگر برنامه نویسی یک برنامه به صورت ایمن بهترین راهکار برای محافظت از یک برنامه است. یکی از زبان هایی که در کنار محبوبیت در میان برنامه نویسان، همیشه یکی از زبان های پر بحث در برنامه نویسی ایمن بوده است، خانواده زبان های C به خصوص ++C است. در این زبان ها عمده مدیریت منابع به برنامه نویس واگذار شده که در صورت عدم مدیریت درست آن ها، آسیب پذیری های مختلفی رخ می دهد. بهترین راهکار برای جلوگیری از بروز آسیب پذیری نرم افزارها، برنامه نویسی پدافندی و ایمن آن نرم افزار از ابتداست. دراین مستندات، باتوجه به جامعیت و کاربرد فراوان زبان ++C درکنار محبوبیت، مباحث ونکات اساسی در برنامه نویسی پدافندی و ایمن این زبان مطرح شده و انواع آسیب پذیری و شیوه جلوگیری از بروز آن ها و رفع آن ها در صورت بروز، توضیح داده می شود. همچنین سعی می شود تا راهکارهای ارائه شده تا حد امکان قابل پیاده سازی در زبان C نیز باشند. با توجه به گستردگی ابزارهای برنامه نویسی این زبان و وجود کامپایلرهای مختلف، زبان معیاری برای این مستند مدنظر قرار گرفته شده است و ساختار ارائه شده مربوط به ابزار یا کامپایلر خاصی نیست اما بنا بر نیاز مثال هایی در کنار زبان معیار از ابزارهایی خاص نیز ارائه می گردد. رفتار تعریف نشده ممکن است شامل مختل شدن عملکرد برنامه(Crash) خروجی نامربوط و غلط، بروز آسیب پذیری های نرم افزاری و موارد دیگر می باشد. وجود رفتار نامتعارف در یک برنامه نه تنها امنیت خود آن برنامه ، بلکه ممکن است امنیت سیستم عامل، شبکه را نیز به خظر بیندازد. جلوگیری از بروز رفتارهای تعریف نشده و مقابله با آن ها از مباحث مهم برنامه نویسی تدافعی و ایمن است. توابع بدون آرگومان برای تعریف یک تابع بدون آرگومان باید از کلمه کلیدی void در زمان تعریف تابع استفاده نمایید.با این کار تزریق کد توسط هکرها را مختل می کنید.   int getValue(void) { return 1; } اعداد تصادفی در صورت نیاز به اعداد تصادفی از تابع ()rand استفاده نکنید به این علت که خروجی این تابع در تکرارهای بالا دچار تکرار می شود. بهتراست از تابع ()srand استفاده کنید می توانید برای آن seed تعریف کنید تا احتمال تکرار را به حداقل برسانید. در ویندوز هم می توانید از تابع ()CryptGenRandom استفاده کنید و در لینوکس هم تابع ()random و تابع ()srandom استفاده نمایید. #include <windows.h> #include <wincrypt.h> #include <iostream> int main(void) { HCRYPTPROV hcp; CryptAcquireContext(&prov, NULL, NULL, PROV_RSA_FULL, 0); long int li = 0; CryptGenRandom(hcp, sizeof(li), (BYTE *)&li); printf("Random number is -> %ld\n", li); return 0; } عدم استفاده از تابع بازگشتی جهت مقدار دهی اولیه به آرایه ای با کلاس حافظه استاتیک در مثال زیر زمان ساخته شدن و مقدار دهی اولیه آرایه cache تابع fact مجددا فراخوانی شده واین عمل به دلیل ایستا بودن آرایه باعث بروز رفتار تعریف نشده و خطا خواهد شد. #include <stdexcept> int fact(int i) noexcept(false) { if (i < 0) { throw std::domain_error("i must be >=0"); } static const int cache[] = { fact (0), fact(1), fact(2), fact(3), fact(4), fact (5), fact (6), fact(7), fact(8), fact(9), fact(10), fact (11), fact (12), fact(13), fact(14), fact(15), fact(16) }; if (i < (sizeof(cache) / sizeof(int))) { return cache[i]; } return i > 0 ? i * fact (i - 1) : 1; } حال برای رفع این اشکال طبق نمونه کد زیر آرایه را بدون استفاده initializer list با استفاده از یک متغیر ثابت که تعداد عضو های آرایه را معین میکند تعریف شده است و ازآنجا که کامپایلر آرایه های از جنس کلاس حافظه استاتیک را خود با عدد 0 مقداردهی میکند دیگر یک آرایه از قبل پر شده نخواهیم داشت و در مرحله با استفاده از تکنیک lazy به هر یک از عضوهای آرایه مقدار مناسب را با استفاده از تابع بازگشتی مقدار دهی خواهیم کرد. #include <stdexcept> const int arraySize = 17 int fact(int i) noexcept(false) { if (i < 0) { throw std::domain_error("i must be >=0"); } static int cache[arraySize]; if (i < (sizeof(cache) / sizeof(int))) { if (0 == cache[i]) { cache[i] = i > 0 ? i * fact(i - 1) : 1; } return cache[i]; } return i > 0 ? i * fact(i - 1) : 1; } الحاق مضاعف هدر فایل ها الحاق مضاعف زمانی رخ می دهد که یک هدر دو ویا چند بار به برنامه اضافه شوند. در مثال زیر در کلاس c هدرهای a , b الحاق می شوند در حالی که در کلاس b هم هدر a الحاق شده است که الحاق مضاعف رخ داده است. //a.h struct a { int membe }; //b.h #include "a.h" //c.c #include "a.h" #include "b.h" برای جلوگیری از این الحاق های مضاعف می توانید از روش زیر استفاده نمایید //a.h #ifdef A_H #define A_H struct a { int member; }; #endif ویا می توانید از دستور pragma استفاده کنید البته این دستور جز دستورات استاندارد ++c / c نمی باشد ولی اکثر کامپایلرها این دستور را اجرا میکنند. //a.h #pragma once struct a { int member; }; رمزنگاری اصولی جهت رمزنگاری داده های حساس در برنامه های خود می توانید از کتابخانه ++Crypto وهمچنین کتابخانه libcrypto از OpenSSL نیز استفاده نمایید. رمز نگاری به چند دسته اصلی تقسیم می شود: 1- رمزنگاری درهم سازHash که میتوان به الگوریتم های MD6 , MD5 , SHA-1,SHA-0 اشاره کرد. 2- رمزنگاری با کلید متقارن که می توان به الگوریتم های RC4 , AES , DES , 3DES اشاره کرد. 3- رمزنگاری با کلید عمومی نا متقارن که می توان به الگوریتم های RSA , DSA , DSS اشاره کرد. 4- کد گذاری دودویی به متن که می توان به الگوریتم های Base32 , Base58 , Base64 ,Base85 اشاره کرد. مدیریت مقدار و نوع داده ها و مقدار دهی اولیه در مثال زیر متغیر هایی تعریف شده اند که مقدار اولیه ندارند (البته درست است که در برخی از کامپایلرها این متغیرها را مقدار دهی خواهند کرد، ولی توجه داشته باشید که تکنیک های برنامه نویسی تدافعی جدای از امکانات کامپایلر می باشد) int main (void) { int a; float b; char c; bool d; return 0; } اکنون مشاهده میکنید که بعد از اجرای برنامه چه مقدار هایی در متغیرها ذخیره شده است. پس بنابراین مقدار دهی اولیه متغیرها یا باید برحسب نیاز در همان ابتدا تعریف صورت گیرد یا در صورت عدم نیاز به وجود مقدار اولیه خاص، مقدار دهی با استفاده از تابع همان نوع داده انجام خواهد شد. int main (void) { int a = int(); float b = float(); char c = char(); bool d = bool(); return 0; } و بعد از اجرا به این صورت خواهد بود مقدار دهی اولیه به آرایه ها int main (void) { int a[5]; float b[5]; char c[5]; bool d[5]; return 0; } که بعد از اجرا بدین صورت خواهد بود... و برای رفع این اشکال باید همیشه آرایه ها را مقدار دهی اولیه نمایید. int main (void) { int a[5] = {}; float b[5] = {}; char c[5] = {}; bool d[5] = {}; return 0; } وبعد از مقدار دهی اولیه به آرایه ها خواهیم داشت ... ادامه خواهد داشت این مقاله...  
    • 0 دیدگاه
    • 50 مشاهده
  • الهه انصاری

    ۷ گام برای تبدیل شدن به یک طراح موفق UI/UX

    توسط الهه انصاری

    «بخش اول» در این مطلب از تجربیات طراح موفق خانم Nicole Saidy استفاده خواهیم‌ کرد. ایشان بخاطر سوالات زیادی که از جانب برنامه‌نویسان متعدد، مدیران بازاریابی و افراد مختلف دیگری مطرح شده بود این مقاله را براساس تجربیات شخصی خود تنظیم کردند. ادامه‌ی مطلب را از زبان خودشان می‌شنویم. «چگونه شروع کنم؟» این سوال من را به زمانی می‌برد که برای اولین بار کار خود را آغاز کردم. 7 سال پیش، من در اولین روز اولین کار طراحی‌ام بودم. در مقابل یک فایل فتوشاپ خالی در iMac نشسته ام (در آن زمان یک کاربر ویندوز بودم) و سعی می‌کنم آنچه که مدیرم توضیح داد درک کنم. هیچ نظری ندارم که چگونه شروع کنم. خالی! قبل از رسیدن به این شغل، تازه از دانشگاه با مدرک چندرسانه‌ای فارغ التحصیل شده بودم. پس چرا چیزی در مورد طراحی نفهمیدم؟ خب، در دانشگاهها به ما طراحی عملی یاد نمی‌دهند. اکثر دورههای دانشگاه فقط ما را بصورت تئوری آموزش می‌دهند و گاهی اوقات به ما یاد می‌دهند که چگونه از ابزارهای طراحی مانند Adobe Suite استفاده کنیم. اما این کافی نیست - حتی نزدیک هم نیست. تمرین، یادگیری و خودآموزی تنها چیزی است که می‌تواند شما را به یک طراح بهتر تبدیل کند. 7 سال بعد از خودآموزی، من اکنون یک معلم طراحی و سخنران کنفرانس بین المللی هستم. اولین چیزی که باید بدانید این است: لازم نیست که با این استعداد متولد شوید. ما موجودات خارق العاده‌ای مانند تک‌ شاخ‌ها نیستیم. ما فقط قصد داشتیم طراح باشیم و هنرمندانه به دنیا آمدیم. طراحی، در مورد حل مشکلات است. این یک روند دائمی یافتن مشکلات و ایجاد راه حل برای آنهاست. حوزه‌های مختلفی برای طراحی وجود دارد: رابط کاربری، تجربه‌ی کاربری، طراحان محصول، طراحان گرافیکی، طراحان تعاملی، معمار ساختار اطلاعات و غیره. برای شروع تحقیق کنید که کدام حوزه شما را بیشتر جذب می‌کند. برای حال، روی رایج‌‌ترین حوزه تمرکز می‌کنیم: ترکیبی از رابط و تجربه: طراح رابط کاربری و تجربه‌ی کاربری. 1. خودتان را با اصول رابط کاربری آشنا کنید. قبل از شروع تمرین طراحی، اولین چیزی که نیاز دارید یادگیری برخی اصول طراحی است. در این مرحله، شما به دنیای طراحی قدم خواهید گذاشت و شروع به تفکر «خلاقانه» می‌کنید و جنبه‌های روانشناسی طراحی را خواهید آموخت: چرا این طرح می‌تواند خوب بنظر بیاید و یا شکست بخورد؟ برخی از اصول پایه‌ای که باید بدانید: 1. رنگ (Color) واژگان رنگ‌ها، اصول و روانشناسی رنگ را شامل می‌شود. ۲. تعادل (Balance) اصل تعادل به تقارن و عدم تقارن در مبحث طراحی می‌پردازد. 3. تضاد (Contrast) هدف از بکارگیری تضاد سازماندهی اطلاعات، ایجاد سلسله مراتب و ایجاد تمرکز است. ۴. تایپوگرافی (Typography)  انتخاب فونت مناسب و ایجاد متن قابل خواندن در وب با رعایت این اصل ممکن خواهد بود. ۵. ثبات و انطباق (Consistency) مهمترین اصل، جهت ایجاد طرح های بصری و قابل استفاده از ثبات شروع میشود.   ۲. فرآیند خلاقانه‌ی تجربه‌ی کاربری را فرا بگیرید. مورد بعدی درک فرآیند خلاقانه است. طراحی UI/UX فرآیندی متشکل از فازهای خاصی است که هر فرد خلاق از آن عبور می‌کند. این فرآیند شامل ۴ فاز مختلف کشف (Discover)، تعریف (Define)، توسعه (Develop) و تحویل (Delivery) است. فرآیند خلاقانه فاز کشف فاز کشف همان فاز شروع پروژه است که طراحان به جستجو، الهام گرفتن و جمع‌آوری ایده‌ها می‌پردازند. فاز تعریف در این مرحله، طراحان ایده‌ی حاصل از فاز کشف را تعریف و مشخص می‌کنند. در‌واقع خلاصه‌ای واضح از کاری که قرار است انجام بگیرد مشخص می‌شود. فاز توسعه فاز توسعه مرحله‌ای است که راه‌ حل‌ها یا مفاهیم ایجاد شده، نمونه‌سازی، تست و تکرار می‌شوند. این فرآیند آزمایش و خطا به طراحان کمک می‌کند تا ایده‌های خود را بهبود داده و اصلاح کنند. فاز تحویل فاز آخر فاز تحویل است که در آن پروژه‌ی پایانی، تولید و راه اندازی می‌شود. ۳. چشمان خود را برای طراحی تقویت کنید. دانستن اصول طراحی عالی است، اما گاهی اوقات کافی نیست. شما همچنین باید چشمان خود را آموزش دهید تا طراحی خوب و طراحی بد را ببینید و نقاط قوت و ضعف آن‌ها را مشخص کنید. موثرترین روش جهت آموزش چشم برای طراحی از طریق الهام است. قبل از باز کردن یک بوم خالی و تماشای آن برای نیم ساعت ، بدانید که تنها راه خلاق بودن از طریق تحقیق است. گاهی اوقات ذهن نمی‌تواند ایده‌های خودش را بسازد. ابتدا باید به طرح‌های دیگر نگاه کنید تا طرح خودتان را ایجاد کنید؛ مخصوصا زمانی که فعلا مبتدی هستید. در وب‌سایت‌های نمونه‌کار‌ها قدم بزنید:) بنابراین به آنچه که طراحان دیگر در سایت Dribbble انجام می‌دهند نگاه کنید و هر زمان که طرح‌های زیبا یا چیزی مربوط به پروژه‌ی خود را می‌بینید، آن را در یادداشت‌های خود ذخیره کرده و اشاره کنید که چه چیزی از آن طرح را پسندیده‌اید. همچنین می‌توانید با گرفتن اسکرین‌شات ذخیره‌سازی را دقیق‌تر انجام دهید. به این ترتیب، شما مجموعه‌ای از طرح‌های الهام بخش دارید که می‌توانید برای شروع کار از آن‌ها بهره ببرید. چند مورد از سایت‌های مفید جهت الهام گرفتن در زیر آورده‌شده‌اند:  onepagelove.com awwwards.com dribbble.com pttrns.com uimovement.com ۴. مطالعه‌ی مقالات طراحی را در برنامه‌ی روزانه‌ی خود بگنجانید. برای اینکه خودمان را با طراحی آشنا کنیم، بهترین راه این است که هر روز چند مقاله در این رابطه مطالعه کنیم. خواندن اخبار و وبلاگ‌های طراحی را عادت روزمره کنید. میلیون‌ها مقاله‌ بصورت آنلاین در دسترس ما هستند تا روند‌های جدید دنیا، مورد‌های کاربری (Use Cases) و آموزش‌های مختلف را فرا بگیریم. تمام کاری که باید انجام دهیم، پیدا کردن آنهاست. هیچ چیز بهتر از یادگیری از تجربه‌های دیگران نیست. خواندن مقالات را عادت روزمره کنید بنابراین روز خود را با یک فنجان قهوه و چند مقاله‌ی الهام‌ بخش در مجلات آنلاین Medium یا Smashing شروع کنید. یادگیری چیزهای جدید در صبح، ذهنتان را گسترش داده و در طول روز فرصت خلاقیت را برایتان فراهم میکند. بنابراین، هر چند وقت یکبار در طول روز، چندین بار به خود استراحت بدهید تا بتوانید بیشتر مطالعه کنید. استراحت کردن برای خلاقیت خیلی مهم است، به ویژه هنگامی که ذهن شما گیر کرده و احساس می‌کنید که بازدهی مطلوب را ندارید. از جمله کارهای قابل انجام دیگر می‌توانید وب‌سایتی را که به عنوان صفحه‌ی اصلی مرورگر خود دوست دارید، نشانه‌گذاری کنید و یا از یک خبرنامه‌ی طراحی اشتراک بگیرید. برخی از وبلاگ‌ها و سایت‌های خبری محبوب در زمینه‌ی طراحی عبارتند از: blog.marvelapp.com medium.com/design smashingmagazine.com webdesignernews.com sitepoint.com/design-ux 5. پروژه‌های غیرواقعی طراحی کنید. کار نیکو کردن از پر کردن است و همه می‌دانیم که نمی‌توانیم بدون تجربه، مشتری یا شغلی را بدست آوریم. اما بدون یک کار یا پروژه هم نمی‌توانیم تمرین کنیم و تجربه کسب کنیم، درست است؟ بنابراین می‌توانیم این چرخه را با تمرین کردن و ایجاد پروژه‌های غیر واقعی برای سرگرمی بشکنیم! Dribbble پر از این نمونه کارها است. طراحی فیسبوک توسط Kevin McCarthy زمانی را صرف طراحی مجدد وب‌ سایت یا اپلیکیشنی که قبلا استفاده کرده‌اید کنید. این کار را برای هر چیزی که فکر می‌کنید می‌تواند بهتر شود، انجام دهید. همچنین می‌توانید ایده‌ی برنامه‌ی خود را طراحی کنید. درواقع با طراحی نمونه‌ کارها تمرین کرده و تجربه کسب می‌کنید.   ۶. کار با آخرین ابزار طراحی وب را بیاموزید. هزاران ابزار طراحی وجود دارد، اما شما نیاز ندارید که کار با همه‌ی آنها را یاد بگیرید. بهترین آن‌ها را بیابید، ابزارهای مورد علاقه‌ی خود را انتخاب کنید و با بکار گیری جدیدترین ویژگی‌ها و روندها به‌ روز باشید. جدیدترین ابزارهایی که در فرآیند طراحی خود استفاده می‌کنم در زیر آورده‌ شده‌اند: Sketch برای طراحی رابط کاربری Figma برای طراحی رابط مشترک Balsamiq برای رسم وایرفریم‌های با جزيیات کم و ابتدایی (low fidelity wireframing) Adobe XD برای طراحی رابط کاربری و نمونه‌سازی Marvel App برای ساخت مدل‌های تعاملی Invision App برای نمونه‌سازی و همکاری   7. از مربی (mentor) کمک بگیرید. یکی دیگر از روش‌های عالی برای یادگیری طراحی، یافتن یک مربی طراحی یا دوست طراح است که مایل به کمک است. آنها به شما کمک میکنند که روند یادگیری خود را سرعت بخشید. طراح کار شما را بررسی و نظرات خود را هر زمان که ممکن باشد می‌دهد. این کار مثل یک میانبر عمل می‌کند. آنها همچنین راهنمایی‌ها و ترفندهایی به شما می‌دهند که از تجربیات خود آموخته اند. بنابراین پیش بروید و به یک طراح ایمیل بفرستید، سوالات و نگرانی‌های خود را با وی مطرح کنید. هنگامی که شما آماده‌ی صحبت در مورد طراحی با دیگران هستید، می‌توانید کسی را در مورد طراحی راهنمایی کنید و یا آموزش دهید. همچنین یاد خواهید گرفت که آن را  دیدگاه‌های مختلف ببینید و بازخورد و پاسخ سوالاتی را دریافت کنید که ممکن است هرگز در مورد آن‌ها فکر نکرده باشید. هنگامی‌که در مورد طراحی با افراد دیگری صحبت می‌کنید، ذهن شما همواره در‌حالت "طوفان فکری" قرار می‌گیرد و بیشتر از قبل به طراحی علاقه‌مند خواهید شد. منتظر بخش‌های بعدی با جزییات بیشتر در مورد اصول رابط کاربری باشید.
    • 0 دیدگاه
    • 185 مشاهده
  • کامبیز اسدزاده

    فرق بین کامپایل استاتیک و داینامیک

    توسط کامبیز اسدزاده

    فرق بین کامپایل استاتیک و داینامیک قبل از اینکه فرق بین ایستا (استاتیک) - Static و پویا (داینامیک) - Dynamic را بدانیم لازم است در رابطه با چرخه زندگی نوشتن یک برنامه و اجرای آن آشنا شویم. هر برنامه برای اولین بار توسط یک محیط توسعه (Editor) یا IDE توسط برنامه نویسان انتخاب و به صورت فایل متنی قابل ویرایش می‌باشد. سپس فایل متنی که شامل کد های نوشته شده توسط برنامه نویس تحت زبان برنامه نویسی مانند C، C++ و غیره... می‌باشد توسط کامپایلر به کد شیء ای تبدیل می‌شود که ماشین بتواند آن را درک کرده و اجرا کند. برنامه ای که ما می‌نویسیم ممکن است به عنوان یک مورد توسط دیگر برنامه ها یا کتابخانه‌هایی از برنامه ها مورد استفاده قرار بگیرد برقراری ارتباط (پیوند کردن) یا همان لینک کردن پروسه‌ای است که برا اجرای موفقیت آمیز برنامه‌های نوشته شده ما بکار می‌رود برقراری ارتباط بین ایستا و پویا دو پروسه‌ای از جمع آوری و ترکیب فایل های شیء‌های مختلفی است که به منظور ایجاد یک فایل اجرایی می‌باشند. در این بخش ما تصمیم بر این داریم تا تفاوت بین آن ها را با جزئیات مورد بررسی قرار دهیم. عمل پیوند یا ترکیب در زمان کامپایل انجام شود، در واقع زمانی که کد منبع به زبان ماشین ترجمه می‌شود، در زمان بار گذاری، زمانی که برنامه در داخله حافظه بار گذاری می شود، و حتی زمان اجرای آن توسط برنامه صورت می گیرد این عمل زمان پیوند و یا ترکیب (اتصال) است. در نهایت این فرآیند توسط برنامه ای اجرا می شود که به آن لینکر - پیوند دهنده (ترکیب کننده) می‌گویند. اتصال دهنده ها به عنوان ویرایستار لینک نیز معرفی می‌شوند. لینک شدن (پیوند شدن) به آخرین مرحله از کامپایل می‌گویند. در زبان علمی اصطلاح لینکر یا Linker معروف است اما در زبان فارسی بهترین گزینه مربوطه را می‌توان با عنوان اتصال دهنده، پیوند دهنده، ترکیب کننده نام برد. همه آن ها نشانگر یک هدف به منظور ترکیب اشیاء با یکدیگر هستند که در مرحله کامپایل صورت می‌گیرد. پس از ایجاد پیوند در برنامه، برای اجرای آن برنامه باید داخل حافظه منتقل شود. در انجام این کار باید آدرس هایی برای اجرای داده ها و دستور العمل ها اختصاص یابد. به طور خلاصه روند زیر می‌تواند به عنوان چرخه زندگی یک برنامه خلاصه شود (نوشتن - لینک کردن - بارگذاری - اجرا) فرق بین کامپایل استاتیک و داینامیک در زیر تفاوت های عمده ارتباط بین استاتیک و داینامیک آورده شده است : استاتیک  ارتباط به روش استاتیک فرآیندی است که تمامی ماژول ها و کتابخانه‌های برنامه در فایل اجرایی نهایی کپی می‌شوند. این روش توسط لینکر در مرحله آخر کامپایل انجام می‌شود. اتصال دهنده - لینکر طبق روال ترکیبی کتابخانه ها را با کد برنامه و همراه مراجع - منابع خارجی ترکیب کرده و برای تولید یک بارگذاری مناسب در حافظه آماده سازی می‌کند. زمانی که برنامه بار‌گذاری می‌شود، سیستم عامل محلی را در حافظه به صورت یک فایل اجرایی که شامل کد‌های اجرایی و داده ها می‌باشد مشخص می‌کند. ارتباط به شیوه‌ی استاتیک توسط برنامه‌ای با نام لینکر انجام می‌شود که در آخرین مرحله فرآیند کامپایل یک برنامه صورت می‌گیرد. لینکر‌ها نیز به عنوان ویرایشگر پیوند نیز عنوان می‌شوند. فایل های استاتیک به طور قابل توجهی دارای اندازه بسیار بزرگی هستند زیرا برنامه های خارجی و کتابخانه های لینک شده همه در یکجا و در فایل نهایی اجرایی جمع آوری شده‌اند. در اتصال استاتیک اگر هر یک از برنامه های خارجی تغییر کرده باشد باید آن ها دوباره کامپایل شوند و مجددا عمل اتصال صورت گیرد در غیر اینصورت هیچ تغییری در به روز رسانی های مرتبط با فایل اجرایی مشاهده نخواهد شد. برنامه‌های استاتیکی زمان بارگذاری ثابتی در هر بار اجرای برنامه در حافظه را در نظر می‌گیرند. و زمانی که برای بارگذاری طول می کشد ثابت است. برنامه‌هایی که از کتابخانه‌های استاتیکی استفاده می‌کنند معمولاً سریعتر از برنامه‌هایی هستند که کتابخانه‌‌ی آن‌ها به صورت پویا می‌باشد. در برنامه های استاتیکی، تمامی کد ها شامل یک فایل اجرایی می‌باشند. بنابراین، آن‌ها هرگز در برنامه هایی که دارای مشکلاتی هستند اجرا نخواهند شد. داینامیک در ارتباط پویا نام کتابخانه های خارجی (کتابخانه‌های به اشتراک گذاری شده) در فایل اجرایی نهایی قرار داده شده‌اند نه خود کتابخانه. در حالی که ارتباط واقعی در زمان اجرا در هر دو فایل در حافظه قرار می‌گیرند. اتصال پویا این اجازه را می‌دهند تا برنامه های متعددی به صورت یک ماژول کپی شده و قابل اجرا مورد استفاده قرار بگیرد. اتصال پویا بر خلاف اتصال استاتیک در زمان اجرا توسط سیستم عامل انجام می‌شود. در اتصال پویا فقط یک نسخه از کتابخانه به اشتراک گذاری شده در حافظه نگه‌داری می‌شود. این به طور قابل توجهی اندازه برنامه های اجرایی را کاهش می‌دهد، در نتیجه صرفحه جویی در حافظه و فضای دیسک صورت خواهد گرفت. در اتصال پویا بر خلاف اتصال استاتیک نیازی به کامپایل کامل پروژه نمی‌باشد در صورتی که لازم باشد تغییراتی در هر یک از فایل‌ها صورت بگیرد تنها کافی است آن را کامپایل و در کنار برنامه قرار دهید. این یکی از بزرگترین مزیت‌های کامپایل داینامیکی می‌باشد. در اتصال پویا زمان بارگذاری برنامه در حافظه ممکن است کاهش یابد. این در صورتی است که کتابخانه های مشترک در حافظه بارگذاری شده‌اند. برنامه‌هایی که از کتابخانه های مشترک استفاده می‌کنند معمولا کندتر از برنامه هایی هستند که از کتابخانه های استاتیکی استفاده می‌کنند. برنامه‌های پویا وابسته به داشتن کتابخانه‌های سازگار هستند. اگر کتابخانه تغییر یابد (برای مثال، یک کامپایلر جدید منتشر شود ممکن است کتابخانه را تغییر دهد)، در این صورت ممکن است برنامه مجدداً تحت کتابخانه جدید باز نویسی و به‌روز رسانی شوند. اگر کتابخانه از روی سیستم حذف شود، برنامه‌ای که وابسته آن کتابخانه می‌باشد دیگر کار نخواهد کرد. در ادامه شما می‌توانید در مورد مراحل کامپایل یک برنامه مراجعه کنید:  
    • 0 دیدگاه
    • 267 مشاهده

وبلاگ‌های سایت ما

  1. الهه انصاری
    آخرین نوشته

    توسط الهه انصاری،

    ساختار شکست کار (Work Breakdown Structure, WBS) یک پروژه‌ی کلیدی قابل ارائه است که کار گروه را به بخش‌های مدیریتی سازماندهی می‌کند. پیکره‌ی دانش مدیریت پژوه (Project Management Body of Knowledge، PMBoK) ساختار شکست کار را به عنوان «تجزیه‌ی سلسله مراتبی تحویل محتوای کار انجام شده توسط تیم پروژه» تعریف می‌کند. ساختار شکست کار به صورت بصری دامنه‌ی کار را به دسته‌های مدیریتی تقسیم می‌کند که یک تیم پروژه می‌تواند درک کند، به طوری که هر سطح از این ساختار تعریف و جزئیات بیشتری را برای ما فراهم می‌کند. شکل زیر یک ساختار تجزیه و تحلیل کار را با سه سطح تعریف می‌کند.

    work-breakdown-structure.png.25ff26b8a0c11ff65fef91a2e8f6fb2b.png

    ساختار شکست کار

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

    WBS-levels.png.da60bd4153586150f56a3e441a1ff840.png

    ساختار شکست کار قابل ارائه

    تیم پروژه، 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 نشان می‌دهد.

    work-breakdown-structure-example.thumb.png.0c823a60e2969d8c2510af37b4ec0da1.png
     

    نمایش یک WBS با کمک MIndView

     

    مزیت کلیدی MatchWare MindView، تفسیر راحت WBS به زمان بندی و برنامه‌ی سطح بالای پروژه است. فرمت طبیعی ساختار شکست کار، برنامه‌ی زمانی پروژه است. مدیر پروژه به راحتی می‌تواند برآوردهای بودجه و مدت زمان تعیین شده را در یک ابزار نقشه برداری ذهنی به کار بندد. این برآورد بودجه و مدت زمان می‌تواند به راحتی به اکسل مایکروسافت و یا پروژه‌ی مایکروسافت برای برنامه ریزی و تجزیه و تحلیل اضافی منتقل شود. مدیران پروژه به دنبال ابزارهایی هستند که به کارشان سرعت بخشند و به کاهش میزان بار اجرایی که همراه با فرآیندهای مدیریتی پروژه است، کمک کنند.

     

     

     

  2. فرشته بیدیان
    آخرین نوشته

    توسط فرشته بیدیان،

    در حال حاضر يادگيري الکترونيکي مفهومي مهم در آموزش عالي است و دانشگاه هاي متنوعي ايجاد شده که نياز جهاني به آموزش
    را نمايانگر می‌کند. با يادگيري الکترونيکي امكان «يادگيري بدون محدوديت زماني و مکانی و صرف هزينه» متناسب با نيازهاي بشر فراهم مي‌شود.

    در زیر به معرفی چند سایت ازشمند جهانی می‌پردازیم:

    1. سايت ايراني Motamem : محلي براي توسعه دانش و مهارت هاي فردي :‌ www.motamem.org
    2. سايت Lynda: وب سايتي که بيش از 4 ميليون نفر در آن مشغول گذارندن دوره هاي آموزشي هستند : www.lynda.com
    3. سايت Creative Live: با کلاس هاي رايگان آنلاين خلاقيت را در خود پرورش دهيد : www.creativelive.com
    4. سايت Mind Tools : محلي براي يادگيري مهارت هاي مديريتي : www.mindtools.com
    5. سايت Codecademy: در اين مدرسه آنلاين مي توانيد کار با java ،  Python ، PHP و... را ياد بگيريد : www.codecademy.com
    6. سايت edX: وب سايتي شامل دوره هاي آنلاين برنامه نويسي : www.edx.org
    7. سايت Platzi: با آموزش هاي اين وب سايت در بازاريابي، کدنويسي،توسعه اپليکيشن و طراحي حرفه اي شويد : www.platzi.com
    8. سايت Guides.co: منبعي کامل از نکته ها و توصيه ها در مورد هر موضوعي که فکرش را بکنيد : www.guides.co
    9. سايت Udacity: در دوره هاي رايگان آنلاين و با تدريس سباستين تران، کدنويسي را بياموزيد : www.udacity.com
    10. سايت Zidbits: محلي براي دسترسي به مقالات جالب و اخبار و حقايق عجيب : www.zidbits.com
    11. سايت TED Ed:مجموعه اي از آموزش هاي ارزشمند در موضوعات متنوع : www.ed.ted.com
    12. سايت iTunes U: دانشگاه هاي برتري مانند هاروارد و يل پادکست هاي کلاس هاي خود را در اينجا به اشتراک ميگذارند : www.apple.com/education
    13. سايت MIT open courseware: براي يادگيري مقدمات کدنويسي با دانشگاه MIT همراه شويد : ocw.mit.edu
    14. سايت WonderHowTo: اين سايت هر روز ويديوهاي جديدي براي يادگيري نحوه انجام کارهاي مختلف منتشر ميکند : www.wonderhowto.com
    15. سايت One Month: در مدت يک ماه يک مهارت جديد بياموزيد : www.onemonth.com
    16. سايت Duolingo: سايت آموزش زبان کاملا رايگان : www.duolingo.com
    17. سايت Squareknot: خلاقيت هم قابل يادگيري است : www.squareknot.com
    18. سايت Spreeder: تندخواني را در اين سايت بياموزيد : www.spreeder.com
    19. سايت Memrise: دانش لغات خود را بيشتر کنيد : www.memrise.com
    20. سايت HTML5Rocks: حرفه اي هاي گوگل آخرين به روزرساني ها، راهنمايي منابع و ساير اطلاعات مربوط به HTML5 را با شما به اشتراک ميگذارند : www.html5rocks.com
    21. سايت Wikipedia'Daily Article List: مقالات ويکيپديا را روزانه در ايميل خود دريافت کنيد : lists.wikimedia.org
    22. سايت DataMokey: در اين سايت SQL و Excel را بياموزيد : www.datamonkey.org
    23. سايت Saylor Academy: با دوره هاي آنلاين اين سايت ارايه مطلب و سخنراني را بياموزيد : www.saylor.org
    24. سايت Learni.st: دوره هاي حرفه اي با محتواي ويژه از عکاسي تا وبلاگ نويسي : www.crunchbase.com/organization/learnist
    25. سايت Academic Earth: دوره هاي پيشرفته دانشگاهي از سال 2009 تا کنون در اين سايت در دسترس هستند : academicearth.org
  3. دو هفته پیش، نشست ۲۰۱۸ سی‌پلاس‌پلاس آغاز شد. شرکت کننده‌ها مدال‌های خودشان را دریافت کردند چرا که همه‌ چیز با هماهنگی بسیار خوبی به پایان رسید. این رویداد به عنوان یکی از چندین رویداد مهمC++ بشمار می‌رود که هرساله توسط حامیان و علاقه‌مندانش برگزار می‌شود.

     

    سخنان کلیدی

    امسال در این رویداد سه یادداشت کلیدی وجود داشت، که با حضور Andrei Alexandrescu ،Lisa Lippincott و Nicolai Josuttis ارائه شد.

    IMG_0399_600.JPG

    اولین سخنران Andrei Alexandrescu بود، او این کنفرانس را با افکار و اندیشه‌های خودش برای شروع آغاز کرد عنوان موضوع آن به بَد بودنِ کپی constexpr از static if اشاره می‌کرد. او یک سخنران سرگرم کننده است، بنابراین سخنرانی او بسیار طبیعی در مورد یادداشت‌های خودش منعکس می‌شد. همچنین او به عنوان یک توسعه‌دهنده‌ی ++C به نقاط بسیاری اشاره کرد که کمیته‌ی استاندارد سازی زبان حرف‌های او را تایید می‌کرد.

    IMG_0620_600.JPG

    سخنران دوم Lisa Lippincott روز دوم را با یک سخنرانی آغاز کرد که دیدگاه‌های مختلفی در مورد محاسبات و منطق که در آن به کار می‌رود ارائه داد. زمانی که مُجری لیزا را دعوت کرد، می‌دانست که این موضوع به عنوان یک نکته مهم برای فکر کردن است، چیزی که همه نمی‌توانند به طور مستقیم آن را درک کنند و به آن دسترسی پیدا کنند. اما این تلنگری برای نحوه‌ی درک کُد از دیدگاه ریاضی و دیدگاه جدیدی بود.

    IMG_1000_600.JPG

    سخنران سوم و آخر Nicolai Josuttis بود که در مورد، او اولین سخنران در نشست Hartmut Kaiser در سال ۲۰۱۴ بود. در آن سخنرانی بسیار خوب درخشیده، بنابراین در قسمت سوم نقص‌هایی را با جزئیات در مورد نقاط خشن ++C نشان داد. این سخنرانی بسیار صادقانه بود! چرا که بسیاری از جزئیات خشن بودن سی‌پلاس‌پلاس را عنوان کرد که همگی با آن موافق بودند.

     

    مذاکرات، مسابقه و گفتگوها‌ی چند دقیقه‌ای

    جلسات و رویداد‌های مرتبط با ++C همیشه گفتگو‌های بسیار خوبی دارد، و با یک مسیر مشخص که هدفش آوردن سخنرانان جدید با دیدگاه‌های جدید است برگزار می‌شود. بازخورد سخنران‌ها در این رویداد خوب بود چرا که به برخی از نکات در مورد چگونگی بهبود‌ها اشاره کردند.

    IMG_0728._600.JPG

    IMG_0871_600.JPG

    تصویر بالا مربوط به Hana Dusíková است که می‌توان به آن بهترین نمره را داد. بهترین سخنرانی هم مربوط به  Andrei Alexandrescu بود که دنبال شد. در اولین عصر این رویداد، امتحان (Quiz) برجسته‌ترین مورد رویداد در آن روز بود. سازماندهی آن توسط Diego  و اسپانسری آن توسط Conan است که برای چند سال اخیر حمایت شده است. به نظر می‌رسید که سوالات امتحانی این سال سخت‌تر از سوالات رویداد قبلی در سال گذشته بوده است. اما بار دیگر این سرگرمی ترکیب بسیار خوبی با ترس از سی‌++ را داشت.

    هر یک از سوالات امتحانی یک خروجی از کُد را تولید می‌کردند، که هر گروه باید برای کسب امتیاز آن را می‌نوشتند. ده نوع کُد امتحانی وجود داشت که تهیه کننده‌ی گزارش برای به تصویر کشیدن آن‌ها زیاد خوب عمل نکرده است. بنابراین تصویر زیر مربوط به سوالات چالشی در مورد سی‌پلاس‌پلاس است:

    IMG_0542_600.jpg

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

    • نقل قول

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

    نکته: شما می‌توانید تصاویر ویدیویی مربوط به این رویداد را از کانال رسمی آن در یوتیوب دریافت کنید.

     

  4. با سلام 

    هدف از تدوین این مقاله نحوه استفاده از مفاهیم بازتاب (Reflection)  در نرم افزار های تولید شده با استفاده از زبان ++C می باشد.

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

    کتابخانه RTTR چه مکانیزمی دارد؟

    RTTR به معنای بازتاب نوع زمان اجرا است. این قابلیت یک برنامه کامپیوتری را برای درک و تغییر یک شی در زمان اجرا توضیح می دهد. 

    هدف از این کتابخانه ارائه راه ساده و بصری برای استفاده از انعکاس در C++ است.

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

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

    موارد اصلی استفاده از بازتاب برای مثال سریال سازی اشیاء، ایجاد UI، اتصال به زبان های برنامه نویسی دلخواه ، ارتباطات شبکه ، کلاسهای ORM برای کار با دیتابیس ها می باشد.

    نحوه استفاده از این کتابخانه 

    رجیستر کردن کلاس ها

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

    تنظیم رابط کلاس فقط زمانی لازم است که از ارث بری استفاده شود.

    #include <rttr/registration>
    using namespace rttr;
    
    struct MyStruct { MyStruct() {}; void func(double) {}; int data; };
    
    RTTR_REGISTRATION
    {
        registration::class_<MyStruct>("MyStruct")
             .constructor<>()
             .property("data", &MyStruct::data)
             .method("func", &MyStruct::func);
    }

    استفاده از تکرار گرها در بازتاب

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

    البته شامل تمامی کلاسهای پایه قبلا ثبت شده نیز خواهد شد.

    type t = type::get<MyStruct>();
    for (auto& prop : t.get_properties())
        std::cout << "name: " << prop.get_name() << std::endl;
    
    for (auto& meth : t.get_methods())
        std::cout << "name: " << meth.get_name() << std::endl;

    استفاده از نوع Constructor برای ساخت اشیاء در زمان اجرا.

    از طریق نوع شی یا شیء سازنده می توانید نمونه هایی از نوع خود را ایجاد کنید.

    type t = type::get_by_name("MyStruct");
    variant var = t.create();    // will invoke the previously registered ctor
    
    constructor ctor = t.get_constructor();  // 2nd way with the constructor class
    var = ctor.invoke();
    std::cout << var.get_type().get_name();  // prints 'MyStruct'

    استفاده از متدهای دسترسی در بازتاب 

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

    MyStruct obj;
    
    property prop = type::get(obj).get_property("data");
    prop.set_value(obj, 23);
    
    variant var_prop = prop.get_value(obj);
    std::cout << var_prop.to_int(); // prints '23'

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

    MyStruct obj;
    
    method meth = type::get(obj).get_method("func");
    meth.invoke(obj, 42.0);
    
    variant var = type::get(obj).create();
    meth.invoke(var, 42.0);

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

  5. الهه انصاری
    آخرین نوشته

    توسط الهه انصاری،

    تکنولوژی REST (REpresentational State Transfer)، یک سبک معماری برای توسعه‌ی وب سرویس‌ها است. معماری REST به دلیل سادگی و استواری بر پایه سیستم‌های موجود و ویژگی‌های HTTP به منظور دستیابی به اهداف آن، بر خلاف ایجاد استانداردها، چارچوب‌ها و فناوری‌های جدید، محبوب است.

    مزایای معماری REST

    یکی از مزیت‌های اصلی استفاده از این معماری، هم از جنبه‌ی سرویس گیرنده و هم از جنبه‌ی سرور، تعاملات مبتنی بر REST است که برای هر فردی که با پروتکل HTTP آشنایی دارد، بسیار ساده است. برای مثال، تعاملات مبتنی بر REST وضعیت خود را با استفاده از کدهای وضعیت HTTP استاندارد اعلام می‌کنند. بنابراین، 404 به معنای «منبع درخواست شده یافت نشد»، کد 401 به معنای «درخواست مجاز نیست»، کد 200 به این معنی است که «همه چیز خوب است» و کد 500 بدان معنی است که «یک خطای نرم افزار غیر قابل برگشت در سرور وجود دارد».

    به طور مشابه اعمالی مانند رمزنگاری و یکپارچگی انتقال داده بدون اضافه کردن چارچوب یا تکنولوژی خاصی و صرفا با رمز نگاری SSL و TLS پیاده سازی می‌شوند. معماری REST همچنین یک معماری مستقل از زبان است. برنامه‌های مبتنی بر REST می‌توانند به کمک هر زبانی از جمله Java، Kotlin، AngularJS و یا JavaScript نوشته شوند. تا زمانی که یک زبان برنامه نویسی می‌تواند درخواست‌های مبتنی بر وب را با استفاده از HTTP انجام دهد، این زبان قادر خواهد بود که برای فراخوانی RESTful API یا وب سرویس استفاده شود. به طور مشابه، وب سرویس‌های RESTful می‌توانند با استفاده از هر زبانی نوشته شوند، بنابراین توسعه دهندگان با اجرای آن‌ها می‌توانند تکنولوژی‌هایی را انتخاب کنند که بهترین کارایی را در شرایط موجود داشته باشند.

    مزیت دیگر استفاده از این معماری، فراگیر بودن آن است. در سمت سرور، انواع چارچوب‌های مبتنی بر REST از جمله RESTlet و Apache CXF وجود دارد که به توسعه دهندگان برای ایجاد وب سرویس‌های RESTful کمک می‌کنند. در سمت سرویس گیرنده، تمام چارچوب‌های جدید جاوا اسکریپت، مانند JQuery، Node.js، Angular و EmberJS، همه‌ی کتابخانه‌های استاندارد در API های خود ساخته شده‌اند که وب سرویس‌های RESTful را فراخوانی کرده و از داده‌های XML یا JSON استفاده می‌کنند.

    معایب معماری REST

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

    به طور مشابه، از آن جا که HTTP هیچ مکانیزمی برای ارسال اعلان‌ها از سرور به سرویس گیرنده ندارد، پیاده سازی هر نوع سرویسی که سرور، کلاینت را بدون رای‌ گیری از جانب آن (client-side polling) و یا انواع مختلف قلاب وب (web hook) به روز رسانی کند سخت است. از دیدگاه پیاده سازی، یک مشکل رایج با REST این واقعیت است که توسعه دهندگان با معنای دقیق REST-based مخالفت می‌کنند. برخی از توسعه دهندگان نرم افزار به اشتباه هر چیزی را که مبتنی بر SOAP نیست، RESTful در نظر می‌گیرند. چیزی که سبب این تصور غلط رایج می‌شود این واقعیت است که REST یک سبک معماری است، بنابراین هیچ پیاده سازی مرجع یا استاندارد قطعی وجود ندارد که تأیید کند آیا یک طراحی خاص، RESTful است یا خیر. در نتیجه، بر سر اینکه آیا یک API داده شده مطابق با اصول مبتنی بر REST است یا خیر بحث وجود دارد.

    جایگزین‌هایی برای REST

    فناوری‌های جایگزین برای ایجاد سیستم‌های مبتنی بر SOA (معماری مبتنی بر سرویس، Service-oriented architecture) و یا ایجاد API برای فراخوانی سرویس‌های میکرو از راه دور شامل XML روی HTTP (معروف به XML-RPC)، همچنین CORBA و پروتکل SOAP (پروتکل دسترسی ساده به object) است.

    هر تکنولوژی مجموعه‌ای از مزایا و معایب خود را دارد، اما ویژگی مهیج REST که آن را شاخص می‌کند، این است که به جای اینکه از یک توسعه دهنده بخواهد با مجموعه‌ای از پروتکل‌های سفارشی کار کند یا یک فرمت داده‌ی خاص برای تبادل پیام بین یک سرویس دهنده و یک سرور داشته باشد، REST باور دارد که بهترین راه برای پیاده سازی یک سرویس وب مبتنی بر شبکه این است که به راحتی از ساختار اصلی پروتکل شبکه‌ی خود استفاده کند که در مورد اینترنت، HTTP است. این یک نکته مهم است، زیرا REST فقط برای اعمال به اینترنت در نظر گرفته نشده است؛ بلکه هدف آن است که اصول آن به تمام پروتکل‌ها از جمله WEBDAV، FTP و غیره اعمال شود.

    REST در مقابل SOAP

    دو سبک رقیب برای اجرای خدمات وب REST و SOAP است. تفاوت اساسی بین این دو، رویکرد فلسفی است که باید به فراخوانی از راه دور بپردازند. 

    REST یک رویکرد مبتنی بر منابع را برای تعاملات مبتنی بر وب اتخاذ می‌کند. با REST، شما یک منبع را بر روی سرور قرار می‌دهید و انتخاب می‌کنید که این منبع را به روزرسانی کنید، پاک کنید یا اطلاعاتی را در مورد آن دریافت کنید.

    در SOAP، کلاینت تصمیم نمی‌گیرد به طور مستقیم با یک منبع ارتباط برقرار کند، بلکه به جای آن یک سرویس را فراخوانی می‌کند و این سرویس دسترسی به اشیا و منابع مختلف پشت صحنه را کاهش میدهد. SOAP همچنین تعداد زیادی از چارچوبها و APIها را در بالای لایه‌ی پروتکل HTTP را ایجاد کرده است، از جمله زبان توصیف سرویس وب (Web Services Description Language, WSDL)، که ساختار داده‌هایی را که بین کلاینت و سرور رد و بدل می‌شوند، تعریف می‌کند.

    گاهی بهترین نتیجه با تعریف دقیق فرمت پیام حاصل می‌شود و یا میتوان از APIهای مرتبط با SOAP مانند WS-Eventing، WS-Notification و WS-Security بهره برد. در بعضی مواقع شرایطی پیش می‌آید که HTTP نمی‌تواند سطح کارایی را که یک برنامه ممکن است نیاز داشته باشد، فراهم کند. در این موارد، استفاده از SOAP ترجیح داده میشود.

    REST URIها و URLها

    اکثر مردم با شیوه‌ی عملکرد URLها (Uniform Resource Locator) و URIها (Uniform Resource Identifier) در وب آشنا هستند. رویکرد RESTful برای برنامههای کاربردی ادعا میکند که درخواست اطلاعات در مورد یک منبع باید به اندازه‌ی فراخوانی URL آن ساده باشد.

    به عنوان مثال، اگر یک کلاینت بخواهد یک سرویس وب را که تمام آزمونها را در TechTarget در دسترس قرار داده است، به URL مراجعه کند. URLای که به سرویس وب خواهد رسید بدین ترتیب است:

    www.techtarget.com/restfulapi/quizzes

    هنگام فراخوانی، سرویس وب ممکن است با رشته JSON زیر، لیست تمام آزمون‌های موجود را پاسخ دهد که یکی از آن‌ها درباره‌ی DevOps است:

    { "quizzes" : [ "Java", "DevOps", "IoT"] }

    برای دریافت آزمون DevOps، سرویس وب ممکن است با استفاده از URL زیر فراخوانی شود:

    www.techtarget.com/restfulapi/quizzes/DevOps

       

    با فراخوانی این URL یک رشته‌ی JSON که لیستی از سوالات در آزمون DevOps را فهرست کرده است، بازگردانده می‌شود. برای دریافت یک سوال مشخص از آزمون، شماره‌ی سوال به URL اضافه خواهد شد. بنابراین، برای دریافت سوال سوم در آزمون، URL RESTful زیر استفاده می‌شود:

    www.techtarget.com/restfulapi/quizzes/DevOps/3

    فراخوانی این URL ممکن است یک رشته‌ی JSON مانند زیر را برگرداند:

    { "Question" : {"query":"What is your DevOps role?", "optionA":"Dev", "optionB":"Ops"} }

    همان طور که می‌بینید، URLهای REST در این مثال به گونهای منطقی و معنی دار هستند که منابع دقیق درخواست شده را مشخص می‌کنند.

    فرمتهای داده‌ی JSON و XML REST

    مثال بالا نشان میدهد JSON به عنوان فرمت تبادل اطلاعات برای تعامل RESTful استفاده می‌شود. رایج ترین فرمت تبادل دادهها JSON و XML هستند و بسیاری از خدمات وب RESTful میتوانند تا زمانی که کلاینت بتواند تعامل را در XML یا JSON انجام دهد، از هر دو فرمت به طور متناوب استفاده کنند. توجه داشته باشید با وجود اینکه JSON و XML فرمتهای رایج تبادل داده هستند، خود REST هیچگونه محدودیتی در مورد آنچه که فرمت باید باشد قرار نمیدهد. در واقع، برخی از خدمات وب RESTful به منظور بهره وری، دادههای باینری را مبادله می‌کنند. این یکی دیگر از مزایای کار با خدمات وب مبتنی بر REST است، زیرا معمار نرم افزار از نظر نحوه‌ی اجرای بهترین خدمات، از آزادی زیادی برخوردار است.

    REST و رویه‌های HTTP

    مثال بالا فقط دسترسی به داده‌ها را بررسی می‌کند. عملیات پیش فرض HTTP، رویه‌ی GET است که در هنگام دریافت داده‌ها از سرور مورد استفاده قرار می‌گیرد. با این حال، HTTP تعدادی از رویه‌های دیگر از جمله PUT، POST و DELETE را تعریف میکند.REST ادعا می‌کند که برای حذف داده‌ای در سرور، به سادگی از URL برای دسترسی به منبع استفاده کنید و روش DELETE از HTTP را اعمال کنید. برای ذخیره‌ی داده‌ها در سرور، یک URL و رویه‌ی PUT استفاده میشود. همچنین برای عملیاتی که فراتر از ذخیره سازی، خواندن و یا حذف اطلاعات هستند، می توان از روش POST استفاده کرد.

    تاریخچه‌ی REST

    REST برای اولین بار توسط دانشمند علم کامپیوتر Roy Fielding در طول انجام پایان‌ نامه‌ی تحصیلات دوره‌ی دکترای وی در دانشگاه کالیفرنیا با عنوان «سبک‌های معماری و طراحی معماری نرم افزار مبتنی بر شبکه» ابداع شد. فصل 5 پایان نامه ادعاهای Fielding در مورد چگونگی بهینه سازی معماری سیستمهای توزیعی hypermedia را توصیف می‌کند. وی تعدادی از شرایط مرزی را توصیف می‌کند که سیستم‌های مبتنی بر REST باید چگونه رفتار کنند. این شرایط به عنوان محدودیت‌های REST یاد می‌شوند. چهار مورد از محدودیت‌های کلیدی در زیر شرح داده شده اند:

    • استفاده از رابط کاربری یکنواخت (Uniform Interface, UI): همانطور که قبلا ذکر شد، منابع در سیستم‌های مبتنی بر REST باید از طریق یک URL قابل شناسایی باشند و تنها با استفاده از روشهایی مانند DELETE، PUT و GET در HTTP با منبع در تعامل باشند.
    • سیستم‌های مبتنی بر رابطه‌ی کلاینت، سروری: در سیستم‌های مبتنی بر REST، باید تعریف مشخصی از کلاینت و سرور داشته باشیم. UI و نگرانی‌های حاصل از درخواست‌ها، در حوزه‌ی کلاینت هستند. در همین حال، دسترسی به داده‌ها، مدیریت بار کاری و امنیت، در دامنه‌ی سرور است. این جداسازی‌ها اتصال بین کلاینت و سرور را برقرار می‌کند و هر کدام میتوانند مستقل از دیگری توسعه یابند.
    • عملیات مجزا (Stateless operations): تمام عملیات بین کلاینت و سرور باید مجزا و مستقل از هم باشند و هر مدیریت حالتی (State) که مورد نیاز است نه بر روی سرور، بلکه باید بر روی کلاینت پیاده سازی شود.
    • کَش کردن منابع RESTful: توانایی کَش کردن منابع بین فراخوانی‌های انجام شده توسط کلاینت نسبت به کاهش تاخیر و بهبود عملکرد اولویت بالاتری دارد. علاوه بر این تمامی منابع باید اجازه ی کَش کردن را داشته باشند، مگر اینکه یک نشانه‌ی صریح برای عدم امکان انجام این عمل یافت شود.

    توسعه‌ی APIهای REST‌ در جاوا

    در راستای محبوبیت رو به رشد سیستمهای مبتنی بر REST، تعدادی از چارچوبها برای کمک به توسعه دهندگان در ایجاد خدمات وب RESTful به وجود آمده اند. برخی از چارچوب‌های منبع باز محبوب برای ایجاد سرویسهای وب مبتنی بر جاوا عبارتند از Apache CXF، Jersey، Restlet، Apache Wink، Spring Data و JBoss' RESTeasy.

    رویکرد کلی هر یک از این چارچوبها این است که به توسعه دهندگان کمک کنند تا خدمات وب RESTful خود را با استفاده از الگوهای معنایی جاوا که با آن آشنا هستند، از جمله Java Platform (نسخه سازمانی)، Servlet API بسازند، در عین حال که کلاس‌های از پیش آماده و روش‌هایی به آن‌ها ارائه‌ می‌شوند تا با شروط اساسی REST بیشترین مطابقت را داشته باشند.

     

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

  6. lightSNA.jpg

    SoNebuntu نام توزیعی از سیستم عامل لینوکس است که توسط میر سامان تاجبخش، دانشجوی دکتری دانشگاه ارومیه در رشته فناوری اطلاعات و هیئت علمی همکار دانشگاه صنعتی ارومیه، ایجاد شده است. ایشان در راستای تحقیقات خود، متوجه عدم وجود سیستمی مخصوص تحلیل‌گران شبکه‌های اجتماعی شده و تصمیم گرفتند که توزیع مخصوص تحلیل گران شبکه‌های اجتماعی را ایجاد کرده و در دسترس علاقه‌مندان بگذارند. در این توزیع ابزارهای لازم و پرکاربرد برای تحلیل‌گران شبکه‌های اجتماعی گنجانده شده‌اند که شامل دو دسته کلی هستند:

    • ابزارهای مربوط به تحلیل شبکه‌های اجتماعی
    • ابزارهای مربوط به جمع آوری داده از شبکه‌های اجتماعی

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

     

    جهت اطلاعات بیشتر و دانلود نسخه سبک و کامل توزیع SoNebuntu می‌توانید به سایت رسمی توزیع مراجعه نمایید https://sonebuntu.com

    برای ارتباط در مورد پروژه، همکاری، حمایت و یا ارسال نظرات می‌توانید با آدرس پست الکترونیکی زیر در ارتباط باشید sonebuntu@mstajbakhsh.ir

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

    توسط کامبیز اسدزاده،

    یادگیری ماشین یک استراتژی برای تحقیق و بررسی به صورت خودکار جهت ساختن مُدل‌های توصیفی (نمایشی) می‌باشد.

    deep-learning-quora.png

    یادگیری ماشین چیست؟ چرا یادگیری ماشین مهم است؟

    یادگیری ماشین یک استراتژی برای تحقیق و بررسی اطلاعات است که ساخت مُدل به صورت توصیفی را خودکار می‌کند. یک شاخه که از استدلال‌هایِ انسانی از نگاه ساختار‌ها است می‌تواند از اطلاعات به دست آید، نمونه‌ها را تشخیص دهد و با اختیار بی‌نظیر انسانی بین انتخاب‌ها اقدام به انتخاب کند.

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

    اشتیاق برای یادگیری ماشین به دلیل حجم توسعه و مجموعه‌ای از اطلاعاتی که قابل دسترس هستند طرفدار بسیاری دارد. همه‌ی کسانی که به دنبال پردازش محاسباتی ارزان هستند و معمولاً برای ذخیره سازی اطلاعات شتاب‌زده عمل می‌کنند، یادگیری ماشین را مهم می‌دانند. بنابراین این امکان وجود دارد که سریعاً و به طور طبیعی مُدل‌هایی در این زمینه ایجاد شود که بتواند اطلاعات بسیار بزرگ و پیچیده‌ی (سرگیجه‌آور) و دقیق‌تری را در اختیار شما قرار دهند که منجرع به ارائه‌ نتایج سریع و دقیق خواهشد شد، حتی در مقیاس بسیار بزرگ که شاید انتظارش را نداشته باشید. علاوه بر این، با ساخت مدل‌های دقیق، ویژگی برتری شکل می‌گیرند که امکان شناخت احتمالات مفید و یا نگه‌داری فاصله‌ی استراتژیکی از خطرات مبهم را فراهم می‌سازد.

    چه کسانی این فناوری را مورد استفاده قرار می‌دهند؟

    اکثر شرکت‌هایی که با اطلاعات زیادی سرو کار دارند، نوآوری یادگیری ماشین را تخمین زده و آن را درک می‌کنند. آن‌ها با جمع‌آوری بیت‌های دانش از این اطلاعات استفاده کرده و اغلب به تدرج می‌توانند به صورت کارآمد‌تر (مفید‌تر) کار کرده و یا موقعیت‌های مطلوب را نسبت به رقبای خود انتخاب کنند.

    ادارات و بودجه

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

    دولت

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

    خدمات انسانی

    یادگیری ماشین یک طرحِ (الگویِ) توسعه سریع در صنعت خدمات انسانی است که به عنوان یک ویژگی در قالب گجت‌های پوشدنی و سنسور‌هایی که می‌توانند اطلاعات قابل استفاده برای ارزیابی یک بیماری تصاعدی (در حال پیشرفت) را ارائه دهد مورد استفاده قرار می‌گیرد. همچنین این نوآوری می‌تواند در تجزیه کردن اطلاعات پیش‌رونده در قادر ساختن متخصصین برای تشخیص الگو‌های مناسب برای مقابله با خطراتی که ممکن است سریعاً نتیجه داده و درمان آن به آن‌ها کمک کند استفاده می‌شود.

    نمایشگاه‌ها و معاملات

    سایت‌ها چیز‌هایی را که ممکن است با توجه به خرید‌هایی که شما در گذشته داشته‌اید پیشنهاد دهند. آن‌ها می‌دانند که چگونه تاریخچه‌ی خرید شما را تجزیه و تحلیل کنند. این ظرفیت برای گرفتن اطلاعات، تجزیه آن‌ها و استفاده از آن‌ها برای سفارشی کردن یک پس زمینه‌ی خرید (و یا تحقق بخشیدن به ارائه‌ی تبلیغات) می‌باشد.

    نفت و گاز

    یافتن منابع جدید حیاتی؛ تجزیه‌ی مواد معدنی در زمین؛ پیش‌بینی‌های ناامیدانه‌ی سنسور یک پالایشگاه؛ بهینه سازی تولید و انتشار نفت برای تولید و آگاهی بیشتر، کمیتِ استفاده از یادگیری ماشین برای این صنایع بسیار بزرگ است و هنوز هم در حال گسترش می‌باشد.

    حمل و نقل

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

  8. اینتل اعلام کرده است که مادربورد‌های Z390 به زودی عرضه می‌شوند و سعی شده در آن‌ها تمامی مشکلات سری Z370 رفع شود. کمپانی اینتل اواخر هفته‌ی گذشته گزارشی منتشر کرده است که نشان می‌دهد مادربورد‌های مجهز به چیپست Z390 به زودی در دسترس همه قرار خواهند گرفت و این محصولات جدید علاوه بر اینکه در جایگاه سیستم‌های رده بالا طبقه بندی می‌شوند، دیگر برخی ایرادات و مشکلات عجیب سری ۳۰۰ چیپست‌های اینتل را به همراه نخواهند داشت.

    intel-z390.jpg

    زمانی که اینتل در ماه اوکتبر (آبان) از پردازنده‌های نسل هشتم خود رونمایی کرد، تنها یک نمونه مادربورد هماهنگ و پشتیبان کننده از آن در دسترس وجود داشت و آن هم مادربورد‌های گران‌ قیمت سری Z370 بود. این مادربورد‌ها در کنار پردازند‌های قدرتمندی همچون Core i7-8700K می‌توانستند پیروز میدان باشند اما در صورتی که شما قصد تهیه یک پردازنده‌ Core i5 و Core i3 را داشتید، خرید این چنین مادربورد گران‌قیمی به هیچ وجه قابل قبول نبود. در ماه آپریل (فروردین) بالاخره اینتل از یک خط تولید کامل از محصولات سری ۳۰۰ رونمایی کرد اما مادربورد‌های H370، B360 و H310 دارای ویژگی‌هایی بودند که در پرچمدار این سری یعنی Z370 وجود نداشت. به عنوان مثال پشتیبانی از پورت‌های USB 3.1 Gen 2 با سرعت 10Gbps و وجود سخت‌افزار ارائه دهنده‌ی ارتباط وایرلس از مواردی بودند که در Z370 به دلیل عرضه‌ی زودهنگام وجود نداشت و باعث می‌شد خرید مادربورد‌های رده میانی و ارزان قیمت از هر لحاظ عاقلانه‌تر محسوب شود.

     

    حال Intel با عرضه‌ی Z390 اعلام کرده است که در این محصول تمامی ویژگی‌های اساسی Z370 به همراه ویژگی‌های عرضه‌ شده در مادربورد‌های ارزان‌تر یکجا عرضه خواهد شد. طبق گفته‌های این شرکت مادربورد‌های Z390 دارای حداقل ۶ پورت USB 3.1 Gen2 خواهند بود، همچنین این مادربورد‌های می‌توانند به صورت پیش‌فرض از سوی تولید کنندگان مادربورد به سخت‌افزار ارائه دهنده‌ی اتصال وایرلس 802.11ac مجهز شوند. علاوه‌ بر این موارد، مادربورد‌های Z390 همانند مادربورد‌های Z370 از اورکلاک پردازنده‌های سری K پشتیبانی می‌کنند. همچنین اعلام شده که این سری از مادربورد‌ها قادر به پشتیبانی از حافظه‌های Intel Optane نیز هستند. 

     

    نکته‌ی جالب این است که احتمالا در نمایشگاه PC-centric که اوایل ماه ژوئن (تیر) برگزار خواهد شد، اینتل جزئیات بیشتری در رابطه با چیپست‌های Z390 منتشر کند، دقیقا زمانی که طبق اعلام خبرگزاری Bluechip شرکت AMD اعلام کرده است که از مادربورد‌های X490 برای پردازنده‌های نسل دوم Ryzen رونمای خواهد کرد.

  9. نرم‌افزار و اپلیکیشن

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

    در طول ماه‌های گذشته، گوگل با انتشار به‌روزرسانی‌های منظم برای مرورگر کروم، بستر را برای بزرگترین بازطراحی تاریخِ این مرورگر آماده می‌کرد. تا پیش از این، مرورگر کروم با دریافت هر به‌روزرسانی، تغییرات اندکی را در رابط‌کاربری به خود می‌دید؛ اما امروز، گوگل به‌روزرسانیِ جدیدی را برای کروم منتشر کرده است که رابط‌ کاربری این مرورگر را به طرز قابل‌توجهی نوسازی می‌کند. 

    این نسخه از مرورگر تحت موتور v8 و همچنین به‌روز‌رسانی‌های اخیر تحت C++17 توسعه داده شده است که از بالاترین ویژگی‌های مدرن زبان برنامه نویسی بهره برده و تحت نسخه‌های Clang نیز کامپایل شده است تا به سریعترین کارآیی ممکن در بین مرورگر‌ها برسد.

    فعلاً به‌روزرسانی جدید کروم برای نسخه‌ی Canary منتشر شده است، این نسخه از مرورگر کروم، تنها برای توسعه‌دهندگان در نظر گرفته شده تا پیش از عرضه‌ی عمومی با ویژگی‌های جدید و آخرین دستاوردهای تکنولوژی در حوزه‌ی وب، آشنا شوند؛ اما اگر قصد تجربه‌ی تغییرات جدید را دارید، می‌توانید از طریق این لینک اقدام به دانلود این نسخه کنید. طبق گفته‌ی منبعی معتبر، از ویژگی‌های جدیدِ نسخه‌ی جدید کروم می‌توان به تغییر در شکل زبانه‌ها، حالت تک‌زبانه (Single Tab Mode)، اضافه‌شدنِ آیکون به جعبه‌ی پیشنهاد وب‌سایت‌ها در نوار آدرس، رنگ‌بندی‌ زبانه، زبانه‌های پین‌شده و شاخص‌های هشدار اشاره کرد.

    google-canry-01.jpg

    به‌روزرسانی جدید کروم اکنون به‌صورت پیش‌فرض در دسترس کاربران ویندوز، لینوکس و کروم‌او‌اس قرار دارد؛ اما اگر از رایانه‌ی مک استفاده می‌کنید، برای مشاهده این تغییرات، باید دو دستور زیر را به‌ترتیب در نوار آدرس وارد کنید و سپس کلید اینتر را فشار دهید.

    chrome://flags/#top-chrome-md
    chrome://flags/#views-browser-windows

     

×