لوحة المتصدرين
المحتوى الأكثر حصولًا على سمعة جيدة
المحتوى الأعلى تقييمًا في 02/21/16 في كل الموقع
-
بعد أن تعلّمنا في الدّرس السّابق كيفيّة التعامل مع كل من الصفوف، المجموعات والقواميس في لغة بايثون ، سنكمل مشوار تعلّم هذه اللغة الجميلة. سنتعلّم في هذا الدّرس كيفيّة التّعامل مع التّعابير الشّرطية، و كيفيّة استعمال الجمل الشّرطية في برامجنا وكيفّية القيّام بإزاحة مناسبة عند التّعامل مع أجزاء متعدّدة من الشّيفرة، وسنكمل هذا الدّرس بمثال تطبيقي يتجلى في برنامج تسجيل حساب والولوج إليه. مع التذكير بأنّ جميع الشّيفرات التّي تبدأ بعلامة <<< يجب أن تنفّذ على مفسر بايثون. التعابير الشرطية Conditional Expressions توفّر لنا لغة بايثون عدّة مُعاملات لمُقارنة القيّم، ونتيجة المُقارنة تكون قيمة منطقيّة Boolean إمّا True أو False. >>> 2 < 3 False >>> 2 > 3 True إليك قائمة بالمُعاملات المُتوفّرة في لغة بايثون. == يُساوي =! لا يُساوي > أصغر من < أكبر من => أصغر من أو تُساوي =< أكبر من أو تُساوي ويُمكن استعمال هذه المُعاملات أكثر من مرّة في السّطر الواحد: >>> x = 5 >>> 2 < x < 10 True >>> 2 < 3 < 4 < 5 < 6 True وتعمل المعاملات على السّلاسل النّصية كذلك (التّرتيب يكون بشكل معجمي، أي حسب ترتيب الكلمات في المُعجم). >>> "python" > "perl" True >>> "python" > "java" True يُمكن الجمع بين القيّم المنطقيّة بمعاملات منطقيّة: a and b: صحيح فقط إذا كان كل من a و b يحملان القيمة True. a or b: صحيح إذا كانت إحدى القيمتين صحيحة. not a: صحيح فقط إذا كان a يحمل القيمة False. وإليك مثالا على المُعاملات المنطقيّة: >>> True and True True >>> True and False False >>> 2 < 3 and 5 < 4 False >>> 2 < 3 or 5 < 4 True الجملة الشرطية If تُستعمل الجملة الشّرطيّة If (إذا كان) لتنفيذ جزء من الشّيفرة إذا كان الشّرط مُحقّقا: >>> if x % 2 == 0: ... print 'even' ... even >>> في المثال أعلاه طُبعَت الكلمة even لأنّ باقي قسمة 42 على 2 يُساوي صفرا (x % 2 == 0)، وبالتّالي فقد تحقّق الشّرط، فلو أنّ الشّرط لم يتحقّق لما أرجع المُفسّر أي نتيجة. يُمكن استخدام If كشرط لتنفيذ جزء منفصل من الشيفرة بالإزاحة (انظر فصل الإزاحة والمساحات أسفله)، ويكون هذا الأمر مُفيدا عندما يحتوي برنامجك على الكثير من الجمل. لاحظ بأنّ الجمل التّابعة للسّطر if x % 2 == 0 مُزاحةٌ بأربع مسافات بيضاء. الجملة else يُمكن أن تزيد على جملة If بند else وترجمته (وإلّا / إذا لم يكن ذلك صحيحًا)، والتي تنفّذ الشيفرة التّي من بعدها إذا كان الشّرط الأول خاطئا. >>> x = 3 >>> if x % 2 == 0: ... print 'even' ... else: ... print 'odd' ... odd >>> في المثال أعلاه، كان الشّرط الأول خاطئا لأن باقي قسمة 3 على 2 لا يُساوي صفرًا، ولذلك انتقل البرنامج لتنفيذ الشّيفرة بعد جملة else وقام بطباعة كلمة odd. الجملة elif يُمكن كذلك أن تزيد جملة elif وهي اختصار لـ else if والتّي تعني "إذا لم يتحقّق الشرط فانظر الشّرط التّالي": >>> x = 42 >>> if x < 10: ... print 'one digit number' ... elif x < 100: ... print 'two digit number' ... else: ... print 'big number' ... two digit number >>> في المثال أعلاه، هناك شرطان مختلفان، أولا عند تحقّق شرط كون قيمة المتغيّر x أصغر من العدد 10 فسيطبع البرنامج الجملة التي تقول بأنّ قيمة المتغير x عبارة عن رقم واحد، إذا لم يتحقّق الشّرط السّابق فسينتقل البرنامج إلى الشّرط الذي يليه وهو ما يتبع الجملة elif أي إذا كانت قيمة المتغيّر x أصغر من 100 فسيطبع البرنامج الجملة التي تفيد بأنّ قيمة المتغير x عبارة عن رقمين والجملة else تنفَّذُ إذا لم يتحقّق أي شرط وتفيد بأنّ قيمة المتغيّر x عبارة عن عدد كبير (لأنّه يتكون من 3 أرقام فأكثر). المساحة والمسافات والإزاحة المساحات التّي تسبق الشّيفرات في بايثون مُهمّة جدّا لترتيب شيفرة البرنامج ولتسهيل قراءته، كما أنّها تكون ضروريّة في بايثون، فإن لم تتّبع قوانين الإزاحة فلن يعمل البرنامج، وتُستعمل هذه الطّريقة لفصل الشّيفرات التّابعة لجزء معيّن من البرنامج، والإزاحة تكون بكتابة الشّيفرة بعد عدد معيّن من المسافات، ومن المُفضّل أن تكون أربع مسافات بيضاء، انظر المثال: هل الشّرط محقّق؟ .... نعم الشّرط محقّق .... لا الشرط غير محقق انتهى البرنامج في المثال أعلاه، الجملتان "نعم الشّرط محقّق" و "لا الشّرط غير محقّق" تابعتان للجملة "هل الشّرط محقّق؟" أمّا الجملة "انتهى البرنامج" فتابعة للبرنامج عامّة. وقد اعتمدت على النّقاط لتوضيح فكرة الإزاحة فقط وعليك أن تستبدل النّقاط بالمسافات في ملفّات بايثون. يُمكن كذلك أن تكون الشّيفرة تابعة لجملة ما، والتّي بدورها تابعة لجملة أخرى، لتتّضحك الأمور أكثر، فكّر في شجرة عائلة تتكوّن من الآباء والأولاد: جدّ ....أب 1 ........ابن 1.1 ........ابن 1.2 ....أب 2 ........ابن 2.1 ........ابن 2.2 للجد ابنان، ولكل ابن ابنان، نستنتج من هذا أنّ كلّ ابن تابع لأبيه بإزاحة أربع مسافات، أمّا الحفيد فتابع للجدّ بثماني مسافات. وإلى الآن تعرّفنا على موضع واحد تكون فيه الإزاحة إجباريّة وهي الجمل الشّرطيّة، فمثلا البرنامج التّالي: x = 42 if x % 2 == 0: print 'even' print 'Hello World' في المثال أعلاه جميع السّطور المزاحة بأربع مسافات (أي الجملة التي تطبع كلمة even) تُنفّذ عند تحقّق الشّرط فقط، أي أنّها جزء مرتبط بالشّرط في البرنامج، أمّا الشيفرة التي لم تُسبق بمسافات فتنفّذ بشكل طبيعي وتعتبر ضمن البرنامج عامّة. أمّا إذا أردنا أن نطبع جملة بعد التّحقّق من شرطين فسيكون البرنامج كالتّالي: الشّرط الأول محقّق، إذن انتقل إلى الشّرط الثّاني. الشّرط الأول غير محقّق، إذن لا تنتقل إلى الشّرط الثّاني. إليك تطبيقا للأمر في لغة بايثون: # البرنامج x = 42 if x % 2 == 0: print 'even' if x / 2 == 21: print '42/2 = 21 Is true' print 'Hello World' # المُخرج even 42/2 = 21 Is true Hello World في المثال أعلاه، قمنا بالتّحقّق من أنّ باقي قسمة العدد 42/2 يساوي 0، وبما أنّ الشّرط مُحقّق فقد طبعت الكلمة even وانتقل المُفسّر إلى الشّرط التّالي وهو التّحقّق من أن 42/2 يُساوي 21 وبما أنّه بدوره شرط مُحقّق أيضا فقد قام البرنامج طباعة الجملة 42/2 = 21 Is true وبعدها قام بطباعة الجملة Hello World لأنّها غير مُرتبطة بأي شرط. وبطبيعة الحال إذا لم يكن الشّرط الأول محقّقا، فلن ينتقل المُفسّر للشّرط التّالي ولن يقوم بأي شيء حتّى ولو كان الشّرط مُحقّقا. الحصول على قيم من مستخدم البرنامج يُمكن أن تطلب من المُستخدم أن يُدخل قيمة معيّنة، ثمّ تسند هذه القيمة إلى مُتغيّر في البرنامج، فمثلا لنقل بأنّك ترغب بالتّرحيب بالمُستخدم، أولا يجب أن تطلب منه أن يُدخل اسمه، بعدها تقوم بطباعة الجملة "Hello, Person"، بحيث تستبدل Person بالقيمة التّي أدخلها المُستخدم، انظر المثال: >>> person = raw_input('Enter your name: ') >>> 'Hello ', person إذا نفّذت البرنامج فسيكون المُخرج كالتّالي: Enter your name: وبعد إدخال اسمي والضّغط على مفتاح ENTER، فإنّ المُخرج سيكون كالتّالي: Hello Abdelhadi ما يحدث هو أن البرنامج يأخذ القيمة المُدخلة ويُسندها للمُتغيّر person وبعدها تستطيع أنت أن تطبع المُتغيّر للمُستخدم. تطبيق لنطبّق ما تعلّمناه ولننشئ برنامجا بسيطًا لجدولة مُقابلات العمل: سنطلب من المُستخدم توفير المعلومات التّاليّة: اسم المُتقدّم اسم المسؤول عن المُقابلة وقتُ المُقابلة وبعدها سنطبع جملة تحتوي على جميع المعلومات التّي قدّمها المُستخدم، افتح ملفّا باسم interview.py واكتب فيه التّالي: applicant = raw_input('Enter the applicant name: ') interviewer = raw_input('Enter the interviewer name: ') time = raw_input('Enter the appointment time: ') print interviewer, "will interview", applicant, "at", time في المثال أعلاه نطلب أولا من مُستخدم البرنامج أن يُدخل اسم المُتقدّم ثمّ تُسندُ القيمة إلى المتغيّر applicant، بعد ذلك يُطلب اسم المسؤول عن المُقابلة وتُسند قيمته إلى المُتغيّر interviewer وبعد ذلك نحصل على وقتُ المُقابلة من المُستخدم ونُسند القيمة إلى المُتغيّر time، وفي النّهاية نطبع الجملة الجامعة لكل المعلومات وتقديمها بشكل أسهل. جرّب الأمر بنفسك، وأسند القيّم التّي تريد، وانظر إلى النّتيجة، العب بالشّيفرة، أضف مميّزات أخرى كالتّحقّق من أن عُمر المُتقدّم أكبر من 18 عاما مثلا، وتذكّر بأنّ التعلّم بالتّطبيق أفضل من أي طريقة أخرى. تطبيق عملي: إنشاء برنامج تسجيل دخول بسيط الآن حان الوقت لنطبّق ما تعلّمناه، ولنقم بكتابة برنامج تسجيل دخول بسيط، ومبدأه كالتّالي: يُرحب البرنامج بالمُستخدم. يطلبُ منه معلومات التّسجيل. يفيد البرنامج المُستخدم بأنّ التّسجيل قد تم بنجاح أو بعكس ذلك. يطلب البرنامج معلومات الدّخول. يتحقّق البرنامج من أنّ المعلومات التّي أدخلها صحيحة. إذا كانت صحيحة، يطبع البرنامج رسالة نجاح. إذا كانت خاطئة، يطبع البرنامج رسالة فشل. المُتغيّرات التّي سنعتمد عليها: username: اسم المُستخدم password: كلمة المرور password_verification: تأكيد كلمة المرور (فقط للتّأكد من أنّ المُستخدم أدخل نفس كلمة المرور وأنّه يتذكّرها دون مشاكل). أولا جملة التّرحيب: print 'Hello User, this is a basic sign up/login Program' ثانيّا لنطلب من المُستخدم توفير قيّم المتغيرّات (username: اسم المُستخدم، password: كلمة المرور، password_verification: تأكيد كلمة المرور): username = raw_input('Enter your username please: ') password = raw_input('Enter the your password please: ') password_verification = raw_input('Verify password: ') الآن لنتحقق من أنّ كلمة المرور التّي أدخلها المستخدم في البداية هي نفسها التّي أدخلها عند تأكيد كلمة المرور وذلك بمقارنة المتغيّرين password و password_verification فإذا كانا يحملان نفس القيمة فهذا يعني بأنّ التّسجيل ناجح وسنطبع للمُستخدم جملة تفيد بأنّ عملية التّسجيل قد نجحت. أما إذا لم تكن القيم متساوية سنطبع جملة تفيد المستخدم بأنّ كلمة المرور وتأكيدها لا يتوافقان، ويمكن القيام بالأمر بالأسطر الآتية: if password == password_verification: print 'You have been successfully signed up!' else: print 'The password and the password verification don't match! Please try again' لقد انتهينا الآن من برمجة نظام التّسجيل، ويجب علينا الانتقال إلى الخطوة التّالية وهي مرحلة تسجيل الدّخول. بعد طباعة الجملة التّي تفيد بأنّ المستخدم قام بالتّسجيل بنجاح (انظر الشّيفرة أعلاه) سنطلب منه معلومات الولوج وذلك بإدخال اسم مُستخدمه وكلمة المرور، سنعيّن هذه القيم المدخلة حديثا إلى متغيّرين جديدين، وذلك لمقارنتهما مع قيم المتغيّرين القديمين، إذا كانت القيم توافق ما أدخله قبل قليل فسنطبع جملة تفيد بأنّ عمليّة الولوج قد نجحت، إذا لم يكن الأمر كذلك سنطبع جملة تفيد المستخدم بأنّ القيم التّي أدخلها خاطئة ثمّ يتوقّف البرنامج. الآن، لنطوّر الشّيفرة أعلاه وندخل عليها التّعديلات المطلوبة لإجراء عمليّة الولوج: if password == password_verification: print 'You have Successfully Signed up! \n' username_sign_in = raw_input('Enter your username please: ') password_sign_in = raw_input('Enter your password please: ') if username_sign_in == username and password_sign_in == password: print 'You have Successfully Signed in!' else: print 'username or password do not match! Please try again!' else: print 'The password and the password verification do not match! Please try again' لاحظ استخدام المعامل المنطقي and عند التّحقّق من أنّ اسم المستخدم وكلمة المرور المدخلتان (المخزّنة في المتغيّرين username_sign_in و password_sign_in) توافقان ما تم إدخاله من قبل. العامل and يحرص على أنّ كلا الشّرطين محققان. وبهذا نكون قد انتهينا من البرمجية الصغيرة والبسيطة، وهذه هي الشّيفرة الكاملة: print 'Hello User, this is a basic sign up/login Program' username = raw_input('Enter your username please: ') password = raw_input('Enter the your password please: ') password_verification = raw_input('Verify password: ') if password == password_verification: print 'You have Successfully Signed up! \n' username_sign_in = raw_input('Enter your username please: ') password_sign_in = raw_input('Enter your password please: ') if username_sign_in == username and password_sign_in == password: print 'You have Successfully Signed in!' else: print 'username or password do not match! Please try again!' else: print 'The password and the password verification do not match! Please try again' تمارين تمرين 1 ما مُخرجات البرنامج التّالي: print 2 < 3 and 3 > 1 print 2 < 3 or 3 > 1 print 2 < 3 or not 3 > 1 print 2 < 3 and not 3 > 1 تمرين 2 ما مُخرجات البرنامج التّالي: x = 4 y = 5 p = x < y or x < z print p تمرين 3 ما مُخرجات البرنامج التّالي: x = 4 y = 5 p = x < y or x < z print p تمرين 4 ماذا سيحدث بعد تنفيذ الشّيفرة التّالية، هل ستحدث أي أخطاء؟ علّل جوابك. x = 2 if x == 2: print x else: print y تمرين 5 ماذا سيحدث بعد تنفيذ الشّيفرة التّالية، هل ستحدث أي أخطاء؟ علّل جوابك. x = 2 if x == 2: print x else: x + تمرين 6 هل الإزاحة في البرنامج التّالي صحيحة؟ إذا لم يكن الأمر كذلك، فأصلح الخطأ. x = 2 if x == 2: print x if x+1 == 3: print 'x+1 = 3' else: print x + 2 مصادر درس Input and Output للكاتب Dr. Andrew N. Harrington. كتاب Python Practice Book لكاتبه Anand Chitipothu.1 نقطة
-
والآن وأنا في السّنة العاشرة من عملي الحر كمصمّمة مع رُوّاد الأعمال والمسوّقين، أجد مراجعة سنواتي المهنيّة ممتعة ومخيفة في آن واحد فقد عشت خلالها النّجاح العظيم والفشل الذريع. والنصائح التي أقولها هنا هي خلاصة تجارب شخص لم يفشل مرة أو مرتين بل العديد من المرات، وللمفارقة فإن هذا الفشل هو ما أكسبني خبراتٍ عظيمة . وأملي أن أُجّنبك القليل من الأخطاء التي ارتكبتها بدوري، وأن تَتحقّق بدورك من صحة القرارات التي اتخذتها خلال عملك الحر. حاول أن تتعامل مع الأسئلة التالية كاختبار لك، هل أنت مستقل مبتدئ كثير الأخطاء؟ اكتشف ذلك بنفسك. هل تثق بانطباعاتك ؟ إذا انتابك إحساس غير طبيعي عند لقائك لعميل ما، اتركه. لا أجد مفردات أكثر للتعبير عن الفكرة إنه فقط الشعور الذي يستولي عليك عندما تقابل شخصًا ما لأول مرة، تسمع قصّته وماذا يريد أن يقوم به. جميعنا ينتابنا شعور ما في حالات مشابهة؛ وهذه حقيقة لابد من مواجهتها: الحدس أداة مهمّة لاتخاذ القرارات في مجال الأعمال. ربما نجَم نفورك من العمل نفسه من كونه غير مناسب لمهاراتك أو ربما بسبب شخصية العميل. وبواقع التّجربة، في كل مرة انتابني شعور سيء تجاه مشروع أو عميل ما ولم أصدق حدسي كان نصيبي الفشل فيه (رغم ما أتعلّمه بسبب ذلك) هل أنت صادق مع نفسك ومع مواهبك؟ لقد كنت الأسوأ على الإطلاق في هذا الموضوع لطالما أردت أن أكون كل شيء للعملاء مصمّمة ومديرة أعمال ،الحقيقة أنني لست رسّامة ولست خريجة جامعات عريقة. وبالنسبة لي فأنا أحتاج إلى مستوى معين من غير الرسمية في علاقتي مع العملاء والشفافية التامة فيما يتعلق بموهبتي كمصمّمة.أظهر كل ما تحتاجه لتكون الشّخص الذي أنت عليه، لا تخف، دع شخصيتك تظهر بشكلها الطبيعي عندما تتعامل مع العملاء، إنها لمستك الشخصية "علامتك التجارية" التي ستجعلهم يصفونك دومًا بأنّك "غير تقليدي”. هل تحتفظ بنسخة احتياطية من بياناتك؟ رعب فقدان البيانات وملفات العمل الثّمينة يشبه الرعب الناجم عن مشاهدة ثلاثة أفلام رعب في آن واحد أشعر بالإحراج عندما أعترف بأني خضت هذه التجربة مرتين. وهو مُحرج حقًا لأنه من السهل جدًّا حفظ نسخة احتياطية من البيانات، ولكن مشكلتي أني لا أفكر بالأمور التّقنية والشبكات..الخ كجزء من عملي مثل العديد من المصمّمين إلى أن ينفجر شيء ما في وجهي وأجد نفسي بعدها مستلقية على الأرض أبكي في مشهد مريع للغاية. حقيقةً عندما تعمل لصالحك الشخصي فإن حفظ نسخة عن بياناتك هو مسؤوليتك أنت وواجبك تجاه نفسك وعملائك، وهي عملية بسيطة وسهلة عليك أن تجعلها أولوية أثناء عملك. إليك بعض الخدمات التي استخدمتها أو بحثت عنها والتي تساعدك في ذلك: Dropbox: هو خطّتي القادمة لحفظ البيانات الخاصة بعملي، فقد دعوت بعض الأصدقاء لتجربة هذا التطبيق وحصلت نتيجةً لذلك على مساحة تخزين مجانية تقارب 20 غيغا بايت وهو تطبيق موثوق وفعّال. Google Drive: هو خيار غير مكلف تقريباً 4.99$من أجل 100غيغا بايت من السعة التخزينية.لقد استخدمت هذه الخدمة وكنت مسرورة بها ولكني وجدت عملية المزامنة فيها أبطأ مُقارنة بـDropbox. CrashPlan أو Carbonite: قمت مؤخرًا بالبحث عن خيارات التخزين لكميات كبيرة من البيانات مايقارب 4TB. Dropbox هو تطبيق ممتاز للمشاريع الحالية والبيانات التي أريد الوصول إليها من قواعد اعتيادية، ولكن مازال لدّي تيرابايتات من بيانات العملاء السابقين والتي لا أثق بقدرتي على الوصول إليها عبر أقراص التخزين الصلبة القديمة والعديدة التي أملكها هنا وهناك. وسعر 4$ من أجل كمية غير محدودة من البيانات هو حقًّا سعر لا يُضاهى، توفر Crashplan أيضًا خدمة النسخ الاحتياطي المنظّم، حيث عليك فقط أن ترسل لهم أقراص التخزين الصلبة التي تحتوي البيانات وسيقومون بنسخها وبذلك لن تحتاج لقضاء أسابيع في رفعها على الشبكة، وهو بلا شك خيار جيّد إذا كنت تبحث عن مكان لحجوم كبيرة من البيانات. هل تعمل مع عميلك المثالي؟ عندما بدأت عملي كمصمّمة مسّتقلة كنت متحمّسة للعمل مع أي شخص، عندما تكون جديدا في الموقع من السّهل أن تفكر بهذه الطريقة فأنت بحاجة إلى عمل وإلى مدخول مالي و تُبرّر ذلك بحاجتك إلى الخبرة وأنك لا تستطيع أن تكون انتقائيًا من البداية، بالطبع أنا أفهم هذا التفكير ولكن كلما أسرعت في تحديد نمط العملاء والعمل الذي يحفّزك ويجعلك متحمّسا للاستيقاظ في الصّباح للعمل كلما كان ذلك أفضل. بالطبع علينا جميعاً أن نتعلم العمل مع جميع أنماط الناس، لكن إذا لم تُكوّن نوعًا من الصّداقة مع العميل قبل توقيع العقد أو استلام المشروع فلربما هذا العميل ليس من نوعية العملاء المثالية بالنّسبة لك. ولكن بطبيعة الحال عقود العمل الحر تطبق غالباً على مشاريع لمرة واحدة فقط فإنّ هناك احتمال كبير أن لا يتوفّر لك الكثير من الوقت لبناء وتطوير هذه العلاقة / الصّداقة مع العميل. ونادرًا ما ستمتلك وقتًا كافيًا لتعرف المزيد حول العميل وبناء علاقة صداقة معه إلّا في حال وَقّعت عقدًا طويل الأمد، أمّا في المشاريع القصيرة المدى سيكون عظيما جدًّا إذا استطعت اختيار عملاء بإمكانك العمل معهم بدون خلاف ناجم عن صراع العلاقات الذي يظهر في البداية. لقد اكتشفت هذا بعد أن خسرت بعض العملاء وبعدها عرفت مالذي أبحث عنه في العميل، ربما ستحتاج أن تمر بهذه العملية لتتمكن من تحديد عميلك الأمثل. هل لديك ميزانية محددة لنشاطك كعامل مستقل؟ عندما تنطلق في عملك كمبتدئ في مجال العمل الحر تكون لديك رغبة ملّحة لتأمين كل ما تحتاجه من أجل العمل كمستقل بكفاءة – على الأقل هذا ما حدث معي– حيث اشتريت الكثير من العتاد (حاسوب، شاشة خارجية، فأرة مُتطّورة، لوحة مفاتيح مُتقّدمة جدًا...) حيث أنني مهووسة بالتّقنية وأحب مثل هذه الأشياء. لكن بعد أن تختفي مشاعر الفرحة بكل هذا العتاد الجديد، ستجد بأنّك قد اشتريت أمورًا كثيرة ربما لست بحاجة لها الآن أو أنه بإمكانك تنفيذ عملك على أكمل وجه من دونها. الأدهى والأمر هو لما تقترض لشرائها. لذلك قرّر ماهو الحد الأدنى الذي تحتاجه لسير نشاطك بسهولة واكتب قائمة بالأشياء التي تتمنى شرائها في المستقبل وستكون محفّزًا رائعًا لك خلال عملك. هل تسوق لنفسك كمجموعة وليس كفرد؟ إذا كنت تعمل لوحدك تأكد أن عملاءك يعلمون ذلك، من الجيّد أن تدير عملك الحر تحت اسم مجموعة ولكن قد يسبب هذا إرباكًا للعملاء، ويعتقدوا أنه لديك موظّفين يعملون بأدوار مختلفة في المشاريع، برأيي يجب أن تكون واضحًا وشفّافًا حول من تكون، ماذا تفعل وما لا يُمكنك القيام به. ماذا يحصل عندما لا تكون صريحاً حول استخدام متعاقد خارجي لأداء جزء من العمل ؟ المشكلة الأصغر مع عمل هؤلاء المتعاقدين هي على صعيد المسؤولية، إذا كان المتعاقد الخارجي يؤدي عمله بشكل مثالي دائمًا فهذا جيّد، أما إذا لم يكن؛ فتوجيهاتي لك إذا كنت لا تستطيع القيام لوحدك بالمشروع كاملًا، هو أن تُعطي العميل الخيار بتوظيف مستقل آخر لأداء هذا الجزء من العمل. وهذا يعود بنا إلى فكرة اختيار العميل المثالي، إذا كان العميل يبحث عن مستقل واحد لأداء كامل المشروع فربما لا يكون العميل الأمثل لك. هل وقعت عقدا قبل البدء بالعمل؟ لا يهم مهما كان حجم المشروع كبيرًا أم صغيرًا فالعقد بيان العمل وقائمة التسليم هي أمور ضروريّة جدًا قبل البدء بأي مشروع وإلا كيف ستتفق مع عميلك عن التّوقعات و شروط الدفع؟ أتذكر أنني كنت متوترة دومًا حول الطلب من العميل أن يُوقّع عقد عمل قبل البدء به والآن أدرك تماماً أن توتري ذلك كان ناجما عن خوفي من خسارة العمل في حال طلبت ذلك والآن أعلم أن العميل الذي يرفض توقيع العقد في البداية هو ليس العميل الأفضل لي. هل أضفت قيمة حقيقية لعميلك؟ ربما فعلت ولكنك لست متأكدًا ماهي القيمة التي أضفتها، اسأل عملاءك الحاليين والسّابقين غالبًا سوف يُوضّحون لك السبب الذي من أجله يعملون معك مرة تلو الأخرى أفضل مما ستعرف أنت. هل تريد طريقة واحدة تتغلب فيها على منافسيك؟ طريقة تنجح فيها كل مرة لأن لا أحد يفعلها ؟وفّر خدمة عملاء لا نظير لها. فكّر فيها قليلاً؛ نحن نعيش في عالم لا تُقَدّم فيه خدمات للزّبون الذي يتوق بدوره لاهتمام من بائعيه، لذلك إذا أردت أن تتميّز وتصنع قيمة مضافة لعملك حدّد ماهي خدمة العملاء الأفضل التي يحتاجها زبونك وقم بذلك. هل تتقاضى الكثير أو أقل من القدر الكافي؟ إذا كنت تتقاضى القليل جدًا مقارنة بعملك فهذا مأزق بلا شك أما إذا كنت تتقاضى أكثر مما يحدّده السوق لموهبتك فهذه مشكلة أيضًا، كنت أبحث عن مُصمم مستقل لتنفيذ بعض المهام منذ أشهر، وتواصلت مع مُصمّم تخرّج من مدرسة التصميم منذ أقل من سنة ومعرض أعماله شبه فارغ، وحدّد تسعيرًا ساعيًا سيكون مناسبًا لو كان معرض أعماله تحتوي أعمالًا بجودة ذلك السعر ولكن الأعمال التي شاهدتها لم تكن بجودة نصف هذا السّعر. الحل أن تنظر إلى ما يتقاضاه أقرانك وأقصد بالأقران الأشخاص الذين لديهم أعمال بجودة مقاربة لجودة عملك. هل لديهم مشاريع يعملون عليها بشكل متواصل وتضمن لهم دخلاً ثابتًا؟ إن كان الأمر كذلك فهذا يعني بأن الأسعار التي يطلبونها متوافقة مع جودة الأعمال التي يُقدّمونها. بالتالي بإمكانك أن تبدأ من هذا السعر. هل تنظم وقتك بشكل جيد؟ بعد أن تحدّد أفضل أوقات العمل بالنسبة لك اصنع جدولًا والتزم فيه، لا يهم إن كانت إنتاجيتك أعلى في المساء أو الصباح الباكر فصنع روتين خاص بيوم عملك هو طريقة تساعدك في قياس إنتاجيتك وإدارة تواصلك مع العملاء. بالنسبة لي فإن وقت العمل الأفضل يكون في الصباح، أما بعد العشاء فأعمل على تلك المهام التي لا تحتاج إلى ذكاء إبداعي وهذا يتغير أحياناً خلال السنة وأعدل برنامجي تبعًا له. لا تدري كيف تنظّم وقتك؟ شاهد هذه الفيديو والتي يشرح فيها صاحبها كيف يستخدم الورقة والقلم لتحديد قائمة مهامه: ماهي أخطاؤك كمستقل مبتدئ؟ لست أنا الوحيدة التي أملك قصصاً رهيبة عن العمل الحر أليس كذلك؟ شاركنا بتجاربك، ما الأخطاء التي ترتكبها وما النّصائح التي ترغب في تقديمها لغيرك من المُتسقلّين؟ ترجمة -وبتصرّف- للمقال:Top 10 Mistakes Made by New Freelancers لصاحبته: Jen Gordon.1 نقطة
-
أريد أن أستعمل الخيوط (threading) لتشغيل شيفرة برمجية كل مدة معينة وفي نفس الوقت يستمر البرنامج بتنفيذ التعليمات الأخرى، فما أسهل طريقة لفعل ذلك في بايثون؟1 نقطة
-
يوجد عدة طرق لفعل ذلك في بايثون، وأفضل طريقة كما ذكرتها أنت هي طريقة استخدام الخيوط حيث سنقوم بإنشاء دالة تحتوي على الشيفرة البرمجية التي تريد تنفيذها كل مدة معينة ومن ثم نستدعيها بعد أن نضع فيها سطر لنجعلها خيط يتكرر كل مدة معينة من الثواني وذلك عن طريق استخدام دالة Timer من مكتبة threading كما في المثال التالي: import threading def printtest(): threading.Timer(5.0, printit).start() print "Test Every 5 Seconds!" printtest() # بقية الشيفرة البرمجية الموازية …1 نقطة
-
تُتيح بعض تطبيقات ومنصات الترجمة وظيفة دمج ترجمة ملفين يعودان لنفس المشروع معًا بحيث تحصل على ملف يشمل جميع الترجمات، ما هو البرنامج الذي تستخدمه؟1 نقطة
-
كعامل مُستقل ستواجه باستمرار -مهما حاولت تجنّب ذلك- مشكلة العميل الذي يبدو رائعاً في بداية المشروع ومن ثمّ في مكان ما في المنتصف يبدأ بالتراجع. سيبدو هذا العميل مثاليًا تقريبًا في البداية ولكن مع مرور الوقت ستبدأ بالارتياب من تغير سير الأمور. ماذا تفعل في مثل هذه الحالة؟ وهل يمكنك إنقاذ الوضع دون خسارة كثير من الأموال؟ من المهم أن يكون لديك آليات بديلة جيّدة كي تتجنب الخسارة، ولكن في حال لم تقم بمثل هذه العمليات حتى الآن هناك بعض الخطوات التي بإمكانك فعلها في حال اختفى العميل في منتصف عملك وكيف تتجنب هذه الحالة في المستقبل. 1. لا تتجاهل المحاذير التي تلاحظها في العميل قد يبدو هذا الأمر بديهيا ولا يحتاج إلى تذكير، لكن أفضل شيء ممكن أن تفعله لتتجنب العميل المثير للمشاكل هو أن تنتبه لأي إشارة تحذيرية قد تُلاحظها في العميل، لأن هذه التنبيهات تبعد عنك الكثير من المتاعب التي تنتظرك خلال المشروع لذا من المهم ألا تتجاهلها. الفكرة الأساسية من كونك مُستقلّا ومُدير نفسك هي حرّيتك في العمل مع عملاء مميّزين يلائمون توجّهاتك، وبينما أنت المُتّحكم بالمُخطّط اليومي، لا تتنازل وتستسلم لطلبات هؤلاء العملاء وإلا سترجع إلى عقلية الموظف وأنت في موقع المدير. إليك أهم ثلاث إشارات تحذيرية يجب أن تنتبه إليها في علاقتك مع أي عميل وهي: البطء في الدفع عادةً في المراحل الأولى عند توقيع العقد وأخذ الدفعة الأوليّة يكون العميل سريعًا جدًّا في إنهاء هذين الإجراءين؛ بالتالي إذا تأخر عميلك في الدفع في البداية كن متأكدًا أنه سيتأخر في الدفع عند إنهاء المشروع، في الحقيقة ربما لن يرسل الدفعة النهائيّة أبدًا لذا من الأفضل الانتباه لهذا الأمر. الحاجة إلى إنهاء المشروع بشكل سريع إذا كان العميل يعاني من ضيق الوقت ويحتاج إلى إنهاء المشروع بأسرع وقت مُمكن؛ عليك أن تتوّقع منه دفعة إضافية للقيام بذلك، ولكن إذا أراد أن تُنفّذ المشروع بسرعة وبسعر رخيص فهذه إشارة تنبيه مهمة، إذا كان عميلك يساوم على المخطط الزمني وسعر المنتج سويّةً فعليك أن تفكر في جدوى الاستمرار فأنت لا تريد التضّحية بجودة العمل من أجل القليل من المال. تجاهل مساحتك الشخصية إذا كان عميلك يتوقع منك الإجابة على الرسائل طوال ساعات اليوم، في الليل وخلال أيام العطل-بعد أن تكون قد وضحت مسبقاً ساعات عملك- فهذه حقيقةً إشارة سيّئة جدًّا لما هو آت لأنه لا يحترم مساحتك الشّخصية كعامل مستقل، هو فقط مهتم لاحتياجاته وما يريد منك تنفيذه. 2. أرسل رسائل تذكير وتابع في بعض الأحيان يكون العميل مشغولا جدًّا والرسائل تتراكم في بريده الإلكتروني (كثيرًا ما يحدث معي هذا) لذا من الأفضل أن تُرسل له رسالة تذكير لطيفة أو رسالتين على مدى عدة أيام، لِتُذّكر العميل بأنك جدّي بشأن العمل معه وأنّك لم تنس مشروعه. في حال لم يستجب عميلك لرسائل التذكير الأوليّة من المهّم أن تُتابع الإرسال، اجعل رسائلك قصيرة ومحدّدة واطلب ردًا سريعا يبين لك إن كان بحاجة لتمديد الوقت المحدّد للمشروع. عندما تتعب من رسائل التذكير ، إشعارات السكايب، رسائل البريد الإلكتروني والرسائل القصيرة،الشيء الأخير الذي بإمكانك فعله والذي من شأنه أن يحاصر عميلك هو إرسال رسالة عبر البريد الكلاسيكي (رسالة ورقية في ظرف) تُوضح فيها أنك حاولت التواصل معه بشتى الطرق الممكنة لكنك لم تنجح، ويتوجب عليه إن كان يريد الاستمرار في العمل أن يتواصل معك بأسرع وقت ممكن وإلا سيَخسر الدّفعة الأولى المقدّمة وسوف يُعتبر العقد بينكما لاغيًا. تأكد من أنك قد احتفظت بنسخ من جميع مراسلاتك معه، فقد تحتاجها إن ساءت العلاقة بينكما. 3. قيم الأمر وانتقل إلى المشروع الذي يليه بعد أن تعطي وقتًا وطاقة كافيتين للخطوة الثانية يكون قد حان الوقت لتتحرك، لا تعطي هذا العميل أي مساحة من تفكيرك بعدها، عليك أن توقف خساراتك وتمضي قُدمًا ولا تعتبر ما حدث معك خسارة بل استخدمه كدرس مستقبلي لعلاقاتك مع الزبائن، كيف بإمكانك جعل العملية أسرع؟ ماذا يمكن أن تفعل من أجل تواصل أفضل؟ هل تحتاج لطلب أرقام الهاتف الشخصية للعميل منذ البداية؟ هل تحتاج إلى تحديث الإجراءات والعقود بحيث تتضمن طلبك لدفعة مُسبقة أو نسبة من تكلفة المشروع بشكل مُسبق؟ خذ ما تعلمته من هذه الحالة ونفذه مستقبلاً ولا تأخذ الموضوع بشكل شخصي، الله فقط يعلم لماذا تراجع العميل لذلك لا تقلق بشأنه قيّم الحالة وتحرّك، لا تفكر فيها مرّة ثانية. 4. حافظ على سيولتك النقدية كي تضمن بقاء سيولة مالية دائمًا في متناول يدك يجب أن تجدّد الاتفاقيات والعقود الخاصة بك، في حال لم تكن قد خصّصت نوعا من الدفع المسبق فقد حان الوقت لتفعل ذلك، وستحتاج أيضاً أن تحدد بشكل واضح موعدا لتسليم كل جزء من المشروع، توقعاتك عنه وأية أفعال محددة يجب أن تنفذ. أعرِف عاملًا مُستقلًا أضاف بند "التزامات العميل" إلى عقوده والتي تنصّ على أنه في حال لم يجب العميل على رسائل البريد الإلكتروني أوالطلبات في الوقت المُحدّد لذلك(كما هو مذكور في العقد) فعليه أن يدفع غرامة قبل أن يُواصل العمل معه. وهذا حقيقة رادع كبير للعملاء الذين يتردّدون بشكل مستمر بشأن العمل ويساعد في التخلص من العملاء المُتعبين. الفكرة الأساسيّة هنا أنَّ حفظ السيولة النقديّة يعني أن تكون كل التفاصيل واضحة وأن تتعامل بحزم مع السياسات التي وضعتها. كيف تعالج اختفاء الزبون ؟ إذا كنتَ تتعامل مع زبون مُتعب، خذ وقتاً كافياً لتقييم المحاسن والمساوئ.هل هناك تحذيرات تستمر في الظهور بينما تتجاهلها؟ هل الضغط الذي يُسببه العمل معه يستحق استمرارك في المشروع أم لا؟ تذكر أن فقدانك لعميل أو القليل من الدخل لا يعني الفشل، فقط تَعّلم من التجربة وتقدّم، وبالمناسبة لديك الآن وقت كافٍ لتبحث عن مشروع أكبر. ترجمة -وبتصرّف- للمقال: What to Do When a Client Disappears in the Middle of a Project لصاحبته: Carrie Smith.1 نقطة