24 تغريدة 12 قراءة Jun 10, 2020
ثريد بعنوان: الwallpaper اللي هتبوّظ موبايلك.
ملحوظة: الثريد تقيل ومليان لكنه مبسّط قدر الإمكان، كمل على مسؤوليتك الخاصة.
من كام يوم، أكاونت عادي جدًا على تويتر نشر تويتة بيقول فيها ما معناه، احذروا، إياكم تحطوا الصورة دي خلفية لموبايلاتكم، بتبوظ الموبايل فورًا.

ودا لينك التويت، هتلاقوا فيها الصورة موجودة (محدش يجربها فعلًا يا جماعة، الموضوع مش هزار رغم انه شكله مش منطقي، تابع باقي الثريد وهتعرف ليه دا بيحصل)
أنا أول ما شوفت التويت دي وبحكم تعاملي المستمر مع ال file systems فقلت دا مستحيل، دا أكيد فتي، لكني فوجئت بعدد من التويتس لناس بتقول انها حطيتها ك wallpaper والموبايل باظ فعلًا.
هتلاقوا عدد من الناس بيتكلم عن الموضوع دا في الريبلايز على التويت الأصلية.
ناس كتير موبايلاتها دخلت في بوت لوب، و سوفت واقع، ومش بس سامسونج، فيه موبايلات جوجل بيكسل كمان، زي دي
طيب ايه تفسير الظاهرة الغريبة دي؟
مبدأيًا الصورة بتتكون من ايه، الصورة بتتكون من وحدات بناء صغيرة جدًا اسمها بيكسلز Pixels وال Pixels دي تقدر تعتبرها مجموعة من النقط اللي بتكون الصورة. كل نقطة منهم ليها لون، ولما تحط النقط الكتير دي جنب بعض بيكونوا صورة.
الكمبيوتر (والموبايل) مبيعرفوش يخزنوا غير أرقام بس، فبالتالي البيكسل لازم يتم تحويله لصيغة رقمية عشان يتم تخزينه والتعامل معاه.
فبالتالي كل بيكسل بيخزن ٣ أرقام أساسية تدل عليه.
قيمة بتدل على مقدار اللون الأحمر في البيكسل دي، وقيمة بتدل على مقدار اللون الأخضر، وقيمة للون الأزرق.
والسيستم دا اسمه RGB اختصارًا ل RED GREEN BLUE
والخليط بين الألوان دي بيدينا أي لون احنا عايزينه، يعني مثلًا اللون الأصفر هو خليط بين الأخضر والأحمر، بينما اللبني هو خليط الأخضر والأزرق (الأرقام الي جوة المربعات بتدل على مدى تشبّع البيكسل من اللون المناظر ليها، ما علينا)
المهم كدة عرفنا إننا عشان نخزن بيكسل فاحنا محتاجين نعبر عنها ب ٣ أرقام، رقم للأحمر، رقم للأخضر، رقم للأزرق.
للأسف فيه كمان رقمين تاني بيدخلوا في التعبير عن البيكسل وهما
جاما: درجة شفافية اللون
إلومينانت: درجة سطوع اللون.
كدة فهمنا إننا عشان نعبر عن أي بيكسل لازمنا ٥ أرقام، صح؟ تمام
الصورة مكونة من عدد من البيكسلات، كل بيكسل منهم مكونة من عدّة أرقام، الرقم الواحد فيهم بتتراوح قيمته من 0 ل 255 ومينفعش يتخطى 255 أبدًا أبدًا أبدًا، نهائي، خالص، أبدًا
بس ليه؟
نروح بقى لقصة تانية خالص، عملية التخزين في الكمبيوتر بتتم عن طريق تحويل أي رقم لنظام اسمه ال binary system ودا عبارة عن نظام رقمي بيتعامل مع ال 0 و ال 1 فقط.
فأي رقم الكمبيوتر عايز يخزنه بيحوله لصيغة ال 0 و ال1 دي بعدين يخزنه
مثال: 13 تتخرن كدة 1101
عملية التخزين فيزيائيًا بقى بتم في مكان اسمه ال RAM ودا اللي بنسمع عنه لما نقول ان الموبايل دا مثلا فيه رام ٤ جيجا، الرام دي وحدة التخزين المؤقت للكمبيوتر اللي بيخزن فيها البيانات اثناء اجراء العمليات عليها.
الرام دي متكونة من جوة من شوية وحدات تخزين مصغرة جدًا، لا ترى بالعين المجردة، الرام دي متقسمة من جوة لمجموعة من "الأدراج" (بنقول كدة مجازًا طبعًا) ، كل درج منهم يقدر يخزن جواه رقم من النظام الثنائي، بشرط ان الرقم اللي من النظام الثنائي دا ميتجاوزش ال ٨ خانات، 8 bits
كل 8 bits جنب بعض خدوهم وقفلوا عليهم في درج واحد وسموهم byte وال byte دا بقى وحدة قياس المساحة، يعني لما أقول ان الرام ٢ جيجا بايت فدا معناه اني ممكن اخزن جواها ٢ مليار بايت.
يعني ٢ مليار رقم ثنائي كل رقم منهم مكون من "٨ خانات"
طيب البايت دا أكبر رقم يقدر يخزنه كام؟ ٢٥٥، ودا السبب ان البيكسلز بتتمثل بأرقام لا تتخطى ٢٥٥، لأن كل رقم منهم مسموحله بbyte واحد بس.
نرجع لموضوعنا، الموبايل عشان يتعامل مع الصورة ففيه حاجة اسمها ال color profile، ودا نوعية التشفير اللي الموبايل استخدمها عشان يمثل الألوان بتاعته، وفيه أنواع كتير من ال color profiles، هتلاقي اشهرها في الصورة دي.
كل الموبايلات المعروفة بتستخدم color profile اسمه sRGB، وبالتالي أي صورة متخزنة ب color profile مختلف لازم يتم تحويلها ل sRGB قبل استخدامها أو عرضها، وهنا كانت المشكلة!
الصورة اللي بنتكلم عليها اللي بتبوظ الموبايلات دي، ال color profile بتاعها proPhotoRGB ودا نمط مختلف، بالتالي لما انت بتحط الصورة دي باكجراوند، موبايلك تلقائيًا بيبدأ يحولها ل sRGB
في عملية التحويل دي، الموبايل بيجيب رقم مناظر لكل رقم من ال٥ أرقام المكونين لل pixel اللي هما ال R,G,B,Gamma,Illuminant لحد هنا مفيش أي مشكلة.
حساب قيمة ال illuminant دا كان بيتطلب معادلة رياضية بسيطة جدًا اللي هي متعلم عليها في الصورة دي، معادلة بسيطة خالص.
المشكلة اللعينة بقى كانت بتحصل في بيكسل معين في الصورة، بيكسل معين واحد بس من وسط ملاين البيكسلز، لما كان بيتم تحويله، كان بيطلع الرقم دا: 254.999997
طيب احنا قلنا ان أهم حاجة الرقم ميتخطاش ٢٥٥، يبقى ايه المشكلة؟
المشكلة يا سيدي كانت في موبايلات سامسونج انها اثناء حساب المعادلة دي بيحصل عندها حاجة اسمها rounding error ودا معناه ان الرقم بيزيد أو بيقل بقيمة معينة نتيجة لخطأ في عملية التقريب، عشان يتحول من كسر لرقم صحيح.
الخطأ في عملية التقريب اللي كان بيحصل دا أدى إلى أن الرقم يكبر بمقدار واحد صحيح، مجرد واحد صحيح، ويتحول ل 256. وهنا المشكلة
تخيل انك بتحاول تحشر حاجة في مكان مش قدها، دا اللي الموبايل بالظبط بيحاول يعمله، بيحاول يحط رقم قيمته 256 في مكان مبيستحملش اكتر من 255
فبتحصل حاجة معروفة اسمها overflow، بيترتب عليها إن الموبايل بيrestart نفسه عشان يتجنب المشكلة اللي حصلت في الميموري، بس الموبايل أول ما بيشتغل بيحمّل ايه؟ الباكجراوند، فيدخل في نفس المعضلة دي تاني. إلخ إلخ ألخ.
الحكمة من الموضوع: اللي كتب الأكواد بتاعت تحويل الصورة من ProPhotoRGB ل sRGB هما من أكبر عتاولة البرمجة في العالم حاليًا، رغم ذلك، صورة واحدة بس، قدرت توقع السيستم بتاعهم كله من غير قصد. مفيش حد كبير على البرمجة.
دائمًا هناك استثناء.
فيديو مفيد عن الموضوع: youtube.com
لينكس
distractify.com
صور

جاري تحميل الاقتراحات...