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

وبلاگ‌ها

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

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

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

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

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

    ۷ گام برای تبدیل شدن به یک طراح موفق 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 دیدگاه
    • 340 مشاهده
  • فرهاد شیری

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

معرفی Permission Control System SDK برای ASP.NET MVC

مکانیسم Role Management در ASP.NET Identity کمبودهای بسیاری دارد، از جمله اینکه جهت مشخص کردن سطح دسترسی، نام Role ها میبایست در صفت Authorize نوشته شده و Hard Code شود. این بدان معناست که برای انجام هر گونه تغییر در کنترل دسترسی مجبور خواهید بود سورس برنامه تان را دستکاری کنید. همچنین، عدم وجود امکانی برای ویرایش کاربران و Role ها، کار کردن با این مکانیسم را مشکل می کند. در راستای حل این مشکلات و کمبودها، ما یک کیت توسعه نرم افزار (SDK) به نام Permission Control System طراحی و ارائه کرده ایم. با استفاده از این SDK نیاز نیست هیچ چیزی را در برنامه جهت مدیریت دسترسی Hard Code کنید، تمام امکانات مدیریتی Dynamic است! پس از فعال کردن این SDK، هر Controller یا Action ای که به پروژه تان اضافه کنید پس از اجرای بعدی برنامه به صورت خودکار در صفحه Role Manager ظاهر خواهد شد و می توانید انتخاب کنید که کدام گروه از کاربران به چه Action ای بر حسب Role شان دسترسی خواهند داشت. آموزش کامل ویدئویی این SDK نیز با تشریح کد آن به صورت خط به خط برنامه در همین پکیج ارائه شده است. علاوه بر آموزش اجزاء SDK، موارد زیر نیز در آموزش ویدئویی ارائه شده است: آموزش کامل ASP.NET Identity با تشریح کامل کدها روش تغییر نام جداول و ستونهای ایجاد شده توسط مکانیسم Identity طراحی و پیاده سازی سیستم رمز یک بار مصرف (OTP) جهت لاگین به سیستم ایجاد و استفاده از Attribute ها ایجاد و استفاده از Global Filter ها برای کنترل دسترسی ایجاد و استفاده از HTML Helper ها لینک صفحه مربوط به SDK و آموزش ویدئویی https://github.com/delphiassistant/permission_control_system   لطفا نظرات و پیشنهادات خود درباره بهبود این SDK را در پاسخ این نوشته ارسال کنید.   با تقدیم احترام،
مهدی کرامتی.

مهدی کرامتی

مهدی کرامتی

 

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

پردازنده‌ها چگونه طی ۴۰ سال گذشته تغییر کرده‌اند؟ پردازنده‌ها از پیدایش تا‌به‌حال، در‌حال‌پیشرفت بوده‌اند و روز‌به‌روز درکنار قدرتمند‌ترشدن، مصرف انرژی آن‌ها هم بهینه‌سازی شده است. اما این پیشرفت‌ها چقدر بوده و در آینده چگونه خواهد بود؟ وقتی از طرح‌های پیشرفت تکنولوژی، به‌ویژه قانون مور، صحبت به‌میان می‌آید، طرح «۳۵ سال از داده‌های ریزپردازنده‌ها» که آن را ام. هورویتز، اف. لابونت، اُ. شچم، کی. الوکتن، ال. هموند و سی. بَتِن جمع‌آوری کرده‌اند، می‌تواند یکی از طرح‌های مهم باشد. بعد‌ها، سی. مور هم اطلاعاتی به این پروژه اضافه کرد. این طرح را چه با خطوط پیشرفت و چه بدون آن‌ها می‌توان در جاهای مختلفی از اینترنت پیدا کرد؛ هر‌‌چند این طرح فقط تا سال ۲۰۱۰ کامل شده و در چند سال اخیر، کامل نشده است. برای به‌روزکردن داده‌های این طرح که هر‌چند درست‌بودن آن تا سال ۲۰۱۰ مشخص نیست، داده‌هایی از g3data و داده‌های دیگری هم از پردازنده‌های AMD Opteron، پردازنده‌های Intel Xeon، پردازنده‌های Power7+ و Power8 مانند Xeon Phi به این طرح اضافه شدند. جزئیات این داده‌های جدید را به‌صورت خام می‌توانید درون این فایل زیپ ببینید. نتیجه‌ی این طرح عکس زیر است: درادامه، طرح به‌روز‌شده را با طرح اصلی می‌توانید مقایسه کنید. نکته‌ای جالبی که وجود دارد، این است که باتوجه‌به اینکه عملکرد پردازش تک‌هسته‌ای ازنظر کمّیّت مهم است، این مقدار پیوسته در‌حال‌پیشرفت بوده است. این افزایش نتیجه‌ی مدیریت انرژی هوشمندانه و تنظیم دینامیک فرکانس کلاک (توربو) بوده است. در آینده، چه تغییراتی به وجود خواهد آمد؟ احتمالا فرکانس و انرژی مصرفی دستخوش تغییرات زیادی قرار نخواهند گرفت. بهبود بیشتر در ساختار کلاک ممکن است باعث افزایش تدریجی عملکرد تک‌هسته‌ای پردازنده‌ها شود که البته نمی‌توان انتظار تغییر بزرگی داشت. دو نمونه از کمّیّت‌های مهم، تعداد ترازیستور‌ها و تعداد هسته‌ها هستند. تا چه زمانی قانون مور ادامه خواهد داشت؟ این احتمال وجود دارد که در آینده‌ای نزدیک، افزایشی در تعداد هسته‌ها را شاهد خواهیم بود؛ اما شاید تعداد ترانزیستور‌ها تغییری اساسی نکنند. در‌حال‌حاضر، Haswell Xeon در صدر فهرست پردازنده‌ها هستند که ۱۸ هسته‌ی پردازشی دارند. به‌هرحال با وجود این پردازنده‌ها، قانون امدال ما‌ را به‌ دنبال‌کردن همین الگوریتم ملزم خواهد کرد. پردازندهی Knight Landing Xeon Phis که به‌زودی رونمایی خواهد شد، ۷۲ هسته دارد که بیش از ۶۱ هسته بیشتر از نسل کنونی‌اش خواهد داشت. از دیدگاه الگوریتم‌ها، واقعا مهم نیست پردارنده با ۶۱ یا ۷۲ هسته کار می‌کند یا خیر؛ بلکه در هر دو مورد، الگوریتم‌هایی موازی موردنیاز هستند. در این مرحله، باید خوشحال باشیم که در‌حال‌حاضر، توانسته‌ایم با یادگیری برنامه‌ریزی GPU‌ها این الگوریتم‌ها را طراحی و اجرا کنیم. به‌روزرسانی ۲۰۱۸ دو سال داده‌ی بیشتر به‌نظر مهم نیست، هرچند به‌نظر می‌رسد قانون مور در‌حال‌ کم‌رنگ‌شدن است. یکی از موضوعاتی که باید به آن اشاره کرد، این است که اینتل دیگر تعداد ترانزیستور‌های پردازنده‌های خود را اعلام نمی‌کند. همچنین، تعدادی از پردازنده‌های این شرکت زمان زیادی بعد از موعد مقرر معرفی شدند. مدل Tick-Tock هم اصلاح شده است. با داده‌هایی از تعداد ترانزیستور‌ها که از AMD Epyc و IBM Power 9 به‌دست‌آمده طرح را به‌صورت زیر به‌روزرسانی کرده‌اند: واضح است تعداد ترانزیستور‌ها به‌صورت نموداری نمایی رو‌به‌پیشرفت بوده است. تا‌به‌امروز، پردازنده‌ی AMD Epyc با ۱۹،۰۰۰،۰۰۰،۰۰۰ ترانزیستور که به‌صورت عمومی اعلام شده، بیشترین تعداد ترانزیستور را در میان پردازنده‌ها دارد. برای مقایسه باید گفت تراشه‌ی پاسکال Nvidia GP100 درحدود ۱۵،۰۰۰،۰۰۰،۰۰۰ ترانزیستور دارد. با درنظرگرفتن این تعداد، این ارقام باهم سازگار هستند و جای شکی در تعداد ترانزیستور‌ها وجود ندارد.به‌زودی، با معرفی نود‌های پردازشی ۱۰ نانومتری منطقی است که احتمال دهیم تا چند سال آینده، منحنی نمایی و رو‌به‌رشد تعداد ترانزیستور‌ها پیشرفت خود را حفظ کند. تعداد ترانزیستور بیشتر موجب افزایش تعداد هسته‌ها می‌شود. این درحالی است که پیشرفتی که در SpecINT برای محاسبه عملکرد تک‌هسته‌ای قابل مشاهده‌است، مستقیما نتیجه‌ی استفاده از کامپایلر‌های Auto-Vectorization و Auto-Parallelization است.
 

اصول طراحی: رنگ

از سری مقالات اصول طراحی رابط کاربری با موضوع مهم و کلیدی رنگ در خدمت شما هستیم. در این مقاله، نگاهی به نحوه‌ی استفاده از طرح‌های رنگی در ایجاد بازخورد مطلوب برای طراحی شما خواهیم داشت. رنگ بخش جدایی ناپذیر از زندگی ما است. طبیعت از رنگ برای هشدار دادن به شکارچیان بالقوه، جذب گرده افشان‌ها، جذب همسران و نشان دادن میوه‌ی آماده برای خوردن استفاده می‌کند. هر کسی که ماشینی را در یک شهر رانندگی می‌کند، قوانین ترافیکی را که توسط قرمز، سبز و نارنجی تعریف شده است دنبال می‌کند. همین رنگ ها کافی هستند و نیازی به نوشته‌ی متنی نیست. در تبلیغات و طراحی، رنگ برای جلب توجه و تحریک علاقه استفاده می‌شود که گرفتن همین نتیجه از طریق روش‌های دیگر سخت‌تر است. طی تاریخ نیز از رنگ برای نشان دادن موقعیت اجتماعی و اقتصادی استفاده شده است. به عنوان مثال، اشراف و افراد سلطنتی بیشتر از رنگ بنفش بهره می‌بردند. رنگ در بسیاری از کشورها یک منبع مهم نمادگرایی است. همان طور که در شکل بالا می‌بینیم یک حالت غیر طبیعی از تصویر حس می‌شود که بخاطر استفاده‌ی رنگ غیر معمول در علامت ایست است. پس چگونه از رنگ‌ها در طراحی خود بهترین استفاده را ببریم؟ هیچ قاعده‌ی سفت و سختی وجود ندارد اما چرخ رنگ نقطه‌ی مناسبی برای شروع یادگیری نحو‌ه‌ی استفاده‌ی صحیح از رنگ‌ها است. طیف رنگ‌های گرم و سرد سه رنگ اصلی اولیه قرمز، آبی و زرد هستند. هنگامی که شما این‌ها را ترکیب می‌کنید، سه رنگ ثانویه حاصل می‌شوند: نارنجی، بنفش و سبز. اگر هر رنگ ثانویه را با رنگ اصلی همسایه‌ی خود ترکیب کنید، سومین دسته از رنگ‌ها را ایجاد می‌کنید: (زرد، نارنجی)، (زرد، سبز)، (آبی، سبز)، (بنفش، آبی)، (قرمز، بنفش)، (قرمز، نارنجی). چرخ رنگ بدین روش بدست می‌آید. تصویر بالا نشان می‌دهد که رنگ‌ها به ترتیب طیف مرتب شده‌اند: قرمز، نارنجی، زرد، سبز، آبی و بنفش (در خلاف جهت عقربه‌های ساعت). قرمز گرمترین و آبی سردترین رنگ در این چرخ است. رنگ‌ های گرم در قسمت طیف‌های قرمز، نارنجی و زرد ظاهر می‌شوند و رنگ‌های سرد در طرف مقابل چرخ رنگ ظاهر می‌شوند. طرح‌های رنگی تک رنگ (monochromatic) طرح رنگی تک رنگ از تغییرات در نور و اشباع یک رنگ استفاده می‌کند. این طرح رنگ علاوه‌ بر تمیز و ظریف بودن یک اثر آرامش بخشی ایجاد می‌کند. رنگ اولیه می‌تواند با رنگ‌های خنثی مانند سیاه، سفید یا خاکستری یکپارچه شود. ناکامی در طرح‌های تک رنگ این است که گاهی اوقات می‌تواند تضاد داشته باشد و به نظر می‌رسد جنب و جوش کمتری از سایر طرح‌های رنگ داشته باشد. طرح تک رنگ با پایه‌ی آبی طرح تک رنگ با پایه‌ی قرمز طرح‌های رنگی مشابه (Analogous Color Schemes) طرح رنگی مشابه با رنگ‌هایی که در چرخ رنگی مجاور هستند، استفاده می‌شود. یک رنگ به عنوان رنگ غالب تنظیم شده است و رنگ دیگر وظیفه‌ی غنی سازی را دارد. ضعف این مورد مانند طرح قبل این است که گاهی اوقات ممکن است حالت عدم تضاد به وجود بیاید. طرح رنگی مشابه با پایه‌ی آبی طرح رنگی مکمل (Complimentary Color Scheme) طرح رنگ مکمل یا متقارن از دو رنگ ساخته شده است که در چرخ رنگ مقابل یکدیگر قرار دارند. این طرح جهت ایجاد تضاد قوی و برای جلب توجه بسیار موفق است. طرح رنگی مکمل با پایه‌ی سبز روشن طرح مکمل تقسیم شده (Split Complementary Scheme) طرح مکمل تقسیم نوعی از طرح مکمل استاندارد است. این طرح از اجتماع یک رنگ بر روی چرخ و دو رنگ مجاور آن تشکیل می‌شود. مزیت این طرح بیش از یک طرح مجرب این است که میتواند کمی پیچیدهتر باشد در حالی که هنوز هم یک تضاد تصویری قوی وجود دارد. در تصاویر زیر نمونه‌ای از این مورد می‌بینیم. طرح‌های رنگ سه‌گانه این طرح از سه رنگ به طور یکنواخت در اطراف چرخ رنگ استفاده می‌کند. این روش برای ایجاد تعادل، غنی سازی و تضاد بسیار مناسب است؛ اگرچه تضاد در این طرح به اندازه‌ی طرح مکمل مشهود نیست. طرح سه‌گانه‌ با پایه‌ی آبی نکاتی برای استفاده از این طرح‌های رنگی  یک رنگ را انتخاب کنید که بیشتر از رنگ‌های دیگر استفاده می‌شود. اگر سعی می‌کنید از مقادیر برابر هر رنگ استفاده کنید، یک محصول وحشتناک دریافت خواهید کرد. ابتدا در مورد رنگ اصلی یا پایه‌ی خود تصمیم بگیرید و سپس از رنگ‌های دیگر برای جذب علاقه استفاده کنید. سایت The Pond با استفاده از یک خاکستری با پایه‌ی آبی تیره با متن خردلی طراحی شده است که بسیار دلنشین است. اگر رنگ‌ها خیلی قاطی هم شده باشند، میزان استفاده‌ی خود را از رنگ‌ها کاهش دهید. برای ایجاد طرح‌های رنگی چندین ابزار آنلاین وجود دارد، Kuler یکی از ابزار‌های پر طرفدار است. این ابزار امکان بازی با چرخ رنگی را به شما می‌دهد و می‌توانید طرح‌های رنگی مورد نظر خود را با یک کلیک انتخاب کنید. انواع تناژهای مختلف رنگ سیاه و خاکستری می‌توانند در تمام طرح‌های رنگی مذکور استفاده شوند. این رنگ‌ها در واقع به عنوان رنگ‌های خنثی استفاده می‌شوند که با هر رنگ دیگری سازگاری دارند. تمام رنگ‌ها تحت تاثیر رنگ‌های قرار گرفته در اطراف آن‌ها هستند. نماد زیر همان سایه‌‌ی قرمز در سمت چپ و راست است، اما رنگ پس زمینه تغییر چشمگیری می‌دهد. طرح رنگی در سمت چپ چشم را اذیت می‌کند، در حالی که در تصویر سمت راست، رنگ‌ها به خوبی با یکدیگر همخوانی دارند و احساس بیننده را برانگیخته می‌کنند.  الهام از طبیعت اگر شما به دنبال الهام و راهنمایی برای انتخاب رنگ هستید، کامپیوتر را خاموش کنید و به خارج از منزل بروید. طبیعت بهترین ترکیب رنگ را برای شما فراهم می‌کند. به حیوانات، گیاهان، پرندگان نگاه کنید و از طرح‌ها و رنگ‌های شگفت انگیز الهام و ایده بگیرید. از آن‌ها عکس گرفته و آن‌ها را در یک فایل ذخیره کنید. مواردی که هنگام استفاده از رنگ در طرحهای خود مد نظر می‌گیریم به قرار زیر است:  آیا رنگ‌ها در طراحی شما به خوبی با هم هماهنگ هستند و یا زیبایی چندانی در کنار هم ندارند؟ آیا خواندن متن در پس زمینه دشوار است؟ آیا طراحی شما برای آنچه که میخواهید انتقال دهید بیش از حد سرد و یا بیش از حد گرم است؟ شما می‌توانید طرح‌های بیش از حد گرم را با نکات کوچک رنگ‌های سرد (و بالعکس) را خنک کنید. آیا طراحی شما فقط شامل رنگ‌های سیاه و سفید است؟ اگر اینطور است افزودن کمی رنگ واقعا می‌تواند طرح شما را به پتانسیل کامل خودش برساند. اگر شما برای وب یا برنامه‌های خود طراحی انجام می‌دهید، آیا در مورد اثر رنگ‌ها بر روی میزان قابلیت استفاده محصول تحقیق کرده‌اید؟ تئوری رنگ‌ها شامل حوزه‌ی بسیار بزرگی است که در این مقاله سعی کردیم به طور مختصر و مفید اطلاعاتی را در این مورد خدمت شما عرض کنیم. جهت تمرین و آشنایی کامل با انواع طرح‌های رنگی مشاهده‌ی این چرخ توصیه می‌شود. با تشکر از همراهی شما دوستان.

الهه انصاری

الهه انصاری

 

فرایند UX: این فرایند چیست و چرا مهم است؟

در این مقاله، ما یک فرایند طراحی UX و همچنین ترتیبی را که در آن مراحل خاص این فرایند باید انجام شود، تعریف می‌کنیم و خواهیم دید که چه روش‌هایی می‌تواند توسط طراحان UX در هر فاز استفاده شود. فرایند UX چگونه فرایندی است؟ پاسخ این سوال به برخی مسائل بستگی دارد. فرایند طراحی UX چیزی است که تمام فعالان حوزه‌ی طراحی آن را انجام می‌دهند البته هر کسی به شیوه‌ی متفاوت! چراکه فرایند UX به شدت به خود پروژه بستگی دارد. پروژه‌های مختلف نیاز به رویکرد‌های متفاوت دارند؛ رویکرد یک وبسایت شرکتی متفاوت از شیوه‌ی طراحی یک چت‌ روم است. علاوه‌بر برخی شیوه‌ها (مانند تحقیق محصول قبل از آماده شدن نمونه‌ی اولیه) که طراحان UX برای هر پروژه دنبال می‌کنند، اصولی نیز در هر بخش از این فرایند وجود دارد که باید به صورت سفارشی برای هر پروژه به طور خاص طراحی شوند.  مرور کلی بر فرایند  UX هر فرایند UX باید شامل ۵ مرحله‌ی کلیدی زیر باشد: ۱. تعریف محصول  (Product Definition) یکی از مهم‌ترین مراحل طراحی UX در واقع قبل از آغاز طراحی انجام می‌شود. قبل از این‌ که بتوانید یک محصول بسازید، باید زمینه را برای وجودش درک کنید. مرحله‌ی تعریف محصول، زمینه‌ی موفقیت آن را مهیا می‌کند. در این مرحله، طراحان UX محصول را در بالاترین سطح انتزاع (اساسا مفهوم محصول) با ذینفعان به اشتراک می‌گذارند. این مرحله معمولا شامل موارد زیر است: مصاحبه با ذینفعان: مصاحبه با ذینفعان کلیدی در یک پروژه برای جمع آوری اطلاعات در مورد اهداف آن انجام می‌شود. تعریف اهداف و ارزشهای محصولی که می‌خواهید ایجاد کنید، یک عامل کلیدی برای فرایند هدایت یافته است. ایجاد گزاره‌ی ارزش: گزاره‌ی ارزش، جنبه‌های کلیدی محصول را مشخص می‌کند؛ چیست، برای چه کسی طراحی شده‌است، چه زمانی و چه جایی از آن استفاده خواهد شد. گزاره ارزش به تیم و ذینفعان کمک می‌کند که در مورد محصول توافق حاصل شود. طرح مفهومی: ایجاد یک مدل اولیه از آنچه که تیم به دنبال ساخت آن است. جلسه ی kick-off پروژه: این نشست همه‌ی عاملان و بازیکنان کلیدی را جهت تعیین انتظارات مناسب برای تیم و سهامداران گرد هم می‌آورد. نتایج این جلسه شامل طرح سطح بالایی از هدف محصول، افراد دخیل در طراحی و توسعه‌ی محصول، چگونگی مشارکت و انتظارات ذینفعان (مانند KPI و چگونگی اندازه گیری موفقیت محصول) است. ۲. تحقیقات محصول (Product Research) هنگامی که ایده‌ی محصول تعریف شد، تحقیقات محصول (که به طور طبیعی شامل تحقیقات کاربر و بازار است) نیمه‌ی دیگر پایه و اساس کار را برای طراحی عالی فراهم می‌کند. تحقیقات خوب، اطلاعات مفید و ارزنده‌ای جهت آینده ی هر چه بهتر محصول شما می‌دهد و صرفه جویی زیادی در استفاده از منابع مالی و زمانی می‌شود. فاز تحقیق محصول در بین بیش‌تر پروژه‌ها متغیر است و به عوامل مختلفی از جمله پیچیدگی محصول، زمان بندی، منابع موجود و بسیاری از موارد  دیگر بستگی دارد. این مرحله می‌تواند شامل موارد زیر باشد: مصاحبه‌های عمیق فردی (Individual in-depth Interviews, IDI) : تجربه‌ی تولید یک محصول عالی با درک درست از کاربران میسر می‌شود. طراحان UX نه تنها می‌خواهند بدانند که کاربران چه کسانی هستند، بلکه می‌خواهند عمیق‌تر به نیازها، ترس‌ها، انگیزه‌ها و رفتار آن‌ها واقف باشند.. تحقیقات رقابتی: تجزیه و تحلیل جامع محصولات رقیب، ویژگی‌های موجود در آن‌ها را با روش قابل مقایسه‌ای در ذهن طراحان ترسیم می‌کند. تحقیق به طراحان UX کمک می‌کند تا استانداردهای صنعت را درک کنند و فرصت‌های محصول را در حوزه‌ی مشخصی شناسایی کنند. ۳.‌ آنالیز هدف از مرحله‌ی تحلیل این است که دیدگاه‌های حاصل از اطلاعات جمع آوری شده در طول مرحله‌ی تحقیق را به دست آوریم. نگهداری، سازمان دهی و نتیجه گیری از آنچه که کاربران می‌خواهند، فکر می‌کنند و  نیاز دارند می‌تواند به طراحان UX کمک کند تا شروع  به درک "چرایی" این سوال‌ها کنند. در طی این مرحله، طراحان قرارداد می‌کنند که مهم‌ترین فرض‌هایی که انجام شده‌اند معتبر هستند. این مرحله معمولا شامل موارد زیر است: ایجاد شخصیت‌های فرضی: این کاراکترهای تخیلی برای نشان دادن انواع مختلف کاربرانی هستند که می‌توانند از یک محصول به همان شیوه‌ی مشابه استفاده کنند. هدف از این شخصیت‌های فرضی ایجاد بازخوردهای قابل اعتماد و واقع بینانه از بخش‌های اصلی مخاطبان برای مرجع است.     ایجاد نقشه‌های تجربه (Experience maps) : این نقشه یک ابزار طراحی مهم برای درک تعاملات محصول یا سرویس از دیدگاه کاربران است. نقشه‌ی تجربه، اساسا یک نمایش بصری است که جریان کاربری را در یک محصول یا سرویس نشان می‌دهد. یک نقشه‌ی تجربه‌ی پایه‌ای مسیر واحدی (یک کاربر، یک هدف، یک سناریو) را دنبال می‌کند حتی زمانی که محصول یا سرویس اجازه‌ی تغییرات مسیر را می‌دهد.  ۴. طراحی هنگامی که انتظارات کاربر از محصول ایجاد شد (که اهداف آن‌ها چیست و چگونه می‌خواهند با محصول کار کنند)، طراحان UX به سمت مرحله‌ی طراحی حرکت می‌کنند. فاز طراحی موثر، همکاری زیاد و تکرار شونده‌ای می‌طلبد بدین صورت که نیاز است تا از تمامی عاملان و تیم درگیر در توسعه‌ی محصول ورودی بگیریم و به صورت عقب گرد به ابتدا برگردیم تا ایده‌ها و مفروضات خود را اعتبار سنجی کنیم. مرحله‌ی طراحی شامل موارد زیر است: طرح بندی (Sketching) : طرح بندی ساده‌ترین راه برای تجسم ایده‌های ما است. رسم دستی نیز سریع‌ترین راه برای تجسم یک مفهوم است. طرح بندی به طراح اجازه می‌دهد تا طیف گسترده‌ای از راه حل‌های طراحی را قبل از تصمیم گیری نهایی تصور کند.   ایجاد Wireframeها: وایرفریم راهنمای بصری است که نشان دهنده‌ی ساختار صفحه (سلسله مراتب و عناصر کلیدی) است. این کار  به عنوان ستون فقرات محصول عمل می‌کند و طراحان اغلب از آن‌ها به عنوان اسکلت برای مدل سازی استفاده می‌کنند.   ایجاد نمونه‌های اولیه: همان طور که گفتیم وایرفریم‌ها بیش‌تر مربوط به ساختار و سلسله مراتب بصری هستند و نمونه‌های اولیه نتیجه‌ای از تجربه‌ی متقابل حس و نمایش بصری (Feel and Look) به صورت همزمان هستند. نمونه‌ی اولیه در واقع شبیه سازی محصول است و معمولا با استفاده از وایرفریم‌های قابل کلیک (Clickable Wireframe) پیاده سازی می‌شود.     ایجاد مشخصات طراحی: مشخصات طراحی معمولا شامل نمودار جریان کاربری (User Flow Diagram) و نمودار جریان کار (Task Flow Diagram) است که ویژگی‌های عملکردی و الزامات سبک محصول را مشخص می‌کند. مشخصات طراحی، فرایندها و ابزارهای مورد نیاز گرافیکی را برای ایجاد یک محصول قابل اجرای موفق توصیف می‌کند. ۵. اعتبار سنجی (تست) مرحله‌ی اعتبارسنجی معمولا زمانی شروع می‌شود که طراحی با جزییات و وضوح بالایی انجام شده باشد و محصول توسط سهامداران و کاربران نهایی طی مجموعه ای از جلسات آزمون کاربر تایید شده باشد. همانند مرحله‌ی تحقیق محصول، این مرحله نیز بین پروژه‌های مختلف متغیر است. مرحله‌ی اعتبار سنجی می‌تواند شامل موارد زیر باشد: اصطلاح «Eat your own dogfood»: این اصطلاح زمانی به کار می‌رود که تیم طراحی کار را تا زمان رسیدن به یک محصول قابل استفاده تکرار کند و آن کمپانی محصولش را آماده اعلام کند. آزمایش محصول با تیم یک روش خوب کم هزینه برای اعتبارسنجی به حساب می‌رود. جلسات تست کاربر: جلسات تست کاربر، به عنوان اعتبار طراحی، مانند انجام آزمایش با کاربران واقعی عمل می‌کند. جلسات آزمون کاربر روش‌های زیادی دارد. برخی از محبوب‌ترین این تست‌ها شامل تست‌های قابلیت استفاده، گروه‌های تمرکز (Focus Groups)، آزمایش بتا، تست A / B و نظرسنجی‌ها است. ایجاد خاطرات کاربری: خاطرات کاربری در جمع‌ آوری اطلاعات از دنیای واقعی کاربران بسیار مفید هستند. با استفاده از Google Docs، طراحان UX می‌توانند یک قالب ساده ایجاد کرده و پس از آن سوالات پایان بازی ( Open-ended) مانند موارد زیر بپرسند: هنگام استفاده از محصول کجا بودید؟ چه کارهابی انتظار داشتید که انجام دهید؟ آیا موردی باعث ناراحتی شما شده است؟ آنالیز معیار‌ها: تجزیه و تحلیل اعداد ارائه شده توسط یک ابزار تحلیلی در مورد چگونگی تعامل کاربر با محصول شما است از جمله کلیک‌ها، زمان ناوبری (Navigation)، نمایش‌ها، جستجو و غیره. همچنین آنالیز این معیارها می‌تواند رفتار غیر منتظره‌ای را کشف کند که در آزمون کاربر به صورت صریح یافت نشده است. کار بر روی بازخوردهای دریافت شده از کاربران: اطلاعات بازخوردی از قبیل اطلاعات سیستمSupport Ticket، گزارش‌ باگ‌ها و دیگر تحلیل‌ها می‌توانند به رفع مشکلات محصول کمک شایانی کنند. چگونه فرایند طراحی UX را بهبود بخشیم؟ تا این جا متوجه شدیم که چگونه هر مرحله به یکدیگر متصل است. حال برخی نکات مفید برای بهبود فرایند طراحی UX را ذکر می‌کنیم: همپوشانی بین فازها و تکرارها (Iterations) را در نظر بگیرید. مهم است که بدانیم طراحی UX یک فرایند خطی نیست. فازهای فرایند UX اغلب دارای همپوشانی قابل ملاحظه‌ای هستند. چنانچه که طراح UX اطلاعات بیش‌تری درباره‌ی مشکل حل شده، کاربران و جزییات پروژه (به ویژه محدودیت‌ها) کسب کند، ممکن است لازم باشد بعضی از تحقیقات انجام شده را بازنگری کرده یا آزمایش‌های جدیدی را طراحی کند. اهمیت ارتباطات ارتباطات مهارت کلیدی طراحی UX است. همان طور که طراحی فوق العاده به خودی خود یک مسئله‌ی بزرگ است، وجود مهارت ارتباطات قوی نیز به همان اندازه مهم است، زیرا حتی بهترین ایده‌ها و راهکارها در صورتی که مورد قبول تیم یا سهامداران نباشند شکست خواهند خورد. به همین دلیل بهترین طراحان UX دارای مهارت ارتباطات عالی هستند. فرایند‌های متناسب با پروژه‌ها طراحان UX باید با هر پروژه انعطاف پذیر باشند و فرایند مورد استفاده‌ی کسب و کار و عملکردی باید متناسب با نیازهای خاص پروژه باشد. این فرایند باید به توانایی‌های کسب و کار متکی بوده و مشتریان به طور کلی در آن موثر باشند. نتیجه‌گیری وقتی که وارد فرایند طراحی UX می‌شویم، همه‌ی راه حل‌های یافت شده الزاما مناسب پروژه نیستند. ساده یا پیچیده بودن پروژه فرقی در هدف فرایند طراحی که ایجاد یک محصول عالی برای کاربران است، ندارد. بنابراین عاقلانه است که از بهترین گزینه برای پروژه‌ی خود بهره ببریم و بقیه‌ی موارد را نادیده بگیریم تا بدین ترتیب فرایند طراحی خود را تا رسیدن به یک محصول موفق تکامل بخشیم.

الهه انصاری

الهه انصاری

 

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

استارتاپ چیست و چگونه راه اندازی می‌شود استارتاپ یا استارت‌آپ یک سرمایه‌گذاری به شکل کارآفرینی است که طی آن یک شرکت نوپا ایده‌ی جدیدی برای کسب‌و‌کار ارائه می‌دهد. طبق تعریف استیو بلنک، پروفسور دانشگاه استنفورد، استارتاپ یک سازمان است که برای پیدا کردن یک مدل کسب‌و‌کار تکرارپذیر و مقیاس‌پذیرراه‌اندازی می‌شود. البته اختلاف ‌بر سر تعریف استارتاپ زیاد است؛ اما نکته‌ی مشترک در همه‌ی آن‌ها این است که بر اساس یک ایده‌ی خلاقانه و جدید فعالیت آن‌ها آغاز می‌شود. این ایده‌ها بازار نیازمندی‌ها را هدف قرار می‌دهند و با ارائه‌ی یک محصول یا خدمات جدید و استفاده از تکنولوژی، خیلی سریع رشد پیدا می‌کنند. از آنجایی که هدف از راه‌اندازی یک استارتاپ پیدا کردن مدل کسب‌و‌کار است؛ عمر آن نمی‌تواند طولانی باشد و معمولا بعد از گذشت چند سال به موفقیت می‌رسد یا بودجه‌ی آن تمام می‌شود و شکست می‌خورد. استارتاپ‌ها برای شروع فعالیت خود لزوما نیازی به ثبت شدن شرکت ندارند و از هرجا و با هر تعداد بنیان‌گذار می‌توانند فعالیت خودشان را آغاز کنند. بودجه‌ی راه‌اندازی استارتاپ‌های معمولا کم است؛ اما اگر ایده‌ی خوبی داشته باشند خیلی زود می‌توانند مورد حمایت سرمایه‌گذاران قرار بگیرند. اصطلاحات رایج در استارتاپ افرادی که با استارتاپ‌ها درگیر هستند معمولا از اصطلاحات خاصی برای بیان مقاصد خود استفاده می‌کنند. در ادامه به معرفی چند نمونه از این اصطلاحات می‌پردازیم. Lean Startup متودولوژی لین استارتاپ (Lean Startup) یا نوپای ناب به شما یاد می‌دهد که چگونه یک استارتاپ را هدایت کنید، چه موقع آن را تغییر دهید و از چه راه‌هایی برای رشد آن استفاده کنید. لین استارتاپ یک رویکرد علمی برای ساختن و مدیریت کردن استارتاپ‌ به شما می‌دهد و کمک می‌کند که محصول خودتان را سریع‌تر به دست مشتری برسانید. بسیاری از استارتاپ‌ها با ایده‌ی ساختن محصول مورد نیاز مردم راه‌اندازی می‌شوند. آن‌ها ماه‌ها و حتی سال‌ها زمان صرف می‌کنند که محصول خود را به بهترین نحو شکل دهند بدون اینکه آن را به مشتری نشان بدهند. همین موضوع باعث شکست خوردن بسیاری از آن‌ها می‌شود. زیرا آن‌ها با مشتری‌ها صحبت نمی‌کنند و در مورد محصولات خود از آن‌ها بازخورد نمی‌گیرند. زمانی که مشتری‌ها نتوانند با یک استارتاپ ارتباط برقرار کنند، به ایده‌ی آن اهمیتی نمی‌دهند و درنتیجه استارتاپ شکست می‌خورد. Unicorn Startup استارتاپ تک شاخ یا یونیکورن استارتاپ (Unicorn Startup) به استارتاپ‌هایی گفته می‌شود که رشد سریعی دارند و به ارزش بیش از ۱ میلیارد دلار می‌رسند. این لغت اولین بار در سال ۲۰۱۳ توسط سرمایه‌گذاری به نام آیلین لی ارائه شد و او از میان حیوانات افسانه‌ای، تک شاخ را به‌عنوان نماد این مدل استارتاپ‌ انتخاب کرد. ازجمله بزرگ‌ترین استارتاپ‌هایی که در این دسته جا می‌گیرند می‌توان به Uber ،Xiaomi ،Airbnb ،Dropbox و Pinterest اشاره کرد. بنیان‌گذار استارتاپ (Founder) به شخصی که استارتاپ را راه‌اندازی می‌کند بنیان‌گذار گفته می‌شود. این اشخاص معمولا علاقه‌ای به کار کردن برای دیگران ندارند و باور دارند که می‌توانند با تلاش‌های بی‌وقفه‌ی خود دنیا را تغییر دهند. این افراد می‌توانند با تعدادی از دوستان خود در این راه شریک شوند و وظایف سنگین را بین خودشان تقسیم کنند. راه‌اندازی یک استارتاپ به هیچ عنوان کار راحتی نیست و در طی آن، به بنیان‌گذاران آن فشار زیادی وارد خواهد شد. اما اگر فعالیته‌های آن‌ها موفقیت‌آمیز باشد، نتیجه‌ی آن هم از نظر احساسی و هم از نظر مالی بسیار خوب خواهد بود. شتاب‌دهنده‌ی استارتاپ (Startup Accelerators) شتاب‌دهنده‌ها شرکت‌هایی هستند که روی استارتاپ‌هایی با ایده‌های جالب و البته کاربردی سرمایه‌گذاری می‌کنند. این شرکت‌ها درصدی از مالکیت استارتاپ را می‌گیرند؛ اما در عوض خدماتی مانند آموزش توسط مربی‌ها و آشنا کردن آن‌ها با سرمایه‌گذاران و متخصصان آن رشته را برایشان فراهم می‌کنند. درواقع این شرکت‌ها شانس موفقیت استارتاپ‌ها و پیدا کردن سرمایه‌ی بالقوه برای فعالیت‌هایشان را بالا می‌برند. استارتاپ ویکند (Startup Weekend) استارتاپ ویکند یک رویداد آموزشی-تجربی ۵۴ ساعته است که معمولا در آخر هفته برگزار می‌شود. در این رویداد افراد مختلفی مانند علاقه‌مندان به استارتاپ، توسعه‌دهندگان، برنامه‌نویسان، مدیران کسب‌و‌کارها، بازاریاب‌ها و طراحان گرافیک حضور دارند. ایده‌ها در این رویداد مطرح می‌شوند و افراد گروه تشکیل می‌دهند تا طرح اولیه یا دموی ایده‌ی خود را پیاده‌سازی کنند. استارتاپ گرایند (Startup Grind) استارتاپ گرایند یک برنامه‌ی جهانی است که در آن از کارآفرینان موفق دعوت می‌شود تا داستان موفقیت‌ و چالش‌های استارتاپ خود را با دیگران به اشتراک بگذارند. افراد می‌توانند در این برنامه با پروژه‌های یکدیگر آشنا شوند و از تجربیات هم استفاده کنند. تجارت B2B این اصطلاح کوتاه شده‌ی عبارت Business to Business است و به کسب‌و‌کاری گفته می‌شود که محصولات و خدمات خود را به یک کسب‌و‌کار دیگر ارائه می‌دهد. این نوع تجارت در مقابل تجارت بی تو سی (B2C) قرار دارد. تجارت B2C تجارت B2C مخفف عبارت Business to customers است و به کسب‌و‌کارهایی گفته می‌شود که محصولات و خدمات خود را به مشتری‌های عرضه می‌کنند. تجارت C2C نوعی از سرویس است که کاربران با استفاده از آن، خدمات و کالاهای خود را به دیگر کاربران عرضه می‌کنند. وب‌سایت‌ها و سرویس‌های خرید و فروش اجناس دست دوم، از نمونه‌های تجارت Customer to Customer هستند. سرمایه‌ی بذری (Seed Funding) همان‌طور که یک گیاه از یک بذر شروع به رشد می‌کند، یک استارتاپ نیز از یک سرمایه‌ی اولیه شروع می‌شود. به سرمایه‌ای که در مرحله‌ی اولیه راه‌اندازی استارتاپ در اختیارش قرار می‌گیرد، سرمایه‌ی بذری گفته می‌شود. واگذاری (Vesting) به نوعی تخصیص سهامی گفته می‌شود که طی آن بعد از گذشت مدت زمانی، مقدار سهم تعیین‌شده به کارمندان داده می‌شود. به‌عنوان مثال اگر به یک کارمند ۲۰۰ سهام طی ۱۰ سال داده شود، یعنی بعد از گذشت هر سال ۲۰ سهم به او اختصاص پیدا می‌کند. این کار به کارمندان انگیزه می‌دهد که عملکرد خوبی داشته باشند و برای مدت زمان زیادی در شرکت کار کنند. بنچمارک (Benchmark) به فرآیندی گفته می‌شود که یک استارتاپ برای اندازه‌گیری موفقیت فعلی خود از آن استفاده می‌کند. سرمایه‌گذاران میزان موفقت استارتاپ‌ها را بر اساس بنچمارک‌ها می‌سنجند. به‌عنوان مثال وقتی می‌گوییم شرکت A به بنچمارک درآمد X در طی ۲ سال رسیده است یعنی این استارتاپ توانسته است طی ۲ سال میزان فروش خود را به X برساند. بوت‌استرپ (Bootstrapped) زمانی که گفته می‌شود یک شرکت بوت‌استرپ است، یعنی بودجه‌ی آن توسط خود کارآفرین یا بودجه‌ی خود شرکت تأمین شده است. وام موقت (Bridge loan) این نوع وام به Swing loan نیز معروف است و به مساعده‌هایی گفته می‌شود که بر اساس میزان درآمد به یک شخص داده می‌شود و فاصله‌ی بین درآمدهای عمده‌ را پر می‌کند. فروش (Buyout) یک استراتژی معمول برای خروج است که طی آن سهام شرکت به فروش می‌رسد و به خریداران آن اجازه‌ی کنترل شرکت داده می‌شود. سرمایه (Capital) به دارایی‌های مالی گفته می‌شود که در حال حاضر برای استفاده در دسترس هستند. کارآفرینان از سرمایه برای آغاز استارتاپ استفاده می‌کنند و مقدار آن را افزایش می‌دهند تا به رشد استارتاپ کمک کنند. دو دلیجنس (Due diligence) به ارزیابی و تحلیل سرمایه‌گذاران از وضعیت و پتانسیل‌های سرمایه‌گذاری گفته می‌شود. این ارزیابی می‌تواند شامل بررسی سوابق مالی و اندازه‌گیری ROI باشد. بازده سرمایه‌گذاری یا بازگشت سرمایه (ROI) همان‌طور که از نامش پیدا است، برگشت سرمایه را مورد بررسی قرار می‌دهد. درواقع به پولی گفته می‌شود که به یک سرمایه‌گذار به‌عنوان درصدی از سرمایه‌‌گذاری خود در استارتاپ برگشت داده می‌شود. به‌عنوان مثال اگر یک سرمایه‌گذار مبلغ ۲ میلیون دلار برای خرید ۲۰ درصد سهام یک شرکت خرج کند و شرکت با مبلغ ۴۰ میلیون دلار به فروش برسد، این یعنی آن سرمایه‌گذار مبلغ ۸ میلیون دلار از فروش شرکت دریافت خواهد کرد. خروج (Exit) برخی بنیان‌گذاران و سرمایه‌گذاران استارتاپ این‌گونه پولدار می‌شوند؛ Exit به متدی گفته می‌شود که یک سرمایه‌گذار و یک کارآفرین سرمایه‌ی خودشان را از شرکت خارج می‌کنند. خروج معمولا در زمان IPO و M&A اتفاق می‌افتد. آی‌پی‌او (IPO) زمانی است که یک استارتاپ سهام خودش را در یک فراخوان بورس برای فروش به مردم پیشنهاد می‌دهد. در این حالت یک شرکت خصوصی تبدیل به سهامی عام می‌شود و دیگر یک استارتاپ نیست.  مالکیت و ادغام (Merge & Acquisition) زمانی است که استارتاپ توسط یک شرکت بزرگ‌تر خریداری یا با آن ادغام می‌شود. این اتفاق به صورت دوستانه (همراه با توافقنامه) یا خصمانه (بدون توافقنامه) صورت می‌گیرد. توافقنامه عدم ‌افشاگری (NDA) NDA مخفف عبارت Non-disclosure agreement است و به توافقنامه‌ای گفته می‌شود که طی آن هر ۲ طرف از اطلاعات حساس و محرمانه مانند اسرار تجارت محافظت می‌کنند و آن را با شخص سوم به اشتراک نمی‌گذارند. پیوت (Pivot) زمانی است که استارتاپ جهت استراتژی‌های خودش را سریعا تغییر می‌دهد. معمولا این تغییرات به دلیل عدم بازدهی اتفاق می‌افتند و طی آن بر ویژگی‌های دیگر محصولات یا مشتری‌ها تمرکز می‌شود. مذاکره در آسانسور (Elevator Pitch) فرض کنید در یک آسانسور با یک سرمایه‌گذار هم مسیر شده‌اید و تنها ۳۰ تا ۱۲۰ ثانیه فرصت دارید او را متقاعد کنید که روی ایده‌ی شما سرمایه‌گذاری کند. به ‌عبارتی شما باید در این چند ثانیه مشکل، راه‌حل آن و بازار مشتری‌ها را برای سرمایه‌گذار توضیح بدهید و او را متقاعد کنید. نرم‌افزار به‌عنوان سرویس (SaaS) به یک محصول نرم‌افزاری گفته می‌شود که از راه دور به وسیله‌ی اینترنت یا سیستم رایانش ابری کنترل می‌شود. چگونه یک استارتاپ راه‌اندازی کنیم شما برای ساختن یک استارتاپ موفق به ۳ چیز احتیاج دارید: ایده‌ی ساختن محصولی که مشتری‌ها واقعا به آن علاقه داشته باشند، پیدا کردن یک هم‌بنیان‌گذار و کم کردن هزینه‌ها تا جای ممکن. اکثر استارتاپ‌هایی که شکست می‌خورند، معمولا در عمل کردن به یکی از این ۳ مورد ناموفق هستند. درواقع شما به یک ایده‌ی خاص و عالی برای شروع کردن استارتاپ خود نیازی ندارید. کافی است تکنولوژی جدیدی به کاربران معرفی کنید که در حال حاضر از آن برخوردار نیستند. این تکنولوژی جدید باید بتواند نیازهای آن‌ها را به بهترین نحو از بین ببرد. در ادامه بیشتر در مورد مراحل راه‌اندازی استارتاپ بخوانید. ۱- ببینید دنیا چه چیزی کم دارد اگر دقت کنید متوجه می‌شوید که سیستم‌های تاکسیرانی قبل از پیدایش Uber بسیار کسالت‌آور بودند. یا اینکه قبل از پیدایش اسپیس‌ایکس مردم علاقه‌ی چندانی به فضا نداشتند. شما نیز باید فکر کنید و ببینید چه چیزی در دنیا کم است و سعی کنید ایده‌ی جدیدی برای آن ارائه دهید. ۲- آن را یادداشت کنید مهم نیست که چقدر باهوش هستید. مطمئنا بعد از گذشت مدتی برخی جزئیات ایده‌ی خود را فراموش خواهید کرد. افکار شما و مکالماتی که در این زمینه با دیگران انجام می‌دهید بسیار ارزشمند هستند پس تمام افکار و جزئیات مکالمات خود را یادداشت کنید. ۳- یک نمونه‌ی اولیه بسازید بسیاری از ایده‌های خلاقانه‌ی ما حتی بهترین‌ها، متأسفانه هیچ موقع به دنیای واقعی وارد نمی‌شوند و شما حتی اگر آن‌ها را یادداشت کنید، بازهم بعد از گذشت مدتی فراموششان خواهید کرد. تنها چیزی که می‌تواند مانع از فراموش شدن آن‌ها شود، تهیه‌ی یک نمونه‌ی اولیه است. آن‌ها را برنامه‌نویسی کنید یا به‌صورت فیزیکی طراحی کنید و بسازید. بسیاری از مردم در همین مرحله متوقف می‌شوند بنابراین اگر بتوانید از آن گذر کنید، یک قدم از دیگران جلوتر خواهید بود. ۴- نمونه‌ی اولیه را به ۱۰۰ نفر نشان دهید حالا شما باید از نقطه‌ی آسایش خود خارج شوید و نمونه‌ی اولیه خود را به دیگران نشان بدهید و نظر آن‌ها را جویا شوید. بهتر است این ۱۰۰ نفر از میان افراد کاملا ناشناس انتخاب شوند تا شناختن شما در بازخوردشان نسبت به محصول تأثیری نگذارد. چرا ۱۰۰ نفر؟ زیرا شما در این مرحله به چشم‌اندازی وسیع برای بازخوردها احتیاج خواهید داشت. ۵- تکرار کنید مردم کمی هستند که در اولین تلاش خود موفق می‌شوند و شانس اینکه شما جزو این دسته باشید بسیار کم است. بنابراین خودتان را برای طراحی کردن مجدد همه چیز کنید. ۶- یک هم‌بنیان‌گذار (Co-Founder) پیدا کنید زمانی که احساس کردید نمونه‌ی اولیه‌تان به نتیجه رسیده است، به دنبال یک شریک بگردید تا حاضر باشد سال‌های عمر خود را صرف عملی کردن این ایده کند. ۷- کسب‌و‌کار خود را ثبت کنید بعد از صحبت کردن با شریک یا شرکای خود و تعیین توافقات، بهتر است شرکت خودتان را ثبت کنید. می‌توانید مراحل ثبت شرکت را به‌طور کامل در این مقاله مطالعه کنید. ۸- به دنبال سرمایه‌گذار باشید و اولین نسخه را تولید کنید اگر بودجه‌ی کافی برای تولید کردن اولین نسخه از محصول خود ندارید، بهتر است یک سرمایه‌گذار پیدا کنید. بهتر است در حین پیدا کردن سرمایه‌گذار کار تولید را متوقف نکنید؛ زیرا هر استارتاپی نمی‌تواند بودجه‌ی مورد نظر خود را از سرمایه‌گذاران دریافت کند. ۹- راه‌اندازی کنید هرچقدر نسخه‌ی اولیه‌تان ناقص بود، آن را راه‌اندازی کنید. ویژگی‌های اضافه، واسط کاربری بهتر، افزایش سرعت اجرا و دیگر موارد مربوط به بهینه‌سازی از جمله مواردی هستند که می‌توانند در آینده نیز به محصول اصلی اضافه شوند. ۱۰- با کاربران همراه باشید مشتری‌های خود را تحت نظر داشته باشید و ببینید آیا برمی‌گردند یا خیر. اگر برنگشتند، علت را پیدا کنید. ۱۱- دوباره راه‌اندازی کنید هر چقدر احتیاج بود، محصول خود را بعد از اعمال تغییرات دوباره راه‌اندازی کنید. حتی اگر مشاهده کردید که تعداد کمی از مردم دوباره به شما مراجعه کردند، باز هم به کارتان ادامه دهید؛ زیرا این یعنی در حال تولید یک محصول باارزش هستید. ۱۲- محصول را به ۱۰۰۰ نفر نشان دهید شاید رقم بالایی به نظر نرسد؛ اما اولین ۱۰۰۰ نفر نقاط ضعف محصول شما را شناسایی خواهند کرد. از آنجایی که شما هنوز ناشناخته هستید، شاید لازم باشد این افراد را به‌صورت دستی استخدام کنید. هیچ ایرادی ندارد حتی اگر شده لپ‌تاپ آن‌ها را قرض بگیرید و وب‌سایت‌ خود را به آن‌ها نشان بدهید و نظرشان را جویا شوید. ۱۳- رشد کنید پاول گراهام، دانشمند علوم کامپیوتر و سرمایه‌گذار، استارتاپ‌ها را تشویق می‌کند که در هفته ۵ درصد رشد داشته باشند. اگر ۴ سال به همین ترتیب ادامه دهید، در طی گذشت این مدت به تعداد ۲۵ میلیون کاربر خواهید رسید. به‌ عبارت‌ دیگر، تبدیل به یکی از بزرگ‌ترین استارتاپ‌ها خواهید شد. ۱۴- به موفقیت برسید شما می‌توانید شرکت خودتان را به شخص دیگری بفروشید یا سرمایه‌گذاران را قانع کنید که با شما همکاری کنند. شما تا اینجا موفق شده‌اید استارتاپ خود را به نتیجه برسانید؛ بعد از این به خودتان بستگی دارد که بخواهید آن را ادامه دهید یا آن را به صاحبان جدیدش واگذار کنید. 
 

کاربران GitHub اکنون مخازن خصوصی را به صورت رایگان دریافت می‌کنند!

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

اینفوگرافی: مراحل مختلف یک استارتاپ چیست و چه زمانی باید به سرمایه‌گذار مراجعه کنیم؟

فاکتورها و شاخصه‌های زیادی برای اندازه‌گیری سایز یک استارتاپ وجود دارد. درآمد سالانه، تعداد اعضای تیم، تعداد شعبه‌ها یا دفاتر، پیچیدگی محصول، میزان تغییر در محصول و مواردی از این دست که شاید بسیاری از آن‌ها حتی به هم وابسته نیز باشند می‌تواند برای تعیین مرحله و ارزش یک استارتاپ مورد اندازه‌گیری قرار گیرد. تا کنون درخواست‌های بسیاری برای دریافت سرمایه و خدمات به سراوا ارسال شده که در این میان موارد متعددی با ذهنیت‌های اشتباه از زمان صحیح مراجعه به Venture Capital همراه بوده است. برای آنکه در هر زمان، بهترین تصمیم را در خصوص ایده یا استارتاپ خود اتخاذ کنید، لازم است به خوبی از مرحله‌ای که در آن قرار دارید اطلاع داشته باشید. بنابراین در این مقاله بر اساس ساز و کارهای داخلی سراوا و نیز نمونه‌هایی که در زمان حضور در جامعه‌ی استارتاپ‌های ایران با آن‌ها مواجه شده‌ام، به تشریح مراحل اصلی یا به عبارتی Stageهای یک استارتاپ خواهم پرداخت. از آنجا که بر اساس ایده، مدل کسب‌وکار، ساختار تیم، میزان استقلال، روش مدیریت و راهبری تیم و … استارتاپ‌ها تفاوت بسیاری با هم دارند، دسته‌بندی استارتاپ‌ها در مراحل مشخص می‌تواند در نگاه اول کاری سخت و غیرممکن به نظر برسد. برای مثال یک استارتاپ که روی خرده فروشی کار می‌کند و دارای فعالیت‌های اجرایی زیادی است با استارتاپی که یک سرویس ابری را مدیریت می‌کند و اکثر افراد تیم، برنامه‌نویس هستند تفاوت‌های زیادی در تعداد نیروی انسانی طی مراحل مختلف رشد دارد. با این وجود، بسیاری از مشکلات و نیازهایی که استارتاپ‌ها در مراحل مختلف با آن روبرو می‌شوند تا حد زیادی مشابه است. دانستن مرحله‌ای که یک استارتاپ در آن قرار دارد برای کارآفرینان از این رو اهمیت دارد که این مساله، به آمادگی و برنامه‌ریزی برای رویارویی با مشکلات و چالش‌هایی که در مرحله بعد با آن روبرو خواهند شد کمک می‌کند. به عنوان مثال هنگامی که تیم استارتاپ با رشد قابل توجهی روبرو می‌شود، در این زمان با تشخیص فاز استارتاپ به شکل صحیح، لازم است تغییرات زیادی در نقش مدیران و موسسین رخ دهد و بسیاری از امور و تصمیم‌گیری‌ها به افراد دیگر در تیم واگذار شود. همچنین باید توجه شود که در یک استارتاپ علاوه بر نوآوری‌ برای تبدیل یک ایده به مدل کسب‌وکار، باید یک تیم قوی از بنیان‌گذاران نیز ساخته شود که بتوانند موفقیت یک استارتاپ را تضمین کند. اندازه‌ی تیم استارتاپ از این جهت که یکی از شاخص‌های مهم در اندازه‌گیری مرحله‌ای است که یک استارتاپ در آن قرار دارد، نقش بزرگی در رشد آن ایفا می‌کند. با آنکه منابع بسیار زیادی در مورد رشد محصول، رشد بازار و… وجود دارد، اما منابع محدودتری در مورد چگونگی ساختن یک تیم قوی و منسجم در دست است؛ این در حالی است که اگر از یک سرمایه‌گذار پرسیده شود که بین یک تیم و ایده کدام یک مهم‌تر است، بدون شک جواب، تیم است. بر اساس مدل فعالیت سراوا، استارتاپ‌ها بر اساس مراحل زیر دسته‌بندی شده و بر حسب هر یک از فازها برنامه‌ریزی‌های لازم برای حداکثر کردن احتمال موفقیت انجام می‌شود. این مراحل با در نظر گرفتن ماهیت استارتاپ‌ها، بر پایه‌ی مدل رشد یک گیاه شبیه‌سازی شده‌اند. مرحله ایده (Pre-Seed) وقتی تنها چیزی که از یک استارتاپ وجود دارد، یک ایده ناب باشد و هنوز محصول اولیه‌ای ساخته نشده باشد، آن را در مرحله‌ی ایده یا پیش از کِشت قرار می‌دهیم. در اغلب موارد در این حالت، تیم متشکل از یک تا سه نفر است که بیشتر وقت‌شان صرف ایده‌پردازی، مطالعه بازار و شناسایی نیاز مشتریان بالقوه می‌شود. معمولا موسسین در این مقطع هنوز بر روی ایده متمرکز نشده یا مشغول به فعالیت در شرکت دیگری هستند و راه‌اندازی یک استارتاپ برای آن‌ها بیشتر یک کار جانبی محسوب می‌شود. در این مرحله، صاحبان ایده با شرکت در رویدادهایی نظیر استارتاپ ویکند، تلاش می‌کنند با فضای ایجاد یک کسب و کار نوپا آشنا شده و به ایجاد ارتباط‌های لازم برای تشکیل تیم اولیه بپردازند. شتاب‌دهنده‌های استارتاپ نظیر آواتک در این فاز به دریافت ایده‌ها پرداخته و امکانات و آموزش‌های لازم برای تبدیل ایده‌ها به واقعیت را در اختیار صاحبان ایده قرار می‌دهند. مرحله کشت ایده (Seed) یک استارتاپ زمانی در مرحله‌ی کشت ایده قرار دارد که موسسین آن از مرحله ایده‌پردازی گذشته‌ و در حال ساخت پروتوتایپ اولیه هستند تا بتوانند بازخورد ابتدایی مورد نیاز را از بازار دریافت کنند. اغلب استارتاپ‌ها در این مرحله درآمدی ندارند و اکثر مشتریان آن‌ها به صورت مجانی از محصول یا سرویس استفاده می‌کنند. تیم استارتاپ در این مرحله متشکل از خود موسسین و ۱ تا ۵ نفر دیگر است. مرحله اولیه استارتاپ (Early stage) استارتاپ‌هایی که در این مقطع قرار دارند، معمولا از مرحله ساخت پروتوتایپ فراتر رفته و به درآمدزایی رسیده‌اند. اگرچه ممکن است هنوز به سود نرسیده باشند ولی ‌توانسته‌اند مشتریان خود را جذب کنند و در تلاش برای افزایش تعداد مشتریان و حضور قوی‌تر در بازار هدف هستند. اغلب استارتاپ‌ها در این مرحله، بسته به نوع فعالیت‌شان از تیم‌های ۵ تا ۲۰ نفره تشکیل شده‌اند. مرحله میانی استارتاپ (Mid stage) در این مقطع استارتاپ‌ها به سودآوری رسیده‌اند اما معمولا سهم بازارشان کوچک است و در حال توسعه محصول یا سرویس‌های جدیدتری برای رشد سهم بازار و وارد شدن به بازارهای دیگر هستند. معمولا تیم‌های استارتاپی در این مرحله ساختار یافته‌تر بوده و چه بسا تیم محصول، تیم بازاریابی، مالی، منابع انسانی، پشتیبانی و… داشته باشند. مرحله رشد (Growth stage) در این مقطع استارتاپ‌ها معمولا بخش اعظمی از بازار را در اختیار گرفته و تیم‌هایی با بیش از ۱۰۰ نفر پرسنل در اختیار دارند. با توجه به اکوسیستم کنونی در ایران شاید تعداد استارتاپ‌هایی که در این مرحله قرار دارند هنوز انگشت‌‍شمار باشد. هنگام اقدام به دریافت سرمایه یا امکانات مورد نیاز برای ایجاد و رشد یک استارتاپ، کاملا حیاتی است که با تشخیص صحیح مرحله‌ای که هم‌اکنون در آن قرار دارید به افراد صحیح مراجعه کنید. معمولا شرکت‌های سرمایه‌گذاری ارزش‌آفرین یا به عبارتی Venture Capitalها بر روی استارتاپ‌هایی سرمایه‌گذاری می‌کنند که از مرحله‌ی ایده گذر کرده و حداقل یک پروتوتایپ کاربردی از محصول یا سرویس مورد نظرشان ایجاد کرده باشند. برای آغاز تحقق یک ایده در مرحله‌ی اول، شتاب‌دهنده‌ها سرمایه و خدمات متناسب با نیاز ایده را در اختیار صاحبان ایده قرار می‌دهند و پس از پایان مراحل شتاب‌دهی، استارتاپ‌ها توانایی تصمیم‌گیری برای رشد بیشتر با استفاده از سرمایه و خدمات VC را خواهند داشت. در این هنگام است که داشتن اطلاعات کافی از چگونگی ارائه‌ی استارتاپ به سرمایه‌گذار می‌تواند نقش مهمی در آینده‌ی فعالیت‌های شما ایفا کند.
 

چگونه کد خود را زیبا کنیم؟

با سلام. در این مقاله قصد بر معرفی چند ابزار کاربردی برای برنامه‌نویسان گرامی را داریم. پس با ما همراه باشید.😇   |Carbon| قبل از هر چیزی کمی به کد زیر نگاه کنید : #include <KWayland/Server/output_interface.h> #include <KWayland/Server/outputdevice_interface.h> namespace KWayland { namespace Server { class OutputInterface; class OutputDeviceInterface; class OutputChangeSet; class OutputManagementInterface; class XdgOutputInterface; } } namespace KWin { namespace ColorCorrect { struct GammaRamp; }   آیا شما واقعاً رغبت به خواندن این کد می‌کنید ؟ صد در صد خیر. چرا که هیچ indent یا code highlight در نظر گرفته نشده‌اس ! در نظر بگیرید اگر ۱۰۰۰ خط کد بود 😵. در اینجا وب‌سایت Carbon به ما اجازه قالب‌بندی ، تغییر فونت ، رنگ‌بندی و... کدهارا میدهد. Carbon تعداد زیادی از زبان‌های برنامه‌نویسی را اعم از C\C++ , Python , JS ,... پشتیبانی میکند. برای شخصی‌سازی تم مورد علاقه خود. کافی است که تنظیمات خود را اعمال و بعد url سایت را ذخیره کنید.این یک نمونه از تنظیماتی است که بنده اعمال کردم : حال به راحتی می‌توانید با اسکرین گرفتن از کدزیبای خود آن را برای دوستان خود ارسال کنید.     |Beautify Tools| سایت Beautify Tools مجموعه‌ای عظیم ابزارهایی اعم از : Beautifiers And Minifiers Converters String Utilities CSS Preprocessors Utilities Unit Converters Cryptography ... می‌باشد. که بسیار به کمک برنامه‌نویسان وب می‌آید. برای مثال شما یک فایل حجیم CSS دارید. که برای راحتی و قابل‌خواندن‌بودن کد از indent های بسیار استفاده کرده‌اید که خود باعث بالا بردن حجم نهایی فایل شده‌اند. به راحتی با استفاده از ابزار CSS Beautifier می‌توانید تمام indent های بی‌مصرف را از بین ببرید :     |Artistic Style| Artistic Style یک ابزار فرم‌دهنده (indenter) برای زبان‌های C, C++, C++/CLI, Objective‑C, C#, and Java می‌باشد.  برای نصب و استفاده به مستندات نصب این ابزار مراجعه کنید.     |Clang Format| Clang Format یک ابزار command-line بسیار قدرتمند برای مرتب کردن ، قالب‌بندی و... کد منبع می‌باشد :     ابزار Clang Format فقط به Command Line محدود نمی‌شود. شما می‌توانید به راحتی با IDE مورد علاقه خود این ابزار را تطبیق بدهید. مثل : Vim Qt Creator Visual Studio BBEdit ... برای استفاده به سایت مرجع مراجعه کنید.   موفق‌‌ و پیروز باشید. 
 

فضانورد سابق ناسا: سفر انسان به سیاره مریخ احمقانه است

پس از فرود انسان روی کره ماه در قرن بیستم، سیاره مریخ همواره به عنوان مقصد بعدی در منظومه شمسی شناخته شده؛ اما یکی از فضانوردان سابق ناساانجام چنین کاری را احمقانه می داند. بیل اندرس فضانورد سابق ناسا که در مأموریت آپولو 8 سال 1968 نیز شرکت داشته، معتقد است سفر به سیاره مریخ در حال حاضر صرفاً یک نمایش تبلیغاتی از سوی ناسا بوده و هیچ نفعی برای جامعه علمی دنیا نخواهد داشت. به گفته اندرس، بودجه لازم برای سفر به مریخ می تواند صرف پروژه های مفیدتری مانند ارسال ربات های کاوشگر به سیارات مختلف شود و از این طریق، سطح آگاهی ما از جهان اطراف را افزایش دهد. آقای اندرس معتقد است سازمان ناسا از مأموریت اصلی خود فاصله گرفته و بیشتر به دنبال برنامه های فضایی پر سر و صدا برای جذب سرمایه و بودجه بیشتر است که در نهایت، این پول ها هم خرج برنامه های تبلیغاتی و کم فایده بعدی خواهند شد. سفر انسان به مریخ در حال حاضر توجیه علمی ندارد به گفته فضانورد سابق ناسا، حضور انسان روی سیاره مریخ مسلماً یک موج رسانه ای عظیم و قدرتمند را به راه خواهد انداخت اما هیچ کمکی به گسترش مرزهای دانش بشری نخواهد کرد. جالب است بدانید که چنین دیدگاهی تنها مختص به بیل اندرس نبوده و بسیاری از مدیران ناسا، اسپیس اکس و بلو اوریجین (هر سه به دنبال فرود انسان روی مریخ هستند) نیز با نظر وی موافقند. البته نظر اندرس مخالفانی هم دارد؛ به عنوان مثال فرانک بورمن (یکی دیگر از سرنشینان آپولو 😎 معتقد است جست و جوی عمیق در منظومه شمسی یکی از مهم ترین مأموریت های ناسا بوده که حضور انسان بخش جدایی ناپذیر چنین پروژه هایی خواهد بود. گفتنی است آقای بورمن از سوی دیگر هیجان موجود در زمینه سفر به سیاره مریخ را هم تأیید نکرده و اظهار داشته: «ماسک و بزوس (صاحبان اسپیس اکس و بلو اوریجین) درباره تشکیل جوامع انسانی در مریخ صحبت می کنند؛ چنین چیزی مسخره است.» به هرحال باید منتظر بود و دید که آیا در سال های آتی ناسا و دیگر سازمان های فضایی بودجه خود را صرف امور علمی خواهند کرد یا بر شکستن محدودیت های حضور انسان در سایر سیارات تمرکز خواهند داشت.
 

معرفی استارت‌اپ شکست خورده ترانوس

استارتاپ ترانوس چندین سال وانمود می‌کرد محصولاتی کاربردی می‌سازد؛ اما درحقیقت، تقلبی بودند و کاربردی نداشتند. این استارتاپ حتی به یکی از یونیکورن‌های سیلیکون‌ولی تبدیل شده بود. معمولا داستان‌های منتشرشده درباره‌ی استارتاپ شکست‌خورده‌ کلی هستند و کمتر پیش می‌آید جزئیات و دلایل آن کامل بررسی شود. اغلب اوقات، دلایل مشترکی به شکست‌ استارتاپ منجر می‌شوند که مهم‌ترین و رایج‌ترین آن دریافت‌نکردن سرمایه‌ی کافی است؛ درنتیجه، استارتاپی که داستان جدیدی حتی در شکست‌خوردن نداشته باشد، معمولا موردتوجه جامعه‌ی کارآفرینی قرار نمی‌گیرد. بااین‌حال، استارتاپ ترانوس (Theranos) یکی از استارتاپ‌هایی است که داستان شکست‌خوردنش سروصدای زیادی به‌همراه داشت. ترانوس ازجمله استارتاپ‌های فعال در زمینه‌ی بیوتکنولوژی بود که قصد داشت با محصولات آزمایش خون انقلاب بزرگی در این صنعت ایجاد کند؛ به‌طوری‌که هر شخص بتواند خودش در منزل آزمایش خون دهد. این استارتاپ به یکی از استارتاپ‌های استثنایی و برجسته‌ی سیلیکون‌ولیتبدیل و مدیرعامل جوانش با ایده‌ای نوآورانه متعهد شده بود نه‌تنها سیستم مراقبت بهداشتی، بلکه سلامت و رفاه انسان‌ها را نیز بهبود دهد. درواقع، وعده‌های این استارتاپ به‌اندازه‌ای جذاب بود که در دنیای خارج از حباب سیلیکون‌ولی، اجرای آن عملی به‌نظر نمی‌رسید. درنهایت، سقوط و شکست این استارتاپ به‌قدری سریع بود که جزئیات رشد و پیشرفت آن در ذهن مردم ماندگار شده است. در سال ۲۰۰۴، الیزابت هولمز (Elizabeth Holmes)، یکی از دانشجویان ترک‌تحصیل‌کرده‌ی دانشگاه استنفورد، ترانوس را راه‌اندازی کرد. او قصد داشت نه‌تنها آزمایش خون، بلکه روش‌های سنّتی و دردآور خون‌گرفتن از رگ‌های بیمار را نیز متحول کند و محصولی ارائه دهد که تمام آزمایش‌های خون را فقط با دریافت چند قطره‌ خون انجام دهد. ایده‌ی این استارتاپ به‌اندازه‌ای خلاقانه بود که در مدت کوتاهی بسیار محبوب شد و با دریافت سرمایه‌ی زیاد توانست نیروی کارش را با سرعت گسترش دهد. استقبال مطبوعات و تشکیل هیئت‌مدیره‌ای از اعضای شناخته‌شده در این صنعت، ترانوس را به یکی از بهترین استارتاپ‌های سیلیکون‌ولی و یکی از استارتاپ‌های یونیکورن با ارزش یک‌میلیارد دلار تبدیل کرد. هولمز چهره‌ی محبوب دنیای استارتاپی شده بود و ترانوس قرار بود تحولات بزرگی در دنیا ایجاد کند. این استارتاپ حتی توانست هفتصدمیلیون دلار سرمایه از سرمایه‌گذاران بین‌المللی دریافت کند. در سال ۲۰۱۵ و بعد از اینکه دنیا به ماهیت اصلی این استارتاپ پی برد، مردم متوجه شدند موفقیت هولمز و ترانوس درواقع روی هیچ بنا شده است. در اکتبر همان سال، روزنامه‌ی وال‌استریت مقاله‌ای درباره‌ی ترانوس و حقایق آن منتشر کرد. در این مقاله نوشته شده بود: بعد از انتشار این مقاله، ترانوس تلاش کرد علیه اتهامات مقابله کند؛ اما شواهد ارائه‌‌شده به‌اندازه‌ای کامل و قانع‌کننده بود که اغلب طرفداران آن به ماهیت اصلی شرکت پی بردند. بعد از این ماجرا، بیشتر قراردادهای شرکت لغو شد و سرمایه‌گذاران شکایات قانونی زیادی مطرح کردند. تا اینکه در ماه ژوئن سال جاری، هولمز و سانی بالوانی (Sunny Balwani)، رئیس و مدیرعاملسابق شرکت، به جرم تقلب جنایی متهم شدند. سؤالی که پیش می‌آید این است که چه عاملی باعث شکست ترانوس شد؟ مطمئنا این واقعیت را نمی‌توان نادیده گرفت که محصولات این شرکت کار نمی‌کردند و ماهیت جعلی آن در روزنامه‌ها و وب‌سایت‌های سراسر دنیا پخش شده بودند. بااین‌حال، اغلب شرکت‌هایی که محصولشان کار نمی‌کند، نمی‌توانند به درجه‌ای از محبوبیتی برسند که ترانوس به آن رسیده بود. معمولا شرکت‌ها و بنیان‌گذاران آن به اصول اخلاقی پایبند هستند؛ ولی به‌نظر می‌رسد این موضوع درباره‌ی ترانوس صدق نمی‌کرد و توانست عده‌ی زیادی را فریب دهد. این موضوع که دروغی بزرگ تا این اندازه ادامه پیدا کند، نشان‌دهنده‌ی ضعف شخصیتی و اخلاقی بنیان‌گذار آن است؛ اما اینکه او و سایر مدیران ارشد توانسته‌اند موضوعی را تااین‌حد پنهان کنند و دستگیر نشوند، قدرت خطرناک باور انسان‌ها را نشان می‌دهد. جان کریرو کتاب خون بد را با الهام از داستان استارتاپ ترانوس نوشته و در این کتاب توضیح می‌دهد ایده‌ی برجسته و کاریزمای شخصی هولمز چگونه توانست روی اعضای هیئت‌مدیره و سایر کارمندان مهم شرکت و حتی افرادی تأثیر بگذارد که در رویدادهای ترانوس شرکت می‌کردند. همچنین در این کتاب، کریرو درباره‌ی خطرهای جاه‌طلبی‌های بزرگ و تأثیرات مخرب این ضرب‌المثل معروف صحبت می‌کند: «به انجام کاری وانمود کن تا واقعا به آن دست پیدا کنی». افزون‌براین، در کتاب خون بد به این موضوع پرداخته شده که هولمز و اطرافیانش چگونه توانستند چند سال به موفقیت در ساخت محصولی وانمود کنند که ایده‌ای بیش نبود. ترانوس مثال جالبی از تمایلات و تعهدات افرادی است که در این ماجرا درگیر هستند و نیز درس‌های آموزنده‌ای از دنیای کارآفرینی و استارتاپی می‌دهد. هر کارآفرینی برای رسیدن به موفقیت باید به خودش و ایده‌هایش ایمان داشته باشد؛ اما اعتمادبه‌نفس آن‌ها زمانی نتیجه‌ی مثبت می‌دهد که با نصیحت مشاوران راست‌گو همراه باشد. گاهی‌ اوقات، حقیقت تلخ است و اعتراف به اشتباهات و حتی شکست دردناک است؛ ولی اگر پذیرفته نشود، عواقب سنگینی برای استارتاپ به‌همراه دارد و حتی شاید به زندانی‌شدن بنیان‌گذارش منجر شود.
 

اسلک تمام ایرانی‌ها در همه نقاط جهان را تحریم کرد

اسلک، سرویس آنلاین سازمان دهی فعالیت های گروهی که کار خود را از سال 2015 آغاز کرده و در حال حاضر با 8 میلیون کاربر فعال روزانه یکی از پر استفاده ترین سرویس ها در جهان به شمار می رود، از صبح امروز تمامی کاربران ایرانی خود، شامل افرادی که از داخل ایران از این سرویس استفاده می کردند و همچنین افرادی که خارج از ایران حتی در شرکت هایی خارجی فعالیت داشته و تنها سابقه ای ایرانی داشته اند را تحریم و از دسترسی آنها به تمامی خدمات خود محروم کرد.  اقدام عجیب اسلک در حالی صورت گرفته که افرادی با سابقه ایرانی حتی در کشورهایی مانند آمریکا، کانادا و فنلاند هم قادر به استفاده از سرویس های این شرکت نبوده اند و برای مثال اگر یک کمپانی شامل 10 کارمند از کشورهای مختلف از جمله یک کارمند ایرانی از سرویس های اسلک استفاده می کرده است، اکنون تنها کارمند ایرانی قادر به استفاده از مزایای کار گروهی اسلک نخواهد بود و 9 نفر دیگر بدون مشکل به کار خود ادامه می دهند. اسلک در پیامی که به صورت ایمیل به کاربران ایرانی ارسال شده آورده است که این کار با هدف "رعایت قوانین تحریم های اقتصادی و کنترل تجاری ایالات متحده آمریکا علیه ایران" انجام شده و "اسلک با تشخیص هویت کاربران از دسترسی افرادی که به نوعی با تحریم های آمریکا مرتبط هستند به سرویس های خود جلوگیری به عمل می آورد". وب سایت ورج با پیگیری این موضوع به نقل از مدیران روابط عمومی اسلک گزارش داده است که به جز کاربران ایرانی، افرادی با ملیت کوبا، کره شمالی، سوریه و کریمه اکراین هم در فهرست تحریم شدگان قرار دارند. این اقدام در حالی صورت می گیرد که بسیاری از خدمات اسلک به صورت رایگان در اختیار کاربران قرار می گیرد و به جز آن، استفاده از سرویس های مدیریت پروژه آنلاین عملا هیچ تاثیری در تحریم های کالایی و اقتصادی علیه ایران ندارد. ضمن آنکه ایرانیانی که خارج از کشور به کار و زندگی مشغول هستند در اثر این تحریم ممکن است کار خود را از دست داده و زندگی اجتماعی و شغلی خود را در خطر فروپاشی ببینند. دولت آمریکا اخیرا اعلام کرده بود تحریم های ایران دارای اهداف سیاسی بوده و مردم این کشور را تحت فشار قرار نمی دهد؛ اما این اقدام و تحریم های مشابه علیه ایرانیان در سراسر جهان به خوبی نشان دهنده تلاش سازمان یافته این کشور و اتاق فکرهای مرتبط با آن برای مقابله با مفهومی به نام "هویت ایرانی" است.  برای جایگزینی اسلک می توانید از نمونه های دیگر خارجی مانند Trello یا سرویس های مشابه سازی شده ایرانی مانند Taskulu استفاده کنید.
 

چیپست های Intel X599 و Z399 کار را برای پردازنده های جدید AMD سخت خواهند کرد

رقابت با AMD Ryzen‌ها باعث شده است تا Intel هم مدام در حال تغییر رویه محصولات خود باشد؛ این شرکت به زودی با 2 چیپست Z399 و X599 بخش بزرگتری از بازار CPUهای سطح بالای دسکتاپ (HEDT) را در اختیار خواهد گرفت. طبق اطلاعات موجود، کمپانی اینتل تراشه های حرفه ای خود را به 2 قسمت تقسیم خواهد کرد. تراشه Z399 جایگزین تراشه X299 فعلی می گردد؛ اما دلیل حذف حرف X از ابتدای نام PCH به چه علت است؟ این شرکت هدایت پردازنده های Extreme Edition را به سطح بالاتری از دسکتاپ برده و آن را به عهده چیپست X599 می گذارد؛ این چیپست برای هندل مادربردهای مبتنی بر سوکت LGA 3647 طراحی شده و اساسا چیزی شبیه به تراشه C629، اما با قابلیت های بیشتر است. پلتفرم های مانند Basin Falls به بخش های بالاتری از دسکتاپ سپرده شده و چیپست X599 هدایت CPUهایی با 22 الی 28 هسته را بر عهده خواهد داشت. از سوی دیگر، چیپست Z399 برای سطح بالاتری از دسکتاپ میانی معرفی می گردد. همانطور که می دانید، Z390 برای مادربردهای جدید نسل نهم با کد رمز WhiskyLake معرفی می گردد؛ این CPUها تا 8 هسته منطقی را به همراه داشته و توان پردازشی آنها حتی بیش از نیاز بازی های روز است. پس از آن، Z399 برای پردازنده هایی با بیش از 10 هسته معرفی می شود. پیشبینی می گردد که این چیپست برای CPUهایی با 16 الی 22 هسته معرفی گردد. Z399 بر روی مادربردهای LGA 2066 مورد استفاده قرار می گیرد. تراشه های جدید اینتل برای سیستم های قدرتمندی مانند Workstation و تولید محتوا مناسب هستند.
 

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

یک استارتاپ آمریکایی با موفقیت کامپیوتری کوانتومی را تست و معرفی کرده که با درهم شکستن رکوردهای قبلی قدرت کوانتوم را به رخ می کشد. کامپیوتر کوانتومی کمپانی IonQ که در «مریلند» واقع شده، از توان پردازش ۷۹ کیوبیتی بهره می برد که از Bristlecone گوگل هفت کیوبیت قوی تر است. علاوه بر توان بالا، نرخ خطای این پردازنده‌های کوانتومی به ازای هر کیوبیت در حد ۰.۰۳ است و این در حالی که نزدیکترین گزینه نرخ خطایی برابر با ۰.۵ درصد دارند. این میزان به ازای هر جفت کیوبیت به ۰.۷ می رسد که باز هم با ۵ درصد دیگر رقبا کیلومترها فاصله دارد. برای تست این سیستم ها از الگوریتم هایی نظیر بنچمارک «برنستاین-وزیرانی» استفاده می شود که در آن دستگاه برای شناسایی یک عدد رمزنگاری شده تنها اجازه پرسیدن سوال های با جواب بله یا خیر را دارد. زمانی که این عدد بین ۱ تا ۱۰۲۳ قرار داشته باشد، احتمال موفقیت کامپیوتر عادی و کوانتومی به ترتیب برابر ۰.۲ و ۷۹ درصد خواهد بود. «کریستوفر مونرو»، مدیرعامل IonQ بر این باور است که سرمایه گذاری روی کامپیوترهای کوانتوم یونی بهترین گزینه است: در کامپیوترهای معمولی برای ذخیره داده و انجام محاسبات از بیت های صفر و یک استفاده می شود اما در کامپیوترهای کوانتومی به این منظور کیوبیت هایی به کار برده می شوند که می توانند در آن واحد صفر، یک و یا ترکیبی از هردو مورد باشند. IonQ در ساخت کامپیوتر کوانتومی خود فناوری سیلیکون فوق سرد مورد استفاده گوگل، IBM و Rigetti برای به دام انداختن یون ها را با فلز نادر ایتربیم جایگزین کرده است. در این فرایند ایتربیم یونیزه شده در یک میدان الکترومغناطیسی نوسان دار معلق می شود تا از طریق لیزرهای برنامه نویسی شده اطلاعات وارد، ذخیره یا بازیابی شوند. دقت و صحت سیستم IonQ نشان دهنده این است که به زودی و احتمالا سال آینده شاهد استفاده عملی از کامپیوترهای کوانتومی خواهیم بود.
 

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

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

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

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

الهه انصاری

الهه انصاری

 

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

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

الهه انصاری

الهه انصاری

 

اینفوگرافیک: نقشه راه همکاری شرکت‌های بزرگ با استارت‌آپ‌ها

این اینفوگرافیک مسیر همکاری که بین شرکت‌های بزرگ و استارت‌آپ‌ها صورت می‌گیرد را با ارائه آخرین آمارهای KPMG در سال‌های ۲۰۱۴ و ۲۰۱۵ نشان‌ می‌دهد. بر طبق این اینفوگرافیک، استارت‌آپ‌ها و کسب‌وکارهای بزرگ در نهایت در ۴ مدل به همکاری می‌رسند اما این مسیر همواری برای دو طرف نیست و هر یک با چالش‌هایی در این مسیر رویه‌رو هستند. برای مطالعه بیشتر دراین‌باره به فرصتی برای ایجاد یک رابطه برد-برد در قسمت پژوهش‌ها مراجعه کنید.
 

فرصتی برای ایجاد یک رابطه برد-برد

استارت‌آپ‌ها و شرکت‌های بزرگ می‌توانند فرصت‌های بالقوه زیادی از طریق همکاری برای یکدیگر ایجاد کنند. در وضعیت امروز شرکت‌ها که نوآوری محرک کلیدی موفقیت در بلندمدت است، کار با استارت‌آپ‌ها به شرکت‌های بزرگ این امکان را می‌دهد تا بتوانند فناوری‌ها و راهکارهای خدماتی جدید را با هزینه و ریسک کمتر برای عملیات اصلی سازمان توسعه دهند و به‌کار گیرند. همچنین استارت‌آپ‌ها منبعی برای نیروی ماهر تازه‌نفس و ایده‌های جدید هستند که می‌تواند به تحول فرهنگ‌سازمانی کمک کند.
در مقابل همکاری با شرکت‌های بزرگ نیز مزایای بسیاری برای استارت‌آپ‌ها دارد. تجربه و دانش بازار، بازده ناشی از مقیاس، شبکه‌های موجود با افراد و سازمان‌های دیگر و قدرت برند نمونه‌هایی از مزایایی است که می‌تواند در کنار دیگر منابع قابل‌ملاحظه موجود نام برده شود. همچنین کار با کسب‌و‌کار‌های بزرگ یک ابزار مهم برای استارت‌آپ‌ها به‌منظور آزمایش محصول از جهت تناسب با بازار می‌تواند باشد. این در شرایطی است که طبق گزارش CB Insight بیشتر استارت‌آپ‌ها به این دلیل شکست می‌خورند که نیازی در بازار برای محصول‌شان وجود ندارد. تامین شدن از جانب یک سازمان بزرگ به‌عنوان شریک، همچنین در افزایش مقیاس فرآیندها و جذب مشتریان می‌تواند بسیار کمک کند.
تغییر چشم‌انداز نوآوری سازمانی ایجاد برنامه‌ای برای جستجو، جذب و همکاری سیستماتیک با استارت‌آپ‌ها نه‌تنها برای شرکت‌های فناوری‌محور مانند گوگل و مایکروسافت پیگیری می‌شود، بلکه در کسب‌و‌کار‌هایی که دارای سطح پایین‌تری از فناوری هستند مانند کوکاکولا و یونیلیور نیز وجود دارد. همچنین این فرصت‌های همکاری می‌تواند در سازمان‌های اندازه متوسط نیز به‌کار گرفته شود.
نوآوری باز با از میان برداشتن دیوارهای سخت و انعطاف‌ناپذیر میان واحدهای سازمان و محیط بیرونی، به سازمان کمک می‌کند با رقبا، دانشگاه‌ها، تامین‌کنندگان، مشتریان و مشاوران ارتباط برقرار کند و با بهره‌گیری از خرد جمعی آن‌ها به منفعت بیشتری دست‌یابد. نوآوری باز را می‌توان استفاده‌ هدفمند از واحدهای داخلی و افراد خارجی دارای تخصص و دانش دانست که به نوآوری داخلی سازمان کمک می‌کنند. نوآوری باز همچنین بازارها را برای استفاده خارجی از نوآوری تولید شده توسط سازمان گسترش می‌دهد. مدل اصلی نوآوری باز سیستمی بدون مرز است که در آن شرکت‌ها به تجاری‌سازی ایده‌های خارج از سازمان می‌پردازند. درعین‌حال به‌وسیله اعطای حق امتیاز و یا ایجاد شرکت‌های وابسته، ایده‌های داخل سازمان خود را به بازار می‌فروشند و به کسب درآمد می‌پردازند.
نوآوری باز برای بسیاری از سازمان‌ها که متوجه محدودیت‌های بخش تحقیق و توسعه داخلی خود شده‌اند اهمیت زیادی یافته است. یکی از مهم‌ترین روش‌های به‌کارگیری رویکرد نوآوری باز در سازمان‌ها، استفاده از پتانسیل‌های همکاری با استارت‌آپ‌ها است. در پیمایشی که توسط KPMG در سال ۲۰۱۴ انجام شد، ۸۸ درصد از پاسخ‌دهندگان سازمانی اعتقاد داشتند همکاری با استارت‌آپ‌ها برای پیگیری استراتژی نوآوری سازمان حیاتی است. تحقیقات نشان می‌دهد که کسب‌و‌کارهای بیشتری، برنامه‌های ساختاریافته به این منظور راه‌اندازی می‌کنند که از جمله آن‌ها می‌توان به شتاب‌دهنده‌های شرکتی اشاره کرد. مهم‌ترین روندهای کلیدی در این زمینه سه مورد زیر است: شتاب دهنده‌های شرکتی در ابتدای سال ۲۰۱۵ یک‌سوم شتاب‌دهنده‌های اروپایی از طرف شرکت‌های بزرگ راه‌اندازی و یا حمایت می‌شدند و تعداد این شتاب‌دهنده‌ها با سرعت زیادی در حال رشد است. سرمایه‌گذار مخاطره‌پذیر شرکتی (CVC) در سال ۲۰۱۴ سرمایه‌گذاری‌های CVCها از نظر حجم سرمایه ۸۶.۵ درصد و از نظر تعداد، ۵۹ درصد رشد داشته است. از بین ۱۰۰ شرکت بزرگ اروپا حدود نیمی از آن‌ها فعالیت‌های سرمایه‌گذاری خطرپذیر انجام می‌دهند و آلمان به‌عنوان قطب سرمایه‌گذاران خطرپذیر شرکتی در قاره اروپا شناخته می‌شود.

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


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

چند سايت ارزشمند جهانی

در حال حاضر يادگيري الکترونيکي مفهومي مهم در آموزش عالي است و دانشگاه هاي متنوعي ايجاد شده که نياز جهاني به آموزش
را نمايانگر می‌کند. با يادگيري الکترونيکي امكان «يادگيري بدون محدوديت زماني و مکانی و صرف هزينه» متناسب با نيازهاي بشر فراهم مي‌شود. در زیر به معرفی چند سایت ازشمند جهانی می‌پردازیم: سايت ايراني Motamem : محلي براي توسعه دانش و مهارت هاي فردي :‌ www.motamem.org سايت Lynda: وب سايتي که بيش از 4 ميليون نفر در آن مشغول گذارندن دوره هاي آموزشي هستند : www.lynda.com سايت Creative Live: با کلاس هاي رايگان آنلاين خلاقيت را در خود پرورش دهيد : www.creativelive.com سايت Mind Tools : محلي براي يادگيري مهارت هاي مديريتي : www.mindtools.com سايت Codecademy: در اين مدرسه آنلاين مي توانيد کار با java ،  Python ، PHP و... را ياد بگيريد : www.codecademy.com سايت edX: وب سايتي شامل دوره هاي آنلاين برنامه نويسي : www.edx.org سايت Platzi: با آموزش هاي اين وب سايت در بازاريابي، کدنويسي،توسعه اپليکيشن و طراحي حرفه اي شويد : www.platzi.com سايت Guides.co: منبعي کامل از نکته ها و توصيه ها در مورد هر موضوعي که فکرش را بکنيد : www.guides.co سايت Udacity: در دوره هاي رايگان آنلاين و با تدريس سباستين تران، کدنويسي را بياموزيد : www.udacity.com سايت Zidbits: محلي براي دسترسي به مقالات جالب و اخبار و حقايق عجيب : www.zidbits.com سايت TED Ed:مجموعه اي از آموزش هاي ارزشمند در موضوعات متنوع : www.ed.ted.com سايت iTunes U: دانشگاه هاي برتري مانند هاروارد و يل پادکست هاي کلاس هاي خود را در اينجا به اشتراک ميگذارند : www.apple.com/education سايت MIT open courseware: براي يادگيري مقدمات کدنويسي با دانشگاه MIT همراه شويد : ocw.mit.edu سايت WonderHowTo: اين سايت هر روز ويديوهاي جديدي براي يادگيري نحوه انجام کارهاي مختلف منتشر ميکند : www.wonderhowto.com سايت One Month: در مدت يک ماه يک مهارت جديد بياموزيد : www.onemonth.com سايت Duolingo: سايت آموزش زبان کاملا رايگان : www.duolingo.com سايت Squareknot: خلاقيت هم قابل يادگيري است : www.squareknot.com سايت Spreeder: تندخواني را در اين سايت بياموزيد : www.spreeder.com سايت Memrise: دانش لغات خود را بيشتر کنيد : www.memrise.com سايت HTML5Rocks: حرفه اي هاي گوگل آخرين به روزرساني ها، راهنمايي منابع و ساير اطلاعات مربوط به HTML5 را با شما به اشتراک ميگذارند : www.html5rocks.com سايت Wikipedia'Daily Article List: مقالات ويکيپديا را روزانه در ايميل خود دريافت کنيد : lists.wikimedia.org سايت DataMokey: در اين سايت SQL و Excel را بياموزيد : www.datamonkey.org سايت Saylor Academy: با دوره هاي آنلاين اين سايت ارايه مطلب و سخنراني را بياموزيد : www.saylor.org سايت Learni.st: دوره هاي حرفه اي با محتواي ويژه از عکاسي تا وبلاگ نويسي : www.crunchbase.com/organization/learnist سايت Academic Earth: دوره هاي پيشرفته دانشگاهي از سال 2009 تا کنون در اين سايت در دسترس هستند : academicearth.org
 

خلاصه‌‌ای از رویداد نشست 2018 زبان ++C

دو هفته پیش، نشست ۲۰۱۸ سی‌پلاس‌پلاس آغاز شد. شرکت کننده‌ها مدال‌های خودشان را دریافت کردند چرا که همه‌ چیز با هماهنگی بسیار خوبی به پایان رسید. این رویداد به عنوان یکی از چندین رویداد مهمC++ بشمار می‌رود که هرساله توسط حامیان و علاقه‌مندانش برگزار می‌شود.   سخنان کلیدی امسال در این رویداد سه یادداشت کلیدی وجود داشت، که با حضور Andrei Alexandrescu ،Lisa Lippincott و Nicolai Josuttis ارائه شد. اولین سخنران Andrei Alexandrescu بود، او این کنفرانس را با افکار و اندیشه‌های خودش برای شروع آغاز کرد عنوان موضوع آن به بَد بودنِ کپی constexpr از static if اشاره می‌کرد. او یک سخنران سرگرم کننده است، بنابراین سخنرانی او بسیار طبیعی در مورد یادداشت‌های خودش منعکس می‌شد. همچنین او به عنوان یک توسعه‌دهنده‌ی ++C به نقاط بسیاری اشاره کرد که کمیته‌ی استاندارد سازی زبان حرف‌های او را تایید می‌کرد. سخنران دوم Lisa Lippincott روز دوم را با یک سخنرانی آغاز کرد که دیدگاه‌های مختلفی در مورد محاسبات و منطق که در آن به کار می‌رود ارائه داد. زمانی که مُجری لیزا را دعوت کرد، می‌دانست که این موضوع به عنوان یک نکته مهم برای فکر کردن است، چیزی که همه نمی‌توانند به طور مستقیم آن را درک کنند و به آن دسترسی پیدا کنند. اما این تلنگری برای نحوه‌ی درک کُد از دیدگاه ریاضی و دیدگاه جدیدی بود. سخنران سوم و آخر Nicolai Josuttis بود که در مورد، او اولین سخنران در نشست Hartmut Kaiser در سال ۲۰۱۴ بود. در آن سخنرانی بسیار خوب درخشیده، بنابراین در قسمت سوم نقص‌هایی را با جزئیات در مورد نقاط خشن ++C نشان داد. این سخنرانی بسیار صادقانه بود! چرا که بسیاری از جزئیات خشن بودن سی‌پلاس‌پلاس را عنوان کرد که همگی با آن موافق بودند.   مذاکرات، مسابقه و گفتگوها‌ی چند دقیقه‌ای جلسات و رویداد‌های مرتبط با ++C همیشه گفتگو‌های بسیار خوبی دارد، و با یک مسیر مشخص که هدفش آوردن سخنرانان جدید با دیدگاه‌های جدید است برگزار می‌شود. بازخورد سخنران‌ها در این رویداد خوب بود چرا که به برخی از نکات در مورد چگونگی بهبود‌ها اشاره کردند. تصویر بالا مربوط به Hana Dusíková است که می‌توان به آن بهترین نمره را داد. بهترین سخنرانی هم مربوط به  Andrei Alexandrescu بود که دنبال شد. در اولین عصر این رویداد، امتحان (Quiz) برجسته‌ترین مورد رویداد در آن روز بود. سازماندهی آن توسط Diego  و اسپانسری آن توسط Conan است که برای چند سال اخیر حمایت شده است. به نظر می‌رسید که سوالات امتحانی این سال سخت‌تر از سوالات رویداد قبلی در سال گذشته بوده است. اما بار دیگر این سرگرمی ترکیب بسیار خوبی با ترس از سی‌++ را داشت. هر یک از سوالات امتحانی یک خروجی از کُد را تولید می‌کردند، که هر گروه باید برای کسب امتیاز آن را می‌نوشتند. ده نوع کُد امتحانی وجود داشت که تهیه کننده‌ی گزارش برای به تصویر کشیدن آن‌ها زیاد خوب عمل نکرده است. بنابراین تصویر زیر مربوط به سوالات چالشی در مورد سی‌پلاس‌پلاس است: گفتگو‌های کوتاه در طی جلسات سی‌پلاس‌پلاس صورت می‌گیرد. اما در سال‌های گذشته روش به گونه‌ای تغییر یافته است که سوالات پرسیده شده باید با گفتگو‌ها و سوالات دیگر رقایبت می‌کردند. با این حال این یک قالب و روش جالبی بود که نتیجه‌ی موفقیت آمیزی را داشت. همه‌ی شرکت کننده‌ها می‌توانستند این سوالات رو ببینند و در مورد آن‌ها تفکر کرده و پاسخ دهند. نکته: شما می‌توانید تصاویر ویدیویی مربوط به این رویداد را از کانال رسمی آن در یوتیوب دریافت کنید.  
 

استفاده از تکنیک بازتاب در ++C با کتابخانه RTTR

با سلام  هدف از تدوین این مقاله نحوه استفاده از مفاهیم بازتاب (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); برای کسب اطلاعات بیشتر می توانید درباره مفاهیم بازتاب در برنامه نویسی های شی گرا مطالعه داشته باشید.

فرهاد شیری

فرهاد شیری

 

توکِن JWT چیست و چه کاربردی دارد؟

ما به شما پیشنهاد می‌کنیم که درباره‌ی انتقال ایمن اطلاعات توسط JSon Web Token بیشتر بدانید. یک وب‌توکت از نوع جی‌سان (JWT) یک استاندارد باز از (RFC7519) می‌باشد که که یک روش جمع‌ و جور و خود مختار را برای ایمنی اطلاعات بین ترنسفر اطلاعات در JSon را تعریف می‌کند. این اطلاعات به عنوان اطلاعات مورد اعتماد قابل تایید می‌باشند زیرا آن‌ها امضای دیجیتالی شده‌اند. تراکنش‌های مربوط به  JWT را می‌توان با استفاده از یک کلید مخفی عمومی/خصوصی امضا کرد. ساختار وب‌توکن جی‌سان چکونه است؟ Header Payload Signature هدر یا عنوان (Header) معمولاً شامل دو قسمت است: نوع توکن، که JWT است، و الگوریتم هَش کننده که استفاده می‌شود. مانند الگوریتم‌های HMAC ،SHA256 و یا RSA. برای مثال: { "alg": "HS256", "typ": "JWT" } سپس، این جی‌سان که از نوع Base64-URL کد نگاری شده است قسمت اول JWT را تشکیل می‌دهد.   بخش دوم Payload قسمت دوم توکن ها، payload است که اظهارات را در برمی‌گیرد. اظهارات ثبت شده (Registered claims): این‌ها مجموعه‌ای از اظهارات از پیش تعریف شده است که اجباری در به کار گیری آن‌ها نیست، اما توصیه می‌شود تا مجموعه‌ی مفیدی را ارائه دهد. اظهارات عمومی(Public claims): اینها می‌توانند توسط کسانی که از JWT استفاده می‌کنند تعریف کنند. اما برای جلوگیری از برخورد بهتر است تعریف شوند. اظهارات خصوصی(Private claims): این اظهارات سفارشی ایجاد شده برای به اشتراک گذاشتن اطلاعات بین طرفین است که توافق بر روی استفاده از آن‌ها می‌باشد نه اظهارات ثبت شده یا عمومی. یک مثال از payload به صورت زیر نشان داده شده است: { "sub": "1234567890", "name": "John Doe", "admin": true } امضاء برای ایجاد بخش امضاء شما باید هدر کُد شده را جهت امضا شدن دریافت کنید که شامل payload رمزینه شده، یک کد خاص و الگوریتم مشخص شده‌ای می‌باشد. HMACSHA256( base64UrlEncode(header) + "." + base64UrlEncode(payload), secret) سپس، شما باید همه‌ی این‌ها را باهم دیگر ترکیب کنید. نمونه‌ی زیر یک JWT را نشان می‌دهد که حاوی هدر‌ قبلی و payload رمز شده است که در نهایت آن با یک رمز ویژه امضاء شده است. اگر شما می‌خواهید تا با JWT بیبشتر آشنا شوید و این مفاهیم را در عمل اجرا کنید، می‌توانید از jwt.io استفاده کنید.
 

تکنولوژی REST

تکنولوژی 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‌ در زبان سی پلاس پلاس نیز به طور مجزا به این مقاله اضافه خواهد شد. 
×