Adche group vision

شش درس در کالبد شکافی شکست یک پروژه

توسط | مقالات فنی | ۸ نظر

مشغول دویدن معمول روی تردمیل بودم که به فکر فرو رفتم. خاطرات پروژه‌ی «ادچه» در خاطرم زنده شد که این روزها اثری از آن باقی نمانده است. دیدم که این روزها بسیاری از آنچه در رویدادها میشنویم، داستان های موفقیت است و داستان‌های شکست کمتر گفته و شنیده میشود. در داستان‌های گذشته، اهمیت نوشتن این مقاله و چگونگی آن غرق شدم به طوری که رکورد دویدنم را زدم و وقتی به خودم آمدم ۲۰ دقیقه دویده بودم.

سابقه

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

Adche postmortem ادچه

ماجرای ادچه چه بود؟

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

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

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

درس ۱- درس های قبلیتان را دوره کنید!

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

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

درس ۲ – اعتماد به نفس یک موفقیت، به جای خوش‌بینی باید دقت به ارمغان بیاورد.

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

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

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

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

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

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

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

درس ۳ – یک هدف و آینده‌ی مشترک و کوچک، بهتر از صدها هدف بزرگ غیر مشترک در ذهن افراد است.

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

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

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

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

درس ۴ – انتخاب شریک، اگر سخت تر از انتخاب همسر نباشد، آسان تر نیست

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

درس ۵ – تصمیمات جدی و قراردادهای کاری‌تان را مستند کنید.

Adche Cofounder ادچه

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

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

درس ۶ – نشانه‌های مشکل ارتباطی در تیم را خوش بینانه تفسیر نکنید.

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

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

فصل

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

بهینه‌سازی کد لوآ

نکاتی برای بهینه‌سازی عملکرد کد در لوآ

توسط | مقالات فنی | ۶ نظر

لوآ۱ بخش زیادی از محبوبیت و شهرت خود را مدیون عملکرد و کارایی خود است تا جایی که خیلی از زبان‌های اسکریپت‌نویسی دیگر برای معرفی خود از عبارت “سریع و کارا مانند لوآ” استفاده می‌کنند. با این حال، کارایی یکی از المان‌های مهم برنامه‌نویسی است که هنگام کار با زبان لوآ هم باید به آن توجه کرد. « آیا عملکرد برنامه‌ی من نیاز به بهینه‌سازی دارد؟ » اولین سوالی است که ذهن برنامه‌نویس را در خصوص بهینه‌سازی عملکرد به خود مشغول می‌کند. اگر جواب این سوال مثبت باشد سوال بعدی و کلیدی که مطرح می‌شود این است : « کجای برنامه‌ی من نیاز به بهینه‌سازی عملکرد دارد؟ ». برای زبان لوآ، افراد متعددی روی بهبود عملکرد برنامه‌ها و ابزار‌های اندازه‌گیری آن تمرکز داشته‌اند و با توجه به نتایج بدست‌ آمده، نکاتی را برای بهبود عملکرد برنامه‌های نوشته شده با لوآ پیشنهاد می کنند. در این نوشته سعی دارم بخشی از این نکات را با شما به اشتراک بگذارم.

استفاده از متغیر‌های محلی

پیش‌کامپایلر۲ لوآ با توجه به داشتن ثبات‌۳های زیاد می‌تواند تمام متغیر‌های محلی۴ را در ثبات‌های خود نگه دارد. به همین دلیل، دسترسی به متغیر‌های محلی در لوآ بسیار سریع است. برای نمونه فرض کنید متغیر‌های a و b محلی هستند. یک گزاره مانند a = a + b ، دستورالعمل زیر را تولید می‌کند:

حال اگر دو متغیر سراسری۵ باشند، کد برای یک عمل جمع ساده به صورت زیر خواهد بود:

 

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

در کد بالا ،با یک تغییر ساده و استفاده از متغیر محلی برای تابع محاسبه سینوس می توان تا ۳۰ درصد سرعت اجرا را افزایش داد:
 

در هر حال ممکن است شما در کد خود به متغیر‌های سراسری نیاز داشته باشید. در این‌صورت حتماً هر جا که دیگر نیازی به آن‌ها نداشتید آن‌ها را با nil مقدار‌دهی کنید تا به زباله۶ تبدیل شوند زیرا زباله جمع‌کن۷ در زبان لوآ، متغیر‌های سراسری را به عنوان زباله نمی‌شناسد.

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

زبان لوآ برای کار با جداول۸، توابعی را پیش بینی کرده است. یکی از این توابع، تابع insert است که برای اضافه کردن المان جدید به جدول استفاده می‌شود. ابزار‌های اندازه‌گیری مختلف نشان داده‌اند که استفاده دستورات کوتاه درون خطی در تعداد بالا معمولا عملکرد بهتری نسبت به تابع از پیش تعیین شده برای اضافه کردن عضو به جدول دارند زیرا دستورات درون خطی معمولاً عملگرهای زبان لوآ هستند و بار زیادی را ایجاد نمی کنند. در حالی که استفاده از تابع insert در ساده ترین حالت، نیاز به دسترسی به ماژول table و سپس فراخوانی تابع insert از این ماژول و محیط آن دارد. به دو نمونه کد زیر توجه کنید:

 
 

کد دوم، عملکرد بهتر و سریعتری نسبت به کد اول دارد. لازم به ذکر است که کد بالا را می توان با استفاده از یک عملگر ساده‌تر نسبت به #، به حالت بهینه‌تری بازنویسی کرد:

 

ملاحظات در عملگر ها و توابع ریاضی

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

 

عملگر ضرب از عمگر توان هم کارا‌تر است. در توان‌های پایین می توان از ضرب استفاده کرد:

 

سخن آخر

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


۱ – Lua
۲ – Pre-Compiler
۳ – Register
۴ – Local Variables
۵ – Global Variables
۶ – Garbage
۷ – Garbage Collector
۸ – Tables
۹ – Lua Programming Gems, edited by L. H. de Figueiredo, W. Celes, R. Ierusalimschy

 

 

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

معرفی سامانه‌ی مور – رتبه‌بندی متخصصان ایرانی در لینکدین

توسط | خبرها | نظری داده نشده.

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

سینا بهارلویی، یکی از اعضای چابک تاد اقدام به راه اندازی سیستمی نموده است که اطلاعات حساب‌های لیندکین را در یک مکان جمع آوری می‌کند و میتوانید متخصصان یک حوزه را بر اساس میزان تخصصشان، بیابید. با استفاده از «مور» متخصصان میتوانند با همکاران جدید و کارفرمایان میتوانند با افراد جدیدی که با مجموعه شان همخوانی دارند آشنا شده و تماس بگیرند. مور اطلاعات خود را از صفحه‌ی عمومی پروفایل کاربران در لینکدین جمع آوری می‌کند و بر روی تخصص‌های Endorse شده تمرکز می‌کند. این سامانه در حال حاضر به صورت آزمایشی راه اندازی شده است و نیازمند نظرات شما برای ارتقا می‌باشد. در صورت نیاز با ایمیل moor@todco.ir در ارتباط باشید.

http://moor.todco.ir

loading-bg-ol77d

نسخه ی آزمایشی «پرسیتی» منتشر شد!

توسط | خبرها | نظری داده نشده.

بازی زیبای پرسیتی (شکوه شهر پارسی)

تهران، ۱۵ اسفند ۱۳۹۴ – پرسیتی (Per.City)، دومین محصول استودیوی بازی‌سازی تاد (تولید کننده‌ی بازی فروت کرفت)، در کافه بازار برای دستگاه‌های اندرویدی منتشر شد.
پرسیتی یک بازی تفننی در سبک شهرسازی است که شما را به دوران هخامنشی برای زنده کردن پادشاهی پدریتان میبرد. عمق زیاد در محتوا و جریان بازی از طرفی و کیفیت طراحی المان‌های گرافیکی از سوی دیگر پرسیتی را نسبت به دیگر بازی های ایرانی متمایز میکند. از برداشت گندم، تولید آرد و پخت نان تا ساخت یک عمارت بزرگ همه و همه به دست بازیکنان سپرده شده است تا تجربه‌ی اداره و مدیریت دهکده فعلی و شهر آینده خود را داشته باشند و توسعه‌ی اقتصادی و تجارت را تجربه کنند.

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

پرسیتی را از کافه بازار دریافت کنید.
سایت بازی: http://per.city
کانال تلگرام: https://telegram.me/percity
ایمیل: hello [at] per [dot] city

multiplatform-banner-2

از چه ابزاری برای تولید برنامه موبایل استفاده کنیم؟

توسط | مقالات فنی | ۹ نظر

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

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

سهم آندروید و آی-او-اس و ویندوزفون در بازار

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

چه ابزارهای استانداردی عرضه شده است؟

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

سیستم عامل محیط توسعه زبان برنامه نویسی سایت رسمی توسعه دهندگان
آندروید Android Studio یا Eclipse Java developer.android.com
iOS Xcode Objective-C یا Swift developer.apple.com
ویندوزفون Visual Studio  عموما #C dev.windows.com 

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

چه ابزارهایی برای خروجی همزمان روی چند پلت‌فرم وجود دارد؟

ابزارهای تولید نرم افزار موبایل برای چند پلت فرم Xamarin Appcelerator

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

۱- ابزارهای ترکیبی (Hybrid) با استفاده از HTML5 و Adobe Air

با ورود HTML5 و پشتیبانی مرورگرهای موبایل از این استاندارد، و از طرفی معرفی Adobe Air برای موبایل، این ابزارها تلاش نموده اند تا با استفاده از همان تکنولوژی هایی که بر روی مرورگرها وجود دارد یعنی HTML, Flash, CSS و JavaScript برنامه هایی طراحی کنند که به دلیل استاندارد بودن نحوه نمایش صفحات طراحی شده با HTML5، این صفحات بر روی دستگاه های مختلف به یک شکل و به صورت همزمان قابل مشاهده خواهند بود. این ابزارها حتی با پیوند زدن Javascript با امکانات بومی دستگاه، امکان استفاده از امکانات دستگاه مانند دوربین، موقعیت مکانی GPS و امکانات ارتباطی ایمیل و پیامک را به برنامه‌های نوشته شده می‌دهند. نمونه‌های موجود عبارتند از:

ردیف نام لینک
۱ Sencha Touch https://www.sencha.com/products/touch
۲ PhoneGap http://phonegap.com
۳ SAP http://go.sap.com/developer.html
۴ Kony http://www.kony.com/products/mobilefabric
۵ Adobe Air  http://www.adobe.com/devnet/devices.html

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

از آنجایی که اکثر پلت فرمهای موجود بر پایه HTML5 یا Flash (به استثنای Starling) از امکانات افزایش سرعت سخت‌افزاری استفاده نمیکنند، معمولا عملکرد کند تری نسبت به برنامه های معمول دارند و برای برنامه هایی که نیاز به Performance بالا دارند مناسب نیستند. به همین جهت در حال حاضر اکثر برنامه های تولید شده توسط این ابزارها، شامل نمایش محتوا و یا پر کردن فرم های درخواست می‌شود.

۲- ابزارهایی که خروجی بومی می‌دهند

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

Xamarin تلاش می‌کند تا از چارچوب .NET استفاده کرده و زبان برنامه نویسی مشترکی بین دو پلت فرم آندروید و آی-او-اس ایجاد نماید تا توسعه دهندگان به جای یادگیری دو زبان برنامه نویسی Java و Objective-C به صورت مشترک با زبان #C اقدام به نوشتن برنامه‌های خود کنند. بنابراین به صورت عمده بهره‌ای که در استفاده از این ابزار گرفته می‌شود، این است که هنگام ساخت نرم افزارهای آی-او-اس، توابع و کتابخانه‌های ارایه شده توسط شرکت اپل در زبان #C قابل دسترسی و اجرا می‌شوند. به عنوان مثال برای نمایش یک پیام به کاربر (Alert View) قطعه کدهای زیر را مشاهده کنید:

Objective-C (iOS)
 Xamarin C# (iOS)
Java (Android)
Xamarin C# (Android)

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

۳- چارچوب‌های ساخت بازی

بازی ها به دلیل ماهیت شان و اینکه به المان های سیستم عامل وابستگی چندانی ندارند، بهترین گزینه برای خروجی گرفتن همزمان بر روی چند پلت فرم هستند. تکنولوژی های مورد نیاز برای بازی های دو بعدی و سه بعدی در موبایل اکثرا در انتها به استفاده از OpenGL باز میگردد که API های مشابه و مستقل از سخت افزار اکثر آن را تشکیل می‌دهد. به همین دلیل ابزارهای خروجی همزمان بسیار در این زمینه موفق عمل کرده اند و موتورهایی نظیر Unity و UDK در سال های اخیر توسط بسیاری از توسعه دهندگان بازی های مستقل (Indie) مورد استفاده قرار گرفته است. تعدادی از موتورهای بازی سازی با امکان خروجی همزمان در فهرست زیر معرفی شده اند:

نام زبان برنامه نویسی توضیحات
۱ Unity #C مناسب برای بازی‌های دوبعدی و سه بعدی
http://www.unity3d.com
۲ UDK UnrealScript مناسب برای بازی‌های سه بعدی

http://www.unrealengine.com

۳ CryEngine  Lua مناسب برای بازی های سه بعدی با امکان خروجی برای کنسولها و PC

http://www.crytek.com/cryengine

۴ GameMaker  GML http://www.yoyogames.com
۵ Cocos2d-X  Lua, C++, JS مناسب برای بازی های دوبعدی و موبایل

http://www.cocos2d-x.org

۶ Corona SDK  Lua

مناسب برای بازی های دوبعدی و موبایل

رایگان، نسخه فروشی در صورت نیاز به افزودن کتابخانه‌های بومی

https://coronalabs.com/products/corona-sdk

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

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

اگر بازی تولید میکنید: قطعا استفاده کنید! چارچوب های تولید برنامه برای چند پلت فرم در تمام آنها عملکرد بسیار مشابه دارند و با تغییرات اندکی می‌توانید برای هر پلت فرم خروجی مورد نظر خود را بگیرید. اگر بازی خود را با Android-SDK شرکت گوگل تولید کنید، برای iOS مجبور خواهید بود بسیاری از ساختارها رابازنویسی کنید اما استفاده از چارچوب های خروجی همزمان و موتورهای بازی مانند Unity به شما کمک میکند با کمترین تغییرات بازی خود را برای پلت دوم و سومی خروجی بگیرید.

اگر یک اپ ساده برای ارایه محتوا تولید می‌کنید: از چارچوب‌های خروجی همزمان با HTML5 استفاده کنید. این چارچوب‌ها ارایه‌ی محتوا را بسیار ساده کرده‌اند و محتوای شما به یک شکل در پلت فرم‌های مختلف دیده می‌شود. اگر با ActionScript یا فلش از قبل آشنا هستید، Adobe Air گزینه خوبی برای شماست.

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

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

بخش پنهان و خاموش برنامه های موبایل را فراموش نکنیم!

بسیاری از بازی ها وبرنامه هایی که امروزه استفاده میکنیم، اطلاعات را در خود دستگاه ذخیره نمیکنند بلکه با یک ارتباط اینترنتی خدمات را ارایه میدهند و پشت صحنه‌ی آنها، یک سرور مرکزی برای جمع آوری، نگهداری و تحویل اطلاعات وجود دارد. این مقاله به تکنولوژی های مربوط به نوشتن برنامه‌ی موبایل یا Client پرداخته است، اما اگر سیستمی که به دنبال پیاده سازی آن هستید نیاز به بخش Server دارد، می‌بایست تکنولوژی های سمت وب از جمله PHP، ASP.NET و Ruby و یا Python را هم بررسی کنید که عموما برای تولید سرویس دهنده ها مورد استفاده قرار میگیرند.

AAEAAQAAAAAAAAbRAAAAJGZkNDVmNmM5LThkZjAtNDQ1Zi05MTcxLTY4MjhmMGM1NWQ0NA

Gauge yourself as a leader

توسط | مقالات فنی | نظری داده نشده.

An effective leader is someone who empowers followers to make visions into reality.

Leading is a responsibility, and the effectiveness of this responsibility is reflected in the attitude of those being led. These attitudes consist of four dimensions which make up empowerment.

I’ve extracted a few key points from one of my favourite books ‘Leaders – by Warren G Bennis & Burt Nanus’, that clarifies this subject whigh can provide you with the key points that you need to pay attention to when evaluating your effectiveness as a leader.

۱- Significance:
When people feel that they are making a difference in the organisation or the outside world (in most cases customers). Effective leaders are able to create a vision that gives followers the feeling of being at the heart of things and that what they do has effect on somebody or something. In short, that they are in some way significant. Being able to create a compelling vision and communicating it along with communicating each person’s role in making that vision into reality are key here.

۲- Competence:
Meaning development and learning on the job. The feeling that you are learning something, gaining mastery over your job and improving your performance. Employee growth/training programs, regular feedback are key here.

۳- Community:
A feeling of family, joined in some common purpose. This doesn’t necessarily mean liking one another, but rather a sense of reliance on one another toward a common cause.

۴- Enjoyment or fun:
Through empowerment workers seem to get so immersed in their game of work that they forget basic needs for long periods of time. This fun doesn’t mean playing foosball in the office, but rather from enjoyment of doing the work itself. See here for more on this.

For the third and fourth one its easy to identify an environment with these qualities, but a bit harder to consciously create. In my experience this can be done through providing a desirable vision, focusing on performance goals and creating a collegial environment of trust and cooperation.

I would love to hear your opinions on these subjects and your ideas on how we can improve ourselves as leaders.

کاربرد رنگ در طراحی برنامک‌‌ها (اپلیکیشن‌ها)

توسط | مقالات فنی | ۴ نظر

 

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

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

تاثیر رنگ

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

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

برخی از معانی رنگها

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

 

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

 

انتخاب رنگ

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

382px-BYR_color_wheel.svg

  •  رنگ‌های متضاد (Contrasting Colors)

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

  • رنگ‌های مکمل (Complementary Colors)

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

382px-BYR_color_wheel

 

از مفهوم رنگ‌های مکمل می توان در انتخاب دسته رنگ‌های اصلی برنامه بهره‌برد، در حالیکه از رنگ‌های متضاد جهت انتخاب Accent Color استفاده می‌شود. از Accent Color جهت راهنمایی کاربر، نمایش قسمت‌های تعاملی (Interactive) مثل Slider، و در حالت کلی کمک به کاربر جهت استفاده آسان از برنامه استفاده می‌گردد.

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

اینکه رنگ‌هایی را که کنار هم قرار می‌دهیم Contrast مناسبی با یکدیگر داشته باشند اصل مهمی است که شرکت Apple روشهای مختلفی را جهت اندازه‌گیری آن ارائه می‌دهد. یک روش ساده ولی غیر‌علمی جهت ارزیابی متناسب بودن Contrast بین رنگ‌ها این است که برنامه را در شرایط مختلف نور پس‌زمینه (Background) صفحه نمایش موبایل بررسی کنید. (به عنوان مثال در حالت محیط‌باز و یا بررسی برنامه در یک روز آفتابی). به کمک این روش نواحی را که نیاز به تغییر دارند را می توان پیدا نمود اما نتیجه آن قابل اعتماد نیست. جهت تولید یک نتیجه قابل اعتماد باید نسبت روشنایی بین رنگ پس‌زمینه و رنگ Foreground را اندازه گرفت. برای اینکار می‌توان از نرم‌افزارهای آنلاین به عنوان مثال این سایت استفاده نمود و یا بصورت دستی با استفاده از فرمولی که در WCAG 2.0 ارائه شده است محاسبات را انجام داد. عدد ایده‌آل که برای داشتن Contrast مناسب پیشنهاد شده است ۴٫۵:۱ است.

اگر Accent Color که انتخاب نمودید خیلی تیره و یا خیلی روشن است و کنتراست مناسبی با رنگ پس‌زمینه انتخابی برنامه ندارد، می توان آن را با رنگی از همان طیف که روشن‌تر و یا تیره‌تر است جایگزین کرد. اگر از مجموعه رنگ‌های پیشنهادی Google استفاده می‌کنید و هیچ طیفی از Accent Color با پس‌زمینه انتخابی کنتراست درستی ندارد، می‌توانید به عنوان یک راه حل جایگزین رنگ پس زمینه را به سفید تغییر دهید و از رنگهای اصلی به عنوان Accent Color استفاده کنید. اگر رنگ پس‌زمینه از رنگ‌های اصلی انتخاب شده باشد می توان از رنگ سفید با وضوح (Opacity) به میزان ۱۰۰% و یا مشکی با میزان وضوح ۵۴% به عنوان Accent Color استفاده نمود.

49

شکل ۱

95

شکل ۲

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

استفاده از Accent Color

همانطور که ذکر شد رنگ‌ها در بهبود تجربه‌کاربری نقش مهمی را ایفا می‌کنند که یک نمونه از آن استفاده صحیح از Accent Color  است. در انتخاب Accent Color باید به این نکته توجه شود که تضاد بالایی با رنگ‌های اصلی برنامه داشته باشد. این خصوصیت Accent Color به برنامه‌نویس کمک می‌کند که قسمت‌هایی که نیاز به تعامل کاربر با برنامه دارد را بهتر مشخص نماید. در واقع از Accent Color جهت نمایش قسمت های تعاملی (Interactive) و یا حالت (State) در برنامه استفاده می‌شود. استفاده نادرست از آن سبب گمراه شدن کاربر خواهد شد، به عنوان مثال اگر در بخش‌های تعاملی و غیر تعاملی برنامه از یک رنگ استفاده شود کاربر سخت می‌تواند جایی که باید tap کند را تشخیص بدهد. (شکل ۳ استفاده درست از Accent Color و شکل ۴ استفاده نادرست از آن‌ را نمایش می دهد.)

5d505cb80e765ba450ed5dc21fad5072

شکل ۳

Capture

شکل ۴

 

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

colorwheel

شکل ۵

colorwheel_deuteranope

شکل ۶

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

به عنوان نمونه‌هایی که رنگ به بهبود روند توسعه نرم‌افزارها کمک شایانی نموده‌است می توان از امکان انتخاب رنگ پس‌زمینه در ساعات مختلف روز در نرم‌افزارهایی همانند iBooks (شکل ۷) و  Google Play Books اشاره نمود. استفاده از حالت‌های مختلف رنگ پس‌زمینه به کاربران امکان می‌دهد با وارد آمدن فشار کمتری به چشم، ساعات بیشتری را صرف مطالعه در این نرم افزارها بنمایند.

auto-night-mode-ibooks-610x542

شکل۷

 

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

جلسه بررسی تجربه کاربری تاد tod آخرین خبر

بررسی تجربه‌ی کاربری برنامه «آخرین خبر»

توسط | مقالات فنی | نظری داده نشده.

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

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

اولین برخورد

  • آیکن برنامه:
    اولین برخورد با هر برنامه‌ای آیکن برنامه است که توجه کاربر را به خودش جلب میکند. آخرین خبر یک شمایل خندان را به عنوان آیکن خود انتخاب کرده است که با اینکه حس خوبی را منتقل میکند اما درک ارتباط آن با خبر و خبررسانی برای بچه ها سخت بود. نتیجه اینکه آیکن تناسبی با کارکرد خود نرم افزار ندارد. بطوری که اگر در مرتبه اول مشاهده نام نرم افزار را در نظر نگیریم کمتر یک نرم افزار انتشار اخبار برای ما تداعی می شود.
  • صفحه خوش آمدگویی:
    صرف نظر از اینکه در روش های جدید طراحی رابط کاربری نمایش یک صفحه متفاوت از صفحه اصلی برنامه دیگر مرسوم نیست، آخرین خبر در صفحه‌ی خوش آمدگویی که نرم افزار مشغول دریافت آخرین خبرهاست، شاخک های آیکن آخرین خبر به ترتیب قرمز میشوند که نشان بدهند نرم افزار مشغول است. ذوق و سلیقه‌ی استفاده شده برای طراحی یک نشانگر فعالیت خاص (Activity Indicator) قابل تحسین است.
  • صفحه اصلی:
  • وقتی وارد نرم افزار می‌شوید با فهرستی از دسته های خبری روبرو میشوید که با توجه به اینکه از متن کمترین میزان استفاده انجام شده است و به صورت تصویری ارتباط اولیه برقرار میشود، صفحه‌ی اولیه دلچسب بوده و نشان دهنده گوناگونی محتوا در نرم افزار و امکان انتخاب دسته است. اما…
  • این طراحی گرچه برای اولین مراجعه کاربر به نرم افزار مناسب به نظر میرسد، در استفاده های متوالی به جای آنکه تمرکز نرم افزار بر روی این موضوع باشد که سریع تر کاربر را به خبرها و دسته‌ی مورد علاقه خود برساند، هر بار او را مجبور به انتخاب یک دسته میکند. روند نرم افزارها در دنیا به سمت تمرکز بر روی محتوای اصلی و به اصلاح رفتن سر اصل مطلب است که میتوان این را از به حاشیه رفتن دسته بندی در اپ استور اپل و نمایش فهرست منتخب نرم افزارها در اولین صفحه در طول تکامل این محصول فهمید.
  • یکی از اصول استفاده از متن در واسط کاربری، فراهم کردن شرایطی است که کاربر بتواند به راحتی متن نمایش داده شده را بخواند. در صفحه‌ی اولیه نرم افزار عناوین برخی بخش ها به رنگ تصویر پشت آن ها نزدیک شده است که امکان خواندن برخی از آنها را غیر ممکن میکند. بنابراین برای نمایش عناوین بر روی تصویر مناسب است که در راه حل آن و یا مکان نمایش آن تجدید نظر شود.
  • نمایش برخی تصاویر انتخاب شده با کشیدگی تصویر در طول یا عرض همراه است (عدم رعایت Aspect Ratio) که باعث خراب شدن تجربه‌ی کاربر از آن تصویر میشود. این مورد میتواند توسط تیم محتوایی با انتخاب تصاویر صحیح و یا توسط تیم فنی (مستقل محتوا) حل شده و بخشی که از تصویر نمایش با رعایت Aspect Ratio داده شود.
  • متأسفانه به دلیل اینکه نرم افزار بصورت تصادفی تصویری از خبر ها برای دسته بندی ها استفاده می کند، نمایش تصاویر غیر مرتبط بسیار ممکن می گردد. بطور مثال با زدن بر روی یکی از دسته هایی که تصویر یکی از عروسک های تلویزیونی بر روی آن قرار داشت در اولین خبر انتظار نمایش هر خبری جز نمایش خبر یکی از مقامات بلندپایه سیاسی کشور را داشتیم. پیشنهاد بچه ها استفاده از آیکون ها یا کلیپ آرت ها برای تجریه بهتر کاربری است.
  • با زدن دکمه جستجو به یک صفحه خالی می رویم. بهتر است بجای اینکار پس از جستار به صفحه نتیجه جستجو برویم
  • با زدن دکمه نشانه به صفحه خالی می رویم بهتر است هنگامی که صفحه خالی است اطلاعات مناسب جهت اضافه کردن نشانه نمایش داده شود.
  • بعضی از آیتم های منو یا اصلا کار نمی کند یا با خطا مواجه می شویم. فارغ از اینکه وجود چنین مشکلاتی در نرم افزار مناسب نیست اما وجود آن در صفحه اول تجربه ناخوشایندی به کاربر می دهد

جابجایی و مسیریابی در برنامه

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

خواندن خبر

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

سایر موارد

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

معماری قابل گسترش برای سرورهای وب

توسط | مقالات فنی | ۱۰ نظر

یادتان هست نتایج کنکور سازمان سنجش تا چند ساعت بعد از انتشار نتایج به دلیل شلوغی بیش از حد، قابل دسترس نبود؟ با وجود راه حل‌های فراوان متن باز، چرا بگذاریم چنین اتفاقی مجددا تکرار شود؟

در دنیای اینترنت، بخش اعظم خدمات وب و از طرفی پس زمینه‌ی اکثر خدمات موبایل، بر دوش وب سرور های عزیز و وب اپلیکیشن هاست. سرویس دهنده‌های وب به دلیل محبوبیت و کاربرد زیاد، برای تمامی سیستم های عامل و زبان‌های برنامه‌نویسی تولید شده‌اند. همینطور راه‌اندازی آنها بر روی رایانه‌ی شخصی شما بسیار ساده است و میتوانید تنها با نصب یک بسته‌ی نرم‌افزاری (به عنوان مثال XAMPP) مجموعه‌ی کامل و آماده‌به‌کاری را داشته باشید که شامل وب سرور Apache، زبان برنامه نویسی PHP و پایگاه داده‌ی MySQL است. اما این نصب ساده روی دستگاه شما،‌ به هیچ وجه پاسخگوی تعداد کاربر بالا برای یک سایت پر ترافیک نخواهد بود.

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

Read More

می‌خواهید از آخرین اخبار تاد مطلع باشید؟ ما را روی فیس‌بوک دنبال کنید