لوحة المتصدرين
المحتوى الأكثر حصولًا على سمعة جيدة
المحتوى الأعلى تقييمًا في 04/13/15 في كل الموقع
-
من الأشياء التي أقولها للشركات الناشئة دائمًا مبدأ تعلمته من «بول بوكهايت»، وهو: أن تجعل بعض الناس سعداء جدًا أفضل من أن تجعل الكثير من الناس نصف سعداء. كنت أقول مؤخرًا لأحد المذيعين أنني إذا كان بإمكاني أن أقول 10 أشياء فقط للشركات الناشئة، سيكون هذا المبدأ أحدها؛ ثم فكرت فيما ستكون الأشياء التسع الأخرى. انقر على الصّورة لاستعراضها بحجمها الكامل عندما وضعت قائمة، اتضح أن هناك 13 شيئًا: 1. اختَر مؤسسين جيدينيمثِّل الأعضاء المؤسسين للشركة الناشئة ما يمثله الموقع للعقارات؛ يمكنك تغيير أي شيء في المنزل عدا موقعه. وفي الشركة الناشئة يمكنك تغيير فكرتك بسهولة، ولكن تغيير المؤسسين أمر صعب[1]، ونجاح الشركة الناشئة تقريبًا دائمًا ما يعتمد على مؤسسيها. 2. أطلِق الشركة بسرعةليس سبب إطلاق الشركة بسرعة أنه من الضروري توفير منتجك في السوق مبكرًا، ولكن أنَّك لن تبدأ في العمل حقًا على منتجك إلا عندما تطلقه. فالإطلاق يجعلك تعرف ما كان عليك أن تبنيه، وقبل أن تعرفك ذلك فأنت تضيع وقتك. إذًا فإن القيمة الأساسية لما تنطلق به هي مثل حُجة للاستحواذ على اهتمام المستخدمين. 3. دع فكرتك تتطوَّرهذا هو الجزء الثاني للإطلاق السريع. أطلق الشركة بسرعة وركّز على التّطوير iterate. إنه لخطأ كبير أن تعامل الشركة الناشئة وكأنها مجرد تطبيق لفكرة أولية رائعة؛ فمعظم الأفكار في الشركات الناشئة، كما في المقالات، تظهر في التطبيق. 4. افهم مستخدميكيمكنك تصور الثروة الناتجة عن الشركة الناشئة على هيئة مستطيل؛ يكون أحد جوانبه عدد المستخدمين، والجانب الآخر هو مقدار التحسن الذي تضفيه على حياتهم[2]. ذلك البُعد الثاني هو الذي يمكنك التحكم فيه أكثر من غيره، وسيندفع النمو في البُعد الأول بالطبع بجودة عملك في الثاني. فالجزء الصعب، كما في العلم، ليس الإجابة على الأسئلة وإنما طرحها؛ فالجزء الصعب هو رؤية شيء جديد يفتقده المستخدمون. وكلما فهمتهم بشكل أفضل، زادت احتمالات رؤية هذا الشيء الجديد. ولهذا السبب يصنع الكثير من الشركات الناشئة الناجحة شيئًا يحتاجه المؤسسون أنفسهم. 5. من الأفضل أن تجعل القليل من المستخدمين يحبونك بدلًا من أن تجعل الكثير مترددين بشأنكترغب بالطبع في أن تجعل عددًا كبيرًا من المستخدمين يحبك، ولكن لا يمكن أن تتوقَّع أن تحقق ذلك على الفور. عليك في البداية أن تختار بين إرضاء كل احتياجات مجموعة جزئية من المستخدمين المحتملين، وبين إرضاء مجموعة جزئية من احتياجات كل المستخدمين المحتملين. اختَر الأول، فالتوسع من حيث المستخدمين أسهل من التوسع من حيث عامل الإرضاء. وربما الأكثر أهمية أنه من الأصعب أن تكذب على نفسك، إذا كنت تعتقد أنك قد قطعت نسبة 85% من طريقك نحو صناعة منتج رائع، فكيف تعرف أنك لم تقطع 70% فقط؟ أو 10%؟ بينما من السهل معرفة عدد المستخدمين. 6. قدِّم خدمة عملاء مذهلةاعتاد العملاء على المعاملة السيئة، فمعظم الشركات التي يتعاملون معها شبه احتكارية تفلت حتّى بتقديم خدمة عملاء سيّئة. ما يتوقّعه الزّبائن من خدمات العملاء تراجع وتكمّش بشكل كبير وبشكل لا واعٍ بسبب مثل تلك التجارب. حاول ألا تقدم خدمة عملاء جيدة فقط، ولكن جيدة بصورة مذهلة. ابذل جهدًا إضافيًا لجعل الناس سعداء؛ سينبهرون وسترى ذلك بنفسك. سيكون تقديم خدمة عملاء على مستوى غير متوسع في المراحل الأولى من عُمر الشركة الناشئة أمرًا مثمرًا لأنه وسيلة لتعلم المزيد عن المستخدمين. 7. إنك تُحقّق ما تقيسهتعلمتُ ذلك من Joe Kraus . فمجرد قياس شيء ما يخلق نزعة غريبة لتحسينه [3]. إذا أردتَ زيادة أعداد المستخدمين، علِّق ورقة كبيرة على الحائط ودوِّن عدد المستخدمين كل يوم، ستشعر بالسرور عندما يزداد العدد وبخيبة الأمل عندما يقل. سرعان ما ستبدأ بملاحظة العامل الذي يزيد من العدد، وستبدأ في زيادة ذلك العامل. ويلزم عن ذلك أن عليك الانتباه جيدًا لما تقيسه. 8. أنفِق القليللا يمكنني التأكيد بما يكفي على مدى أهمية أن تكون الشركة الناشئة قليلة التّكلفة؛ إذ تفشل معظم الشركات الناشئة قبل أن تصنع شيئًا يريده الناس، والسبب الأكثر شيوعًا للفشل هو نفاد الأموال. إذًا فقلّة المصاريف مرادف (تقريبًا) لتكرار الأداء iterating بسرعة[4]، ولكن الأمر أكثر من ذلك؛ فثقافة التقليل من النّفقات تحافظ على شباب الشركات كما تحافظ ممارسة الرياضة على شباب الناس. 9. اجنِ ما يكفي نفقاتك..كُن Ramen profitableأن تكون الشركة الناشئة "Ramen profitable" يعني أن تحقق ما يكفي لتغطية نفقات المؤسسين. لا يُعتبر ذلك كنمذجة أولية سريعة لنماذج الأعمال (بالرغم من إمكانية أن يكون كذلك)، ولكن كطريقة "لاختراق" عملية الاستثمار، فبمجرد أن تجني ما يكفي نفقاتك يغيِّر ذلك علاقتك بالمستثمرين تمامًا، كما أن ذلك رائعٌ للروح المعنوية للشركة. 10. تجنَّب المُلهياتليس هناك ما يقتل الشركات الناشئة كما تفعل المُلهيات، وأسوأها هي تلك التي تجلب مالًا؛ مثل الوظائف النهارية، والاستشارة، والمشاريع الجانبية الربحية. ربما يكون للشركة الناشئة المزيد من الإمكانات طويلة المدى، ولكنك ستقاطع العمل على شركتك النّاشئة دائمًا للاستجابة لمن يدفعون لك الآن. ومن المفارقات أن جمع الأموال يُعد من هذا النوع من المُلهيات، لذا حاول الحدّ منه أيضًا. 11. تجنّب الإحباطعلى الرغم من أن السبب المباشر لفشل الشركة الناشئة يكون على الأرجح نفاد الأموال، إلا أن السبب الخفي عادةً ما يكون غياب التركيز. فإما أن الشركة يديرها أفراد أغبياء (وهو ما لا يمكن إصلاحه بتقديم النصح)، وإما أنهم أذكياء ولكن أصيبوا بالإحباط. إن تأسيس شركة ناشئة حِملٌ معنوي ضخم، عليك أن تفهم ذلك وتبذل جهدًا واعيًا لكي لا يُثقل كاهلك، تمامًا كما قد تهتم بثني ركبتيك عند التقاط صندوق ثقيل لحَمله. 12. لا تستسلمحتى إذا أصبت بالإحباط، فلا تستسلم. يمكنك قطع مسافة طويلة بصورة مذهلة بمجرد عدم استسلامك. ثمَّة الكثير من الناس الذين لم يستطيعوا أن يصبحوا رياضيّين mathematicians جيدين مهما ثابروا، ولكن الشركات الناشئة ليست كذلك، فغالبًا ما يكون المجهود المُتواصل كافيًا، طالما واصلت العمل على فكرتك وعلى تحسينها. 13. الصفقات تفشلمن أكثر المهارات التي تعلمناها من خلال العمل على Viaweb فائدةً ألَّا نرفع سقف آمالنا كثيرًا. فقد شهدنا فشل 20 صفقة على الأرجح من مختلف الأنواع. بعد فشل العشر الأوائل تقريبًا تعلَّمنا معاملة الصفقات باعتبارها عمليات خلفية علينا تجاهلها حتى تنتهي. من الخطير للغاية على الروح المعنوية البدء في الاعتماد على إتمام الصفقات، ليس فقط لأنها غالبًا ما لا تتم، ولكن لأن ذلك يجعلها أكثر عرضة لأن لا تتم. بعد الانتهاء من 13 جملة، سألتُ نفسي أيها سأختار إذا كان عليَّ أن أختار واحدةً فقط. افهم مستخدميك؛ فهذا هو المفتاح. إن المهمة الجوهرية للشركة الناشئة هي خلق ثروةٍ؛ وبُعد الثروة الذي تستطيع التحكم فيه أكثر من غيره هو مدى تحسينك لحياة المستخدمين، والجزء الأصعب هو معرفة ما عليك صنعه لهم. بمجرد أن تعرف ماذا تصنع، يكون صنعه مجرد مسألة مجهود، ومعظم المخترقين Hackers المحترمين قادرين على بذله. يُشكِّل فهم المستخدمين جزءًا من نصف المبادئ المذكورة في القائمة؛ فهو سبب الإطلاق المبكر، لكي تفهم مستخدميك. تطوير فكرتك هو تجسيد لفهمك لمستخدميك. سيدفعك فهم مستخدميك إلى صنع شيء يجعل مجموعة قليلة من الناس سعيدةً للغاية. السبب الأكثر أهمية لتقديم خدمة عملاء جيدة بصورة مذهلة أن تساعدك على فهم مستخدميك. كما أن فهم المستخدمين سيعزز من روحك المعنوية لأنه عندما ينهار كل ما حولك، فإن وجود عشرة مستخدمين يحبونك سيبقيك حيًا. الهوامش[1] لنتحدث بدقة؛ سيكون ذلك مستحيلًا دون آلة زمن. [2] الأمر عمليًا أشبه بمشط خشن. [3] يعتقد جو أن أحد مؤسسي (HP) قالها أولًا، ولكنه لا يذكر أيهم. [4] سيكونا مترادفين إذا ظلت الأسواق ثابتة، ولكن بما أنها ليست ثابتة فإن العمل بسرعة مضاعفة أفضل من استغراق ضعف الوقت. ترجمة -وبتصرّف- للمقال: Startups in 13 Sentences لصاحبه Paul Graham (بول جراهام) مُؤسس حاضنة مشاريع واي كومبيناتور (Y Combinator). اطّلع على باقي مقالات بول جراهام المترجمة إلى العربية1 نقطة
-
تُسهِّل مكتبة jQuery التّعامل مع محتويات صفحة HTML بعد أن يعرضها المتصفّح، وتوفّر أدوات تُساعدك في متابعة تفاعل المستخدم مع الصّفحة، وتحريك العناصر فيها، والتّواصل مع الخواديم دون إعادة تحميل الصّفحة. سنشرح هذه الأدوات بعد قليل. لنبدأ أوّلًا بالاطّلاع على أساسيّات jQuery، وكيف يمكن استخدام وظيفتها الأساسيّة: الوصول إلى عناصر مُحدَّدة في الصفحة وفعل شيءٍ ما بها. ملاحظة: يفترض هذا الدّليل أنّك على علم بأساسيّات HTML ومُحدِّدات CSS. إن لم تكن تألف كيف يمكن استخدام مُحدّدات CSS للوصول إلى عناصر مُحدّدة في الصّفحة، فعليك أوّلًا تعلّم ذلك قبل الشروع في متابعة هذا الدّليل. ما هذا الرمز: $؟توفّر مكتبة jQuery الدّالّة jQuery، التي تتيح لك تحديد العناصر بمُحدّدات CSS. var listItems = jQuery( 'li' );إن قرأت من قبل برامج تستخدم jQuery، فلا بدّ أنّك اعتدت على هذا: var listItems = $( 'li' );كما ناقشنا في الجزء السّابق (أساسيّات JavaScript)، فكلّ الأسماء تكاد تكون سّليمة في JavaScript ما لم تبدأ برقم أو تحوي إشارة "-". ولذا فالاسم $ في المثال الأخير ليس إلّا اسمًا مُختصرًا للدّالّة jQuery، ولو اطّلعت على مصدر jQuery، لقرأت هذا قرب نهايته: // Expose jQuery to the global object window.jQuery = window.$ = jQuery;عندما تستدعي الدّالّة $() وتمرّر لها مُحدّدًا، فإنّك تحصل على كائن jQuery جديدٍ. الدّوالّ في JavaScript هي الأخرى كائنات، وهذا يعني أنّ للدّالّة $ (وjQuery بالطّبع) خصائص ووظائف أيضًا. مثلاً: يمكنك استخدام الخاصّة $.support لمعرفة ما الميزات الّتي يدعمها المتصفّح الحاليّ، كما يمكنك استخدام الوظيفة $.ajax لإرسال طلب AJAX. ملاحظة: من الآن فصاعدًا سنستخدم $ بدلًا من jQuery في هذه السّلسلة سعيًا للاختصار. لاحظ أنّه إن احتوت صفحتك أكثر من مكتبة واحدة، فقد يُستخدم الاسم $ من مكتبة أخرى، ممّا يمنع عمل jQuery، فإن واجهتك مشكلة كهذه، جرّب استخدام jQuery.noConflict قبل تحميل المكتبات الأخرى. $(document).ready()قبل استخدام jQuery لفعل أيّ شيء في الصّفحة، علينا التأكّد من كون الصّفحة قد بلغت حالةً تسمح بتعديل محتوياتها. يمكن تنفيذ ذلك في jQuery بإحاطة برنامجنا ضمن دالّة ثمّ إمرار هذه الدّالة إلى $(document).ready(). كما ترى في المثال التّالي، يمكن للدّالّة الّتي نمرّرها أن تكون مجهولة (بلا اسم): $(document).ready(function() { console.log( 'ready!' ); });هذا سيؤدّي إلى استدعاء الدّالّة الّتي مرّرناها إلى .ready() بعد أن يصبح المُستند (الصفحة) جاهزًا. ما الذي يحدث هنا؟ استخدمنا $(document) لإنشاء كائن jQuery من document في الصّفحة، ثمّ استدعينا الدّالّة .ready() على هذا الكائن، مُمرِّرين إليها الدّالّة الّتي نريد تنفيذها. بما أنّك ستجد نفسك تُعيد كتابة هذا النّصّ مرارًا، فإنّ jQuery تقدّم لك طريقةً مُختصرةً لإنجازه، إذ تقوم الدّالّة $() بمهمّة مُختلفة عند إمرار دالّة إليها بدلًا من مُحدِّد CSS، وعندها تتصرّف وكأنّها اسم بديلٌ للوظيفة $(document).ready(): $(function() { console.log( 'ready!' ); });ملاحظة: من الآن فصاعدًا، سنفترض أنّ النّصوص الّتي ترد في هذه السّلسلة مُحاطة بالعبارة $(document).ready(function() { ... });، وسنترك هذه العبارة بغرض الإيجاز. الوصول إلى العناصرأبسط ما يمكن إنجازه بـjQuery تحديد بعض العناصر ثمّ فعل شيء ما بها. إن كنت تفهم مُحدّدات CSS، فستجد أنّ الوصول إلى بعض العناصر سهل ومباشر: ليس عليك إلا إمرار المُحدِّد المناسب إلى $(). $( '#header' ); // حدّد العنصر الّذي مُعرِّفه 'header' $( 'li' ); // حدّد كل عناصر القوائم في الصّفحة $( 'ul li' ); // حدّد كل عناصر القوائم الموجودة في قوائم غير مُرتّبة $( '.person' ); // حدّد كل العناصر ذات الصّنف 'person'من المهمّ أن تفهم أنّ أيّ تحديد تُجري لن يتضمّن إلّا العناصر الموافقة للمُحدّد والتي كانت موجودة في اللّحظة الّتي أجريت فيها التّحديد، بمعنى أنّك إذا كتبت var anchors = $( 'a' ); ثمّ أضفت عنصر <a> إلى الصّفحة لاحقًا، فلن تحوي anchors العنصر الجديد. طرق أخرى لإنشاء كائن jQueryبالإضافة إلى إمرار مُحدّد بسيط إلى الدّالة $()، يمكن إنشاء كائنات jQuery بطرق أخرى: // أنشئ كائن jQuery من عنصر DOM $( document.body.children[0] ); // أنشئ كائن jQuery من قائمة بعناصر DOM $( [ window, document ] ); // أجرِ التّحديد بسياق عنصر DOM var firstBodyChild = document.body.children[0]; $( 'li', firstBodyChild ); // أجرِ التّحديد ضمن تحديد سابق var paragraph = $( 'p' ); $( 'a', paragraph );هل يحتوي التّحديد الّذي أجريته على أيّة عناصر؟ترغب أحيانًا في تنفيذ بعض الأوامر عندما يُطابق تحديدك عنصرًا أو أكثر فقط، ولكنّ الدّالّة $() تُعيدُ دومًا كائن jQuery، وهذا الكائن دائمًا صائب (truthy)، ولذا عليك فحص محتوى التّحديد لمعرفة إن كان يحوي أيّة عناصر. تحذير: نصّ برمجيّ غير سليم if ( $( '#nonexistent' ) ) { // خطأ! الأوامر هنا ستُنفَّذ دومًا! } if ( $( '#nonexistent' ).length > 0 ) { // صحيح! لن تُنفّذ الأوامر هنا إلّا إن احتوت الصّفحة على كائن مُعرّفه 'nonexistent' }بإمكاننا اختصار هذا الفحص أكثر بالاعتماد على كون 0 قيمة خاطئة (falsy): if ( $( '#nonexistent' ).length ) { // لن تُنفّذ الأوامر هنا إلّا إن وجد عنصر مُطابق }الوصول إلى عناصر مُفردة من تحديدإن كنت تحتاج التّعامل مع عنصر DOM خام من تحديد، فعليك الوصول إلى هذا العنصر من كائن jQuery. لنفترض مثلًا أنّك تريد الوصول إلى الخاصّة value لكائن <input> مباشرةً، عليك إذن التّعامل مع عنصر DOM الخام: var listItems = $( 'li' ); var rawListItem = listItems[0]; // أو listItems.get( 0 ) var html = rawListItem.innerHTML;لاحظ أنّه ليس بإمكانك استدعاء وظائف jQuery على عناصر DOM الخام، فلن يعمل المثال التّالي: تحذير: نصّ برمجيّ غير سليم var listItems = $( 'li' ); var rawListItem = listItems[0]; var html = rawListItem.html(); // Object #<HTMLInputElement> has no method 'html'إن أردت العمل مع عنصر مُفرد في تحديد وأردت استخدام وظائف jQuery معه، فعليك إنشاء كائن jQuery جديد انطلاقًا منه باستخدام الدّالّة .eq()، وإمرار دليل العنصر الّذي تريده: var listItems = $( 'li' ); var secondListItem = listItems.eq( 1 ); secondListItem.remove();جرب المثال في ساحة التّجربة (تأكد من ضغط زر Run with JS في هذا المثال وكل الأمثلة التالية) إنشاء كائنات جديدةللدّالّة $ دورٌ ثالث أخير: إنشاء عناصر جديدة. إن مرّرت قصاصة HTML إلى $()، فستُنشئ كائنًا جديدًا في الذّاكرة، بمعنى أنّ الكائن يُنشأ ولكن لا يُضاف إلى الصّفحة إلى أن تفعل ذلك بنفسك. $( '<p>' ); // يُنشئ عنصر <p> بلا محتوى $( '<p>Hello!</p>' ); // يُنشى عنصر <p> فيه نصّ $( '<p class="greet">Hello!</p>' ); // يُنشى عنصر <p> فيه نصّ وله صنفبإمكانك أيضًا إنشا عنصر جديد بإمرار كائنٍ يحوي معلومات تصف كيفيّة إنشاء العنصر: $( '<p>', { html: 'Hello!', 'class': 'greet' });لاحظ أنّه يجب أن نُحيط class بعلامتي اقتباس، لأنّ class كلمة محجوزة في JavaScript، وعدم إحاطتها بالعلامتين سيسبّب وقوع أخطاء في بعض المتصفّحات. راجع وثائق jQuery لتفاصيل الخصائص المختلفة الّتي يمكنك تضمينها في هذا الكائن. سنتعرّف كيف نُضيف العناصر في الصّفحة في الجزء القادم من السّلسلة، الّذي يشرح الانتقال عبر الصّفحة وتعديل محتوياتها. التّعامل مع التحديداتبعد إنشائك كائن jQuery يحوي تحديدًا، فإنّك غالبًا ما تريد فعل شيء ما به، وقبل ذلك عليك أن تتعرّف على أسلوب jQuery في التّعامل مع الكائنات. فحص تحديدبإمكاننا معرفة إن كان تحديد ما يُطابق معايير مُعيّنة باستخدام الوظيفة .is(). أكثر الطّرق شيوعًا لاستخدام هذه الوظيفة تزويدها بمُحدِّد كمُعاملٍ مفرد لها، وعندها تُعيد true أو false حسب مُطابقة التّحديد للمُحدِّد: $( 'li' ).eq( 0 ).is( '.special' ); // false $( 'li' ).eq( 1 ).is( '.special' ); // trueبإمكانك تمرير كائن jQuery أيضًا إلى الوظيفة .is()، أو حتّى كائن DOM خام، أو حتّى دالّة لإجراء اختبار أكثر تعقيدًا إن لزم. راجع الوثائق لمزيد من التّفاصيل. وظائف القراءة والكتابة والسّرد الضّمنيّبعد عمل التّحديد، تتوفّر وظائف عديدة يمكنك استدعاؤها. تقع هذه الوظائف عمومًا في إحدى مجموعتين: وظائف القراءة (getters) ووظائف الكتابة (setters). فالأولى تعطينا معلومات عن التّحديد، والثّانية تُغيّر التّحديد بشكل من الأشكال. وفي معظم الحالات يقتصر عمل وظائف القراءة على العنصر الأول في التّحديد (.text() إحدى استثناءات هذه القاعدة)؛ أمّا وظائف الكتابة فتشمل بعملها كلّ العناصر في التّحديد، مستخدمةً ما يُعرف بالسّرد الضّمنيّ (implicit iteration). معنى السّرد الضّمنيّ أنّ jQuery ستمرّ تلقائيًّا على كلّ العناصر في التّحديد عندما تستدعي وظيفة كتابة على هذا التّحديد، أيّ أنّه ليس عليك استدعاء وظيفة على كلّ عنصر في التّحديد بمفرده عندما تريد فعل شيء على كل العناصر في تحديد واحدٍ، بل اكتفِ باستدعاء هذه الوظيفة على التّحديد نفسه، وستفهم jQuery أنّ عليها تنفيذه على كلّ العناصر في التّحديد. لنفترض أنّنا نريد تغيير نصّ HTML في كل عناصر القوائم في الصّفحة، ولفعل ذلك علينا استخدام الوظيفة .html() الّتي تقوم بتغيير نصّ HTML في كلّ عناصر القوائم المُحدّدة. $( 'li' ).html( 'New HTML' );جرب المثال في ساحة التّجربة بإمكانك أيضًا إمرار دالّة إلى وظائف الكتابة في jQuery، وستُستخدم القيمة المُعادة منها باعتبارها القيمة الجديدة، وتستقبل هذه الدّالة مُعاملين اثنين: دليل العنصر (index) في التّحديد، والقيمة القديمة للشّيء الذي تحاول تغييره، وهذا مُفيد في حال احتجت معلومات عن حالة العنصر الحاليّة لتعيين حالته الجديدة بشكل صحيح. $( 'li' ).html(function( index, oldHtml ) { return oldHtml + '!!!' });جرب المثال في ساحة التّجربة السّرد الصّريح (Explicit Iteration)في بعض الأحيان، لن تلبّي وظائف jQuery الأصليّة المهمّة الّتي تريد إنجازها بدقّة، وسيكون عليك حينها المرور على العناصر في التّحديد بشكل صريح، وهذا ما تتيحه الوظيفة .each(). في المثال التّالي نستخدمها لإضافة وسم <b> في بداية عنصر القائمة، يحوي دليل العنصر: $( 'li' ).each(function( index, elem ) { // this: عنصر DOM الخام الحالي // index: دليل العنصر الحالي في التّحديد // elem: عنصر DOM الخام الحالي (مثل this) $( elem ).prepend( '<b>' + index + ': </b>' ); });جرب المثال ساحة التّجربة ملاحظة: ستلاحظ أنّ عنصر DOM الخام مُتاح ضمن الدّالّة الّتي نُمرّرها إلى .each() بطريقتين: الأولى عبر this والثّانية عبر elem. وكما ناقشنا في الجزء السّابق (أساسيّات JavaScript)، فإنّ this كلمة خاصّة في JavaScript تُشير إلى الكائن الّذي يُمثّل سياق الدّالّة الحاليّ. وفي jQuery فإنّ this تُشير في معظم الحالات إلى عنصر DOM الخام الّذي تعمل عليه الدّالّة الحاليّة. لذا فإنّها تُشير في حالة .each() إلى العنصر الحاليّ في مجموعة العناصر الّتي نسردها. السَّلسَلة (Chaining)من أكثر الأمور فائدةً في jQuery إمكانيّة "سَلسَلة" الوظائف معًا. هذا يعني أنّ بإمكاننا استدعاء سلسِلة من الوظائف على تحديدٍ ما دون الحاجة لإعادة التّحديد أو حفظه في متغيّر. بإمكاننا حتّى إنشاء تحديدات جديدة بناء على التّحديد السّابق، دون كسر السّلسلة: $( 'li' ) .click(function() { $( this ).addClass( 'clicked' ); }) .find( 'span' ) .attr( 'title', 'Hover over me' );الأمر ممكن لأنّ كل دالّة كتابة (setter) في jQuery تُعيد التّحديد الذي اُستدعيت لتعمل عليه. وهذا أمر عظيم الفائدة، حتّى أنّ مكتبات كثيرة اعتمدته تأثّرًا بـjQuery. ولكن يجب الحذر عند استخدامه. فالسّلاسل الطّويلة تجعل النّصّ البرمجيّة صعب القراءة والتّعديل والتنقيح لا قاعدة واضحة تفرض طولًا مناسبًا للسّلسلة، ولكن حتّى السلاسل القصيرة قد تحتاج إلى إعادة الصّياغة تسهيلًا لقراءتها. var listItems = $( 'li' ); var spans = listItems.find( 'span' ); listItems .click(function() { $( this ).addClass( 'clicked' ); }); spans.attr( 'title', 'Hover over me' );خاتمةلدينا الآن معلومات ممتازة عن تفاصيل عمل jQuery؛ وسنستعرض في الجزء القادم كيف يمكننا تطبيق هذه المعلومات لإنجاز أشياء حقيقيّة بها! مصادر إضافيةوثائق الواجهة البرمجيّة لـjQueryوثائق المُحدّداتترجمة (بشيء من التصرف) للجزء الثاني من سلسلة jQuery Fundamentals لمؤلّفتها Rebecca Murphey.1 نقطة
-
أشعر أني محظُوظٌ جدًا لاختياري درب تأسيس شركة نَاشئة، وإطلاق مُنتج من شأنه أن يُسهِل حياة الكثير من الناس، Buffer ينمُو بشكلٍ سريع، الفريق الآن يضُم 25 شخصًا وقد تخطينا عتبة 4 ملايين دولار كإيرادات سنوية. عندما أفكر في كيفية تسارع الأمور من حولي، وما كان مطلوبًا مني القيام به، يتبادر إلى ذهني بشكلٍ خاصٍ ومباشر، مقال بول جراهام تحت عُنوان: "كيف تُحصِّلُ ثروة؟" وبالأخص هذا المقطع: هنالك الكثير لتعلُمه إن أنتم اخترتم البدء في إنشاء مشّرُوعِكم الخاص، شخصيًا استمتعت كثيرًا في مِشوار التعلم، ولا يُمكنُني إلا أن أنصح به الآخرين، لأنني لا أجد طريقًا أفضل لعيش حياة أرقى، أقوم فيما يلي بسرد ست نصائح تُساعد على البدء في أي مشّروع خاص وأيضًا الاستمرار فيه: 1- جرّب كثيرًا شخصيًا، حاولت في الكثير من المرات العمل على إنشاء مشروع ناجح، عدم جدّيتي ربما كانت لها نصيبٌ في عدم نجاحي حينها، ومع ذلك لي العديد من المشاريع المُصغرة مُنتشرة على الويب. غالبًا ما يُسيء الناس فهم مبدأ النجاح، فأن تكون ناجحًا لا يعني بالضرورة أن تعتمد على عامل التركيز مُنفردًا، فترمي بذلك ما بحوزتك من بيضٍ في سلةٍ واحدة، على الأقل هذه تجربتي وهذا ما حدث معي شخصيًا، فقد جربتُ العديد من الأشياء على تنوعها واختلافها. منها، أني عندما بدأتُ العمل على Buffer كنت أعمل كمُطور برامج حُر بدوام كامل، المغزى أنه إذا أردت شدّ انتباه الآخرين إلى مشروعك وتحبيبه إليهم فعليك بتحويل وصب اهتمامك فقط على العمل الذي تراه ينجح ويأتي بالنتائج. 2- حافظ على حماسك عندما أتذكر محاولتي الأولى لإنشاء مشروع، أذكر أنه من بين العوامل التي كانت تُبقيني مُحفزًا أني كنت أقرأ باستمرار كُتبًا حول المشّاريع النّاشئة ورواد الأعمال، كما كنت أشاهد العديد من اللقاءات والتصريحات لمؤسسي ومدراء هذه المشاريع، من ذلك أني شاهدت العشرات من الحوارات لأندرو وارنر التي ألهمتني كثيرًا وساعدتني على الاستمرار والمُضي قُدُمًا. صحيح أنه عليك أن تتوقف في وقتٍ ما عن حشد عناصر التحفيز، والشُروع في الأمور الجدية والعملية، لكن، في اعتقادي أنّ الكثير يستهين بأهمية التعلم والاستفادة من تجارب الآخرين، خِصيصًا عندما تتواجد في مُحيط مُثبِط لا يهتم بالمشّاريع النّاشئة ولا يُشجعُ عليها، أعتقد أن بقاءك مُتحمسًا ومُتحفزًا رغم هذا الجو وفي ظل هكذا بيئة سلبية، سيُشعِل فيك روح الإصرار على النجاح. 3- سافر وارتحل المُتعة مُلازمةٌ للسفر، هذا ما أشعر به دائمًا كلما سافرت، ولم أكن أتخيل أن السفر سيكون مُؤثرًا في حياتي، فحتى عندما أقطع بضع مئاتٍ من الكيلومترات بين مدينتي شفيلد مُتوجهًا صوب بيرمنغهام في المملكة المتحدة، ثم عابرًا العديد من القارات، ثم الانتقال للعيش في كل من سان فرانسيسكو وهونغ كونغ، أشعر أني محظوظٌ جدًا باكتشافي للعديد من الثقافات المختلفة والتعرف على أُناس رائعين. أعتقد أنك إذا ما قررت خوض تجربة السفر فأنت تكون قد خطوت وبصفة آنية خطوةً نحو النجاح، فمهما كان العمل الذي ترغبُ في القيام به، فمعرفتك لما تعيش من أجله وتقدُمُك بخطوات قد لا تخلو من الشك نحو مصيرِ لا تعلمه، سيجعلك مُنفتح الذهن، فاتحًا لنفسك آفاقًا وفُرصًا جديدة. من الطبيعي والبديهي أن يكون لديك انتماء لبلدتك، مدينتك وبلدك مُتمنيًا لو تكون هناك بين أهلك وأصدقائك حيث تقدِر أن تمُد لهم يد العون والمُساعدة، في اعتقادي أنه بإمكانك تقديم أكثر إذا ما أنت قررت الرحيل والسفر، أضف إلى ذلك أني لم أسمع يومًا عن أحدٍ ما ندِم على سفره. 4- اختر أصدقاءك بعناية واحد من الأمور الأكثر إثارة وتأثيرًا في السفر والتِجوال، وهذا مما حصل معي في كل مكان أقمت فيه، هناك كانت لدي الفرصة للتفكير في كل لحظةٍ مضت من حياتي، وتعكس طبيعة المكان الذي أود العيش فيه، وإلى أي مدىً أنا قريب من وسائل المتعة، الرفاهية والراحة، مُقارنة بما كُنت فيه مُسبقًا، وما هي وتيرة وروتين الحياة التي أرغب أن أعيشها، وحتى مع من أود أن أخرج لأتنزه. لعل من أوضح الأمثلة التي يُمكن ضربها فيما يخص اختيار الأصدقاء المُناسبين، الذين من المُحتمل ألا يكونوا رواد أعمال، أنه في إطار عملك من المُحتمل جدًا أن تسير الأمور في الاتجاه الخاطئ أكثر منها إلى الاتجاه الصائب، أي أنها قد تسوء جدًا في حين انه كان من المفروض لها ان تتحسن، فإذا أردت حقًا النجاح، فمِن المُهم جدًا أن تُحيط نفسك بأولئك المتفائلين الذين من شأنهم أن يُشعروك بالأمان وأنّ ما يحصُل إنما هي أخف الأضرار. 5- ركّز على بناء مُنتج مُفيد يرغب فيه النّاس يُصبحُ الشعور بالحيرة والتوتر أمرًا سهلًا ومُلازمًا لك عندما تبدأ في مشروعك الناشئ، فتبدأ بالتفكير في شريك من خلال دمج مشروعك مع مشروع آخر، أو أن تصرُف أكثر من الميزانية، وأحيانًا قد تتغاضى تمامًا عن أمورٍ تراها أنت جانبية ومن الثانويات وفي الحقيقة هي بالنسبة للآخرين مُهمة ومن الأساسيات. من خلال خبرتي، أستطيع القول إن كُل ما يحتاجه الأمر هو إيجاد مُشكل حقيقي يعاني منه الناس ثم السعي لتبسيطه وحله، فإن أنت وفرت مُنتجًا يحتاجه السوق، فهنيئُا لك فقد نجحت في جذب اهتمام الزبائن لمُنتجك. إذا كان مشروعك الذي تعمل عليه لم ينجح، احرص على أن تُحسنه وتُدخِل عليه أفكارًا جديدة. 6- كُن مُنفتحًا على العالم وكن مسموع الصوت قبل إطلاق Buffer، كانت لدي تجربة مع بعض المشاريع التي لم تُحقق نجاحًا كبيرًا، لكن وبالرغم من ذلك كانت هناك إيجابيات، ولحس الحظ أني كنت حينها، أنشُر تغريدات على تويتر، أحرر مقالات، أشارك في ملتقيات ومؤتمرات، وهناك أتعرف غالبًا على معارف جُدُد. عندما يسألني الناس عن أول خُطوة تسويقية قمت بها في Buffer، الحقيقة التي كان عليّ أن أشاركهم إياها، أنني كنت أعتمد في التسويق على مُشاركة فكرتي مع 1700 مُتابع على تويتر، حينها وظفتُ مبدأ الانفتاح حيث كُنت أرغب من هؤلاء المُتابعين أن يُساعدوني في البدء مع Buffer. حيث كانت النتيجة موافقة تمامًا لنصيحةٍ أتفق فيها كُليًا مع ليث بورسك حين يقول: "شارك فكرتك مع كلِ من تلقاه، تكلم حتى يطلبوا منك أن تخرس، اكتشف أسئلة وعيوب جديدة من شأنها أن تُحسن فكرتك، ثم جِد أشخاصٍ آخرين للتكلم معهم من جديد." ما هي النصيحة أو النصائح التي ترغبون في تقديمها لكل شخص طموح يرغب في إنشاء مشّروع ناشئ؟ ملاحظة: هذا المقال تم استلهامه من Startup Edition كجواب على السؤال: "ما هي النصيحة التي تُقدمونها لرواد الأعمال الناشئين؟" طالعوا تفاصيل أكثر هناك حول هذا الموضوع من طرف فريق رُواد الأعمال رائع. ترجمة -وبتصرّف- للمقال 6 Suggestions for an Aspiring Startup Founder لصاحبه Joel Gascoigne (المُؤسّس الشّريك لـ Buffer)1 نقطة