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

وبلاگ‌ها

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

  • الهه انصاری

    ۷ گام برای تبدیل شدن به یک طراح موفق 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) کمک بگیرید. یکی دیگر از روش‌های عالی برای یادگیری طراحی، یافتن یک مربی طراحی یا دوست طراح است که مایل به کمک است. آنها به شما کمک میکنند که روند یادگیری خود را سرعت بخشید. طراح کار شما را بررسی و نظرات خود را هر زمان که ممکن باشد می‌دهد. این کار مثل یک میانبر عمل می‌کند. آنها همچنین راهنمایی‌ها و ترفندهایی به شما می‌دهند که از تجربیات خود آموخته اند. بنابراین پیش بروید و به یک طراح ایمیل بفرستید، سوالات و نگرانی‌های خود را با وی مطرح کنید. هنگامی که شما آماده‌ی صحبت در مورد طراحی با دیگران هستید، می‌توانید کسی را در مورد طراحی راهنمایی کنید و یا آموزش دهید. همچنین یاد خواهید گرفت که آن را  دیدگاه‌های مختلف ببینید و بازخورد و پاسخ سوالاتی را دریافت کنید که ممکن است هرگز در مورد آن‌ها فکر نکرده باشید. هنگامی‌که در مورد طراحی با افراد دیگری صحبت می‌کنید، ذهن شما همواره در‌حالت "طوفان فکری" قرار می‌گیرد و بیشتر از قبل به طراحی علاقه‌مند خواهید شد. منتظر بخش‌های بعدی با جزییات بیشتر در مورد اصول رابط کاربری باشید.
    • 1 دیدگاه
    • 438 مشاهده
  • فرهاد شیری

    امنیت در نرم افزارهای تولید شده با زبان ++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 دیدگاه
    • 184 مشاهده
  • کامبیز اسدزاده

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

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

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

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

  1. نرم‌افزار و اپلیکیشن‌های ایرانی روی آیفون (سیستم‌عامل iOS) از کار افتادند!

    مدت‌ها است که زمزمه‌هایی در مورد محدودسازی استفاده از «گواهی توسعه‌دهنده سازمانی» (Enterprise Developer Certificates) از سوی اپل به گوش می‌رسد. حالا ظاهراً این محدودیت گریبان کاربران ایرانی این سرویس را گرفته است.

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

    IMG_539A1C952B05-1.jpeg

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

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

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

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

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

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

    به یک شی cv-qualified  توسط یک شی cv-unqualified دسترسی پیدا نکنید!

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

    تغییر ناگهانی و جهش مقدار پنهان ذخیره شده، منجر به بروز رفتار نامشخص میگردد.

    #include <iostream>
    class S{
    private:	
    	int cachedValue;
    	int compute_value() const; // expensive
    public:
    	S() : cachedValue(0) {}
    	int get_value() const{
    		if (!cachedValue){
    			const_cast<S *>(this)->cachedValue = compute_value();
    		}
    		return cachedValue;
    	}
    };
    
    void f(){
    const S s;
    std::cout << s.get_value() << std::endl;
    }

    اکنون برای رفع این مشکل کافی است که نوع متغیر عضو کلاس را به صورت mutable تعریف نماییم.

    #include <iostream>
    class S{
    private:
    	mutable int cachedValue;
    	int compute_value() const; // expensive
    public:
    	S() : cachedValue(0) {}
    	int get_value() const{
    		if (!cachedValue){
    			cachedValue = compute_value();
    		}
    		return cachedValue;
    	}
    };
    
    void f(){
    const S s;
    std::cout << s.get_value() << std::endl;
    }

     

    نباید یک شی لاندا بیشتر از اشیایی رجوع شده به خود، عمر کند!

    این امکان وجود دارد که عبارت لاندا، اشیای دارای مدت زمان ذخیره سازی خودکاری را از مجموعههای ازحوزه های پیوسته حوزه ی دسترسی، برای استفاده در بدنه ی تابع، رصد و دریافت کند.

    ممکن است این رصد به صورت صریح و از طریق مشخص کردن شی در capture-list لاندا، یا به صورت ضمنی و با استفاده از capture-default و ارجاع به شی در بدنه ی تابع لاندا صورت پذیرد.

    هنگامی که یک شی به وسیله ی کپی رصد میشود، شی لاندا شاملیک عضو داده ای غیرایستای بدون نام خواهد شد، که مقدار اولیه برابر با مقدار شی مورد رصد است.

    طولعمر عضو داده ای غیرایستا نیز برابر با طول عمر شی لاندا خواهد بود. با این وجود، هنگامیکه یک شیتوسط مرجع رصد می شود، طول عمر مورد ارجاع به طول عمر شی لاندا گره نخورده است.

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

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

    هنگامیکه شی لاندای داخلی در ()f اجرا میشود، رفتار نامشخصی روی خواهد داد.

    auto g(int val){
    	auto outer = [val]{
    		int i = val;
    		auto inner = [&]{
    			i += 30;
    			return i;
    		};
    	return inner;
    };
    return outer();
    }
    void f(){
    auto fn = g(12);
    int j = fn();
    }

    برای رفع این اشکال کافی است که لاندای inner متغیر i را نه از طریق ارجاع بلکه از طریق کپی رصد نماید.

    auto g(int val){
    	auto outer = [val]{
    		int i = val;
    		//auto inner = [=] () mutable {
    		//OR 	
    		auto inner = [i]{
    			i += 30;
    			return i;
    		};
    	return inner;
    };
    return outer();
    }
    void f(){
    auto fn = g(12);
    int j = fn();
    }

     

    زمانی که عملگر new را سربارگذاری میکنید حتما باید عملگر delete را هم سربارگذاری نمایید

    به برنامه زیر توجه نمایید، 

    #include <Windows.h>
    #include <new>
    void *operator new(std::size_t size) noexcept(false){
    	// Private, expandable heap.
    	static HANDLE h = ::HeapCreate(0, 0, 0);
    	if (h){
    		return ::HeapAlloc(h, 0, size);
    	}
    	throw std::bad_alloc();
    }
    // No corresponding global delete operator defined.

    در صورتی که هیچ کلاس کمکی برای سربار گذاری در نظر نگرفته باشید قطعا نمی توانید از عملگر delete بر روی حافظه رزرو شده توسط این تابع استفاده کنید.

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

    #include <Windows.h>
    #include <new>
    class HeapAllocator{
    private:	
    	static HANDLE h;
    	static bool init;
    public:
    	static void *alloc(std::size_t size) noexcept(false){
    		if(!init){
    			h = ::HeapCreate(0, 0, 0); // Private, expandable heap.
    			init = true;
    		}
    		if(h){
    			return ::HeapAlloc(h, 0, size);
    		}
    		throw std::bad_alloc();
    	}
    
    	static void dealloc(void *ptr) noexcept{
    		if (h){
    			(void)::HeapFree(h, 0, ptr);
    		}
    	}
    	
    };
    
    HANDLE HeapAllocator::h = nullptr;
    bool HeapAllocator::init = false;
    
    void *operator new(std::size_t size) noexcept(false){
    	return HeapAllocator::alloc(size);
    }
    void operator delete(void *ptr) noexcept{
    	return HeapAllocator::dealloc(ptr);
    }

     

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

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

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

    Stop.gif.ef9763a9c6dec821048938122802db5f.gif

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

    طیف رنگ‌های گرم و سرد

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

    382pxBYR_color_wheel.png.895222da8f34a2f09404933e653ecc29.png

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

    طرح‌های رنگی تک رنگ (monochromatic)

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

    Monochromatic.png.6b3a3573fe1ede12f299b877b97516b7.png

    BlueMonochromatic.png.522d25e29922dda7b5ffe4564cee7a45.png

    طرح تک رنگ با پایه‌ی آبی

    RedMonochromatic.png.32c8877a05556d21d9bdfd5b272a20d8.png

    طرح تک رنگ با پایه‌ی قرمز

    طرح‌های رنگی مشابه (Analogous Color Schemes)

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

    Analogous.png.1866daf2115b091ef4e12331fd5958a6.png

    BlueAnalogous.png.6739142e34803dd041068408ba12a952.png

    طرح رنگی مشابه با پایه‌ی آبی

    طرح رنگی مکمل (Complimentary Color Scheme)

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

    Complimentary.png.1d20c3d7af901cd4bb6c7dc26be99a72.png

    GreenComplimentary.png.85775df46d7f9b6c065c276f57de84e8.png

    طرح رنگی مکمل با پایه‌ی سبز روشن

    طرح مکمل تقسیم شده (Split Complementary Scheme)

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

    SplitComplimentary.png.49740d6194148a5007486ea645b4ec6a.png

    BlueSplitComplimentary.png.32eb6bc6774008752a12191dfdf441f1.png

    طرح‌های رنگ سه‌گانه

    این طرح از سه رنگ به طور یکنواخت در اطراف چرخ رنگ استفاده می‌کند. این روش برای ایجاد تعادل، غنی سازی و تضاد بسیار مناسب است؛ اگرچه تضاد در این طرح به اندازه‌ی طرح مکمل مشهود نیست.

    Triad.png.eb8d583d7a47f58324583214db3157ed.png

    BlueTriad.png.76c8f482afc73ed89f3086ae75b2a023.png

    طرح سه‌گانه‌ با پایه‌ی آبی

    نکاتی برای استفاده از این طرح‌های رنگی

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

    HungryDuck.png.66155da50c1a12e7cf2b1b4234673eb1.png

    • اگر رنگ‌ها خیلی قاطی هم شده باشند، میزان استفاده‌ی خود را از رنگ‌ها کاهش دهید.
    • برای ایجاد طرح‌های رنگی چندین ابزار آنلاین وجود دارد، Kuler یکی از ابزار‌های پر طرفدار است. این ابزار امکان بازی با چرخ رنگی را به شما می‌دهد و می‌توانید طرح‌های رنگی مورد نظر خود را با یک کلیک انتخاب کنید.
    • انواع تناژهای مختلف رنگ سیاه و خاکستری می‌توانند در تمام طرح‌های رنگی مذکور استفاده شوند. این رنگ‌ها در واقع به عنوان رنگ‌های خنثی استفاده می‌شوند که با هر رنگ دیگری سازگاری دارند.

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

    SurroundingColor.gif.3f5daa38af1cfdb3dc12a6c240d63b59.gif

    الهام از طبیعت

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

    1.  آیا رنگ‌ها در طراحی شما به خوبی با هم هماهنگ هستند و یا زیبایی چندانی در کنار هم ندارند؟ آیا خواندن متن در پس زمینه دشوار است؟
    2. آیا طراحی شما برای آنچه که میخواهید انتقال دهید بیش از حد سرد و یا بیش از حد گرم است؟ شما می‌توانید طرح‌های بیش از حد گرم را با نکات کوچک رنگ‌های سرد (و بالعکس) را خنک کنید.
    3. آیا طراحی شما فقط شامل رنگ‌های سیاه و سفید است؟ اگر اینطور است افزودن کمی رنگ واقعا می‌تواند طرح شما را به پتانسیل کامل خودش برساند.
    4. اگر شما برای وب یا برنامه‌های خود طراحی انجام می‌دهید، آیا در مورد اثر رنگ‌ها بر روی میزان قابلیت استفاده محصول تحقیق کرده‌اید؟

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

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

  4. پردازنده‌ها چگونه طی ۴۰ سال گذشته تغییر کرده‌اند؟

    پردازنده‌ها از پیدایش تا‌به‌حال، در‌حال‌پیشرفت بوده‌اند و روز‌به‌روز درکنار قدرتمند‌ترشدن، مصرف انرژی آن‌ها هم بهینه‌سازی شده است. اما این پیشرفت‌ها چقدر بوده و در آینده چگونه خواهد بود؟

    وقتی از طرح‌های پیشرفت تکنولوژی، به‌ویژه قانون مور، صحبت به‌میان می‌آید، طرح «۳۵ سال از داده‌های ریزپردازنده‌ها» که آن را ام. هورویتز، اف. لابونت، اُ. شچم، کی. الوکتن، ال. هموند و سی. بَتِن جمع‌آوری کرده‌اند، می‌تواند یکی از طرح‌های مهم باشد. بعد‌ها، سی. مور هم اطلاعاتی به این پروژه اضافه کرد. این طرح را چه با خطوط پیشرفت و چه بدون آن‌ها می‌توان در جاهای مختلفی از اینترنت پیدا کرد؛ هر‌‌چند این طرح فقط تا سال ۲۰۱۰ کامل شده و در چند سال اخیر، کامل نشده است.

    نقل قول

    طبق قانون مور، تعداد ترانزیستور‌ها هر ۲ سال دوبرابر می‌شود

    برای به‌روزکردن داده‌های این طرح که هر‌چند درست‌بودن آن تا سال ۲۰۱۰ مشخص نیست، داده‌هایی از g3data و داده‌های دیگری هم از پردازنده‌های AMD Opteron، پردازنده‌های Intel Xeon، پردازنده‌های Power7+ و Power8 مانند Xeon Phi به این طرح اضافه شدند. جزئیات این داده‌های جدید را به‌صورت خام می‌توانید درون این فایل زیپ ببینید. نتیجه‌ی این طرح عکس زیر است:

    11c3c550-ceec-46bc-a898-ab04397af8a8.jpg

    درادامه، طرح به‌روز‌شده را با طرح اصلی می‌توانید مقایسه کنید.

    0341d5a1-d732-4b87-ae8b-b72f738d8463.jpg

    نکته‌ای جالبی که وجود دارد، این است که باتوجه‌به اینکه عملکرد پردازش تک‌هسته‌ای ازنظر کمّیّت مهم است، این مقدار پیوسته در‌حال‌پیشرفت بوده است. این افزایش نتیجه‌ی مدیریت انرژی هوشمندانه و تنظیم دینامیک فرکانس کلاک (توربو) بوده است.

    در آینده، چه تغییراتی به وجود خواهد آمد؟

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

    تا چه زمانی قانون مور ادامه خواهد داشت؟

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

    پردازندهی Knight Landing Xeon Phis که به‌زودی رونمایی خواهد شد، ۷۲ هسته دارد که بیش از ۶۱ هسته بیشتر از نسل کنونی‌اش خواهد داشت. از دیدگاه الگوریتم‌ها، واقعا مهم نیست پردارنده با ۶۱ یا ۷۲ هسته کار می‌کند یا خیر؛ بلکه در هر دو مورد، الگوریتم‌هایی موازی موردنیاز هستند. در این مرحله، باید خوشحال باشیم که در‌حال‌حاضر، توانسته‌ایم با یادگیری برنامه‌ریزی GPU‌ها این الگوریتم‌ها را طراحی و اجرا کنیم.

    به‌روزرسانی ۲۰۱۸

    دو سال داده‌ی بیشتر به‌نظر مهم نیست، هرچند به‌نظر می‌رسد قانون مور در‌حال‌ کم‌رنگ‌شدن است. یکی از موضوعاتی که باید به آن اشاره کرد، این است که اینتل دیگر تعداد ترانزیستور‌های پردازنده‌های خود را اعلام نمی‌کند. همچنین، تعدادی از پردازنده‌های این شرکت زمان زیادی بعد از موعد مقرر معرفی شدند. مدل Tick-Tock هم اصلاح شده است. با داده‌هایی از تعداد ترانزیستور‌ها که از AMD Epyc و IBM Power 9 به‌دست‌آمده طرح را به‌صورت زیر به‌روزرسانی کرده‌اند:

    5a5cd874-47d7-4075-ad00-2151a5182a39.jpg

    واضح است تعداد ترانزیستور‌ها به‌صورت نموداری نمایی رو‌به‌پیشرفت بوده است. تا‌به‌امروز، پردازنده‌ی AMD Epyc با ۱۹،۰۰۰،۰۰۰،۰۰۰ ترانزیستور که به‌صورت عمومی اعلام شده، بیشترین تعداد ترانزیستور را در میان پردازنده‌ها دارد. برای مقایسه باید گفت تراشه‌ی پاسکال Nvidia GP100 درحدود ۱۵،۰۰۰،۰۰۰،۰۰۰ ترانزیستور دارد. با درنظرگرفتن این تعداد، این ارقام باهم سازگار هستند و جای شکی در تعداد ترانزیستور‌ها وجود ندارد.به‌زودی، با معرفی نود‌های پردازشی ۱۰ نانومتری منطقی است که احتمال دهیم تا چند سال آینده، منحنی نمایی و رو‌به‌رشد تعداد ترانزیستور‌ها پیشرفت خود را حفظ کند. تعداد ترانزیستور بیشتر موجب افزایش تعداد هسته‌ها می‌شود. این درحالی است که پیشرفتی که در SpecINT برای محاسبه عملکرد تک‌هسته‌ای قابل مشاهده‌است، مستقیما نتیجه‌ی استفاده از کامپایلر‌های Auto-Vectorization و Auto-Parallelization است.

  5. 1_pempph-OAqpRKG5v1-yisg@2x.png

    استارتاپ چیست و چگونه راه اندازی می‌شود

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

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

    Depositphotos_86520874_l-2015.jpg

    اصطلاحات رایج در استارتاپ

    افرادی که با استارتاپ‌ها درگیر هستند معمولا از اصطلاحات خاصی برای بیان مقاصد خود استفاده می‌کنند. در ادامه به معرفی چند نمونه از این اصطلاحات می‌پردازیم.

    Lean Startup

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

    Unicorn Startup

    استارتاپ تک شاخ یا یونیکورن استارتاپ (Unicorn Startup) به استارتاپ‌هایی گفته می‌شود که رشد سریعی دارند و به ارزش بیش از ۱ میلیارد دلار می‌رسند. این لغت اولین بار در سال ۲۰۱۳ توسط سرمایه‌گذاری به نام آیلین لی ارائه شد و او از میان حیوانات افسانه‌ای، تک شاخ را به‌عنوان نماد این مدل استارتاپ‌ انتخاب کرد. ازجمله بزرگ‌ترین استارتاپ‌هایی که در این دسته جا می‌گیرند می‌توان به Uber ،Xiaomi ،Airbnb ،Dropbox و Pinterest اشاره کرد.

    بنیان‌گذار استارتاپ (Founder)

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

    Accelerator-selection-process.gif

    شتاب‌دهنده‌ی استارتاپ (Startup Accelerators)

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

    new-SWEDU-logo-1.png

    استارتاپ ویکند (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)

    به یک محصول نرم‌افزاری گفته می‌شود که از راه دور به وسیله‌ی اینترنت یا سیستم رایانش ابری کنترل می‌شود.

    how-to-start-a-startup-as-told-by-PG-infographic.png

    چگونه یک استارتاپ راه‌اندازی کنیم

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

    ۱- ببینید دنیا چه چیزی کم دارد

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

    ۲- آن را یادداشت کنید

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

    ۳- یک نمونه‌ی اولیه بسازید

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

    ۴- نمونه‌ی اولیه را به ۱۰۰ نفر نشان دهید

    حالا شما باید از نقطه‌ی آسایش خود خارج شوید و نمونه‌ی اولیه خود را به دیگران نشان بدهید و نظر آن‌ها را جویا شوید. بهتر است این ۱۰۰ نفر از میان افراد کاملا ناشناس انتخاب شوند تا شناختن شما در بازخوردشان نسبت به محصول تأثیری نگذارد. چرا ۱۰۰ نفر؟ زیرا شما در این مرحله به چشم‌اندازی وسیع برای بازخوردها احتیاج خواهید داشت.

    ۵- تکرار کنید

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

    ۶- یک هم‌بنیان‌گذار (Co-Founder) پیدا کنید

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

    ۷- کسب‌و‌کار خود را ثبت کنید

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

    ۸- به دنبال سرمایه‌گذار باشید و اولین نسخه را تولید کنید

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

    linear-emblem-of-business-idea-startup-vector-20200069.jpg

    ۹- راه‌اندازی کنید

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

    ۱۰- با کاربران همراه باشید

    مشتری‌های خود را تحت نظر داشته باشید و ببینید آیا برمی‌گردند یا خیر. اگر برنگشتند، علت را پیدا کنید.

    ۱۱- دوباره راه‌اندازی کنید

    هر چقدر احتیاج بود، محصول خود را بعد از اعمال تغییرات دوباره راه‌اندازی کنید. حتی اگر مشاهده کردید که تعداد کمی از مردم دوباره به شما مراجعه کردند، باز هم به کارتان ادامه دهید؛ زیرا این یعنی در حال تولید یک محصول باارزش هستید.

    ۱۲- محصول را به ۱۰۰۰ نفر نشان دهید

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

    ۱۳- رشد کنید

    پاول گراهام، دانشمند علوم کامپیوتر و سرمایه‌گذار، استارتاپ‌ها را تشویق می‌کند که در هفته ۵ درصد رشد داشته باشند. اگر ۴ سال به همین ترتیب ادامه دهید، در طی گذشت این مدت به تعداد ۲۵ میلیون کاربر خواهید رسید. به‌ عبارت‌ دیگر، تبدیل به یکی از بزرگ‌ترین استارتاپ‌ها خواهید شد.

    The Most Important Factors for Startup Success_Header Image.png

    ۱۴- به موفقیت برسید

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

  6. اگر شما از آن دسته از کاربرانی هستید که هزینه‌ای برای گیت‌هاب پرداخت نمی‌کنید، این هفته‌ی خوبی است برای شما! 

    Octocat.png

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

    نقل قول

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

    Screen Shot 2019-01-08 at 00.44.16.png

  7. pia22486-main.jpg

    پس از فرود انسان روی کره ماه در قرن بیستم، سیاره مریخ همواره به عنوان مقصد بعدی در منظومه شمسی شناخته شده؛ اما یکی از فضانوردان سابق ناساانجام چنین کاری را احمقانه می داند.

    بیل اندرس فضانورد سابق ناسا که در مأموریت آپولو 8 سال 1968 نیز شرکت داشته، معتقد است سفر به سیاره مریخ در حال حاضر صرفاً یک نمایش تبلیغاتی از سوی ناسا بوده و هیچ نفعی برای جامعه علمی دنیا نخواهد داشت.

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

    MarsColonyNeverGoingToHappen_1024.jpg

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

    سفر انسان به مریخ در حال حاضر توجیه علمی ندارد

    به گفته فضانورد سابق ناسا، حضور انسان روی سیاره مریخ مسلماً یک موج رسانه ای عظیم و قدرتمند را به راه خواهد انداخت اما هیچ کمکی به گسترش مرزهای دانش بشری نخواهد کرد. جالب است بدانید که چنین دیدگاهی تنها مختص به بیل اندرس نبوده و بسیاری از مدیران ناسا، اسپیس اکس و بلو اوریجین (هر سه به دنبال فرود انسان روی مریخ هستند) نیز با نظر وی موافقند.

    البته نظر اندرس مخالفانی هم دارد؛ به عنوان مثال فرانک بورمن (یکی دیگر از سرنشینان آپولو 😎 معتقد است جست و جوی عمیق در منظومه شمسی یکی از مهم ترین مأموریت های ناسا بوده که حضور انسان بخش جدایی ناپذیر چنین پروژه هایی خواهد بود.

    گفتنی است آقای بورمن از سوی دیگر هیجان موجود در زمینه سفر به سیاره مریخ را هم تأیید نکرده و اظهار داشته: «ماسک و بزوس (صاحبان اسپیس اکس و بلو اوریجین) درباره تشکیل جوامع انسانی در مریخ صحبت می کنند؛ چنین چیزی مسخره است.»

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

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

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

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

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

    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
  9. دو هفته پیش، نشست ۲۰۱۸ سی‌پلاس‌پلاس آغاز شد. شرکت کننده‌ها مدال‌های خودشان را دریافت کردند چرا که همه‌ چیز با هماهنگی بسیار خوبی به پایان رسید. این رویداد به عنوان یکی از چندین رویداد مهم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

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

    • نقل قول

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

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

     

×