بحث باسم الموضوع المطلوب

السقاف فون | تخضع الصور لحقوق طبع ونشر | 2019

الكرت التعريفي السقاف فون 

يوتيوب يدعم الآن ميزة “صورة داخل صورة” لجميع مستخدمي أندرويد


في العام الماضي وتحديدًا في شهر نوفمبر المنصرم وفّرت قوقل الدعم لميزة صورة داخل صور “PiP” من على نظام أندرويد أوريو “8.0”، وتبع ذلك قيام يوتيوب بدعم هذه الميزة في تطبيقها من على أندرويد، أنذاك كانت هذه الميزة متاحة فقط لمشتركي YouTube Premium و YouTube Red، ومع ذلك تُشير التطورات الأخيرة أن الدعم سيشمل جميع المستخدمين.
حيث هناك تغيير في صفحة دعم قوقل الرسمية، ويُشير هذا التغيير أن إمكانات يوتيوب “PiP” متوفرة الآن على جميع أجهزة أندرويد المحمولة والعاملة بنظام أندرويد 8.0 فأحدث، وحاليًا يقتصر هذا الأمر على الولايات المتحدة الأمريكية فقط، وستُتيح لهم مشاهدة فيديوهات يوتيوب أثناء استخدام تطبيقات أخرى دون أي مشاكل في الإنقطاع.
كما وأشارت الشركة أن الفيديوهات التي تتضمّن محتوى موسيقيًا لن تعمل معها ميزة PiP، ولكن هذا الخيار سيتمتع به فقط أعضاء يوتيوب Premium، أما فيما يخص إمكانية الاستخدام، أثناء تشغيل فيديو في تطبيق يوتيوب انقر على زر الشاشة الرئيسية وسيتقلّص حجم الفيديو ويتحوّل إلى صورة مصغرة يُمكن سحبها إلى أي جزء من الشاشة، ما يُتيح لك متابعة تشغيل الفيديو فوق التطبيقات الأخرى.
أخيرًا من المؤكد أن الإطلاق العالمي سيأتي في وقت لاحق، ولكن حتى هذه اللحظة لا يوجد أي كلمة من الشركة حول الموعد المحدد، ونحن نأمل بأن يكون ذلك في أسرع وقت ممكن.

أبل تبدأ في تصنيع هاتف آيفون 6S في الهند بتكلفة منخفضة

بدأت شركة أبل في تصنيع وحدات هاتف آيفون 6S في الهند في محاولة لخفض تكاليف إنتاج الهاتف، وبهذا ينضم هاتف آيفون 6S إلى هاتف آيفون SE الذي انتجته شركة أبل في الهند في العام الماضي، وفقًا لموقع The Economic Times.
ولقد شهدت تكاليف الاستيراد زيادة بنسبة 15 إلى 20 في المائة بسبب التعريفات الجمركية من حكومة الهند في شهر فبراير، لذا فإن شركة أبل تأمل أن تكون قادرة على تحمل بعض هذه التكاليف من أجل المنافسة بشكل أفضل في السوق الهندي عن طريق إنتاج هواتف آيفون في الهند.
ووفقًا لموقع The Economic Times، سيستغرق الأمر بعض الوقت حتى تتمكن شركة أبل من تصنيع الهاتف بشكل أسرع، وبالتالي ستستمر الشركة في استيراد الأجهزة من خارج البلاد أيضًا، لذلك لا يتوقع المستخدمون في الهند اي تخفيضات في الأسعار في الوقت الحالي.

نوكيا تستعد للكشف عن هاتف Nokia 9 في معرض IFA 2018

نوكيا تستعد للكشف عن هاتف رائد جديد ضمن فعاليات معرض الالكترونيات الاستهلاكية Ifa 2018 والذي سيقام في العاصمة الالمانية برلين في الفترة من 31 اغسطس إلى 5 سبتمبر القادم.
بحسب التقارير الواردة اليوم فإن الهاتف لازال مجهول المعالم ولكن تم الحديث عن بعض الامور مثل الإسم الذي سيكون A1 Plus أو A1P ايضاً سيعمل الهاتف بالمعالج الأحدث سناب دراغون 845 ويحمل شاشة من نوع OLED.
بالتأكيد ستطمح نوكيا في هذا الهاتف لتقديم بعض المزايا مثل البصمة داخل الشاشة وتقنية التعرف على الوجه وربما تدخل الشركة عالم التنافس على زيادة الكاميرات ونشاهد كاميرات ثلاثية أو اكثر كما ظهر في تسريبات سابقة.
يضيف التقرير ايضاً ان نوكيا تخطط لشحن الهاتف بصحبة نسخة النظام الاحدث اندرويد P والذي سيكون متوفراً بشكل رسمي ذلك الوقت.

كانون تطرح تحديثات على سلسلة عدسات L-series الشهيرة

كشفت شركة كانون الشرق الأوسط اليوم عن جملة من التحديثات على سلسلة عدسات L-series التي تحظى بشعبية واسعة لدى عشاق التصوير، وطرحت الشركة الإصدار الجديد من عدسة EF التقليدية من 70-200 ملم بالإطار المجزأ f/2.8L، الملحقة بمحرك داخلي صغير ومدمج من نوع IS III USM، وعدسة EF التقليدية من 70-200 ملم بالإطار الكامل f/4L، الملحقة بمحرك داخلي صغير ومدمج من نوع IS II USM.
وتعتبر سلسلة العدسات من قياس 70-200 ملم من الأدوات الرئيسية للمصورين المتمرسين والهواة على حد سوء، ويعود الفضل بذلك إلى قدرتها على تغيير بنية وتكوين الصورة بسهولة عبر الانتقال من المقياس الطبيعي إلى العدسة المقربة بانسيابية عالية، وتؤكد إمكانيات التكيف العالية التي تتسم بها هذه العدسات على قدرتها على التقاط صور لمجموعة واسعة من الموضوعات “ضمن زاوية تصوير أوسع”، بدءاً من الصور الشخصية والوجوه، وصولاً إلى صور الطبيعة والحياة البرية، ما يؤكد مرة أخرى على الدور الحيوي والجوهري الذي تلعبه سلسلة العدسات من 70-200 ملم في حقيبة أدوات المصوّر.
وقال بينوج ناير المدير الأول لقسم تسويق أجهزة المستهلكين والمبيعات المباشرة لدى كانون الشرق الأوسط: “باعتبارنا شركة رائدة عالمياً في مجال حلول التصوير، تتجسد رسالتنا في تعزيز قدرات ومهارات المصورين “رواة القصص المرئية” في المنطقة، وذلك من خلال طرح منتجات مبتكرة وقادرة على تلبية احتياجاتهم المتنامية باستمرار، وفي نفس الوقت ضمان توفير المنتجات الأفضل من حيث الجودة والأداء، الأمر الذي من شأنه الارتقاء بتجربة التصوير لدى العملاء إلى مستويات غير مسبوقة، كما أننا نعيد صياغة مسار فن التصوير الفوتوغرافي بفضل الإصدار المحدث لسلسلة عدسات L-series، الذي يضع بين أيدي المصورين أداءً لا يضاهى، وتعددية في الاستعمال، ومتانة في التصميم”.
وتتميز العدسة EF 70-200mm f/4L IS II USM بأداء متفوق، ومتانة لا تضاهى، وتصميم هندسي مريح وسهل الاستعمال، وهي الخصائص التي تشتهر بها جميع عدسات شركة كانون، كما تزن العدسة 780 جرام فقط، لذا فإنها تعتبر خياراً مثالياً للمصورين الذين يفضلون العمل أثناء الحركة والتنقل، سواءً كان ذلك على الشاطئ أو في حفل زفاف، فهذه العدسة تضمن التقاط صور واضحة ونقية بدرجة مذهلة، وضمن مجموعة متنوعة من البيئات.
من جهةٍ أخرى، يعمل طلاء الفلور Fluorine Coating المحيط بالعدسة على الحد من تماس والتصاق الأوساخ وقطرات المياه بالعدسة، كما تقوم طبقات Super Spectra الرائدة بالقضاء على مشكلة تشكل الظلال أو انعكاس الضوء على العدسة، بالإضافة إلى ما سبق، تستطيع عناصر الفلور المتبلورة على العدسة EF 70-200mm f/4L IS II USM تصحيح انحرافات درجات اللون، ما يضمن الحصول على صور ذات دقة وتباين عاليين، فالجودة الممتازة وعالية الاعتمادية للصورة هي ميزة لا تقدر بثمن، فهي تعمل على الحد من زمن المعالجة خلال مرحلة ما بعد الإنتاج.
وتوفر فتحة العدسة الثابتة بالإطار الكامل f/4 فترة تعرض متواصلة لمجموعة متنوعة من حالات الإضاءة، فالشفرات التسعة المحيطة بفتحة عدسة EF 70-200mm f/4L IS II USM الدائرية تخلق تأثيراً رائع الجمال للجودة الضبابية في الصورة، أو ما يدعى بالبوكيه Bokeh، ما يؤدي إلى تحييد وطمس الخلفية والمساهمة في إبراز وتوضيح الموضوع الرئيسي للصورة.
وتحتوي العدسة المحدثة أيضاً على مثبت صورة متطور، يستند تصميمه بشكل رئيسي على تصميم مثبت الصورة في العدسة EF 100-400mm f/4.5-5.6L IS II USM، التي تقدم ذات التأثير الذي يوفره مصراع الكاميرا الأسرع بـ 5 وقفات، مقارنةً بالعدسات السابقة المزودة بمثبت صورة من 3 وقفات، ويستفاد من هذه الميزة في حالات التصوير الجماهيرية، كما هو الحال في حفلات العروض الأولى للأفلام، أو عند تصوير لقطات من الطبيعة والحياة البرية أثناء رحلات السفاري.
علاوةً على ذلك، تستعين العدسة EF 100-400mm f/4.5-5.6L IS II USM بمزيج تفاعلي من إطار ضبط الصورة الدائري من نوع USM “ملحق بمحرك داخلي صغير ومدمج”، والجيل الثالث من محركات عدسات EF الجديدة، التي تتميز بوحدة تحكم مركزية CPU متطورة وعالية الأداء تحتوي على برامج ثابتة حديثة، وذلك بهدف تعزيز السرعة الوظيفية ودقة التقاط الصور عند استخدام تقنية الضبط التلقائي عالي السرعة.
وبالإمكان تعديل أداء تقنية الضبط التلقائي الصامت للصورة بشكل يدوي أيضاً، ما يتيح إمكانية ضبط الصورة لمسافات قريبة تصل حتى 1 متر، مقارنةً بمسافة 1.2 متر في الجيل السابق من العدسة، وجميع هذه المزايا الرائدة السابقة تجعل من عدسة EF 100-400mm f/4.5-5.6L IS II USM الخيار المثالي لعمليات التصوير الدقيقة والمتحركة على حد سواء، فخصائصها الوظيفية مطلوبة وضرورية لالتقاط صور رائعة ومميزة لمعالم الحياة في الشوارع.
وحلت العدسة EF 70-200mm f/2.8L IS III USM محل سلسلة عدسات 70-200 ملم الشهيرة من كانون، الأمر الذي من شأنه تعزيز تجارب وأداء المصورين الذين يستخدمون هذه السلسلة من العدسات الرائدة على مستوى هذه الصناعة، فقد تم تصميمها لتقدم أعلى درجات الأداء والمتانة، ما يجعلها الخيار المثالي للمصور الذي يستعمل العدسات الفوتوغرافية المقربة وعالية الجودة للحصول على أدق التفاصيل.
وقد تم ابتكار عدسة EF 70-200mm f/2.8L IS III USM بهدف تلبية متطلبات خبراء التصوير، فطبقة الحماية التي تحيط بها تجعل منها الخيار الأبرز لتجارب التصوير ضمن الظروف المناخية الصعبة، وتبدي هذه العدسة أيضاً مقاومة عالية ضد الرطوبة والغبار، فهي تحتوي على عناصر أمامية وخلفية مغلفة بطبقة من الفلور من أجل سهولة التنظيف.
وبفضل الأداء الوظيفي المميز والمحبب من قبل خبراء التصوير، فإن التحديثات التي طالت متانة العدسة EF 70-200mm f/2.8L IS III USM تضعها على سلم الخيارات المتفوقة في مجال التصوير الفوتوغرافي عالي الجودة أثناء السفر والترحال.
كما تعمل فتحة العدسة الثابتة بالإطار المجزأ f/2.8، والشفرات الدائرية الثمانية المحيطة بها، على فتح الباب واسعاً أمام عالمٍ من الخيارات الإبداعية، فهي تتيح للمصور إمكانية التركيز على موضوعات بالغة الدقة ضمن خلفية هادئة ومطموسة، وبفضل عناصر الفلور المتبلورة على العدسة مع عناصر التشتت فائق الانخفاض UD، توفر عدسة EF 70-200mm f/2.8L IS III USM تبايناً عالياً ودقة ممتازة، فعند استخدام هذه العدسة سيصبح المصور على ثقة تامة من أنه سيحصل على لقطات مثيرة ومثالية، بالإضافة إلى ذلك، لم تعد عملية التصوير ضمن بيئة خافتة الإضاءة تمثل أية مشكلة بالنسبة لعدسة EF 70-200mm f/2.8L IS III USM، وذلك بفضل سرعة فتحتها بالإطار المجزأ f/2.8 كحد اقصى، التي تكون ثابتة على طول نطاق التكبير، ما يتيح لها استقبال ضعف كمية الإضاءة التي تستقبلها العدسة بالإطار الكامل f/4.
فضلاً عن أن اهتزاز الكاميرا لم تعد مشكلة تثير قلق مستخدمي العدسة EF 70-200mm f/2.8L IS III USM بعد اليوم، حيث يقوم مثبت الصورة ذو الـ 3,5 وقفات بتعويض أي ضبابية أو عدم الوضوح الناتج عن الحركة والتنقل، علاوةً على ذلك، يوفر إطار ضبط الصورة الدائري من نوع USM “ملحق بمحرك داخلي صغير ومدمج” تقنية ضبط تلقائي وصامت للصورة ضمن سرعات عالية، وبالإمكان أيضاً إجراء تعديلات يدوية في أي وقت كان بلمسة بسيطة على حلقة الضبط.

جميع المزايا السابقة تجعل من عدسة EF 70-200mm f/2.8L IS III USM الخيار الأمثل لعميات التقاط الصور الرائعة والممتازة والهادئة للحيوانات ضمن بيئتها الطبيعية.

جهاز جالكسي نوت 9 يحصل على موافقة لجنة الاتصالات الفيدرالية

تم اعتماد جهاز جالكسي نوت 9 القادم من سامسونج من قِبل لجنة الاتصالات الفيدرالية الأمريكية اليوم، وتعتبر هذه خطوة طبيعية تتم قبل بدأ أي عملية اطلاق ولكن المثير للاهتمام هو انه قد تم اعتماد جالكسي نوت 8 من قبل لجنة الاتصالات الفيدرالية في نفس هذا الوقت من العام الماضي. فهل هذا يعني ان جميع هذه الشائعات التي تحدثت عن ظهور الجهاز في وقت مبكر كانت صحيحة؟
كانت النسخة التي تم اعتمادها هي النسخة الدولية ذات نموذج رقم SM-N960F، وبما أن الجهاز سيكون دوليًا فهذا يعني انه سيتمتع بالعديد من نطاقات اتصال LTE.
سيدعم جهاز جالكسي نوت 9 اتصال Wi-Fi وبلوتوث أيضًا، بالإضافة إلى أنظمة NFC وMST. ومن المتوقع أن يتم الكشف عن الجهاز في 9 أغسطس في حدث في مدينة نيويورك، مع احتمالية بدأ عملية الشحن قبل نهاية شهر أغسطس.
ووفقًا لتسريبات CAD، فمن المتوقع ان يأتي تصميم الجهاز متشابه مع تصميم جالكسي نوت 8 ومن المرجح ان يحتوي على مستشعر لبصمة الاصبع من الجزء الخلفي.
أما بالنسبة للمواصفات، فستأتي شاشة الجهاز من نوع Infinity Display بحجم 6.4 بوصة ودقة 1440 × 2960، كما سيعمل الجهاز إما بمعالج Exynos 9810 أو Snapdragon 845، هذا وبالإضافة إلى انه سيحتوي على مساحة 6 أو 8 جيجابايت من الذاكرة العشوائية ومساحة 64 او 512 جيجابايت من سعة التخزين. وبحسب ما ورد، سيكون هناك بطارية مدمجة بسعة 3850 مللي أمبير.

اتصال الواي فاي على وشك أن يصبح أكثر أمانًا مع معيار WPA3


أعلنت شركة Wi-Fi Alliance عن تأمين WPA3 والذي سيجعل الاتصال اللاسلكي بالإنترنت أكثر أمانًا وأكثر صعوبة للاختراق.
يعتبر دعم WPA3 لشبكة واي فاي هو أول تحديث رئيسي لمعيار الأمان المعتمد بواسطة أجهزة التوجيه اللاسلكية والأجهزة المنزلية منذ وقت طويل، كما انه يضيف طبقات إضافية من التشفير والتوثيق لمزيد من الحماية حتى لا يتعرض الإرسال اللاسلكي للاختراق.
كما ان عمليات تسجيل الدخول باستخدام كلمة مرور ستحصل على حماية أكثر فاعلية، حتى إذا لم تقم بتعيين كلمة مرور تتناسب مع المستويات الموصي بها، فلا يزال من الصعب جدًا على الأطراف الثالثة تخمينها.
يوجد نوعان من حماية WPA3 وهم WPA3-Personal وWPA3-Business:
تم تصميم WPA3-Personal لأجهزة التوجيه المنزلية الذكية والأجهزة الشخصية، وهي تستفيد من برتوكول المصادقة الالكترونية SAE وهو بروتوكول التأسيس الأساسي الآمن بين الأجهزة والذي يحمي جهازك من محاولات تخمين كلمة المرور.
يعمل WPA3-Business على تشفير البيانات إلى ما يعادل قوة تشفير 192 بت، مما يتيح إمكانية نقل البيانات الحساسة عبر الاتصال اللاسلكي دون الخوف من قيام الجهات الخارجية بفك تشفيرها عن بعد.
بدأت الشركات المصنعة للأجهزة اللاسلكية المتصلة مثل Qualcomm وMarvell وPhilips بالانتقال إلى تأمين WPA3، على الرغم من أن هذه العملية قد تستغرق بعض الوقت، وفي الوقت نفسه، ستستمر أجهزة WPA2 في التفاعل.

هاتف إل جي V40 قادم بـ 5 كاميرات وتقنية التعرف على الوجه

إل جي أحد الشركات الكبيرة التي بدأت تستعد لتقديم هاتفها الرائد في النصف الثاني من العالم والمعروف سلفاً بإسم LG V40 حيث أنتشرت اليوم اولى التسريبات حول هذا الهاتف .
بحسب مانشره موقع اندرويد بوليس الشهير فإن شركة إل جي تنوي المنافسة بهاتف يحمل 5 كاميرات ثلاث منها في الخلف واثنتين في الأمام ليكون اول هاتف رائد يأتي بـ 5 مستشعرات للكاميرا مرة واحده.
ايضاً سيقدم الهاتف تقنية التعرف على الوجه بمستشعر خاص من الأمام وهذا يعني انك ستقوم بتسجيل صورة وجهك 3D لتكون التقنية سريعة وآمنة للإستخدام في عمليات الدفع وماإلى ذلك كما هو موجود في هاتف آيفون X.
اخيراً سيستمر الهاتف بنفس نهج هاتف G7 من ناحية الشاشة بحواف نحيفة بالاضافة لوجود النتوء ودعم تقنيات الصوت مثل Quad DAC واستمرار مستشعر البصمة من الخلف.

ثلاثة أخطاء عليك تفاديها عند تعلم البرمجة بلغة بايثون

أعلم أنَّه ليس من السهل الاعتراف بالأخطاء التي تقوم بها، لكن الخطأ هو جزءٌ رئيسي من كل عمليات التعليم، بدءًا من التعلم كيفية المشي إلى تعلم لغة برمجة جديدة مثل بايثون.
هذه قائمة بثلاثة أخطاء التي وقعتُ فيها أثناء تعلمي لبايثون، عرضتها هنا لكي يحاول مبرمجو بايثون الجدد تفاديها وعدم الوقوع فيها، وهذه الأخطاء أدت إلى حدوث مشاكل كبيرة أخذت من وقتي ساعات حتى حللتها.

الخطأ الأول: استخدام أنواع البيانات القابلة للتغير كوسائط افتراضية عند تعريف الدالة

لنقل أنَّ لديك دالة صغيرة التي تبحث عن روابط في الصفحة الحالية وتستطيع إضافتها إلى قائمة (list) معيّنة.
def search_for_links(page, add_to=[]):
    new_links = page.search_for_links()
    add_to.extend(new_links)
    return add_to
لا يبدو أنَّ هنالك أيّ خطأ في الدالة السابقة، وهذا صحيح، فهي تعمل لكن هنالك مشاكل فيها؛ فلو مررنا قائمةً (list) إلى المعامل add_to فستعمل كما يجب، لكن ماذا يحدث لو تركنا القيمة الافتراضية دون تعديل؟
جرِّب تنفيذ الشيفرة الآتية:
def fn(var1, var2=[]):
    var2.append(var1)
    print var2

fn(3)
fn(4)
fn(5)
ستتوقع رؤية الناتج الآتي:
[3]
[4]
[5]
لكنك ستُفاجأ بالناتج الآتي:
[3]
[3, 4]
[3, 4, 5]
لماذا؟! يمكنك أن تستنتج أن القائمة (list) نفسها ستستعمل في كل مرة، فعندما نكتب دالة مثل الدالة السابقة في بايثون فسيتم تهيئة القائمة (list) كجزءٍ من تعريف الدالة، أي أنها لن تُهيّئ كل مرة تُستدعى فيها الدالة، وهذا يعني أنَّ الدالة ستحتفظ بكائن القائمة نفسه مرارًا وتكرارًا، ما لم تُحدِّد قيمةً أخرى له:
fn(3, [4])
الناتج:
[4, 3]
الناتج يماثل ما قد توقعناه.
الطريقة الصحيحة لفعل ذلك هي:
def fn(var1, var2=None):
    if not var2:
        var2 = []
    var2.append(var1)
لنعد كتابة الدالة السابقة:
def search_for_links(page, add_to=None):
    if not add_to:
        add_to = []
    new_links = page.search_for_links()
    add_to.extend(new_links)
    return add_to
نقلنا عملية التهيئة من مكان تعريف الدالة إلى داخلها مما يعني أنَّ عملية التهيئة ستتم في كل مرة تُشغَّل فيها الدالة.
لاحظ أنَّ ذلك ليس ضروريًا إذا كنتَ تستعمل أنواع بيانات غير قابلة للتعديل مثل tuple أو string أو int. وهذا يعني أنَّك تستطيع تعريف دالة كما في الدالة الآتية دون إمكانية حدوث أخطاء غير متوقعة:
def func(message="my message"):
    print message

الخطأ الثاني: استخدام أنواع البيانات القابلة للتعديل كمتغيرات في الأصناف

هذا الخطأ شبيهٌ كثيرًا بالخطأ السابق. تمعّن في الشيفرة الآتية:
class URLCatcher(object):
    urls = []

    def add_url(self, url):
        self.urls.append(url)
الشيفرة السابقة تبدو طبيعية جدًا، فلدينا كائن لتخزين روابط URL، وعند استدعائنا للدالة add_url فسنمرر إليها رابط URL لتخزِّنه، صحيح؟ لنجرِّبها:
a = URLCatcher()
a.add_url('http://www.google.')
b = URLCatcher()
b.add_url('http://www.bbc.co.')
الناتج:
b.urls
['http://www.google.com', 'http://www.bbc.co.uk']

a.urls
['http://www.google.com', 'http://www.bbc.co.uk']
ما هذا؟! لم نتوقع ذلك. إذ أنشأنا كائنين منفصلين a و b، وأسندنا رابطًا للكائن a مختلفًا عن رابط الكائن b، فكيف امتلك كلا الكائنين الرابطين نفسهما؟
اتضح أنَّ هذه المشكلة شبيهة جدًا بالمشكلة في المثال الأول، فقائمة (list) عناوين URL قد تمت تهيئتها عند تعريف الصنف (class)، وبالتالي أمست جميع الكائنات المُنشَأة من ذاك الصنف تستعمل القائمة نفسها.
هنالك بعض الحالات التي نستفيد فيها من هذه الميزة، لكنها ستضرك في أغلبية الأوقات، فلو أردتَ تخزين بيانات كل كائن على حدة فيمكنك تعديل الشيفرة لتصبح كما يلي:
class URLCatcher(object):
    def __init__(self):
        self.urls = []

    def add_url(self, url):
        self.urls.append(url)
أصبحت قائمة urls تُهيّئ عند إنشاء الكائن، وعندما نُنشِئ كائنين فستُهيّئ قائمتان منفصلتان.

الخطأ الثالث: عملية إسناد قيم إلى نوع بيانات قابل للتعديل

هذا الخطأ أربكني لفترة حتى فهمته، دعنا نستعمل نوع بيانات قابل للتعديل مثل dict:
a = {'1': "one", '2': 'two'}
لنفترض أننا نريد أخذ قيمة المتغير a واستعمالها في مكانٍ آخر دون تعديل القيمة الأصلية:
b = a

b['3'] = 'three'
أليس هذا بسيطًا؟ لننظر الآن إلى القيمة المخزّنة في المتغير a التي لم نُعدِّلها قط:
{'1': "one", '2': 'two', '3': 'three'}
ماذا؟! كيف ستبدو قيمة المتغير b إذًا؟
{'1': "one", '2': 'two', '3': 'three'}
دعنا نعود خطوةً إلى الوراء وننظر ماذا يحدث لو استعملنا أنواع البيانات غير القابلة للتعديل، مثل tuple:
c = (2, 3)
d = c
d = (4, 5)
قيمة c هي:
(2, 3)
بينما قيمة d هي:
(4, 5)
لقد جرى كل شيءٍ على ما يرام، لذا ماذا حدث في مثالنا؟ عند استخدام أنواع البيانات القابلة للتعديل فسنحصل على شيءٍ شبيهٍ بالمؤشرات (pointers) في لغة C، فعندما قلنا أنَّ b = a في الشيفرة السابقة فهذا يعني أنَّ المتغير bأصبح يُشير إلى a، وكلا المتغيرين يشير إلى نفس الكائن في ذاكرة بايثون؟ هل هذا مألوف لديك؟ ذلك لأن هذه المشكلة شبيهة بالمشاكل السابقة، وكنتُ أنوي تسمية هذا الدرس باسم «المشاكل التي تحدث مع أنواع البيانات القابلة للتعديل».
هل يحدث الأمر نفسه مع القوائم (list)؟ نعم. وكيف سنلتف على المشكلة؟ حسنًا، يجب أن نكتب الشيفرة الآتية التي تنسخ القائمة:
b = a[:]
السطر السابق سيؤدي إلى نسخ مرجعية كل عنصر من عناصر القائمة ووضعه في قائمة جديدة، لكن لنأخذ حِذرنا فإذا كان نوع بيانات أحد الكائنات الموجودة في القائمة قابلًا للتعديل فسيؤدي ذلك إلى الحصول إلى مرجعية لتلك الكائنات بدلًا من نسخها.
تخيل وجود قائمة على قطعة من الورق، ففي المثال الأصلي كان ينظر الشخص A والشخص B إلى الورقة نفسها، فلو عدّل شخصٌ ما القائمةَ فسيرى كلا الشخصين التعديلات التي أجريت على القائمة، وعندما نسخنا المرجعيات فأصبح لكل شخصٍ قائمته الخاصة به، لكن لنفترض أنَّ تلك القائمة تحتوي على أماكن يمكن البحث فيها عن طعام، فلو كانت «الثلاجة» موجودة في القائمة فحتى لو نسخها الشخص A و B فما تزال تشير إلى الثلاجة نفسها؛ فلو أتى الشخص A وعدّل محتويات الثلاثة (لنفترض أنه أكل جميع الحلويات فيها) فسيلاحظ الشخص B أن الحلويات قد اختفت من الثلاثة. ولا توجد طريقة سهلة للالتفاف على هذه المشكلة، وهذا أمرٌ مهمٌ عليك تذكره عندما تبرمج لكي تكتب شيفرتك بطريقة لا تسبِّب أيّة مشاكل.
تعمل أنواع dict بنفس الطريقة، ويمكنك إنشاء نسخة كاملة باستعمال الدالة copy()‎:
b = a.copy()
أكرِّر أنَّ ذلك سيُنشِئ متغيرًا جديدًا من نوع dict يُشير إلى نفس العناصر الموجودة في المتغير الأصلي، وبالتالي لو كان لدينا قائمتان متماثلتين وعدّلنا كائنًا قابلًا للتعديل مُشار إليه عبر مفتاح موجود في المتغير a فيمكن معرفة تلك التعديلات من داخل المتغير b.
الإشكاليات التي تواجهنا مع أنواع البيانات القابلة للتعديل تكون نتيجةً لمرونة تلك الأنواع، حيث لا تُشكِّل أيٌّ مما سبق مشكلةً حقيقة، وإنما هي أمور ضرورية يجب أخذها بالحسبان لتنجب المشاكل. وعمليات النسخ الكاملة التي ذكرناها آنفًا لن تكون ضروريةً في 99% من الحالات، أي يجب تعديل برنامجك لكي لا يحتاج إلى استخدام تلك النسخ من الأساس.
ترجمة –وبتصرّف– للمقال ‎3 mistakes to avoid when learning to code in Python لصاحبه Pete Savage