هنگامی که نتایج را بررسی می کنید ، شما در می یابید که افراد بسیارموفق با استعداد تر و با هوش تر از شما نیستند؛ بلکه به سادگی آموخته اند که چگونه کارهای خود را به روشی متفاوت تر و سود آورتر انجام دهند.
در اینجا یک لیست جامع از ایده های عملی مشتریان موفق ، همراه با راهنمایی ها و تکنیک هایی ارائه شده که راه کسب و کار شما را از بقیه جدا و از آن یک تجربه موفق ایجاد می کند.
قسمت اول
تجزیه و تحلیل مشتری:
منبع: طراحی سایت
یکی از سوالاتی که از طرف افرادی که تصمیم دارند وارد حرفه طراحی وب بشوند زیاد پرسیده می شود این است که آیا می توان به طراحی سایت به عنوان یک شغل با درآمد مناسب نگاه کرد؟ آیا ارزش دارد ماهها وقت بگذاریم و کدنویسی و برنامه نویسی و فتوشاپ و تکنیکهای مختلف طراحی را یاد بگیریم؟ اصولا درآمد یک طراح وب در ایران چقدر است؟
طبعا یکی از راحتترین پاسخها نیز این است که بستگی به خودتان و پشتکارتان دارد! اما اگر بخواهیم دقیقتر شویم، شغل طراحی وب ویژگیهایی دارد که آنرا از بسیاری شغلهای دیگر متمایز می کند. اینجا به چند مورد به صورت خلاصه اشاره می کنیم:
اما شغل طراحی وبسایت ویژگیهای منحصر به فرد دیگری نیز دارد که اینها بازدهی و سود این حرفه را بیشتر می کنند.
اینها تجربیاتی بود که شخصا طی سالها سابقه طراحی وب به دست آورده ام و سعی کردم نه خیلی آرمانی باشد و نه خیلی بدبینانه. اگر این مطلب به درد شما خورد، می توانید با یکی از این شیوه ها جبران کنید: لینک دادن به این وبلاگ، به اشتراک گذاشتن این مطلب، و کامنت گذاشتن! مرسی.
منبع: طراحی سایت
طراحی فوتر سایت به سبک Web 2.0
فوتر (Footer) در طراحی وب معمولا به پایین ترین بخش یک صفحه وب گفته می شود. در طراحی های قدیمی فوتر تنها جایگاهی بود که کپی رایت سایت و حداکثر لینکهای بخشهای اصلی سایت به همراه لینکهایی نظیر نقشه سایت (Site Map) و قوانین استفاده (Terms of Services) و... نمایش داده می شد.
اما فوتر سایت ها در طراحی به سبک Web 2.0 یا نسل دوم وب، از حالت بسیار خلاصه و حاشیه ای، به یکی از المانهای اصلی صفحه تبدیل شده است. اینگونه فوترها که معمولا با بک گراندی تیره تر از بدنه اصلی سایت و یا به گونه ای متمایز از ساختار هستند، ممکن است شامل باکسهای بزرگی از فرمها، لینکها، پیشنهادات خاص، باکس فیس بوک، و... باشند.
دلیل پیدایش این سبک فوترها، تعامل بیشتر با کاربر است هنگامی که بازدید کننده به انتهای صفحه رسیده و احتمال رفتن ماوس به سمت "محدوده مرگ!" یا همان کلید ضربدر بیشتر از همیشه است.
اینجا نمونه هایی از فوترهای عریض و طویل وب دویی را می توانید ببینید.
منبع: طراحی سایت
هدف این مقاله معرفی راه حل جاوااسکریپتی برای مسأله برج هانوی می باشد. در مسأله برج هانوی شما باید تعدادی دیسک را از یک برج به برج دیگر انتقال دهید بدون اینکه حلقه بزرگتر روی حلقه کوچکتر قرار گیرد. این مسأله یک الگوریتم بازگشتی دارد.
ورودی الگوریتم چهار پارامتر عددی زیر می باشد:
1.n: تعداد دیسکها
2.from: برجی که دیسکها برروی آن قرار دارند.
3.to: برجی که دیسکها باید بر روی آن قرار گیرند.
4.via: برجی که بعنوان واسط بین دو برج from و to عمل می کند.
بطور معمول (اگر برجها را 0،1و2 نامگذاری کنیم) ، صدا زدن اولیه برای n دیسک به این صورت می باشد : (Hanoi(n,0,1,2 .
یک الگوریتم بازگشتی سعی می کند که مسأله را به مسأله های کوچکتری تبدیل کند(نمونه هایی از مسأله اصلی ولی با اندازه کوچکتر) سپس راه حل مسأله بزرگتر را با استفاده از رها حل مسأله کوچکتر پیدا کند. الگوریتم بازگشتی برج هانوی بر پایه این مشاهده واقع شده که n -1 دیسک بالایی از برج from (به همراه دو برج دیگر) مسآله کوچکتری از مسآله اصلی است و بنابراین می تواند با صدا زدن( Hanoi(n-1, 0,1,2 حل شود. اینکار دیسک ها را به برج وسط (1) با استفاده از برج واسط (2) انتقال می دهد. بعد از این ما می توانیم با صدا زدن Hanoi(n-1,1,2,0) ، n امین دیسک را از برج 0 به برج 2 انتقال داده و سپس تمام n-1 دیسک از برج وسط را با استفاده از برج 0 به آخرین برج انتقال دهیم .
معمولاً کد انیمیشن می تواند از توابع جاوااسکریپتی ()setInterval یا ()setTimeout استفاده کند اما اینکا چندان ساده نیست. فرض کنید در کد بالا، تابع ()moveDisk با استفاده از ()setInterval صدازده شده است. یک مشکل بوجود می آید زیرا کدی که تابع را صدا زده به اجرا شدن ادامه می دهد و با انیمیشن تداخل پیدا می کند. یک راه حل اینست که اجرای کد تا کامل شدن اجرای انیمیشن به خواب رود اما جاوااسکریپت یک مکانیزم تأخیر واقعی ندارد.
به نظر می رسد که انیمیشن های جاوااسکریپت از این الگو تبعیت می کنند : اگر انیمیشن را شروع کردی دیگر هیچ کاری نکن.
برای الگوریتم برج هانوی می خواهیم تابع ()moveDisk را صدا بزنیم و انیمیشن را اجرا کنیم و منتظر شویم تا ()moveDisk بعدی صدازده شود و انیمیشن را اجرا کنیم و به همین ترتیب. اما با انیمیشن جاوااسکریپت ما مجبوریم که الگوی زیر را نبال کنیم: ()moveDisk را اجرا کن، ()moveDisk بعدی را اجرا کن و به همین ترتیب. به عبارت دیگر هر اجرای ()moveDisk هنگامی که کامل شد باید صداکننده ()moveDisk بعدی باشد. برای پیاده سازی این سناریو از stack استفاده می کنیم. استفاده از استک ترتیب اجرای()moveDisk را حفظ می کند.
کد زیر پیاده سازی استک را نشان می دهد:
بعد از صدازدن Hanoi() ، callStack یک ورودی برای هر ()moveDisk خواهد داشت. پردازش این ورودی ها بر عهده تابع ()moveDisk می باشد. این تابع یک ورودی از callStack برمی دارد و یک شیء به نام moveInfo برای ارسال اطلاعات به تابع ()animateMove می سازد. انیمیشن با کد ;(myTimer = setInterval(animateMove,speed); شروع می شود.
کد زیر مربوط به تابع ()animateMove می باشد:
تابع ()animateMove یک دیسک را به بالا سپس راست یا چپ سپس پایین حرکت می دهد و در آخر ()moveDisk بعدی را صدا می زند. توجه کنید که قبل از صدازدن()moveDisk تایمر با استفاده از کد (clearInterval(myTimer کنسل شده است تا از استفاده نادرست این تابع از شیء moveInfo اجتناب شود.