জাভাস্ক্রিপ্টের প্রম্পট, নিশ্চিত করুন এবং সতর্কতা "পুরানো ধাঁচের" [বন্ধ] হিসাবে বিবেচিত


21

ইদানীং আমি একটি জিমের জন্য একটি ওয়েব-ভিত্তিক ম্যানেজমেন্ট সিস্টেম বিকাশ করছি। তাদের পূর্ববর্তী অ্যাপটি ভিজ্যুয়াল বেসিকতে বিকাশ করা হয়েছিল। নতুন অ্যাপ্লিকেশনের জন্য, সমস্ত ফ্রন্ট-এন্ড স্ক্রিপ্টিং jQuery ব্যবহার করে, সার্ভারটি পিএইচপি এবং মাইএসকিউএল চালাচ্ছে ... আপনি জানেন, সাধারণ এল-সস্তারো লিনাক্স ভিত্তিক স্ট্যাক।

যাইহোক, আমি ভাবছিলাম যে আজকাল জাভাস্ক্রিপ্টের প্রম্পট, কনফার্ম এবং সতর্কতা বার্তার সংলাপগুলি এত কম কেন ব্যবহৃত হচ্ছে। মডেল উইন্ডো এবং সতর্কতা বার্তাগুলির জন্য প্রচুর jQuery প্লাগইন রয়েছে যা ভাষা ইতিমধ্যে সরবরাহ করে এমন কোনও কিছু নকল করার চেষ্টা করে এবং প্রতিটি ব্রাউজার সঠিকভাবে সমর্থন করতে বাধ্য হয়।

হস্তনির্মিত বা প্লাগইন-ভিত্তিক সমাধানগুলি জটিল ফর্ম এবং বিশেষ প্রয়োজনের জন্য ঠিক আছে, তবে আপনাকে যদি কেবল একটি একক মান জিজ্ঞাসা করতে বা রেকর্ড মোছার বিষয়টি নিশ্চিত করতে হয় তবে আপনি কেন আপনার ওয়েব অ্যাপ্লিকেশনটিতে এই ধরনের ওভারহেড যুক্ত করবেন? তদতিরিক্ত, আইওএস এবং অ্যান্ড্রয়েড যখন আপনি প্রম্পট, নিশ্চিত এবং সতর্কতা ব্যবহার করেন তখন দুর্দান্তভাবে অভিযোজিত বার্তা ডায়ালগ সরবরাহ করে।


7
"এল সস্তারো?" সত্যি? এটা কি একটু অবাস্তব নয়?
অ্যাথ্যাসার

1
আমি বিভ্রান্ত; প্রথমে আপনি বলছেন অ্যাপটি ভিজ্যুয়াল বেসিকতে বিকাশ করা হয়েছিল, তারপরে আপনি বলে সার্ভারটি পিএইচপি চলছে। তাই না?
6:51

@ ঝোকিং: মনে হচ্ছে তিনি বলেছিলেন যে পুরানো সিস্টেমটি একটি ভিবিতে লেখা একটি ডেস্কটপ অ্যাপ্লিকেশন, এবং নতুনটি (তিনি যা লিখছেন) এলএএমপি স্ট্যাকের সাহায্যে লেখা হয়েছিল is
জর্দান

তাদের আগের অ্যাপ্লিকেশনটির মতো মনে হচ্ছে ভিবিতে লেখা হয়েছিল, তিনি বর্তমানে এটির জন্য একটি ওয়েব ফ্রন্ট এন্ড তৈরি করছেন।
গ্র্যান্ডমাস্টারবি

উত্তর:


56

1. ইউএক্স: বার্তা বাক্সগুলি বেশিরভাগই খারাপ

সতর্কতা বাক্সগুলি ইউএক্স দৃষ্টিকোণ থেকে সব ক্ষেত্রেই খারাপ। ডেস্কটপ অ্যাপ্লিকেশনগুলিতে। ওয়েব অ্যাপ্লিকেশনগুলিতে সতর্কতা হিসাবে বা ইনলাইন জাভাস্ক্রিপ্ট বার্তাগুলি। সব জায়গা।

অ্যালান কুপারের দ্বারা আপনি ফেস 3 সম্পর্কে পড়তে পারেন যদি আপনি জানতে চান কেন; এটি খুব ভালভাবে ব্যাখ্যা করে যে কীভাবে এটি কর্মপ্রবাহকে বাধা দেয় এবং ব্যবহারকারীকে বিরক্ত করে এবং বর্তমান সফ্টওয়্যারটিতে উপস্থিত প্রতিটি সতর্কতা বাক্স কীভাবে গভীরভাবে ভুল । 542 পৃষ্ঠায়, "" উলফের চিৎকারে ডায়লগটি "ব্যাখ্যা করে যে সতর্কতা বাক্সগুলি নিয়মিতভাবে খারিজ করা হয়, সুতরাং তাদের মডেল পুরোপুরি নষ্ট হয়ে গেছে। বইয়ের 543 পৃষ্ঠায় তিনটি প্রধান নকশার নীতি তালিকাভুক্ত করা হয়েছে:

  • না, জিজ্ঞাসা করবেন না
  • সমস্ত ক্রিয়াকে বিপরীতমুখী করুন।
  • ব্যবহারকারীদের ভুল এড়াতে সহায়তা করতে মোডলেস প্রতিক্রিয়া সরবরাহ করুন।

তারপরে, লেখকরা কীভাবে সঠিক নকশার পদ্ধতির দ্বারা সতর্কতা বাক্সগুলি প্রতিস্থাপন করবেন তা আমাদের জানান।

প্রম্পট বার্তাগুলি কিছুটা আলাদা। এবং এখনও, তারা আপনার অ্যাপ্লিকেশনটির ব্যবহারকারীর অভিজ্ঞতা ভঙ্গ করে। আপনি যদি ব্যবহারকারীকে কিছু প্রবেশ করতে চান তবে প্রয়োজন হলে জাভাস্ক্রিপ্ট দিয়ে সজ্জিত করে একটি পাঠ্যবক্স বা টেক্সারিয়া ব্যবহার করুন। অলস হয়ে উঠবেন না, আরআইএ এবং এজেএক্স-সক্ষম অ্যাপ্লিকেশনগুলির যুগে একটি সমৃদ্ধ ইন্টারফেস সরবরাহ করুন ; সকল ক্ষেত্রে, জাভাস্ক্রিপ্ট অক্ষম থাকলে, আপনার প্রম্পট প্রদর্শিত হবে না।

ওয়েব পৃষ্ঠাগুলিতে, সতর্কতা বাক্স এবং প্রম্পট উভয়ই বেশিরভাগই বিরক্তিকর। কিছু উদাহরণ:

  1. কিছু ফোরাম আপনাকে তালিকা আইটেমগুলির জন্য অসম্পূর্ণভাবে অনুরোধ করে তালিকা তৈরি করতে দেয়। এর অর্থ হল তালিকাটি তৈরি করার সময় আপনি অনুলিপি-পেস্ট সহ পৃষ্ঠাটি নিজেই ব্যবহার করতে পারবেন না। আপনার একটি ছোট ক্ষেত্রও আছে have দীর্ঘ পাঠ সম্পর্কে কি? সাহসী এবং তির্যক সম্পর্কে কি?

  2. "আপনি যদি চালিয়ে যান, ফটোটি আপনার প্রোফাইল থেকে অবশ্যই মুছে ফেলা হবে। আপনি কি নিশ্চিত?" । অবশ্যই আমি নিশ্চিত! আমি কি অন্যথায় "আমার প্রোফাইল থেকে ফটো সরান" ক্লিক করব? আপনার ওয়েব অ্যাপটি কেন আমি এত বোকা মনে করছি? প্রকৃতপক্ষে, GMail হিসাবে গুগল অ্যাপ্লিকেশনগুলি সঠিক পন্থা দেখায়। আপনি যা খুশি তা মুছে ফেলতে, মুছতে, নষ্ট করতে পারবেন এবং আপনি যখন এটি করেন তখন অ্যাপ্লিকেশনটি একটি ছোট "পূর্বাবস্থায় ফিরিয়ে আনুন" লিঙ্কটি প্রদর্শন করে।

  3. "আপনি কি আমাদের সবচেয়ে বড় সমীক্ষা নিতে চান?" । ঠিক আছে, আসলে আমি সেখানে ছিলাম আপনার ওয়েবসাইট দেখার জন্য, তবে আপনি যেহেতু আমাকে বিরক্তিকর বার্তা দিয়ে আমাকে বিরক্ত করছেন, আমি বরং অন্য কোথাও যেতে চাই।

  4. "কপিরাইটযুক্ত ফটোগুলি সুরক্ষার জন্য ডান ক্লিকটি এই ওয়েবসাইটে অক্ষম করা আছে" । ঠিক আছে, আমি আমার মন্তব্য প্রেরণের আগে বানান পরীক্ষকের ভাষা পরিবর্তন করতে ডান ক্লিক করেছি। অবশ্যই, আমি বানান পরীক্ষা না করে এটি পাঠিয়ে দেব।

উপসংহার: ব্যবহারকারীর অভিজ্ঞতার দৃষ্টিকোণ থেকে, অ্যাপ্লিকেশনগুলি বেশিরভাগ সময় ভুলভাবে বার্তা বাক্স ব্যবহার করে।

কিন্তু অপেক্ষা করো! অনেক নিম্ন-মানের ওয়েবসাইট বিরক্তিকর সতর্কতা বাক্সগুলি প্রতিস্থাপন করে JQuery বার্তাগুলিকে একটি আধা-স্বচ্ছ ব্যাকগ্রাউন্ড দিয়ে প্রতিস্থাপিত করে যা সমস্ত পৃষ্ঠা জুড়ে covers তাই ত্রুটিগুলি রয়ে গেছে।

ওয়েল, ওয়েব অ্যাপ্লিকেশনগুলিতে মেসেজ বাক্স ব্যবহার না করার আরও একটি কারণ রয়েছে:

2. নকশা: সতর্কতা বাক্সগুলির নিজস্ব নকশা রয়েছে

আপনি কোনও সতর্কতা বাক্স ডিজাইন করতে পারবেন না। আপনি এর রঙ, আকার, ফন্ট পরিবর্তন করতে পারবেন না। এটি এটি ব্যবহারকারীর জন্য আরও বিরক্তিকর করে তোলে: আপনি একটি ওয়েব অ্যাপের সাথে কাজ করছেন এবং আপনার ওয়ার্কফ্লো এমন কোনও বার্তা দ্বারা ভেঙে গেছে যা মনে হয় কোথাও থেকে এসেছে এবং এমনকি অ্যাপটির চাক্ষুষ দিকটিও মেলে না। বোতামগুলির ভাষা ওএস / ব্রাউজারের ভাষার সাথেও মিলছে, ওয়েব অ্যাপ্লিকেশনটির সাথে নয়।

ডিজাইনারদের জন্য, জাভাস্ক্রিপ্ট বার্তা সতর্কতা বাক্সগুলির চেয়ে অনেক বেশি শক্তিশালী।

এগুলি আরও অনেক বিস্তৃত। আপনি গা bold় এবং তির্যক যুক্ত করতে পারেন, আপনি নিজের বাটনগুলি চয়ন করতে পারেন (কী সম্পর্কে: "আমরা ক্ষমা চাইছি তবে আপনি যে পাসওয়ার্ডটি লিখেছেন তা অবৈধ। [আমার পাসওয়ার্ড পুনরায় সেট করুন] [অন্য একটি চেষ্টা করুন] [বাতিল করুন]"?) ²) ²

৩. জাভাস্ক্রিপ্ট: অ্যাপ্লিকেশন প্রবাহ বন্ধ হয়ে যায়

একটি সতর্কতা বাক্স প্রদর্শন করার সময়, জাভাস্ক্রিপ্ট ব্যবহারকারী ক্লিক না করা অবধি কার্যকর করা বন্ধ করে দেয়। কোনও ওয়েবসাইটে, এটি ঠিক আছে। একটি ওয়েব অ্যাপ্লিকেশন দিয়ে, এটি প্রায়শই একটি সমস্যায় পরিণত হয়।

৪. স্যান্ডবক্স: ব্যবহারকারীকে তার কম্পিউটার পুনরায় চালু করতে বাধ্য করবেন না

ক্র্যাপি ওয়েবসাইটগুলি মনে রাখবেন যা আপনাকে অফুরন্ত সংখ্যক বার্তা বাক্স দেখায় ? পর্যাপ্ত প্রযুক্তিগত পটভূমি ব্যতীত ব্যবহারকারীদের কাজ চালিয়ে যেতে সক্ষম হওয়ার একমাত্র উপায় ছিল আসলে তাদের কম্পিউটারটি রিবুট করা। এটি আমাদের একটি সমস্যায় নিয়ে আসে: সতর্কতা বাক্সগুলি ওয়েবসাইট বা ওয়েব অ্যাপ্লিকেশনের আওতার বাইরে। আপনি ব্রাউজারের অন্য ট্যাবগুলিতে অ্যাক্সেস থেকে ব্যবহারকারীকে আটকাতে অনুমোদিত নন ³

একই সমস্যা ব্রাউজারগুলিকে এটিকে বিভিন্ন উপায়ে সমাধান করতে বাধ্য করে। উদাহরণস্বরূপ, ফায়ারফক্স আপনার ট্যাবে সতর্কতা প্রদর্শন করার সময় অন্যান্য ট্যাবগুলিতে অ্যাক্সেসের অনুমতি দেয়। অন্যদিকে, ক্রোম আপনাকে এটি পরীক্ষা করে দেখার অনুমতি দেয় যে আপনি আর কোনও পৃষ্ঠা থেকে আর কোনও সতর্কতা বাক্স পেতে চান না, তবে এখনও অন্য ট্যাবগুলিতে অ্যাক্সেস আটকাচ্ছেন।

স্ক্রিনশট একটি চেকবাক্স সহ একটি সতর্কতা বাক্স দেখায় "এই পৃষ্ঠাটি অতিরিক্ত কথোপকথন তৈরি করা থেকে বিরত করুন"

ফায়ারফক্সের পদ্ধতির পুরোপুরি বৈধতা থাকলেও, ক্রোমের একটি সমালোচনা করা যেতে পারে (যেহেতু এটি এখনও প্রতিটি ট্যাবকে ব্লক করে) এবং এটি সমস্যার কারণ হয়ে দাঁড়ায়: ব্যবহারকারী যদি আপনার অ্যাপ্লিকেশন দ্বারা প্রকাশিত বেশ কয়েকটি বার্তা বাক্সের দ্বারা তীব্র বিরক্ত হয়ে কেসটি পরীক্ষা করে, এবং তখন আপনি সত্যিই গুরুত্বপূর্ণ কিছু দেখানোর চেষ্টা করেছেন? ঠিক আছে, ব্যবহারকারী এটি কখনই দেখতে পাবে না।

সত্যটি একইরকম রয়ে গেছে, বেশিরভাগ ব্যবহারকারী সতর্কতা বাক্সগুলি দ্বারা বিরক্ত হবে, সুতরাং তারা এখনও খুব ব্যবহারকারী বান্ধব নয়, এবং পর্যাপ্ত প্রযুক্তিগত পটভূমি না থাকা কোনও ব্যবহারকারীকে মারাত্মকভাবে অবরুদ্ধ করতে পারে। ইনলাইন, জাভাস্ক্রিপ্ট বার্তাগুলি পৃষ্ঠাটি ব্লক করতে পারে তবে ব্রাউজারটি নয় not যেহেতু ওয়েব অ্যাপ্লিকেশন মডেলটি এক প্রকারের স্যান্ডবক্সিং, আপনি উদাহরণস্বরূপ ব্যবহারকারীর কীবোর্ড অ্যাক্সেস করতে পারবেন না বা কম্পিউটারটি রিবুট করতে পারবেন না বা হার্ডডিস্ক থেকে ফাইলগুলি পড়তে পারবেন না বা পূর্ণ-স্ক্রিনে যেতে পারবেন না বা দুটি মনিটর ব্যবহার করতে পারবেন না, সতর্কতা বাক্সগুলি তাদের ব্লকিং এফেক্টটি মারাত্মকভাবে ব্রেক করে this স্যান্ডবক্সিংয়ের মডেল

সর্বশেষে তবে অন্তত নয়, যখন আপনার অ্যাপ্লিকেশনটি সতর্কতা বাক্সটি দেখানোর সিদ্ধান্ত নিয়েছিল তখন ব্যবহারকারী যদি অন্য ট্যাবে থাকতেন? যদি ব্যবহারকারী কোনও গুরুত্বপূর্ণ কাজ করে থাকেন এবং এখনই আপনার অ্যাপের সাথে ইন্টারঅ্যাক্ট করতে চান না তবে কী হবে?


¹ ফেস 3, যোগাযোগ ডিজাইন এসেনশিয়ালস সম্পর্কে , অ্যালান কুপার, রবার্ট Reimann এবং ডেভিড ক্রোনিন, আইএসবিএন 978-0-470-08411-3; 25 অধ্যায়: ত্রুটি, সতর্কতা এবং নিশ্চিতকরণ।

² এটি কেবল একটি উদাহরণ। দয়া করে, এটি আপনার ওয়েব অ্যাপ্লিকেশনগুলিতে করবেন না, কারণ এটি সত্যই একটি দুর্বল নকশা পছন্দ।

You আপনি যদি ডেস্কটপ অ্যাপ্লিকেশনগুলির বিশ্বের সাথে তুলনা করতে চান তবে একটি ইনলাইন জাভাস্ক্রিপ্ট বার্তা ডেস্কটপ অ্যাপ্লিকেশনটির একটি বার্তা বাক্সের মতো। অন্যদিকে ব্রাউজারে একটি সতর্কতা বাক্স পুরো পর্দার অস্বচ্ছ ব্যাকগ্রাউন্ডে একটি উইন্ডো যেমন কোথাও থেকে উপস্থিত হয় না এমন শীর্ষে প্রদর্শিত হয় যা আপনাকে অন্য কোনও ডেস্কটপ অ্যাপ্লিকেশন অ্যাক্সেস করতে বাধা দেয়। আমার কম্পিউটারে একবারে এটি করার সিদ্ধান্ত নেবে এমন কোনও অ্যাপ্লিকেশন তাত্ক্ষণিকভাবে এবং চিরতরে সরানো হবে।


1
প্রশ্নটির অসীম বা স্প্যাম পপআপগুলির সাথে কোনও সম্পর্ক ছিল না, তবে আপনি কেন এখানে এটি উল্লেখ করছেন? এবং আমি মনে করি না যে এটি জেএস পপ আপগুলি অস্থিতিশীল বলে একটি খারাপ জিনিস। যখন সঠিকভাবে ব্যবহার করা হয় (ব্যবহারকারীকে কোনও কিছুর বিষয়ে সতর্ক করার জন্য) তারা অন্য কিছু করার আগে ব্যবহারকারীকে তাদের সম্বোধন করতে বাধ্য করে, যা কখনও কখনও আপনি চান is
গ্রাহাম

এটি প্রশ্নের উত্তর দেয় না।
ক্যাফগিকে

1
"যখন একটি সতর্কতা বাক্স প্রদর্শন করার, জাভাস্ক্রিপ্ট ব্যবহারকারী ক্লিক পর্যন্ত স্টপ নির্বাহ" - এই একটি জন্য সত্য confirm()এবং prompt(); এর সাথে alert(), আচরণটি ব্রাউজার-নির্ভর (সতর্কতা () প্রদর্শিত হওয়ার পরেও কার্যকর করা চালিয়ে যেতে পারে - যুক্তিটি "যাইহোক একমাত্র উপায় আছে")।
পিসকভোর

1
@ গ্রাহাম: আপনি অসীম পপআপের জন্য ঠিক বলেছেন; আমি এই বিষয়টি বন্ধ ছিল। আমি এটিকে আরও উন্নত করার চেষ্টা করেছি। কোনও বড় কিছুর বিষয়ে সতর্কতা অবলম্বনের জন্য, আমার উত্তরের চতুর্থ বিষয়টি দেখুন: হ্যাঁ, ব্যবহারকারী কোনও পদক্ষেপের নিশ্চয়তা দেওয়ার আগে আপনি সমস্ত কিছু থামাতে চাইতে পারেন, তবে এটি আপনাকে ব্রাউজারের প্রতিটি ট্যাব ব্লক করার অনুমতি দেয় না, কারণ অন্যান্য ট্যাবগুলি তা দেয় না because আপনার ওয়েব অ্যাপ্লিকেশন অন্তর্গত।
আর্সেনী মোরজেনকো

1
@ বার্নটোকোড: এর বিকল্প নেই। ব্যবহারকারীর স্ক্রিনে আপনি ছবিগুলি দেখানোর সাথে সাথে সেগুলি অনুলিপি করা থেকে রক্ষা করার কোনও উপায় নেই। আপনার দ্বিতীয় প্রশ্ন হিসাবে, আপনি আরও নির্দিষ্ট হতে হবে। ব্যবহার করে দেখুন ux.se
আরসেনি মরজেনকো

3

নীচের লাইন: ডিফল্ট প্রম্পট, নিশ্চিত এবং সতর্কতা ডায়ালগ বাক্সগুলি আপনার ব্রাউজারের শৈলীর সাথে মেলে, আপনার সাইটের স্টাইলের সাথে নয়। বেশিরভাগ ইউআই লোকেরা চায় যে সমস্ত কথোপকথন বাক্স তাদের সাইটের ইউআই সহ প্রবাহিত হয়। তারা বার্তা উপস্থাপন করতে এবং মডেল উইন্ডো ব্যবহার করে সাইটের ইউআই হিসাবে একই ফন্ট এবং রঙ ব্যবহার করে ডেটা সংগ্রহ করে, এমএসআইই বা এফএফের ডিফল্ট ধূসর এবং নীল নয়।


2

আপনি কেবল ওভারহেড যুক্ত করছেন যদি আপনার অন্য কোথাও অভিনব সংলাপগুলির প্রয়োজন না হয়, যা আপনি সম্ভবত করেন। এই মুহুর্তে কার্যকারিতা ব্রাউজারের অংশ হিসাবে বা আপনি ব্যবহার করছেন এমন কাঠামোর অংশ হিসাবে অন্তর্ভুক্ত রয়েছে কিনা তা খুব বেশি পার্থক্য করে না এবং আপনি আপনার পপআপগুলিকেও ধারাবাহিকভাবে দেখতে পারেন।

আপনি জাভাস্ক্রিপ্ট এবং কোনও ফ্রেমওয়ার্কের সাহায্যে অনেক কিছু করতে পেরেছেন, ফ্রেমওয়ার্কগুলি উপলভ্য হওয়ার আগে জাভাস্ক্রিপ্টে এটির বিকাশ কী হয়েছিল তা আমি মনে করি এবং আমি এটিতে ফিরে যেতে চাই না।


1

কারণ ব্রাউজারগুলি এগুলি খুব ভালভাবে পরিচালনা করে না । আপনি লক্ষ্য করেছেন যে এগুলি সাধারণত মোডাল ডায়লগ থাকে এবং ব্যবহারকারীদের কেবল তাদের ব্রাউজারগুলিকে সরানো এবং আকার পরিবর্তন করতে বাধা দেয় না তারা অন্যান্য ট্যাবগুলি অ্যাক্সেস করা থেকেও বাধা দেয় যা খুব বিরক্তিকর।

কনফার্ম এবং পরিবর্তনের মতো সংলাপগুলির জন্য আমি এখনও মনে করি যে ব্রাউজারটি আচরণটি কার্যকর করা উচিত এবং সর্বশেষতম ফায়ারফক্স ব্রাউজারের জন্য আপনি দেখতে পাচ্ছেন যে তারা আমার উপরে উল্লিখিত সমস্যাটি ঠিক করেছে। তারা পৃষ্ঠা সতর্কতাগুলিতে ব্যবহার করে যা বর্তমান পৃষ্ঠায় স্কোপ করা আছে।

অতএব আমি আপনাকে পরামর্শ দিচ্ছি যে আপনি সতর্কতার আচরণটি ওভাররাইড করুন যাতে সমস্ত ব্রাউজারগুলি আরও কম সুন্দরভাবে পরিচালনা করতে পারে (কমপক্ষে সতর্কতাগুলি)।

কয়েকটি সংক্ষিপ্ত কারণ:

  • এটি স্ট্যান্ডার্ড এপিআই এবং বিকাশকারীরা আপনি কী করার চেষ্টা করছেন তা নির্ধারণ করতে পারে।
  • এটি আরও ব্যবহারকারী বান্ধব এবং আরও ভাল দেখাচ্ছে।
  • প্ল্যাটফর্ম সমর্থন, মোবাইল সাইটগুলির জন্য দেশীয় এপিআই দরকার হতে পারে।
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.