لوحة المتصدرين
المحتوى الأكثر حصولًا على سمعة جيدة
المحتوى الأعلى تقييمًا في 08/11/17 في كل الموقع
-
تخيّل معي الوضع التالي. أنت عضو في فريق تطوير تطبيق باستخدام Laravel 4. يستخدم أعضاء الفريق git لإدارة إصدارات التطبيق وفي كل مرة يقوم عضو من أعضاء الفريق بإضافة خصائص أو إدخال تعديلات جديدة على المشروع يقوم بإيداع التغييرات في مُستودع التطبيق. إلى هنا يبدو الوضع عاديا (بل مثاليا) لكن ماذا لو قام أحد أعضاء الفريق بإدخال تعديل يتطلب إضافة جداول جديدة إلى قاعدة البيانات أو تعديل حقول وحذف أخرى، فما الحل هنا؟ هل يستطيع git مثلا أن يفي بالغرض؟ أم أنه سيتم تصدير قاعدة البيانات في كل مرة ويُطلب من كل عضو في الفريق استيرادها؟ ماذا عن البيانات التي تحتويها قاعدة البيانات؟ وهل يجب فعلا أن نتخلص من قاعدة البيانات القديمة واستبدالها بأخرى في كل مرة؟ إن كنت تستخدم إطار عمل لارافل فالحل يكمن في استخدام التهجير migrations والذي يُعتبر نظاما لإدارة الإصدارات الخاصة بقواعد البيانات، حيث أنه لن تعود هناك حاجة إلى إنشاء أي جداول أو إضافة حقول والتعديل عليها بشكل مُباشر/يدوي، وإنما يتم وصف تلك الجداول وحقولها بصيغة تجعل من التعامل مع قواعد البيانات أسهل. قد يبدو الأمر مُعقّدا بعض الشيء، لكنه في حقيقة الأمر بسيط، وبمُجرد أن تفهم آلية عمله وتشرع في استخدامه حتى تستغرب كيف ضيعت كل الوقت السابق في إدارة قواعد البيانات يدويا. خاصية migrations مُفيدة لك حتى ولو كنت تعمل على مشروعك بشكل فردي. بطبيعة الحال ستحتاج إلى إنشاء قاعدة بيانات للمشروع، ومن ثم التعديل على ملف app/config/database.php بما يتوافق مع ذلك. إنشاء ملفات migrationsلإنشاء ملف migration جديد نحتاج إلى استخدام artisan لتنفيذ الأمر migration:make على النحو التالي مع استبدال اسم عملية التهجير بما يتوافق مع ما تقوم به (بطبيعة الحال ستحتاج إلى تنفيذ هذا الأمر بسطر الأوامر لما تكون داخل مُجلد المشروع): php artisan migrate:make create_users_tableسيقوم laravel بإنشاء ملف جديد داخل مُجلد app/database/migrations يحمل الاسم الذي حددته في الأمر السابق ( create_users_table) مسبوقا بترقيم يُمثل تاريخ إنشائه حتى يتسنى لـ laravel معرفة الترتيب الذي يجب اتباعه لدى تنفيذ التهجيرات. يُفضل استخدام أسماء للتهجيرات تدل على ما تقوم به. ففي المثال السابق أردنا إنشاء عملية تهجير جديدة لإنشاء جدول مُستخدمين، وبالتالي كان الاسم create_users_table. ينتج عن تنفيذ الأمر السابق ملف يحتوي: <?php use Illuminate\Database\Schema\Blueprint; use Illuminate\Database\Migrations\Migration; class CreateUsersTable extends Migration { /** * Run the migrations. * * @return void */ public function up() { // } /** * Reverse the migrations. * * @return void */ public function down() { // } } كما هو ظاهر هنا فإن الصنف CreateUsersTable يحتوي على دالتين الأولى up والتي تُبين ما الذي يجب القيام به لدى تنفيذ التهجير، والثانية down والتي نُحدد فيها ما الذي يجب القيام به لدى إلغاء التهجير في حال ما إذا أردنا العودة بقاعدة البيانات إلى الحالة التي كانت عليها قبل تنفيذ التهجير. هذا الملف لا يُحدد أي جدول نعمل عليه أو نرغب في إنشاءه. يُمكن إضافة ذلك يدويا، كما أنه يُمكن القيام بذلك عبر تحديد اسم الجدول لدى تنفيذ أمر إنشاء عملية التهجير وذلك باستخدام --create التي تُحدد اسم الجدول الذي نرغب في إنشاءه أو --table التي تُحدد اسم الجدول الذي نرغب في التعديل عليه. فمثلا لو حذفنا عملية التهجير السابقة ورغبنا في إعادة إنشاء أخرى مع تحديد اسم الجدول فسيكون ذلك على النحو التالي: php artisan migrate:make create_users_table --create=usersوالذي سينتج عنه ملف مثل الملف السابق، لكن هذه المرة نجد أن دالتي up و down تحتويان أوامر أولية: <?php use Illuminate\Database\Schema\Blueprint; use Illuminate\Database\Migrations\Migration; class CreateUsersTable extends Migration { /** * Run the migrations. * * @return void */ public function up() { Schema::create('user', function(Blueprint $table) { $table->increments('id'); $table->timestamps(); }); } /** * Reverse the migrations. * * @return void */ public function down() { Schema::drop('user'); } } لاحظ هنا أن users هي اسم الجدول المُراد إنشاؤه والذي يكون عادة جمع اسم الـ model الذي تتعامل معه (بمعنى إن كان user هو اسم الـ model فسيكون اسم الجدول الخاص به users) أما لو أردنا التعديل على نفس الجدول السابق وإضافة حقل جديد إليه فيكفي تنفيذ الأمر التالي: php artisan migrate:make add_votes_to_user_table --table=users تنفيذ عمليات التهجيرإلى حد الآن كل ما قمنا به هو إنشاء ملفات التهجير، حيث أنك لو تحققت من قاعدة البيانات لوجدتها فارغة. لتنفيذ عمليات التهجير نستعمل الأمر php artisan migrateوبعد ذلك ستلاحظ ظهور جدول جديد على قاعدة البيانات. أما لو رغبت في التراجع عن آخر عملية تهجير (أو بالأحرى عن آخر جملة تهجيرات تم تنفيذها مع بعض) فإننا نستعمل الأمر: php artisan migrate:rollbackوفي حال ما إذا رغبت في التراجع عن جميع عمليات التهجير والرجوع إلى الحالة الأولى لقاعدة البيانات فإن الأمر التالي كفيل بالقيام بذلك: php artisan migrate:resetويُمكن أيضا استخدام الأمر التالي للتخلص من جميع عمليات التهجير وإعادة تنفيذها من جديد بشكل مُباشر بعد ذلك: php artisan migrate:refreshأنواع الحقولرأينا في الفقرة السابقة بأن عمليات التهجير تسمح لنا بإنشاء معرف autoincrement إضافة إلى حقلي created_at و updated_at بفضل دالة timestamps. يسمح Laravel بإنشاء شتى أنواع الحقول التي قد تحتاجها في مشروعك إلى جانب إضافة خصائص للحقول وإعطائها قِيمًا أوليّة. المثال التالي يُبين بعض هذه الحقول والخصائص: $user->string('name', 64); $user->integer('age')->nullable(); $user->boolean('active')->default(1); $user->integer('role_id')->unsigned(); $user->text('bio');والذي يقوم بإنشاء: حقل name يكون نصيا يكون أقصر من أو يُساوي 64 محرفا.حقل age يكون رقميا، كما أنه يقبل القيمة NULLحقل active يكون منطقيا ويحمل قيمة أولية 1حقل role_id رقميا ويكون موجباحقل bio يكون نصيابإمكان الاطلاع على جميع أنواع الحقول المُمكنة من هنا حذف الحقولستحتاج إلى حذف الحقول في دالة down ويتم ذلك على النحو التالي: Schema::table('users', function($table) { $table->dropColumn('votes'); });بذر قواعد البيانات database seedingالمقصود ببذر قواعد البيانات هو إدخال البيانات الأولية التي نحتاجها لتجربة التطبيق. بالرغم من أن تطبيقك يسمح بإنشاء مُستخدمين جدد فإنك سترغب في استخدام مُستخدمين تجريبيين في كل مرة تُحدث تغييرات في التطبيق، وإنشاء عدد من المُستخدمين يدويا في كل مرة مضيعة للوقت. الحل يكمن في إعلام Laravel بالبيانات الأولية التي ترغب في بذر قاعدة البيانات بها بعد إنشائها ويتم ذلك عبر إنشاء ملفات بذر داخل مُجلد app/database/seeds يحتوي الأوامر التي يجب تنفيذها. مثال على ملف بذر يقوم بإضافة مُستخدم جديد: class UserTableSeeder extends Seeder { public function run() { DB::table('users')->delete(); User::create(array('email' => 'foo@bar.com')); } } لتنفيذ عملية البذر التي قمنا بإنشائها فإننا نستخدم الأمر التالي: php artisan db:seed --class=UserTableSeederوإن كان لديك أكثر من ملف بذر وترغب في تنفيذها كاملة بأمر واحد فإنه يكفي القيام بذلك عبر تحديد أسماء عمليات البذر المُراد تنفيذها في صنف/ملف DatabaseSeeder الذي ستجده داخل مُجلد app/database/seeds على النحو التالي: class DatabaseSeeder extends Seeder { public function run() { $this->call('UserTableSeeder'); $this->call('PostTableSeeder'); } }وبعد ستحتاج إلى تنفيذ الأمر php artisan db:seedالذي سيقوم بقراءة الملف واستدعاء عمليات البذر بشكل مُتوال بإمكانك أيضا تنفيذ عمليات البذر مُباشرة بعد تحديث عمليات التهجير على الشكل التالي: php artisan migrate:refresh --seedتوليد بيانات تجريبية باستخدام Fakerبالرغم من أن هذه الخُطوة ليست ضرورية، إلا أنه في الكثير من الحالات ستحتاج إلى بيانات تجريبية أقرب ما تكون إلى البيانات الحقيقية للتجريب عليها. فمثلا سترغب في استخدام أسماء مُستخدمين "حقيقيين" وعناوين بريد إلكتروني، وعناوين منازل، إضافة إلى أسماء المُدن وأرقام هواتف وما إلى ذلك. بطبيعة الحال فإنه بالإمكان الاكتفاء بملفات البذر وإدخال تلك البيانات بطريقة شبه يدوية، إلا أن هناك حلا آخر يُسهّل عليك ذلك إن استعنت بمكتبة Faker للحصول على هذه البيانات. بداية سنحتاج إلى "تنصيب" Faker وذلك على النحو التالي: قم بالتعديل على ملف composer.json وإضافة التالي: "require-dev":{ "fzaninotto/faker": "1.5.*@dev" },أو قم بإضافة "fzaninotto/faker": "1.5.*@dev" إن كان حقل require-dev مُتوفرا في الملف. بعدها قم بتنفيذ الأمر php artisan update ليقوم artisan بتحميل الملفات المطلوبة. في غالب الأحوال ستحتاج إلى إنشاء مُستخدم غير عشوائي إلى جانب البيانات التجريبية، وعليه يُفضل إنشاؤه أولا قبل توليد البيانات العشوائية. $user = User::create(array( 'username' => 'djug', 'first_name' => 'Youghourta', 'last_name' => 'Benali', 'email' => 'djug@someNewProject.com', 'password' => Hash::make('MySuperPassword') )); $faker = Faker\Factory::create(); for ($i = 0; $i < 25; $i++) { $user = User::create(array( 'username' => $faker->userName, 'first_name' => $faker->firstName, 'last_name' => $faker->lastName, 'email' => $faker->email, 'password' => Hash::make('Password') )); في هذا المثال قمنا بإنشاء 25 مُستخدم يحملون أسماء بشر (وليس مُجرد حروف عشوائية) إضافة إلى عناوين بريد إلكتروني. تسمح مكتبة Faker بتوليد شتى أنواع الحقول التي قد تحتاجها والتي يُمكن الحصول على نُسخ مُوطنة ومُترجمة منها، فمثلا يُمكن توليد أسماء عربية وعناوين فرنسية وما إلى ذلك. للمزيد حول مكتبة Faker قم بإلقاء نظرة على مُستودع المشروع على github وللمزيد حول جميع أنواع العمليات التي يُمكن القيام بها على الهجرات: Schema Builder1 نقطة
-
كم عدد الأشياء التي تُشتّت انتباهك الآن؟ هل هو هاتفك؟ أم بريدك الإلكتروني؟ أم حسابك على سلاك؟ أم حسابك على تويتر؟ أم قائمة أعمالك اليوميّة التي لاتنتهي؟ مكنتنا التقنية الحديثة من فعل العديد من الأشياء المذهلة، ولكن أحد آثارها السيّئة أنها تلازمنا دائمًا وتقف عائقًا أمامنا في كثير من الأحيان، شِئنا ذلك أم أبَيْنا. فالإشعارات التي تأتي مُتتابعة واحدة وراء أخرى تُهدّدنا دائما بصرفنا عن فعل الأمور المُهمّة، وتعطيلنا أثناء انشغالنا بالعمل. تأمّل في ذلك: يفقد المُوظّف تركيزه في العمل كل ثلاث دقائق في المتوسّط. وطبقًا لبحث من مؤسسة التفاعل بين الإنسان والحاسوب في جامعة “كارنيجي ميلون”: قد تأخذ ما يصل إلى 25 دقيقة من أجل أن تستعيد تركيزك بعد تشتّته فقط. من السهل أن تفقد تركيزك، سهل جدًا، ولكن الأصعب هو أنْ تستعيده مرّة أخرى. رغم معرفتنا بمساوئ تشتّت التركيز، إلا أن احتياطاتنا قليلة جدًا للحفاظ على أنفسنا من ذلك. لماذا لا نغيّر ذلك الآن؟ كيف يختار عقلك ما يركّز عليه، وكيف يتحكّم فيه؟ يعمل عقلك بشكل دائم، ويستقبل المعلومات باستمرار، مما يعني أنه يجب عليه دومًا اختيار ما يُركّز عليه وما يتجاهله. أطلق علماء المخ والأعصاب على تلك العملية اسم “التركيز الانتقائي”، والذي يحدث بطريقتين مختلفتين: 1- التركيز (الانتباه) الإرادي هذا هو الهدف المطلوب من التركيز بالأساس. التركيز الإرادي يرتبط بالهدف، وهو المسؤول عن الإدراك الإجمالي للموضوع بشكل عام، واستخدام خبراتك السابقة لاستخلاص النتائج. يحدث ذلك مثلًا عندما تُذاكر للامتحان، أو تحاول حلّ مسألة مُعقّدة. 2- التركيز (الانتباه) اللّاإرادي (أو الانتباه المُحفّز بالإثارة) عندما تهجم عليك فكرة، أو يجذب انتباهَك شيء ما (مثل صوت إشعار في تطبيق مُعيّن) فانتباهك حينها هو انتباه لاإرادي، حيث تضطر إلى الانتباه تلقائيًا لما يحدث. هذا يحدث مثلًا عندما تسمع ضوضاء عالية، أو يفاجئك شخص ما بالظهور أمامك، أو عند سماع صوت رنين هاتفك. ما المشكلة إذاً؟ المشكلة هي أننا لا نستطيع التحكّم في نوع التركيز الذي يستخدمه عقلنا، وبالرغم من رغبتنا في الحفاظ على التركيز الإرادي إلا أن التركيز اللّاإرادي يتغلّب على عقلنا. اللّوم هنا يقع على استجابتنا التلقائيّة تجاه ما يُشعرنا بالخطر (الاستجابة الدفاعية)، حيث أن الضوضاء العالية والحركات المُفاجئة تُشعرنا بالتهديد وأن ثمة خطب ما. ومن بديهيّات عقلك أنّ الخطر له الأولويّة على الكتاب الذي تقرأه أو الإيميل الهام الذي تكتبه، بالتالي يكون تركيزه في مثلهما أقلّ. وقد أثبتت الدراسات أن قوّة الإرادة والتركيز محدودة التأثير، وكلّما تشتّت تركيزك أكثر كلّما صعُب استعادتك له. ولكنْ وضّح العلم لنا أيضًا أن هناك طرقًا لاستعادة التركيز بأسرع وأعلى كفاءة مُمْكنة. دعونا نرى بعضها: سبع طرق تساعدك على استعادة تركيزك مرّة أخرى إذا وقعْت في حلقة مُفرغة من تشتّت التركيز؛ فأنت تعرف مدى صُعوبة التخلّص منها. لذا هذه بعض النصائح التي ستساعدك في الحفاظ على تركيزك إذا واجهتك مشكلة ما فيما بعد. 1- اعمل وِفقًا لطبيعة عقلك ربما تلاحظ أنك أكثر قدرة على التركيز في أوقات مُعيّنة من اليوم بخلاف أوقات أخرى. قمة أوقات التشتّت الذهني بالنسبة لمعظم الناس تكون بين الساعة 12-4 مساءً، وبحلول الثانية ظهرًا يكون ذلك التشتت في أوْج قُوّته. أمّا أفضل وقت يعمل فيه العقل الإدراكي بقوّة يكون في الساعات المُتأخّرة من الصباح (بعد العاشرة صباحًا). في هذا التوقيت من اليوم يكون عقلك في قمّة اليقظة والنشاط، ويستطيع إنجاز الكثير بسهولة. لذلك ركّز على المُهمّات الشاقّة في الساعات المتأخّرة من الصباح، وخذ قيلولة أو راحة وقت الظهيرة. 2- كافئ عقلك إذا حافظ على تركيزه يتعلم عقلك بالممارسة، يعني كلّما اندفعت إلى عمل يشتّت تركيزك واعتدت عليه (مثل تصفح بريدك أو حسابك على فيسبوك 20 ألْف مرة في اليوم) كلّما كان تشتّت التركيز عندك أسهل. فقد درّبت عقلك أن يشعر بنوع من المكافأة واللذة كلّما فقَدَ انتباهه وتركيزه، لذلك ينبغي أن يتوَقّف ذلك. درّب عقلك على المحافظة على تركيزه بدلًا من ذلك، عن طريق ضبط نفسك قبل الوقوع في عادات سيّئة، و في كل مرّة تشعر فيها بتشتّت الذهن توقّف عمّا يشتّتك على الفوْر قدر الإمكان. كلّما جعلت تشتّت ذهنك أصعب، كلّما ظل ذهنك أكثر تركيزًا. 3- خذ أوقات راحة (راحة حقيقيّة) بيْنما تدور أمور حياتنا حول استقبال أكبر كمّ ممكن من المعلومات - 15 علامة تبويب مفتوحة في نفس الوقت، ورسائل البريد الإلكتروني لا تتوقّف، وكذلك المكالمات ورسائل زملاء العمل- فإنّ العمل بأسرع ما يمكن لا يُحسّن إنتاجنا في العمل، وإنّما في الحقيقة يَحدث العكس تقريبًا. لتقْوية تركيزك ابحث عن مكان لا يوجد به ما يشتّت ذهنك، سواءً كان مكانًا في المنزل أو مقهى بدون إنترنت أو غيرهما، الفكرة من هذا هو إعطاء ذهنك فرصة لاستعادة التركيز. إذا لم يكُن لديك مكان تحافظ فيه على تركيزك، فإنه يُوجد تطبيقات يُمكِنك تحميلها لتساعدك على منع الانترنت من أنْ يُشتّت انتباهك. 4- تجاهل تعدّد المهام لا يمكن لعقلنا التركيز على أكثر من شيء في نفس الوقت، ولكنّ مصطلح تعدّد المهام هو مُسمّى خاطئ في الحقيقة؛ فهو لا يعني ما يتبادر إلى ذهننا. في الحقيقة “تعدّد المهام” يعني فقط الانتقال من شيء إلي شيء آخر بسرعة كبيرة جدًا. وكلّما انتقلنا بسرعة أكبر كلّما استهلكنا طاقة أكبر، وكلّما استهلكنا طاقة أكبر كلّما قَلّت قدرتنا على التركيز فيما نفعله. ضَعْ قائمة بالمُهمّات المطلوب إنجازها مُرتّبةً حسب أهمّيتها، والتزم بها قدر المُستطاع. فكلّما كان عدد المُهمّات التي تريد إنجازها في المرّة الواحدة أقلّ كلّما كان أداؤك أفضل بشكل عام. 5- ابحث عن العمل الذي تحبّ الاندماج فيه حقًا هل جرّبت قبل ذلك البدء في مُهمّة أخرى غير التي في يديْك الآن وانتهيْت بأن وجدت نفسك غارقًا في أحلام اليقظة بعد مرور عشر دقائق. عندما تعتقد أنّ المُهمّة التي بيدك ليست بالأهمّية الكافية لكَبْح زمام أفكارك من التشتّت، فإنّ عقلك يقوم بالانتباه لاإراديًا إلى مُؤثّرات أخرى عن طريق جزء اللّاواعي منه، والذي يُستخدَم إذا انصرف ذهنك عن التركيز في العالم الخارجي. اسأل نفسك عندما تفقد تركيزك، هل أنت الذي تُسيْطر على نفسك بالتركيز في العمل، أم أن نفسك هي التي تغلبك بالتشتّت. إذا كان العمل أقلّ جاذبيّة؛ فمن الأفضل أن تقوم به في أوقات الصفاء الذهني حيث تمتلئ بالطاقة (مثل الأوقات المتأخرة من الصباح). 6- تدرّب على تصفية الذهن من الضغوط الضغط النفسي يقتل التركيز بشكل كبير ويبدّد طاقاتنا، كما أنّنا غالبًا ما نشعر بالتوتّر أكثر عندما نحتاج إلى تركيز أكبر، فالأمر مرتبط ببعضه. بدلاً من ذلك فإنّ التدرّب على تصفية الذهن من الضغوط، مثل التأمّل، يُعلّمنا كيفيّة عدم الانجراف مع الضغوط النفسيّة أو الانفعالات الشديدة عن طريق زيادة إدراكنا لما نقوم به وما نفكّر فيه. جرّب أنْ تأخذ خمس دقائق راحة لذهنك، واختر حاسّة واحدة من حواسّك وركّز معها. تعرّف على ما يشعر به جسمك وعقلك على حِدَة، ما الذي تلمسه، أو تشمّه، أو تراه، أو تسمعه أو تتذوّقه؟ إذا كنت تريد أنْ تُجرّب هذا أكثر، فجرّب هذا التمرين لزيادة صفاء ذهنك في العمل. 7- امضُغ اللبان (العِلْكة) نعم، قد يبدو هذا غريبًا، لكنّ الأبحاث أثبتت أن مضغ اللّبان (العِلْكة) يزيد من نسبة الأُكسجين التي تصل إلى أجزاء مخّك المسؤولة عن التركيز. كذلك فإنها تُحسّن من الذاكرة طويلة المدى، وتفرز بعضًا من الإنسولين في الدم ممّا يعطي مخّك طاقة إضافيّة. إذا لم يكن اللّبان (العِلْكة) مناسبًا لك، يمكنك أكل وجبات بيْنيّة خفيفة. لأن عقلك يحصل على الطاقة من الجلوكوز، وأنت تحتاج إلى حوالي 420 كيلو سعرة حرارية للحفاظ على عمل المخ بشكل طبيعي. وهذا يتمثّل في حوالي 100 فستقة أو أربعة أصابع موز. إذا شعرت أنّ تركيزك بدأ يضعف فتناول بعض الفستق مثلًا أو امضغ اللبان (العِلْكة) وأعطِ عقلك بعض الطاقة. خلال الفترة التي تُنهِي فيها قراءة هذا المقال، ستكون قد فقدت تركيزك مرّتين على الأقل. استجماع تركيزك في الحقيقة بسيط جدًا كما أنّها تجعل عمل ذهنك أسهل قليلًا. قَلّل من كمّية المدخلات التي يجب على عقلك التعامل معها. اعمل وفقًا لطبيعة عقلك وكنْ صافي الذهن. خلاصة الأمر من أجل التخلّص من كلّ ما يشتّت ذهنك عليك أنْ تخلق لنفسك بيئة تحثّك على التركيز، لا بيئة تصرفك عنه. ترجمة -وبتصرّف- للمقال: The science of how to stay focused: Psychology, slow habits, and chewing gum لصاحبه Jory MacKay حقوق الصورة البارزة محفوظة لـ Freepik1 نقطة