لوحة المتصدرين
المحتوى الأكثر حصولًا على سمعة جيدة
المحتوى الأعلى تقييمًا في 02/27/21 في كل الموقع
-
يُمكنك عمل هذا الأمر بإستخدام أحد هذه الطرق: تمرير قيمة ال slug أثناء إنشاء السجل في المُتحكم: <?php use Illuminate\Support\Str; Post::create([ 'title' => request('title'), 'body' => request('body'), 'slug' => Str::slug(request('title')) ]); إعادة تعريف الدالة boot في المُتحكم Post و التسمع على الحدث creating: <?php namespace App\Models; use Illuminate\Database\Eloquent\Factories\HasFactory; use Illuminate\Database\Eloquent\Model; use Illuminate\Support\Str; class Post extends Model { use HasFactory; protected $guarded = []; protected static function boot() { parent::boot(); static::creating(function ($post) { $post->slug = Str::slug($post->title); }); } } يُمكن التسمع على عدة أحداث: creating، created ، deleting، deleted، updating، updated ... لكن إن كانت الأحداث التي تُريد التسمع عليها كثيرة و ترغب بعمل شيء ما عند كل حدث فسيُصبح النموذج مُكتض بالشيفرات و ستصعب عليك عملية ال refactoring ففي هذه الحالة الأفضل إستخدام مُراقب (observer) لهذا النموذج. إستخدام مراقب (observer): أولاً إنشاء المُراقب: php artisan make:observer PostObserver --model=Post سيُنشئ الأمر ملف جديد في المسار: app/Observers و من خلاله يُمكنك مراقبة النموذج الخاص بك. ثانياً في حالتنا سنُضيف الدالة: creating : <?php namespace App\Observers; use App\Models\Post; use Illuminate\Support\Str; class PostObserver { public function creating(Post $post) { $post->slug = Str::slug($post->title); } // others methods } ثالثاً نقوم بربط المُراقب بالنموذج الذي سيُراقبه و يتم ذلك على مُستوى مُزود الخدمة EventServiceProvider في الدالة boot: <?php use App\Models\Post; use App\Observers\PostObserver; public function boot() { Post::observe(PostObserver::class); }3 نقاط
-
يوجد بعذ الإختلافات فعلًا بين الـ Functional Component و الـ Class Component وهنا شرح بسيط للفرق بينهما: Functional Component: هي عبارة عن دوالة جافاسكريبت عادية، في الغالب نستعمل الدوال السهمية (لأنها أبسط) لكن يمكن إستخدام دوال جافاسكريبت العادية (بإستخدام الكلمة الفتاحية function). تسمى أحيانًا بـ "stateless components" أو "dumb components"، ويمكنها إستقبال بيانات بشكل بسيط (مثل Arguments في دوال جافاسكريبت)، وفي الغالب تكون مسئولة عن عرض أجزاء الـ UI في الموقع. لا يمكن إستخدام دوال Lifecycle Hooks داخلها (مثل componentDidMount). ملاحظة: لم يعد هذا ضروري حيث بدًأ من React 16.8 حيث أصبح بإمكانك إستخدام useEffect hook للوصول إلى دوال Lifecycle Hooks لا نستخدم دالة render داخل الـ Functional Component بل نقوم بإرجاع المكون مباسرة بإستخدام return. يمكن إستخدام props داخل الـ Functional Component دون مشكلة. يُفضل إستخدامها إن لم تكن تستخدم React state. import React from "react"; const Title = props => ( <div> <h1>Hello, {props.name}</h1> </div> ); export default Title; Class Components: تستخدم خواص ES6 لعمل صنف من خلال الكلمات المفتاحية Class و extends. تسمى أحيانًا بـ "Smart Components" أو "Stateful Components" يمكن إستخدام دوال Lifecycle Hooks داخلها (مثل componentDidMount). يمكن إستخدام props داخل الـ Class Component دون مشكلة من خلال this.props import React, { Component } from "react"; class Title extends Component { render() { return ( <div> <h1>Hello, {this.props.name}</h1> </div> ); } } export default Title; الخلاصة: حاول أن تستخدم الـ Functional Component لعرض أجزاء واجهة المستخدم UI حيث أنها أبسط، وقم بإستخدام الـ Class Component في المكونات الأكثر تعقيدًا والتي تحتاج إلى إستخدام دوال Lifecycle Hooks.3 نقاط
-
2 نقاط
-
أريد أن أعرف ما الفرق بين مكون الدالة function component ومكون الصنف Class Component لأني لا أرى أي فرق بينهم حتى الآن بالرغم من أني سمعت في بعض الفيديوهات أن بينهما فرق ولكن لا يقومون بتوضيح هذا الفرق، مع العلم أن إستخدام أي منهما لا يسبب أي مشكلة معي. فهل يمكن توضيح الفرق بينهما ومتى أستخدم كل منهما؟2 نقاط
-
الfunctional component: تعتبر بسيطة و اقل تعقيداً من الclass components. تركز بواجهات المستخدم و لا تركز على سلوك الواجهات. ليس لديها state ولا تستخدم الlifecycle methods. الclass components: تستخدم الصياغة الخاصة بES6 وكذلك يمكنها استخدام ال lifecycle methods. الclass component ترث من الreact component كما في المثال الاتي: import React, { Component } from 'react'; import './App.css'; import UserOutput from './UserOutput/UserOutput'; import UserInput from './UserInput/UserInput'; class App extends Component { render() { return ( <div className="App"> <h3>Assignment Output :</h3> <ul> <li> <UserOutput username={this.state.Usernames[0].username}> Welcome to React! </UserOutput> <UserInput nameChanged={this.nameChangedHandler}> </UserInput> </li> </ul> </div> ); } } export default App; يتعين عليك استخدام this للوصول الى الدوال والprops التي قمت بتعريفها بداخل الclass component.2 نقاط
-
ذكرنا في المقال السابق أسلوب الإدارة الفنية للمشروع بينك وبين العميل وطرق تنظيم العمل على المشروع نفسه من أدوات وبرامج وغير ذلك. أما في هذا المقال فإننا سنذكر بقليل من التفصيل أساليب التعامل مع العملاء، وكيف تحدد أسلوب الخطاب المناسب معهم، مع النظر في المشاكل والتحديات والخلافات التي قد تطرأ بينك وبين العملاء، وكيف تعالجها بالأسلوب الأمثل. ذلك أنك في عملك المستقل ستواجه أنواعًا مختلفة لفرص العمل التي يقدمها أولئك العملاء. ولأن كل عميل مختلف عن الآخر، فيجب أن تحضر نفسك لمواجهة المواقف المختلفة التي قد تطرأ. وسنتجنب هنا الحديث عن العملاء الذين لهم باع في مجالاتهم وعلى قدر من المهنية والأخلاق والخبرة، فهؤلاء لا نظن أنك ستجد مشكلة معهم، وعليه فيكفيك أخلاقك وحسن تعاملك معهم بنفس المهنية والاحترام، وإنما سننظر في أنواع العملاء الذين قد تحدث بينك وبينهم خلافات أو مشاكل لأسباب فنية أو أخطاء بشرية أو إدارية أو غير ذلك. على أن سردنا في هذا المقال لا يعني أن العميل قليل الصبر مثلًا ستعرفه بمجرد النظر! كأن يكون لا يكمل حروف كلماته مثلًا في عرض مشروعه، فأغلب الناس لطيفة وودودة حتى تُستفز مشاعرها أو لا تلبى مطالبها وحاجاتها. تحديد لهجة الخطاب مع العملاء ترتبط هذه النقطة كثيرًا بهويتك التجارية التي تحدثنا عنها في كيفية التسويق الذاتي في العمل الحر، ذلك أن أسلوبك في الرسائل ونمط حديثك يشكل جزءًا كبيرًا من هويتك ولا شك، وقد ترى ذلك جليًا حين تكلم خدمة العملاء للبنك الذي تتعامل معه، وحين تكلم خدمة العملاء لشركة أدوات ترفيهية اشتريت منها جهازًا مثلًا. فترى موظف البنك يتكلم بأسلوب يفتقر إلى المرح والمزاح مقارنة بموظف الشركة الترفيهية الذي يخاطبك بمرح سائلًا إياك عن حالك اليوم وتمنياته لك بيوم سعيد! ذلك أن الأول يتعامل مع أموالك وثروتك، وأي باب للسهو أو الفهم الخاطئ لكلامه قد يودي بكارثة لك أو له. وكذلك في شأنك مع العملاء، فاختر اللهجة المناسبة لعملك وطبيعة شخصيتك في الحديث معهم، فلن نقيدك في هذا، لكن سنضع لك إرشادات عامة ترسم عليها منهجك الذي تحب. اختر الفصحى ما استطعت لنقل أنك ستتعامل مع عملاء يتحدثون العربية كلغة أم في الغالب، فكيف تحدثهم؟ بلهجتك أم بلهجتهم؟ إننا نرى من تجاربنا أن أيًا من اللهجتين ليستا بشيء أمام الفصحى، وذلك لأسباب يقصر المقام عن بيانها، لكن سنذكر لك بعض الأسباب التي تجعلك تستخدم الفصحى بدلًا من لهجتك المحكية. بادئ ذي بدء فإن الفصحى في أي لغة تكون أشمل من اللهجات المحكية في مفرداتها، وأبلغ في إيصال المعنى واضحًا، دون أن يشوب ذلك استخدام لكلمة تخص منطقة بعينها أو كلمة لها أكثر من معنى بحسب المنطقة، كذلك فإنها أكثر رسمية ومهنية من اللهجة المحكية، فتوحي للعميل بأنك شخص ناضج ومحترف. وقد كان آخر عهدي بالحديث بالعامية على الويب قبل خمسة أعوام أو أكثر، حين راسلني أحدهم من فلسطين يسألني عن مقالة كتبتها، فسألته أن يشرح لي قصده لأني لم أفهمه بسبب لهجته، فأعاد شرحه فلم أفهم، فاعتذرت وطلبت إعادة الشرح مرة أخرى فغضب وتركني. فآليت على نفسي بعدها ألا أكلم أحدًا في عمل إلا بالفصحى، ولعل ما أعانني على ذلك أن كان أغلب من أتعامل معهم وقتها من بلاد المغرب العربي الذين تختلف لهجاتهم اختلافًا كبيرًا عن اللهجات المشرقية، فلا يصلح التعامل بيننا إلا بالفصحى. الزم حدود العمل ستتعامل مع عملاء من الشرق والغرب، وستجد فيهم الصغير والكبير، والحليم والغضوب، والرجال والنساء، ومن على دينك ومن ليس من ملتك، وهكذا، فما السبيل إلى مخاطبة كل أولئك؟ ببساطة، الزم حدود عملك، فلا تسأل عن أمور شخصية أو لا تخص عملك في شيء، ولا تسأل العميل عن عمره إلا لحاجة ملحة ترتبط بالعمل، ولا عن مسألة دينية إلا إن كان العميل يطلب عملًا يخالف شريعتك ومبادئك، وهكذا. وكذلك في التعامل بين الجنسين، إذ تكون هذه مسألة حساسة دومًا ولا يمكن تمام ضبطها، فالحل فيها أن تٌقصِر الحديث على مطالب العمل، ولا تمزجه بالمزاح غير الضروري أو الألفاظ غير اللائقة أو حمالة المعاني، بل كن واضحًا ومختصرًا، وكلامنا هذا للرجال والنساء معًا. لكن هل إرشاداتنا هذه ملزمة لك؟ كلا، فهل يعقل أن تحدث عميلًا بينك وبينه سنوات من العمل، بنفس الرسمية التي تخاطب بها عميلًا تقابله لأول مرة؟ لا شك أنكما ستكونان قد صنعتما رابطة تفسح المجال للتبسط في الكلام، لكن لا تدع هذا يغرك، فهو عميلك بالنهاية، وأنت ملتزم أمامه بعمل، فلا تدفعنك معرفته إلى الجور عليه في حقه أو التجاوز معه في الأدب. التواصل المنتظم مع العميل ينزعج العميل لا شك من قلة التواصل أو عدم انتظامه بينك وبينه، فقد يحتاج إلى تعديلات في مرحلة ما من المشروع، لكن لأنك تعمل في صمت دون الرجوع المنتظم إليه بتقارير عما فعلته، فقد تخطئ في تنفيذ تلك المرحلة أو تنفذها على غير ما يريد العميل. أضف إلى أن العميل قد يمثل منظمة أو شركة هي صاحبة العمل، وتريد منه تقارير مرحلية عن المشروع، فتؤذيه أنت بصمتك أثناء العمل. وقد بينا في الإدارة الفنية للمشروع أساليب تنظيم العمل والتواصل بينك وبين العميل لئلا تقع فيه. وإني أود تنبيهك إلى هذه النقطة لأني أقع فيها بنفسي، فإني أميل في العديد من المشاريع الكبيرة إلى قضاء أغلب وقت التنفيذ في النظر فيها والتخطيط لها وحسابها وتنظيمها وتوحيد عناصرها دون أن أكتب كلمة واحدة، ثم قد أنهي العمل كله في آخر الوقت. وإني لأعلم أن هذه خصلة في شخصيتي زادت وبرزت مع مشاريع التصميم الميكانيكي التي كنت أعمل عليها قديمًا لكثرة ما تحتاج من تخطيط قبل الشروع في التنفيذ، لكن هذا يزعج كثيرًا من العملاء الذين يحتاجون إلى تقارير دورية عن تمام العمل، لهذا من المفيد استخدام أداة لمتابعة سير العمل على المشروع، سواء كانت "أنا" أو تريللو أو غيرهما، أو مجرد ملف في جداول جوجل بينك وبين العميل، كما تحدثنا عن ذلك سابقًا بالتفصيل في مقال الإدارة الفنية للمشروع. أسباب عدم التواصل وإضافة إلى ما سبق، فقد يرجع عدم التواصل المتعمد من جانب المستقل إلى عدة أسباب: قد لا تكون للمستقل خطة عمل واضحة أو مناسبة لظروف عمله، وعليه سيمتنع عن التواصل مع العميل تجنبًا للإحراج إن أبطأ في تسليم مهمة أو أكثر، وعلاج هذا باتباع الإرشادات التي فصلناها في مقال الدخول إلى سوق العمل الحر، و مقالة الإدارة الفنية للمشروع. الاختلاف في التوقيت أو المناطق الزمنية، مما يؤدي إلى صعوبة تحديد أوقات خاصة للعمل. حالات الطوارئ، فقد يحدث لك حادث أو ظرف قاهر يقعدك عن العمل، فحينها تخبر العميل بما حدث في أقرب فرصة، وتعرض عليه الخيارات المتاحة لديك. فقد حدث مرة أني اضطررت لإجراء جراحة أثناء العمل على مشروع، فطلبت من الطبيب ورقة تفيد إجرائي لهذه الجراحة وبمدة الراحة التي أحتاجها، ثم أرسلت إلى العميل معتذرًا ومرفقًا لصورة التقرير من الطبيب. وذكر لي أحد أصحاب المشاريع على منصة مستقل -وقت نشر هذه السلسلة- قريبًا من هذا، فقد اختفى أحد المستقلين الذين يتعامل معهم فجأة دون إنذار فألغى المشروع الذي بينهما وقيَّمه سلبًا، لكن المستقل عاد بعد فترة كبيرة ليخبره بإصابته في حادث سير، وكذا حدث مع مستقل آخر، وفي الحالتين يعود المستقل في أقرب فرصة ليطلع العميل بحقيقة وضعه مع إثباتات تدل على صدق دعواه، إذ هذا أدنى ألا يظن به الظنون وهو لا يراه وبعيد عنه. التعامل مع تعديلات العملاء لا شك أنك ستحسب تكلفة المشروع وفقًا لمعيار تعرفه من الناحية الفنية، كأن تحسبه وفق عدد الكلمات أو الصفحات إن كنت مترجمًا أو عدد التصميمات وعناصرها، أو عدد الخصائص البرمجية المطلوبة، وهكذا وفق كل مشروع، فماذا تفعل لو طلب العميل تعديلات على العمل الذي عملت؟ إن هذا يعني وقتًا أطول في العمل على نفس المشروع، مما يعني أن أجرك سينخفض على هذا المشروع مع كل ساعة إضافية، ويجب أن تحسب للتعديلات حسابها وأنت تضع ميزانية المشروع. فمثلًا، يمكنك تحديد عدد محدد لتعديلات العميل، كأن تكون ثلاث تعديلات مجانية مثلًا، أو أن تكون زمنية فيكون للعميل الحق في التعديل ما لم يمر أسبوع على انتهاء العمل، وهكذا. وذلك لأنك قد تقابل عملاء لا يحسنون وصف ما يريدونه، لكنهم يستطيعون البناء على النماذج التي تقدمها ليصلوا إلى الصورة التي ترضيهم للعمل، لهذا نفضل أن تتفق مع العميل ابتداءً على عدد التعديلات ومدتها الزمنية، كي لا تجهد نفسك بدون مقابل من ناحية، أو تضطر إلى تجاهل الرد على العميل بعد تمام المشروع من ناحية أخرى، فإن الأخيرة هذه ليست من حسن التعامل وقد تُدخل شبهات على كسبك ومالك، كما ستضر سمعتك في السوق، وقد بينا في فصول سابقة كيف أن الويب يختلف عن السوق العادي في سهولة تدمير سمعة شركة أو علامة تجارية، وصعوبة تعويض تلك الخسائر. إدارة الخلافات مع العملاء إننا نحاول في هذه السلسلة أن نمهد الطريق لك كي تدخل مجال العمل الحر وتتعامل مع العملاء وتؤمن لنفسك دخلًا كريمًا مع تجنب الوقوع في الأخطاء والمشاكل التي وقعنا أو نقع فيها بأنفسنا من قبلك أو وقع فيها غيرنا، وذلك ببيان الأساليب والأدوات والبرامج التي تعينك على ذلك. لكن هذا لا يمنع من حدوث خلاف بينك وبين عميل حول تفصيل في المشروع القائم بينكما، أو بسبب تأخرك عليه في العمل، أو تأخره عليك في الردود والملاحظات أو في إنهاء المشروع ودفع باقي مستحقاتك wرغم إنهائك للعمل، إلى غير ذلك من المشاكل التي لا يمكن توقعها إلا بالتجربة المباشرة. ولأن هذه المشاكل واردة لا محالة فإننا سنستعرض أهمها وأكثرها حدوثًا ثم نفصل في كيفية حلها بالشكل الأمثل الذي يضمن الحفاظ على سمعتك وعلاقتك مع العملاء، وسنبدأ بالحديث العام حول المشاكل الفنية والعقبات التي قد تطرأ في المشروع، ثم نعرج على بعض المشاكل التي قد تحدث من جانب العملاء ونرى كيفية التعامل معها. فقد يحدث أنك تتأخر على العميل في تسليم ما يريد، أو تقع لك طوارئ لم تحسب حسابها، أو تختلف وجهة نظركما حول تفصيل داخل المشروع، وهكذا، وإن لم تحسن التعامل مع هذه المشاكل فسيتطور الأمر إلى نقاش حاد اللهجة ثم تصير الأمور تراشقًا شخصيًا وينتهي بإلغاء الصفقة بينكما وخسارتك للعمل وربما تقييم سيء من العميل على الويب أو على منصة العمل الحر التي أجريتما عليها الصفقة. التعامل السليم مع الخلافات إننا ننصحك بالتزام الحِلم والإنصاف عند النظر في تلك المشاكل، ومحاولة تفهم وجهة نظر العميل بوضع نفسك مكانه وحساب احتياجاته ومشاكله والضغط الواقع عليه من أجل تنفيذ المشروع، خاصة إن كان يمثل شركة أو جهة يعمل فيها وهي الطالبة للعمل. فانظر في أصل المشكلة الواقعة بينك وبين العميل، هل يلومك على تقصير في عملك أم بطء في التسليم أم قلة تواصل بينكما، أم عدم التزام بمواعيد التسليم، إلى غير ذلك من الأمور. وإني أكاد أجزم من خبرتي الشخصية أن أغلب مشاكل العملاء ستدور حول مدى خبرة المستقل بعمله وفهمه للمطلوب، والتزامه بموعد التسليم، وتواصله المنتظم مع العميل وحسن تعامله في ذلك التواصل. ونحن في هذه السلسلة نحاول التأصيل للحلول العملية المثلى التي تعلمناها دراسةً أو خبرة كي لا تقع في الأخطاء التي وقعنا -ونقع- فيها في هذه الأبواب، فإن وقع بينك وبين العميل إحدى تلك المشاكل لسبب أو لآخر، فتفهَّم أن العميل يريد إنجاز مطلوبه، لا أكثر ولا أقل، فاجتهد أن تتجنب معه تلك المشاكل أعلاه، لكن إن وقعت فيها فأخبر العميل بسبب ذلك، وناقشه في الخيارات المتاحة التي تحفظ علاقة طيبة معه ولا تضر مشروعه في نفس الوقت. فمثلًا، حين أتأخر في تسليم مشروع ما أو أبطئ في التواصل مع العميل أثناء المشروع فإنني أعتذر له مقابل ذلك، وإن شعرت أن الاعتذار لا يكفي فإني أعوض العميل ماديًا بخصم جزء من ثمن المشروع أو من المشروع الذي يليه إن كان بيننا تعامل لاحق. وقد حدثني أحد المستقلين بموقف أظنه وارد الحدوث لأي أحد لكنه أكثر حدوثًا مع الذين يدخلون المجال لأول مرة، إذ قدم عرضه لعميل وقبله العميل، ثم لما بيّن له العميل تفاصيل الصفقة شعر أن المطلوب أكبر من خبرته الفنية، فأرسل إلى العميل معتذرًا عن إتمام الصفقة وطلب إلغاءها. إن هذا خير من تنفيذ المشروع بأي جودة خوفًا من التقييم السيء أو خسارة ثمن الصفقة، فشعور العميل أنك تقدر وقته وماله سيجعله يصرف نظره إلى حسن خلقك وحرصك على موارده. وإني أزيدك في هذا الموقف أن لو كنت تعرف أحدًا من المتخصصين في ذلك المجال الذي اعتذرت عنه ثم أرشدت العميل إليه لبنيت ثقة بينك وبين العميل، ولزادت فرصة تفكيره فيك كخيار أول في المشاريع التالية، إذ يميل الناس إلى التعامل مع من بنوا معهم روابط ثقة وإن كانوا أقل خبرة من غيرهم. وهكذا تحاول وضع يدك على أصل المشكلة ولماذا يتصرف معك العميل بهذا الشكل، ثم تحاول وضع حلول وفقًا لهذا التأصيل. التعامل مع تجاوزات العميل ستجد في تعاملك مع العملاء أحيانًا تجاوزات شخصية وفنية منهم وتبسط في الكلام قد يزعجك، وسننظر في تفصيل هذا كما يلي: التجاوز في طلبات المشروع قد يطلب العميل عينة مجانية للتأكد من جودة عملك قبل المتابعة في المشروع حفظًا لوقته، وهذا لا بأس به، لكن احذر أن تقدم عينة مجانية كبيرة، كأن تكون أكثر من فقرة أو فقرتين إن كان المشروع ترجمة أو كتابة لعقد مثلًا، أو صفحة أو صفحتين مثلًا إن كان المشروع كتابًا، أو تصميمًا لصفحة إن كان موقعًا، وهكذا. فقد يحدث أن يراسل العميل أكثر من شخص طلبًا لعينة مجانية ويقسم المشروع على هذه العينات المجانية، ثم إذا حصل عليها ألغى المشروع. كذلك قد يطلب العميل مشروعًا بتفاصيل معينة، ثم تقدم عرضك عليه وفقًا لهذه التفاصيل ويوافق عليها، فلما تبدأ في العمل تجده يطلب منك زيادة على ما اتفقتما عليه، فحينها تنبهه بلطف إلى أن هذا خارج عن نطاق الاتفاق، وتخبره بثمن هذه الإضافات، فإن رضي فإنك تعدِّل ميزانية المشروع وفقًا لهذا، وإلا فلك الحق في إلغاء الصفقة أو إتمام المتفق عليه فقط. وهنا تبرز أهمية العمل على منصات مثل مستقل وخمسات وغيرها بدلًا من العمل خارجها، إذ تراجع إدارة المنصة نقاش الصفقة بينكما لتحفظ لك حقك، وتستطيع مراسلتها في حال شككت في مثل هذه الحالة أو غيرها لتنظر فيها. السؤال عن أمور شخصية إننا نوجه الكلام لك هنا كمستقل في هذه النقطة خاصة وفي الكتاب عامة، ألا تخلط الحياة العملية بالشخصية، ولا تتبسط في الكلام خارج نطاق المشروع إلا لحاجة، ولا تتعرض بالسؤال أو المزاح مع العميل في أمور شخصية خاصة ما استطعت. لكن كلامنا هنا يصلح للعملاء والمستقلين على سواء، فقد تتعامل أنت مع عميل لا يرى بأسًا في إقحام الأمور الشخصية في العمل، فيسألك عن حالك الاجتماعية وأولادك وغير ذلك من باب المزاح أو التبسط في الكلام، وقد لا ترضى بهذا، وكم رأينا حالات لنساء يشتكين من أسئلة العملاء الشخصية أو مزاحهم الثقيل أو غير المقبول، فماذا تفعل إن رأيت الطرف الآخر تجاوز حد العمل إلى الأمور الشخصية؟ إن ما ننصحك به ابتداءً هو التغافل إن كان الأمر طفيفًا، فإن عاد للمرة الثانية فنبهه بلطف إلى أنك لا تخلط الحياة العملية بالشخصية وتدعوه إلى التركيز على العمل، فإن تكرر للمرة الثالثة فلك الحق هنا في طلب إلغاء المشروع بينك وبينه. التجاوز في الأدب قد تحدث مشكلة أثناء العمل في المشروع وتجد خطاب العميل لك حادًا في لهجته، وهذا مقبول حين تتفهم أن العميل يشتكي تأخرك أو سوء فهمك لنقطة في التنفيذ أو غير ذلك، فتحاول أن تقدم الحلول المتاحة معتذرًا له عن ذلك التقصير، لكن ماذا لو تجاوز العميل في لهجته إلى السب أو التجريح الشخصي؟ عندئذ، ادفع بالتي هي أحسن، فتغافل عن هذا السب في حقك وقدِّم الحلول المتاحة مبينًا أسباب التقصير، وأخبره أنك تتفهم وجهة نظره وغضبه إزاء تنفيذ مشروعه وطلباته، لكنك لا تتقبل هذه اللهجة في الخطاب. فإن قبل منك وأوقف ذلك التجاوز وإلا فلك أن تخبره أنك قد تلغي الصفقة إن استمر في تجاوزه في الأدب ذاك. طلب أعمال مخالفة لشروطك نأتي هنا لنقطة مهمة وحساسة بالنسبة لأي عامل سواء في وظيفة عادية أو بشكل حر، ماذا لو أتاك عميل يطلب عملًا مخالفًا لمبادئك أو شريعتك؟ فمثلًا يأتيك إعلان عن تصميم لطعام غير صحي، أو ترجمة لنص غير أخلاقي أو إباحي، أو نحو ذلك مما يشين المرء أن يقبض أجرًا عليه، فهل تتنازل عن مبادئك من أجل المال أم ماذا؟! إنني أذكر واقعة رأيتها قبل بضعة أشهر من كتابتي لهذه السطور لمشروع تفريغ صوتي لمحادثة بالعربية يبدو أنها عادية لأول وهلة، لكن صاحب المشروع من شركة صينية بحثت عنها فوجدتها متورطة في قضايا مسلمي الأويغور، وقد أوقفت الولايات المتحدة الأمريكية تعاملاتها معها بسبب تلك الانتهاكات، فما بالك بالمستقلة التي كانت تعمل على المشروع، وهي مسلمة عربية؟! وتستغل هذه الشركة تلك التفريغات لربطها بالمقاطع الصوتية ثم تغذية برمجيات الذكاء الصناعي بها لتحسين التقاطها للكلمات العربية، وفي مثل تلك الحالة نصحت صاحبة المشروع بالثبات على مبادئها ورفض مثل تلك المشاريع. وقس هذا المثال على أي عمل قد يعرض لك، فما ذكرته هنا إلا لأنه ما حدث أمامي، وإلا فهذا لا يقيدك بشيء من دين أو قانون أو مبدأ، فالصحيح صحيح والخطأ خطأ، ومن المهانة قبول المال في عمل يخالف مبدأ أو قيمة سامية تربيت عليها. خلاصة المقال وهكذا نكون قد عرضنا في هذا المقال أغلب النقاط التي تتناول التعامل الشخصي مع العملاء والخلافات التي قد تنشب بينك وبينهم، وسننظر في المقال التالي إن شاء الله في إدارة الموارد البشرية لك كمستقل، فنبحث في إدارة الأزمات والوقت وزيادة الإنتاج. كتبت سارة شهيد المسودة الأولية لهذه المقالة. اقرأ أيضًا المقال التالي: العناية بالصحة الجسدية والنفسية للعامل المستقل المقال السابق: الإدارة الفنية للمشروع للعامل المستقل كيف تتخلص من العملاء السيئين بلباقة واحترام إدارة العملاء، كيف تبقى سعيدًا دون أن تفقد شعر رأسك من هم العملاء السلبيون وكيف تتعامل معهم كيف تخطط كمستقل للطوارئ غير المتوقعة النسخة الكاملة من كتاب دليل المستقل والعامل عن بعد1 نقطة
-
يبدو العمل المستقل من المنزل حلمًا يتحقق لهؤلاء العالقين في دوامة الدوام الكامل، إلا أنه بدوره يحمل في طياته مشاكله الخاصة، الجسدية والنفسية، والتي لا تكون واضحة في البداية، وقد يشكل التعامل معها أكبر تحدٍ يواجهك كمستقل، إلا أنه يمكن الفوز به، إذا كنت ترحب ببعض التغييرات في أسلوب حياتك. بالنسبة لكاتب المقال وربما بالنسبة لك أيضًا، أكبر تحديات هي: العزلة، ونقص التمارين، والإجهاد العقلي، سيتحدث المقال عنها على حدى، وكيف يمكن التعامل معها. سلبية العمل من المنزل يخبرنا كاتب المقال عن مدى شعوره بأنه محظوظ في أول يوم بعد أن استقال من آخر عمل مكتبي له ليبدأ مسيرته كمستقل متفرغ، إذ يستيقظ المرء الساعة التاسعة صباحًا ويحضر فطورًا معدًا من القلب، ويتلذّذ بأول كوب قهوة قبل الشروع في العمل، ولا تبدأ صعوبات أسلوب الحياة الجديد هذا بالظهور إلا بعد الأسابيع الأولى القليلة. العزلة لا تشعر بقيمة القدرة على الانخراط الاجتماعي السهل أثناء قيامك بأي عمل عادي إلا عندما تبدأ العمل كمستقل، فحينما عمل صديقنا في مطبخ، كان زملاؤه يمازحون بعضهم البعض طوال اليوم، وعمل آخر جعله يجلس في مهجع محاطًا بكثير من الأشخاص الذين كان يعرفهم، إذ لا يمكنك تجنب الانخراط الاجتماعي إذا كانت حياتك تعتمد عليه. عندما بدأ صاحبنا مسيرته كمستقل، كان يمكن أن تمر أيام كاملة دون أن يحادث أحدًا إلا بالرسائل النصية أو البريد الإلكتروني أو الاتصالات الهاتفية، ومن المؤكد أن العديد منكم مر بهذا، ويمكن لهذا أن يؤثر عميقًا، ويسبب لك القلق خصوصًا إذا كنت مستقلًا يعيش وحده. يمكن لعمل كهذا أن يتسبب بجداول عمل غريبة ويوتر علاقاتنا الاجتماعية الهشة أساسًا، وقبل أن تدرك ذلك ستجد نفسك ذلك الشخص ذا اللحية الشعثاء الذي يبتاع البسكويت في منتصف الليل مرتديًا خفّين. نقص التمرن ينتج عن الجداول اليومية الغريبة عادة سيئة أخرى، نقص التمرن، حيث يمكن أن يكون جسدك رشيقًا طوال حياتك لكن تفسد ساعات الجلوس الطويلة أمام الحاسوب ذلك في سنة أو سنتين، فيمكن أن يسبب هذا مشاكل قلبية، فتجد نفسك تتعرّق أكثر من الإنسان العادي بعد الجلوس من مشية خفيفة لمدة خمس دقايق، فتكون قد عوّدت جسدك على عدم التمرن والحركة. والمعلومة الصادمة هي أن هذا شائع بين المستقلين، الذي قد يعرضون أنفسهم لخطر أكبر من أمراض القلب والأوعية الدموية إذا ظلوا ملتصقين بالحاسوب، أغلبنا غير معتاد على التمرن في المنزل، بل يرونه نشاطًا غير منزلي، فيتهمون العمل المكتبي بتسبيب المشاكل الصحية بساعات عمله الطويلة، بينما يرتكبون نفس الخطأ في عملهم المستقل. الإجهاد النفسي هذه مشكلة أقل شيوعًا بين المستقلين إلا أن هذا ليس مؤشرًا إيجابيًا، فالسبب هو بيئة العمل الغريبة التي تسمح لك باستخدام فيس بوك أو Reddit أو أي مصدر تشتيت تختاره وتضيع وقتك به بعيدًا عن الضغط، فكأننا نستبدل مشكلة بأخرى. لكن تجنب الإجهاد العقلي أو الإنهاك أكثر من مسألة مصادر تشتيت، فيمكن للبعض قضاء أيام على مشروع واحد دفعة واحدة باستثناء بعض الاستراحات القصيرة، والبقاء مستيقظين طيلة بعض الليالي، مؤدين بأنفسهم إلى كارثة. للمشكلة عدة تجليات، فصاحبنا مثلًا يعاني من قلة الإنتباه للتفاصيل، قد تعاني أنت من نسيان مواعيدك النهائية، أو شيء مشابه، والفظيع في الإجهاد العقلي هو استمراره لفترة دون أن يُلاحَظ إلا عندما يكون قد نال من أدائنا. يقود هذا إلى نقطة سيتم تكرارها في أقسام المقال التالية: أفضل وسيلة للتعامل مع هذه المشاكل هي الإجراءات الوقائية منها، وسنتحدث الآن عن كيفية تطبيقها. كيفية التعامل مع هذه المشاكل التعامل مع العزلة كمستقلين، فإن أبسط طريقة للتخلص من العزلة هي إيجاد محيط عمل تعاوني، من المحتمل أن هذا الاقتراح قد خطر لك إذا كنت تعمل كمستقل منذ مدة، لنناقش إذًا بعض الحلول الأخرى. تزويد جدول عملك بالمكافآت لنفسك فكرة جيدة، يمكنك وضع موعد محدد لك لأخذ راحة وقضاء بعض الوقت مع أصدقائك بعد أن تنجز قدرًا جيدًا من مشروعك، هل أنهيت مشروعك خلال المدة المطلوبة، لم لا تتناول العشاء مع أصدقائك إذًا؟ قد يبدو نهجًا آليًا، لكن قد تكافئ نفسك بطريقة مختلفة، كالانضمام إلى دورة لليوغا أو دروس رقص، ما يقودنا إلى القسم التالي. التعامل مع نقص التمرن يمكنك تبني حلول في غاية الفعالية حيث تحل مشكلتين في النفس الوقت، كالانضمام إلى تمارين جماعية حيث يحل لك مشكلتين سبق لنا ذكرهما: العزلة، والنقص التمرن. في حالة صديقنا الكاتب، فإنه يأخذ دروسًا في الرقص، لذا علاوة على مقابلته لأشخاص جدد وإعادة جسمه لرشاقته، فإنه يكسب مهارة جديدة، أليس انتصارًا ساحقًا؟ النادي الرياضي خيار وارد، لكن إذا لم تكن من محبيه فهناك العديد من التمارين اليومية التي يمكنك القيام بها في المنزل بقليل من الاستثمار للبدء، مثل P90X، أو Insanity، أو DDP Yoga. التعامل مع الإجهاد العقلي وها قد وصلنا إلى مشكلتنا الأخيرة، الإجهاد العقلي، والمقال سيختصرها عليك ليتجنب إجهادك ولا يتسبب بها. أفضل وسيلة للتعامل مع هذه المشكلة هو التقليل من حدوثها قدر الإمكان، ستواجه دومًا كمستقل مواعيد نهائية مباغتة تستنزف قواك العقلية، لكن يمكن احتواء الضغط الناتج بتنظيم عبء العمل، وهذه بعض النصائح لمجابهة الإجهاد: حاول الالتزام بجدول حتى لو كان غير رسمي، إذ سيساعدك في تقدير مدة التي تلزم كل مشروع. ارفض المواعيد النهائية اللامعقولة، فلن يستفيد أحد من ضغطك على نفسك بالعمل بلا مغزى. نفّس عن نفسك بطريقتك المفضلة سواء كانت الطبخ، أو تناول الطعام في الخارج، أو الخروج مع الأصدقاء، أو لعب لعبة فيديو جديدة. خاتمة المشاكل السابق ذكرها من عزلة ونقص التمرّن والإجهاد العقلي ليس مما يجب التغاضي عنه، وإلا انحرفت بحياتك عن الطريق السوي وضرّت صحتك على المدى البعيد. الوقاية هي النهج الأساسي لمجابهة هذه المشاكل والتخلص منها إلى الأبد، لنراجع إذًا معًا خلاصة الحلول لها: كرّس وقتًا لأصدقائك وقابل أناسًا جدد. اجعل أسلوب حياتك أكثر حيوية واختر أي تمرين تفضله، طالما أنه يبعدك عن الكرسي. ابقِ حياتك الوظيفية مرتبة ومارس هواياتك المفضلة. ما المشكلة التي تعتبرها الأكبر حول العمل في المنزل؟ شاركنا تجربتك في تعليق في الأسفل! ترجمة -وبتصرف- للمقال How to Work From Home (And Stay Physically and Mentally Healthy) لصاحبه Alexander Cordova1 نقطة
-
قراءة بيانات خام مُرسَلة عبر طلب POST تُنظَّم عادةً البيانات المُرسلة عبر طلب POST في أزواج مفتاح/قيمة مع نوع MIME application/x-www-formurlencoded، ومع ذلك تتطلب العديد من التطبيقات مثل خدمات الويب (web services) بيانات خام بتنسيق XML أو JSON غالبًا لتُرسَل، يمكن قراءة هذه البيانات بإحدى طريقتين. الأولى هي عبر مجرى يوفر الوصول إلى هيكل الطلب الخام php://input. لدينا الشيفرة التالية في الإصدار PHP < 5.6: $rawdata = file_get_contents("php://input"); // بفرض أننا نحصل على JSON $decoded = json_decode($rawdata); الثانية عبر المتغير $HTTP_RAW_POST_DATA الذي هو متغير عام يتضمن بيانات خام مُرسَلة عبر طلب POST وهو مُتاح فقط إذا كان الموجِّه always_populate_raw_post_data في ملف php.ini مفعّلًا. $rawdata = $HTTP_RAW_POST_DATA; // إذا كنا نريد الحصول على XML $decoded = simplexml_load_string($rawdata); أُهمل هذا المتغير منذ الإصدار PHP 5.6 وأُزيل في الإصدار PHP 7.0. لاحظ أنّ هذه التوابع غير متاحة عندما يُضبَط نوع المحتوى إلى القيمة multipart/form-data التي تُستَخدم لرفع الملفات. قراءة بيانات مُرسَلة عبر طلب POST تُخزَّن البيانات المُرسَلة عبر طلب POST في المتغير ذو النطاق العام العالي $_POST على شكل مصفوفة ترابطية. لاحظ أنّ الوصول إلى عنصر مصفوفة غير موجود يولّد ملاحظة لذا يجب التأكد دومًا من وجود العنصر باستخدام الدوال isset() أو empty() أو عامل تجميع null، مثال: $from = isset($_POST["name"]) ? $_POST["name"] : "NO NAME"; $message = isset($_POST["message"]) ? $_POST["message"] : "NO MESSAGE"; echo "Message from $from: $message"; // الإصدار PHP ≥ 7.0 $from = $_POST["name"] ?? "NO NAME"; $message = $_POST["message"] ?? "NO MESSAGE"; echo "Message from $from: $message"; قراءة بيانات مُرسَلة عبر طلب GET تُخزَّن البيانات المُرسَلة عبر طلب GET في المتغير ذو النطاق العام العالي $_GET على شكل مصفوفة ترابطية. لاحظ أنّ الوصول إلى عنصر مصفوفة غير موجود يولّد ملاحظة لذا يجب التأكد دومًا من وجود العنصر باستخدام الدوال isset() أو empty() أو عامل تجميع null، مثال: مثال (بفرض لدينا الرابط /topics.php?author=alice&topic=php): $author = isset($_GET["author"]) ? $_GET["author"] : "NO AUTHOR"; $topic = isset($_GET["topic"]) ? $_GET["topic"] : "NO TOPIC"; echo "Showing posts from $author about $topic"; // الإصدار PHP ≥ 7.0 $author = $_GET["author"] ?? "NO AUTHOR"; $topic = $_GET["topic"] ?? "NO TOPIC"; echo "Showing posts from $author about $topic"; معالجة أخطاء رفع ملف قد يتضمن العنصر $_FILES["FILE_NAME"]['error'] (حيث "FILE_NAME" قيمة الخاصيّة name للعنصر input الموجود في النموذج الخاص بك) إحدى القيم التالية: 1- UPLOAD_ERR_OK: لا يوجد خطأ، رُفِع الملف بنجاح. 2- UPLOAD_ERR_INI_SIZE: تجاوز الملف المرفوع قيمة upload_max_filesize في الملف php.ini. 3- UPLOAD_ERR_PARTIAL: تجاوز الملف المرفوع القيمة MAX_FILE_SIZE المحددة في نموذج HTML. 4- UPLOAD_ERR_NO_FILE: لم يُحمَّل أي ملف. 5- UPLOAD_ERR_NO_TMP_DIR: فقدان مجلد مؤقت (من الإصدار PHP 5.0.3). 6- UPLOAD_ERR_CANT_WRITE: فشل كتابة الملف على القرص (من الإصدار PHP 5.1.0). 7- UPLOAD_ERR_EXTENSION: إضافة PHP أوقفت رفع الملف (من الإصدار PHP 5.2.0). الطريقة الأساسية لفحص الأخطاء: <?php // "FILE_NAME" قيمة الخاصيّة `name` للعنصر `input` الموجود في النموذج الخاص بك $fileError = $_FILES["FILE_NAME"]["error"]; switch($fileError) { case UPLOAD_ERR_INI_SIZE: // تجاوز الحجم الأعظمي المحدد في php.ini break; case UPLOAD_ERR_PARTIAL: // تجاوز الحجم الأعظمي المحدد في نموذج html break; case UPLOAD_ERR_NO_FILE: // لم يُحمَّل أي ملف break; case UPLOAD_ERR_NO_TMP_DIR: // لا يوجد مجلد مؤقت للكتابة فيه break; case UPLOAD_ERR_CANT_WRITE: // خطأ في الكتابة إلى القرص break; default: // لا يوجد أخطاء! break; } تمرير مصفوفات عبر طلب POST يُرسَل عادةً عنصر نموذج HTML إلى PHP كقيمة مفردة، مثال: <pre> <?php print_r($_POST);?> </pre> <form method="post"> <input type="hidden" name="foo" value="bar"/> <button type="submit">Submit</button> </form> الخرج: Array ( [foo] => bar ) لكن قد تحتاج أحيانًا إلى تمرير مصفوفة قيم، يمكنك القيام بذلك بإضافة مايشبه اللاحقة في PHP إلى الخاصيّة name لعناصر HTML: <pre> <?php print_r($_POST);?> </pre> <form method="post"> <input type="hidden" name="foo[]" value="bar"/> <input type="hidden" name="foo[]" value="baz"/> <button type="submit">Submit</button> </form> الخرج: Array ( [foo] => Array ( [0] => bar [1] => baz ) ) يمكنك أيضًا تحديد فهارس المصفوفة إما أرقام أو سلاسل نصية: <pre> <?php print_r($_POST);?> </pre> <form method="post"> <input type="hidden" name="foo[42]" value="bar"/> <input type="hidden" name="foo[foo]" value="baz"/> <button type="submit">Submit</button> </form> الخرج: Array ( [foo] => Array ( [42] => bar [foo] => baz ) ) يمكن استخدام هذه التقنية لتجنب حلقات ما بعد المعالجة عبر مصفوفة $_POST مما يجعل شيفرتك أنظف وأدق. رفع ملفات باستخدام HTTP PUT توفر PHP الدعم للطريقة HTTP PUT المستخدمة من قِبَل بعض العملاء لتخزين الملفات على الخادم، تعدّ طلبات PUT أبسط من رفع ملف باستخدام طلبات POST وتبدو بالشكل: PUT /path/filename.html HTTP/1.1 يمكنك كتابة شيفرة PHP التالية: <?php // تأتي بيانات PUT من مجرى الدخل القياسي $putdata = fopen("php://input", "r"); // فتح ملف للكتابة $fp = fopen("putfile.ext", "w"); // قراءة 1 كيلوبايت في كل مرة وكتابتها في الملف while ($data = fread($putdata, 1024)) fwrite($fp, $data); /* إغلاق المجاري */ fclose($fp); fclose($putdata); ?> ترجمة -وبتصرف- للفصل [Reading Request Data] من كتاب PHP Notes for Professionals book اقرأ أيضًا المقال التالي: المقابس (sockets) في PHP المقال السابق: التعامل مع الروابط URL في PHP1 نقطة
-
هل يجب أن يتم الدفع بعملة الدولار؟ نظرًا لأنّ حسابي البنكي لا يوفر سوى العملة المصريّة...1 نقطة
-
يجب تغيير الإعدادات الافتراضية في إعدادات php في حال كنت تقوم بإجراء عمليات على جداول كبيرة الحجم. ويمكن ذلك عن طريق الذهاب إلى ملف تعريف إعدادات php ضمن خادم الويب ويكون عادةً ضمن المسار : /etc/php7/fpm/php.ini في حال لديك إصدار آخر يجب أن تستبدل رقم الإصدار 7 بالرقم الذي لديك، ولكنه سيكون موجود ضمن etc غالباً، ثم نقوم بتعديل الحد الأقصى للذاكرة بأن نقوم بالبحث عن التالي: القيمة السابقة memory_limit = 512M القيمة الجديدة memory_limit = 2048M ثم يجب بعد ذلك إعادة تشغيل خادم الويب: sudo systemctl restart nginx1 نقطة
-
المُشكلة التي ظهرت لك بسبب هذا السطر: let name = fares; لان جافاسكربت لا تعرف الكلمة fares فهي ليست كلمة محجوزة في اللغة، كما أنه لا يوجد في السكربت أي مُتغير بالإسم fares. أعتقد أنك تريد تعريف مُتغير name و إسناد إسمك له كقيمة. لكن لعمل هذا تحتاج أن تُخبر جافاسكرت بأنه نص بإستعمال علامتي التنصيص بهذا الشكل مثلاً: let name = "fares"; و هذا ما تُوضحه رسالة الخطأ: Uncaught ReferenceError: fares is not defined1 نقطة
-
سلام عليكم مثلا عندي ملف فيه محتوى كالتالي if ($check1[1] == "true") { echo ' <li class="app-sidebar__heading dropdown-btn"> <a href="#" aria-expanded="true"> العملاء <i class="metismenu-state-icon pe-7s-angle-down caret-left"></i> </a> </li> <div class="dropdown-container"> <li> <a href="users.php"> <i class="metismenu-icon pe-7s-users"></i> العملاء </a> </li> <li> <a href="#"> <i class="metismenu-icon pe-7s-settings"></i> إعدادات العملاء <i class="metismenu-state-icon pe-7s-angle-down caret-left"></i> </a> <ul> <li> <a href="addUser.php"> إضافة عميل </a> </li> </ul> </li> </div>'; } انا حبيت افصل ال html عن php بحيث اقدر ف اي وقت اعدل عالتصميم من غير الكود ما حد يلمسه الفكرة اني عملت ملف سميته sidebar_functions.php و استدعيته بدالة require_once و عملت function كالتالي //customers function customers(){ require_once ("templates/sidebar/customers.html"); } و حطيت كود ال html بصفحة سميتها customers.html في مجلد خاص بيها بعيد خالص عن الكود البرمجي . و جيت عند الملف الرئيسي استدعيت الfunction بالشكل ده if ($permission == 1) { customers(); } و اشتغلت معايا كويس جدا . السؤال الأول هل اللي انا سويته ده صح و لا انا بخترع من دماغي ؟ السؤال الثاني : - لو الطريقة غلط ، ايه الصح ؟ السؤال الثالث :- هل لو عملت تنسيقات html في جدول بالداتابيز و عملت التحرير بتاعها من لوحة التحكم افضل و لا انها تكون بملفات منفصلة ما تسببش ضغط عالداتابيز افضل ؟ شكرا لكم و انتظر اجابة اسئلتي1 نقطة
-
أريد أن أعرف ما هو مكون React.StrictMod فهو لا يغير شيء في الصفحة بل أحيانًا يظهر خطأ في الكونسول unsafe lifecycle methods were found within a strict-mode tree ولا يظهر هذا الخطأ إلا عندما أستعمل المكون React.StrictMod1 نقطة
-
1 نقطة
-
ما قمت به صحيح و يقارب من نموذج الMVC حيث يتم الفصل بين الواجهات الامامية والواجهات الخلفية بحيث أنه لا يتم تعديل الواجهات الخلفية في حال تم عمل اي تعديل في الواجهات الخلفية. اما بخصوص سؤالك عن إمكانية وضع الhtml في الdatabase ومن ثم طلب البيانات فهذه الخطوة لن تكون صحيحة لأنك بذلك ستشكل ضغطاً كبيراً على قاعدة البيانات بالاضافة إلى أن البرنامج سيكون بطيئاً جداً.1 نقطة
-
1 نقطة
-
الفرق اﻷول وهذا قائم في جميع نسخ الـReact هو شكل الكود: Class Components تعرف ES6 Class وتستخدم inheritance بينما Function Components تستخدم توابع عادية. قبل نسخة React 16.8 كان هناك فرقان آخران جوهريان: الـFunction component لا تستطيع استخدام state، وقتها لم يكن هناك شيء اسمه useState ﻷنه لم يكن هناك شيء اسمه hooks من اﻷساس. الـClass component تستطيع تعريف توابع Lifecycles مثل componentDidMount وغيرها بينما Function component لم تكن تستطيع ذلك ﻷنه لم يكن هناك useEffect. ولكن مع نسخة React 16.8 وظهور hooks لم يعد هناك أي فرق بين Class components وfunction components سوى في الشكل والطريقة، أنا شخصياً صرت أستعمل function components دائماً ليس ﻷنها أسرع، ليس ﻷنني أستطيع فعل أشياء لا أستطيع فعلها بالـClass components وإنما فقط ﻷنها أبسط وأجمل أو باﻷحرى ﻷنني أحببتها أكثر ويبدو أن الكثيرين من مبرمجي الـReact يشاطرونني الرأي إذ لم يعد هناك مكتبة React تقريباً لا تستعمل hooks. صحيح أن فريق الفيسبوك لم يصرح أنه سيلغي Class component ولكني أعتبرها ملغاة بحكم المجتمع.1 نقطة
-
قمت بعمل اختبار سرعة على المدونة الخاصة بك ووجدت أن سرعتها على اجهزة الديسكتوب ممتازة ب98 من 100 و لكن سرعتها على الجوال اقل بعض الشيء حيث بلغت 85 من 100 وهنالك بعض النصائح التي يمكنك القيام بها لتحسين سرعتها على الموبايل: ان تقوم بأعطاء الصور width و height. ان تقوم باستخدام عملية الكاشينج و تعطي الكاش عمراً طويلاً. تقليل زمن استجابة الخادم للطلبات من خلال تحسين جودة الكود. بالاضافة إلى أن المكتبة بهذا الرابط تستهلك 1.5 ثانية و هي اكبر مستهلك للوقت لذلك ينصح بحذفها إن أمكن. بعد أن تقوم بهذه الخطوات يمكنك إعادة الاختبار من هنا و معرفة التحسن الذي حدث على مدونتك و النصائح الموجهة اليك من أجل اداء افضل.1 نقطة
-
اذا قمت بتحميل عدد من الخطوط من قوقل فونتس واردت ان استخدم مثلا الخط الاول للعناوين والخط الثاني للفقرات كيف يمكنني ذلك عن طريق مثلا @font-face واذا كان هنالك اكثر من طريقه ارجو كتابتها لي1 نقطة
-
1 نقطة
-
يجب الاطلاع أولا عل الكود سورس الخاص بمدونتك لتحديد ما ان كان هناك كود javascript غير مستخدم ثم محاولة ازالته بطريقة لا توثر على عمل المدونة الاساسي وان لم تكن تعرف البرمجة فالحل الوحيد هو عبر توظيف مستقل له دراية بالمجال تمكنه من فحص المدونة وتسريعها عبر ازالة كل ماهو غير مستعمل وتعديل الكود المتبقي ليعمل بسلاسة1 نقطة
-
كل كود جافا سكربت لا تستخدمه قم بإزالته سواء في ملفات js او في ملفات html أكواد javascript تكون مخزنة بملفات امتدادها يكون .js أو ايضا تجدها في ملفات html بصيغة <script type="text/javascript">هنا كود الجافاسكريبت</script> و ايضا قم بضغط ملفات js حتى تقلل حجمها, لانه في هذه الطريقة تقلل مدة تحميل الملف مما يزيد من سرعة الموقع و يمكنك استخدام هذه الطريقة عن طريق موقع https://javascript-minifier.com/ أو اي موقع أخر يحول الكود إلى Minified. ملاحظة: يمكن ايضا التعامل مع ملفات css بنفس الطريقة وتحويلها إلى Minified. مثل هذا الكود $("#contactFormmm").validator().on("submit", function (event) { console.log("hellloooooooooooooooooooooooo"); if (event.isDefaultPrevented()) { // handle the invalid form... formError(); submitMSG(false, "هل قمت بملء النموذج بشكل صحيح؟"); } else { // everything looks good! event.preventDefault(); submitForm(); } }); function submitForm(){ // Initiate Variables With Form Content var name = $("#name").val(); var email = $("#email").val(); var subject = $("#subject").val(); var msg = $("#msg").val(); $("body").addClass("loading"); $('.abcmodal').fadeIn(500); $('.overlayy').fadeIn(500); var fd = new FormData(document.getElementById("contactFormmm")); console.log("hellloooooooooooooooooooooooo"); $.ajax({ type: "POST", url: "{{ route('contact-us.store') }}", data: fd, cache: false, processData: false, contentType: false, success : function(text){ $("body").removeClass("loading"); $('.abcmodal').fadeOut(500); $('.overlayy').fadeOut(500); formSuccess(); } }); } function formSuccess(){ $("#contactFormmm")[0].reset(); submitMSG(true, "تم الإرسال"); } function formError(){ $("#contactFormmm").removeClass().addClass('shake animated').one('webkitAnimationEnd mozAnimationEnd MSAnimationEnd oanimationend animationend', function(){ $(this).removeClass(); }); } function submitMSG(valid, msg){ if(valid){ var msgClasses = "h3 text-center tada animated text-success"; } else { var msgClasses = "h3 text-center text-danger"; } $("#msgSubmit").removeClass().addClass(msgClasses).text(msg); } عند تحويله يصبح function submitForm(){$("#name").val(),$("#email").val(),$("#subject").val(),$("#msg").val();$("body").addClass("loading"),$(".abcmodal").fadeIn(500),$(".overlayy").fadeIn(500);var o=new FormData(document.getElementById("contactFormmm"));console.log("hellloooooooooooooooooooooooo"),$.ajax({type:"POST",url:"{{ route('contact-us.store') }}",data:o,cache:!1,processData:!1,contentType:!1,success:function(o){$("body").removeClass("loading"),$(".abcmodal").fadeOut(500),$(".overlayy").fadeOut(500),formSuccess()}})}function formSuccess(){$("#contactFormmm")[0].reset(),submitMSG(!0,"تم الإرسال")}function formError(){$("#contactFormmm").removeClass().addClass("shake animated").one("webkitAnimationEnd mozAnimationEnd MSAnimationEnd oanimationend animationend",function(){$(this).removeClass()})}function submitMSG(o,t){if(o)var e="h3 text-center tada animated text-success";else e="h3 text-center text-danger";$("#msgSubmit").removeClass().addClass(e).text(t)}$("#contactFormmm").validator().on("submit",function(o){console.log("hellloooooooooooooooooooooooo"),o.isDefaultPrevented()?(formError(),submitMSG(!1,"هل قمت بملء النموذج بشكل صحيح؟")):(o.preventDefault(),submitForm())});1 نقطة
-
أستخدم المسار التالي: Route::livewire('/register', 'register'); و قد ظهر لي الخطأ: Attribute "livewire" Not recognized أستخدم livewire2 كيف يٌمكن حل هذه المشكلة.1 نقطة
-
يتيح livewire2 الأن تمرير مكونات livewire مباشرة إلى المسارات باستخدام Route::get() مثل // قبل Route::livewire('/users', 'users'); // بعد Route::get('/users', \App\Http\Livewire\Users::class); ولو كنت تستخدم laravel 7 تحتاج إلى إزالة namespace من ملف app\Providers\RouteServiceProvider.php وهو هذا السطر protected $namespace = 'App\Http\Controllers'; ولكن في laravel 8 يتم إزالته افتراضيا. ومن ثم تشغيل الأوامر التالية php artisan cache:clear php artisan route:clear php artisan config:clear php artisan view:clear1 نقطة
-
لقد تم إزالة هذه الدالة في النسخة الثانية من Livewire ولكنك يمكنك إذا كنت تريد الإستغناء عن ال Controller والتواصل مباشرة مع ال Livewire فيمكنك القيام بذلك عن طريق التالي: استخدام الدالة get بدلاً من livewire وفي ال parameter الاول تضع الرابط المراد التعامل معه للوصول إلى هذه الصفحة وال parameter الثاني تضع ال Livwire component والذ ستجده في المسار app/Http/Livewires وسيكون لديك على الشكل التالي: Route::get('/register', App/Http/Livewires/register::class); ومن الأفضل عليك إتباع التسمية الصحيحة حيث أن يكون اسم الملف مبدوئاً بحرف كبير Register التوجه إلى الملف RouteSeriveProviders في المسار app/Providers/RouteSeriveProviders وقم بإيقاف الnamespace الموجود والذي هو: protected $namespace = 'App\Http\Controllers'; لأنه في حال لم تقم بذلك فلن يعمل لأنه يتوجه إلى مسار أخر معتمدا على هذا ال namespace احفظ التغيرات ونفذ الأمر php artisan config:cache php artisan cache:clear وهذا سيقوم بفتح الصفحة لديك.1 نقطة
-
يجب إضافة الأسطر التالية إلى didFinishLaunchingWithOptions في ملف AppDelegate.m إذا كنت تستخدم objective-c أو AppDelegate.swift إذا كنت تستخدم swift objective-c if (@available(iOS 10.0, *)) { [UNUserNotificationCenter currentNotificationCenter].delegate = (id<UNUserNotificationCenterDelegate>) self; } Swift if #available(iOS 10.0, *) { UNUserNotificationCenter.current().delegate = self as? UNUserNotificationCenterDelegate } ثم تشغيل الأوامر التالية flutter clean flutter run إذا لم ينجح الأمر قم بتحديث المكتبة إلى أخر إصدار.1 نقطة
-
في المسار التالي config/app.php , يجب وضع Laravel\Socialite\SocialiteServiceProvider::class في مصفوفة providers, و وضع التالي 'Socialite' => Laravel\Socialite\Facades\Socialite::class في مصفوفة aliases . ولأستخدامها في ملفات Controllers نضع use Socialite; ايضا يمكنك تشغيل الأمر التالي php artisan config:clear1 نقطة
-
يجب استدعاء الأمر التالي php artisan passport:install سيُنشئ هذا الأمر مفاتيح التشفير اللازمة لإنشاء رموز وصول آمنة.1 نقطة
-
مرحباً بك : الشيئ الأساسي في تطوير المهارات والذي يحسنها بشكل كبير هو التمرين والتدريب المستمر في البداية من الممكن أن تأخذي دورات في مجالك وتقومي بجمع المعرفة العلمية وبعد ذلك تتوجهي للتمرين وعمل مشاريع خاصة بك ويجب أن تكون مختلفة حتى تأخذي خبرات مختلفة ويمكنكي حتى أن تطلبي المساعدة من ال seniors في المجال الخاص بكي وأن تستفادي من توجيهاتهم ( ويجب أن تعتمدي في البحث على نفسك ولا تتخذ الطريق السهل مباشرة وهو السؤال ) وقومي بالتقديم على شركات حتى للتمرين لاكتساب خبرة سوق العمل.1 نقطة
-
يمكنك الإشارة إلى هذا الصف على شكل اعتمادية أو dependency في أي متحكم آخر، فسيتم إنشاؤه حتى لو لم تقم باستخدام واجهة Interface بداخل هذا المتحكم. مثال: <?php namespace App\Http\Controllers; use App\Users\Repository as UserRepository; class UserController extends Controller { /** * The user repository instance. */ protected $users; /** * Create a new controller instance. * * @param UserRepository $users * @return void */ public function __construct(UserRepository $users) { $this->users = $users; } } أما في حال كنت ستستخدم واجهة، تأكد من أن الصف يقوم بعمل implement لهذه الواجهة ثم يجب القيام باستدعائه عن طريق التابع bind في أي مقدّم خدمة. على الشكل التالي: $this->app->bind(UserRepository::class, EloquentUserRepository::class);1 نقطة
-
quantization: وتعني التكميم - جعل قيم مستمرة لدالة ما تأخذ قيم متقطعة، جعل البيانات تبدو مثل كميات. مثل درجة الحرارة والتي من الممكن أن تأخذ أي رقم عشري غير منتهِ بين مثلا إذا كان لدينا مسألة فيها درجة الحرارة بين -100 إلى 100 فالقيم الممكنة هي جميع القيم العشرية ضمن المجال المذكرة ومنها 1.5566 و 88 و 12.1547- و 33.33333 .. لنفرض أننا نريد القيام بتكميم قيم درجات الحرارة حيث نقوم بالتقسيم إلى فئات, مثلا جميع القيم يتم تقريبها إلى أقرب درجة صحيحة فتصبح القيم السابقة على الترتيب : 2 و 88 و -12 و 33. في حال أردنا التقريب لأقرب عدد زوجي مثلا ستكون النتيجة : 2 و 88 و 12 و 34 في حال أردنا التقريب لأقرب عدد فردي مثلا ستكون النتيجة : 1 و 87 و 11 و 33 يمكننا أيضا تقسيم المجال الكبير لمجالات طولها 5 مثلا ..(سيكون التقريب لأقرب مضاعف للعدد5) وغيرها.. كما يمكن الاعتماد على (قيمة ضمن مجال - تكرارها) مثلا 1و2و2و2و2و3و3و3و5و8و8و 9 سيكون لدينا القيم التي في المجال 1-4 هي 8 ونعتبرها أول مجموعة أو مجموعة مكممة 1 -> 8 المجموعة 2 -> 3 (مجالها 5 - 8), المجموعة 3 -> 1 ______________________ decoding: فك الترميز - أحيانا نكتب البيانات بصيغة مختلفة عن ترميزها الحقيقي بهدف تشفيرها أو ضغطها (تقليص حجمها) أو نعطي لنفس الرمز القدرة على التعبير لأكثر من قيمة أو العكس (نعرف القصد من متحولات عامة) مثلا في لوحة المفاتيح سيعامل الحاوسب الرقم 2 و ٢ وهما رمزان مختلفان ولهما نفس القيمة والتي هي اثنان. برمجيا، يكون فك الترميز باستبدال مجموعة بيانات بمجموعة بيانات أخرى باستخدام شيئ يشبه قاموس اللغات أي عندما ترى 0010 استبدلها ب 1101 مثلا .. باختصار: فك الترميز هو عملية تحويل البيانات من شكل لآخر. _______________________ في حال وجود أمثلة محددة تتطلب الشرح أرجو نشرها، ليكون الشرح أدق و أفضل.1 نقطة
-
بعد أن تقوم بتحميل الخطوط و تضيفها الى ملفات المشروع عليك أن تقوم بإضافة الكود الاتي: @font-face { font-family: myFontFamily1;//هنا تقوم بكتابة اسم عائلة الخط src: url(sansation_light.woff);//هنا تقوم بكتابة مسار تواجد الخط } @font-face { font-family: myFontFamily2;//هنا تقوم بكتابة اسم عائلة الخط src: url(sansation_light.woff);//هنا تقوم بكتابة مسار تواجد الخط } h1:{ font-family:myFontFamily1; } p:{ font-family:myFontFamily2; } حيث يتعين عليك اضافة font-face لكل خط على حده.1 نقطة
-
يمكنك طرح مشروع على مستقل، او تصفح مشاريع مشابهة و النظر لمتوسط سعر العروضو المجال الذي قام صاحب المشروع بتحديده.من بعد طرح المشروع واستقبال العروض و النقاش مع المستقلين بالكلفة، يمكنك عندها تحديد مجال للسعر.. تسعير خرائط غوغل: بالنسبة لخرائط غوغل، تعتمد على الخواص التي تقوم بتفعيلها في api key.. بعض تكون مجانية لعدد محدد من الطلبيات Queries و من ثم كل X طلبية تكلف Y$. يمكنك تصفح الاسعار من صفحة غوغل ماب prices. إضافة غوغل مابس لمشروع ما، و الكلفة التي يجب وضعها من قبل المستقل يمكن معرفتها كما سبقت و طرحت. التسعير يختلف من شخص لآخر و حسب تكلفة المعيشة في بلده.1 نقطة
-
الجافا سكربت بحر واسع ويحتاج منك الى عمل كبير ولكن سأعطيك صورة مبسطة عنها :- اولاً:- المتغيرات وهي التي يتم تخزين البيانات فيها كالاتي: var name = "ahmed"; var isStudent = true; var price1 = 5; var price2 = 6; let total = price1 + price2; فتعريف المتغيرات كما لاحظت ينقسم الى ثلاثة اجزاء الاول وهو اما ان يكون var او let ويقوم بتعريف مدى ظهور المتغير و اسم المتغير و قيمة المتغير. ثانياً :- الجمل الشرطية وهي التي تحدد تفرع البرنامج حسب بعض المتغيرات وتكون كالاتي: var number = 12; if(number > 10){//الجملة الشرطية console.log(number);//الكود الذي سيتم تنفيذه عندما تكون العبارة الشرطية صحيحة } ثالثاً:- عبارات التكرار let x; for(x = 0 ;x < 10 ;x++){//هذه تسمى حلقة فور وتتكون من ثلاثة اجزاء القيمة الابتدائية للمتغير و شرط استمرار الحلقة والفعل الذي يتم تنفيذه بعد كل دورة console.log(x); } رابعاً:- الدوال وهي عبارة عن اكودا بداخل كتل برمجية يتم استدعائه حسب الحاجة اليه let name = "ahmed"; any(name);//طريقة استدعاء الدوال حيث تكتب اسم الدالة وبعدها قوسين وتمرر القيم المطلوبه اذا كانت هنالك قيم مطلوبة function any(name){//واسم الدالة بالاضافة الى المتغيرات التي يتم استقبالها function تعريف الدالة وينقسم الى الكلمة المحجوزة alert('welcome'+name+' to javascript'); //wlcome ahmed to javascript سيكون الناتج هو }1 نقطة
-
مرحبا اخي @Mohammed Abu Yousef يمكنك عمل تطبيق يشبه أجير او غيره من التطبيقات المشابه باستخدام اطار Flutter و Laravel ، و خطوات التطوير : اولا تحتاج انشاء API باستخدام اطار Laravel ، هذه التقنية ليست خاصة في هذا الاطار هي اختصار لجملة Application Programming Interface . هدف هذه التقنية هو إتاحة موارد/بيانات من قاعدة البيانات الى تطبيقات جوال او مواقع إلكترونية . هنالك امثلة كثيرة لAPI مثال من ذلك خرائط جوجل Google Maps التى تسمح للمطورين بعرض اجزاء من الخرائط لامكان معينة على تطبيقهم او موقعهم. ليس من الصعب تطوير API خاصة بك من اجل ان يتسخدمها تطبيقك او حتى اكثر من تطبيق و في النهاية الكل تحت قاعدة بيانات واحدة. من خلال API يمكنك إضافة ، تعديل او حذف البيانات . بعد ذلك عليك ان تقوم بتطوير واجهة التطبيق باستخدام Flutter و عليك فقط حينها ان تستخدم API من التطبيق لعرض البيانات و كما يمكنك انشاء حسابات مستخدمين و غيدها من احتياجات التطبيقات ، كل ذلك يعتمد على الجداول التي انشاتها في قاعدة البيانات ، التي أعطيت الAPI الصلاحية للوصل لها.1 نقطة
-
للدخول في مجال علم الروبوتيك تحتاج لأن تعلم أنه مجال مبني على عدة علوم أساسية و تقدمك في تعلم هذا المجال رهنٌ لإتقانك تلك العلوم، و هي كالتالي: أولا الميكانيك و التصميم الميكانيكي: يجب أن تعرف بعض الاساسيات في علم الميكانيك كقوانين الحركة و التحريك و المسننات و البكرات و الدوران و العزوم .. ثانياً أساسيات الكهرباء و الالكترونيات: يجب أيضا ان تتعلم بعض الاساسيات في قوانين الكهرباء و الالكترونيات لأنك لاحقا ستضطر لتصميم داراتك الخاصة لتنفذ مهمة معينة، و ستلزمك بكل تأكيد في حال تقدمك في هذا المجال عند تصميم و بناء روبوتات مصممة بشكل شخصي. ثالثاً البرمجة و الخوارزميات: إن المهارة الاساسية المطلوبة في بناء الروبوتات هي البرمجة و مهارة حل المشاكل لذلك يعد اتقانك لهاتين المهارتين عاملا اساسيا لتعلمك الروبوتيك. أما بالنسبة لخطوات عملية للبدأ بهذا المجال فأنصحك بالخطوات التالية: تعلم سكراتش لاتقان اساسيات الخوارزميات و طرق حل المشاكل. تعلم LEGO robotics kits للتعرف على أساسيات الميكانيك و البرمجة. تعلم و تطبيق مشاريع روبوتية باستخدام متحكم أردوينو. الانتقال لمتحكمات صغيرة أقوى و ذات خصائص تحكمية أكبر و تعلم أساسيات النظم المضمنة embedded systems. أخيرا عند اتقانك لجميع ما سبق و تقدمك في البرمجة يمكنك البدأ بتعلم اساسيات الذكاء الصنعي AI و محاولة تطبيق بعض خوارزمياته في مشاريعك.1 نقطة
-
و عليك السلام عالم الروبوتات مبني بشكل اساسي على الالكترونيات ( الثماتلية و الرقمية) analogic&numeric مصدر يبدا معك من الصفر في الالكترونيات بعدها تتعلم اردينو arduino_uno و كيف تتم برمجته تحتاج ايضا خلفية في الرياضيات و لغة البرمجة بيثون نعم يمكنك ان تصنع روبوت خاص بك لكن تحتاج الى معرفة جهد و عمل كبير1 نقطة
-
1 نقطة
-
1 نقطة
-
وصلت لورا -كاتبة المقال- تعليقات إيجابية على مقالة كتبتها مسبقًا حول تجربتها في مراجعة أكثر من 200 مراسلة بين كتَّاب مستقلين وعملائهم، فجاءت الكثير من المقترحات حول كتابة مقال كامل حول ما يجب أن تفعل وما يجب ألا تفعل في العلاقات بين المستقلين والعملاء، ما الذي يجعل العميل يستمر في العمل مع نفس المستقل على المدى البعيد؟ وما الذي يجعله يرفض قائلًا "لا، شكرًا" ويمضي باحثًا عن مستقلين آخرين؟ إليك بعض القواعد للحفاظ على علاقة مستمرة مع عملائك كمستقل، فحصولك أخيرًا على مشروع الكتابة المستقل ذاك الذي عملت جاهدًا من أجله، فرصة مشوّقة وتستحقّ الاحتفال بلا شكّ، لكن عليك ألّا تتوقّف هنا. ككاتبةٍ مستقلة، متوسط مدى احتفاظ لورا بالعميل هو 14 شهرًا، اثنان من عملائها يعملون معها منذ 3 سنوات، والحقيقة هي أن الحصول على عمل والاحتفاظ بعميل مهارتان مختلفتان، وكلاهما مهمتان بنفس الدرجة للنجاح كمستقل. بالإضافة على عملها ككاتبة، عملت أيضًا كمديرة لمشروع رقمي على نطاق واسع، وعملت مع مئات المستقلّين أثناء ذلك، ولديها نصائح مهمة تساعدك لا في الحصول على العمل فقط، بل في الحفاظ عليه أيضًا، انطلاقًا من خلفيتها عن هذه المهنة. تقول لورا أنها رأت وما تزال ترى العديد من الكُتّاب المستقلّين ينسحبون لأنهم لم يلتزموا بتنفيذ الوعود التي قطعوها، وقد قالت في مقال سابق أنها عملت مع أكثر من مجموعة من المستقلّين على مشروع كان كلّ منهم مسئولًا فيه عن تسليم مقالٍ واحد أسبوعيًا، ودُفِع لعدد من الكُتّاب في بداية المشروع لقاء عملهم، لكن تمّ اقصاءهم في آخر المطاف منه. إليك بعض الأشياء التي يجب أن تفعلها أو يجب ألا تفعلها القيام عندما تبدأ علاقة عمل مع عميل جديد: اسأل أسئلة تأكد من طرحك لأيّة أسئلة توضيحيّة حول التعليمات، بيانات تسجيل الدخول، وأي موادٍّ قد لا يتوجّب على العميل رؤيتها في عيّنتك قبلَ أن تبدأ العمل، يضيع الكثير من الوقت في التعديل على أخطاءٍ كان يجب ألّا تقع في المقام الأول، كمثال جيّد، نسِيَ بعض الكُتّاب في المشروع الذي كانت تعمل لورا فيه التّعليمات الواضحة التي نصّت على إيراد عنوان فرعيّ في المقال، أجل، قد تبدو العودة إلى المقال وإضافة عنوان فرعي أو الارسال بطلب التّعديل، مشكلة بسيطة للمحرِّر أو مدير المشروع، لكن عند العمل على العشرات من المقالات في نفس الوقت، يتحوّل مصدر إزعاجٍ صغير، إلى مشكلة ضخمة تسبِّب الصُّداع، وطبعاً، تُبطئ عمليّة التّحرير، فمن الأفضل بكثير توضيح كل شيء مُسبقًا لتقليل عدد الرسائل الإلكترونية التي تُتبادل لإنجاز المشروع. لا تتعامل بدونية بالرغم من أن هذا يُفترض أن يُعلَم دون أن يُقال، كتبت كاتبة في مشروع لورا ردودًا ساخرةً على التعليقات على مستند Google الذي رفعت فيه عملها، مبدئيًا، كمديرة للمشروع، ظنّت لورا أنّها ردود بسيطة سِيْءَ فهمها، لكن عندما أتى المحرِّر وصاحِبُ الشّركة للحديث معها على انفراد وعبّرا عن انزعاجهما من الأمر، علمَت أنه سيتم اقصائها، من المؤسف ألّا يتحمل النّقد شخصٌ بقدراتٍ كتابيّة جيّدة ويتعامل بدُونِيّة وتَرَفُّع. على الرغم من أنّك قد تعتقد أنك تعرف أكثر من العميل حول عملك (أو أن العميل يرتكب أخطاءً نحويّة أو ما شابه)، إلا أن أفضل نهج هو التعامل بلطفٍ، إذا كان للعميل طريقةٌ معيّنة يفضّلها في إنجاز الأعمال، لا تحاول إعاقة ذلك بفرض ما تعتقد أنت أن عليهم أن يفعلوه، كُن احترافيًا. إذا كنت لا تتّفق مع العميل حقًا أو تشعر أنّك تُستَغَل، دَعْ تعليقًا لا يسدّ بابَ التفاهُم أو انسحب من المشروع بسلاسة، فمثلًا، لا بأس بالدّفاع عن حقّك في استخدام صيغة ما في الكتابة، إلّا إذا وضّح العميل مسبقًا في التّعليمات أنّه لا يرغب بمثل هذه الصّيغة. احترم المهلة إذا كنت تواجه صعوبة في الالتزام بالمُهلة التي حُدِّدت، تواصل مع مدير المشروع، يمكن للمُهلة أن تكون مرنة بشكل طفيف في كثير من الحالات، مع ذلك، عليك ألّا تطلب تمديدًا لها قبل انتهاءها بساعةٍ مثلًا. بدلًا من ذلك، كما هو الأمر عند طلب التّعليمات عند بداية مشروع، بيّن ما إذا كان باستطاعتك الالتزام بالمُهلة، وهذه أحد علامات الاحترافيّة في مهنة الكتابة، فإذا كنت ستعمل لهذا العميل بشكلٍ منتظم، من الأفضل أن تعرف مسبقًا ما إذا كانت المُهَل ستحدد لك يوميًا أم أسبوعيًا، لتنظّم جدولك بحيث تلتزم بها، إذا تجاوزت المُهلة، فإنّ ذلك يعطي انطباعًا للعميل بأنك غير منظّم، أو فقط لا تهتم بشأن طلباتهم ببساطة، وأنت لا تريد أيًا من هذين الانطباعَين في سمعتك. لا تنسخ أعمال الآخرين على الكلمات التي ترسلها للعميل أن تكون منك شخصيًا، باستثناء حالة حصولك على إذن لاستعمال محتوىً ما كمصدر أو نسخه ولصقه مباشرة. يُدهشني عدد الناس الذين يرسلون أعمالًا منسوخة ويتوقعون أن يفرّوا بفعلتهم. يجب أن تعلم مسبقًا أنه لن يتساهل أيّ عميل مع الأعمال المنسوخة في أيّ مشروع، الأمر يستحقُّ شراء خدمات كوبي سكيب لتوثيق أن محتواك منك أنت شخصيًا. لا تحاول أبدًا التملّص بالمحتوى المنسوخ إذ أن هذا سيؤدي إلى سلسلة من السرقات وانزعاج من جانب العميل، في حالات كثيرة، عندما عملت لورا كمديرة مشروع، أُقصِيَ من المشروع بلا تردد كل من حاولوا تقديم محتوى منسوخ ولو مرة واحدة فقط. هذا خطأ جسيم تخسر به عميلًا رائعًا، لذا ننصح بقوة بعدم فعلها، الأمر ببساطة لا يستحق. رد على طلبات التعديل في وقت مناسب لا يوجد قاعدة محددة لاتباعها عند العودة إلى عميل يطلب مراجعة جزء من العمل خلال ساعة أو نحوه، لكن في بعض الحالات، كتلك المرة عندما كانت تشرف لورا على مجموعة كُتّاب لترى كم من الوقت استغرقهم الردّ على تعليقات المحرّرين ومواصلة العمل، أمضى بعض الكاتبين خمسة أو ستّة أيام بلا أن يُشعرونا أنهم رأوا تعليق المحرّر على الأقل، فعل كهذا يتسبب في إعاقة إدارة أي مشروع. هذه مشكلة بالنسبة للعملاء حتى لو كنت الكاتب الوحيد في المشروع، لأنهم قد ينوون مراجعة العينة والموافقة عليها بعد أن تُتمّ التعديلات عليها، فعندها تتوقف العملية إلى حين إتمام التعديلات، مُعرقِلةً المشروع، وهذه ليست عادةً توَدُّ الاشتهار بها طبعًا. تأكّد من أن تضع للعميل ردًا بمُهلة معقولة فَوْر وصولك الرسالة التي يرغب فيها بالقيام بالتعديلات، لا أعتقد أنه يفترض بالعميل أن يتوقع منك أن تكون متواجدًا على البريد الإلكتروني أو على الهاتف كل ساعات اليوم، لكن من أسس الاحترافية أن تترك لهم تلميحًا ليتوقّعوا على الأقل متى سيصلهم الردّ والتّعديلات من طرفك. انسحب من المشروع بسلاسة لو اضطررت أُخرِجَ العديد من الكُتّاب في نهاية المطاف للأسف، والذين أظهروا مهارات واعدة، وغادر هؤلاء الذي تفهّموا أسباب اخراجهم بلا أيّ مشاكل، بل إنّني أرحِّب بالعمل معهم في المستقبل، لأن ذاك العمل ربّما لم يُناسبهم فقط ببساطة، بينما تعامل آخرون مع الوضع بطريقةٍ غير لائقة، مُبدين انزعاجًا، وتاركين ملاحظاتٍ لا ضرورة لها في بريدي الإلكتروني، وهذا لا يخدم أي أهدافٍ إيجابيّة وقد يُجَنّب الناس العمل معك في المستقبل. قد يَتهيأ لمثل هؤلاء الناس أن عالم تسويق المحتوى كبيرٌ جدًا بحيث يتسع لمثل هذه التعليقات، إلا أن الأمر ليس كذلك، فقد رُفضَ شخصان في بداية ذلك المشروع بعد التحقيق من ورائهما مع عُملائهما السابقين، لذا تذكّر أن التجربة التي تُخلّفها لعميل واحد يمكن أن تترك آثارًا، من الأفضل بكثير الحفاظ على احترافيّتك حتى عندما تكون مُحبَطًا. حاول فهم تعليقات المحرِّر أو مدير المشروع لتحدِّد ما عليك تحسينه للمستقبل، قد يكون منع الأخطاء من الحدوث صعبًا في بعض الحالات، لكن في حالات أخرى، من الهام تأمل الذات لرصد ما يمكن إصلاحه والقيام به بشكل أفضل في المستقبل. ونفس الشيء ينطبق على الحالات التي تنسحب فيها من المشروع لأسبابك الخاصة، لا تنسحب من مشروع في آخر دقيقة، أدِر الأمور باحترافية. تلقت أحد الكاتباتِ في ذاك المشروع الذي تحدثت عنه خلال هذا المقال، طلبَي تعديل من محرّرَين مختلفَين وفشلت في الالتزام بهما، ولم تستطع اكمال المقال أبدًا بعد ردها عليهما بعد بضعة أيام، مما أعاق الفريق واضطّرني إلى توكيل المقال إلى أحد آخر بسرعة، وحيث لم يكن يمكن إصلاح الكثير في المقال الأصلي، اضطر شخص جديد إلى البدء من جديد وتحت مُهلة أقل، سبّب هذا ضغطًا كان يمكن تجنّبه بالحفاظ على الاحترافية في العمل، إذا احتجت إلى الخروج من المشروع لأي سبب، بادر ببساطة وأعلِم أحدهم مسبقًا ولا تتركهم ينتظرون المعلومات منك، وكذلك الحال في المشروع المكتمل. فعلت احدى المحرِّرين ذلك بطريقة رائعة، حيث احتاجت إلى الانسحاب من المشروع لبضعة شهور لأسباب عائلية، وأعطتني موعدًا نهائيًا لن تتسلم من بعده أي أعمال إضافية، وسمحت لها باستكمال كل ما كان على عاتقها من أعمال مسبقًا بدون أن نُعيق تقدم المشروع، هذا منحني ومنح الفريق الفرصة والوقت للتّخطيط وإيجاد من يحلّ محلها. تعلم الممارسات الأنسب لا بد أنك ستتعلّم ما يحب العميل وما لا يحب من تعليقاته على مقالاتك أو مقالات غيرك عندما تعمل لديه لفترة طويلة. امتثل لهذا لجعل الأمور أسهل عند الكتابة لعميل، إذا كان هناك موضوع معين غير مسموح به أو كان العميل يفضّل حدًا معينًا للكلمات المفتاحية، دَوّن هذا في ملاحظاتك في المرة الأولى حتى لا تكرّر نفس الأخطاء، التمتع بمنهج متناسق في الكتابة أمرٌ شديد الأهمية مع أي عميل. ما الذي قمت أنت به لتحافظ على علاقة طويلة المدى مع عملائك؟ ما هي الأسباب التي تجعل عملائك الحاليّين يحبون العمل معك؟ مضاعفة نقاط القوة لديك تجذب المزيد من العملاء الذين يُناسبونك مثاليًا في هذه النقاط، ويؤدي إلى أسلوب حياة ممتع كمستقل. ترجمة -وبتصرف- للمقال How to Build Long-Term Freelancer-Client Relationships لصاحبته Mickey Gast1 نقطة