قبل عقدين من الزمن، كانت تجربتي مع سطح مكتب Mac أفضل بكثير مما هي عليه اليوم. على الرغم من امتلاكي شاشة واحدة فقط بجودة متواضعة بمعايير اليوم، إلا أنني كنت أشعر وكأنني أتنقل بسلاسة بين تسع شاشات أو أكثر دون عناء، حيث تعمل الذاكرة العضلية والمكانية معًا بتناغم.
ولهذا السبب، قمت بإنشاء تطبيق GridLion لإعادة مساحات macOS إلى مجدها الشبكي الذي كان موجودًا قبل إصدار Lion. تابع القراءة لتكتشف كيف قادني الحنين إلى الماضي والتفكير العميق وراء لماذا أفعل هذا؟ إلى مواجهة العديد من التحديات وإنشاء هذا الحل. أو يمكنك تنزيله مباشرة.
العودة إلى عام 2006
في تلك الفترة، بينما كنت أجرب المرافق اليابانية المتطورة، كنت أستكشف أيضًا أنظمة تشغيل سطح المكتب. قضيت معظم مسيرتي المهنية كمطور على Windows، لكنني بدأت في تجربة Linux لسطح المكتب ثم macOS. أغراني العرض الشهير بما يكفي لشراء جهاز Mac والبدء في استخدام TextMate.
كان TextMate بميزاته الثورية، مثل المقتطفات النصية، هو الدافع لانتقالي. ومن المثير للسخرية أنني لا أتذكر استخدامه لفترة طويلة جدًا؛ فقد سرعان ما أدرك المحررون الآخرون إمكانياته. ومع ذلك، بقيت مع نظام macOS، وانتقلت مسيرتي المهنية لاحقًا إلى تطوير iOS، مما جعل البقاء خيارًا حتميًا. وعلى أي حال، ظل شيء واحد من تلك الحقبة عالقًا في ذهني لفترة طويلة.
مساحات macOS Leopard: ثورة في الإنتاجية
كان إصدار macOS 10.5 Leopard في عام 2006 بمثابة قفزة كبيرة، حيث قدم مجموعة من الميزات المميزة، ولعل أبرزها Time Machine. ولكن بعد ما يقرب من عقدين من الزمان، ما زلت لا أستخدم Time Machine ولا أفتقده. ما أفتقده حقًا هو المساحات (Spaces).
قدمت المساحات مفهوم الأسطح المكتبية الافتراضية إلى نظام macOS، وسمحت لك بترتيبها في شبكة قابلة للتخصيص. أي شخص استخدم الأسطح المكتبية الافتراضية بهذه الطريقة يدرك قيمتها الحقيقية. إنها تتيح لك التعامل معها كشاشات فعلية في مواقع مكانية محددة. كنت أفضل دائمًا شبكة 3 × 3، وأتعامل معها وكأن لدي 9 شاشات حقيقية. كانت الشاشة المركزية مخصصة لمتصفح الويب، والشاشة العلوية لمحرر الويب، مما يسمح بالتبديل السريع بضغطة زر واحدة. أعلى اليسار كان لـ Xcode، والشاشة السفلية لمحاكي iOS. كانت الشاشات الأخرى مخصصة لتطبيقات وأغراض مختلفة لا أتذكرها بالضبط (مثل البريد، iTunes، الدردشة، إلخ)، لكن الفوائد كانت واضحة: كان بإمكاني الانتقال من شاشة إلى أخرى دون تفكير، وأصبحت الذاكرة العضلية تعمل وكأنني أنظر إلى شاشات فعلية منفصلة.
لقد وجدت تخطيط الشبكة هذا مفيدًا للغاية لدرجة أنني قمت بدمجه في تطبيقات أخرى أنشأتها، مثل شبكة من 16 شاشة متسلسلة يمكنك التنقل فيها ضمن تطبيق EasyBeats Drum Machine، مستوحاة مباشرة من مساحات Apple.
تراجع في عام 2011: macOS Lion وMission Control
مع إصدار macOS Lion، قدمت Apple ميزة Mission Control، وهي طريقتها الجديدة للتعامل مع الأسطح المكتبية الافتراضية، والتي بشكل غير مفهوم قيدتها بصف أفقي واحد فقط. أتذكر أنني فكرت في البداية أنني لم أر مثل هذا الإعداد من قبل، وأن Apple لن تقوم بتغيير طريقة استخدامي لجهاز الكمبيوتر الخاص بي بالكامل، أليس كذلك؟ أليس كذلك؟
خطأ فادح!
لقد كان الصف الواحد خطوة إلى الوراء. إذا أردت الوصول إلى شاشة معينة عبر لوحة المفاتيح، كان علي الآن تحمل الانزلاق أفقيًا على طول الطريق. إذا تذكرت اختصار لوحة المفاتيح المباشر، يمكنني القفز مباشرة، ولكن هل تركت المتصفح على الشاشة 7 أم 8؟ لقد دمر هذا التصميم الجديد تمامًا أي أمل كان لدي في الحفاظ على الذاكرة المكانية.
لم أكن الوحيد الذي شعر بالإحباط. ظهرت حلول بديلة، لكن أفضلها، TotalSpaces، تسبب لي بتباطؤ غريب واعتمد على تعديل قاعدة النظام، وهو ما لم يكن مطلوبًا في النهاية تجاوز حماية سلامة النظام. مع مرور الوقت، استسلمت وتعلمت كيفية التعامل مع الأمر. لم يكن لدى مطور iOS خيار كبير في هذا الشأن، وعندما انتقلت لاحقًا إلى فصل جديد مع صاحب العمل الحالي، كنت قد اشتريت بالفعل شاشات مادية إضافية، وحسناً… تعايشت مع الوضع.
مديرو النوافذ: حلول لم تكن كافية
أعلم أن بعض القراء قد يصرخون على شاشاتهم قائلين: استخدم Yabai/Amethyst/أي شيء آخر. لقد جربتهم جميعًا وأدركت أنها ليست مناسبة لي. أعتقد أنني لا أحب مفهوم النوافذ على سطح المكتب بشكل خاص. يبدو الأمر وكأنني أتنقل بين الأوراق على المكتب، وبالتأكيد يمكن تنظيم الأوراق بشكل أنيق، لكنني أريد ببساطة محطات عمل مختلفة حيث يكون كل شيء كما تركته. أحب تطبيقات macOS في وضع ملء الشاشة، وأضعها أحيانًا في وضع الانقسام، لكنني أحب حقًا مفهوم المناطق المخصصة لمهمة واحدة فقط.
ظهور الحل: بصيص أمل
على أي حال، كما قلت، لقد تعلمت كيفية التعامل مع الأمر، وكنت أشتكي أحيانًا لزملائي من إمكانية العودة إلى Linux مع جهاز العمل التالي. استمر الأمر على هذا النحو حتى بضعة أشهر مضت، عندما رأيت أن شخصًا ما تمكن من إزالة الرسوم المتحركة من macOS عند الانتقال من مساحة إلى أخرى، دون الحاجة إلى تعديلات على النظام. من الواضح أن هذه الرسوم المتحركة أزعجت بعض الناس، لكنها لم تزعجني أبدًا. ولكن بمجرد أن رأيت الانتقال بين المساحات بدون رسوم متحركة، أدركت على الفور أنه يمكنني حل شكواي.
هل لا يزال للعاطفة مكان في عصر LLMs؟
في نقاش شائع مع أصدقائي المتوافقين مهنيًا في مجال التكنولوجيا، وفي هذا العصر الجديد لتوليد الأكواد بواسطة نماذج اللغة الكبيرة (LLM)، هل للبرامج الجيدة قيمة حقيقية؟ إذا كان بإمكان أي شخص إنشاء برنامج بمجرد وصفه، فهل من المنطقي (أو سيكون منطقيًا) محاولة إنشاء برامج مدفوعة الأجر بعد الآن؟ أعتقد ذلك. أعتقد أنه لا تزال هناك قيمة حقيقية في قيام شخص ما بتحسين شيء ما إلى أقصى حد ممكن، واتخاذ قرارات التصميم حول كيفية تصرف شيء ما. لم أعد أكسب رزقي كمطور مستقل، لكنني فعلت ذلك لفترة طويلة، ولست متأكدًا من أن الكثير مما يميز التطبيق الجيد عن الحزمة قد تغير.
ألقِ نظرة على أي من تلك الألعاب المقلدة التي تغمر متاجر التطبيقات. في أغلب الأحيان، لا تكمن المشكلة في أنها ليست أصلية أو بسيطة جدًا، المشكلة هي أن الشخص أو الفريق الذي قام ببنائها لا يهتم. الاهتمام هو ما يجعل منشئ المحتوى يضيع وقته في البحث عن الأشياء التي لا تبدو على ما يرام أو يقلق بشأن مشكلات الأداء التي لن يلاحظها معظم المستخدمين أبدًا.
على أي حال، أنا حقًا أهتم بالتنقل القائم على الشبكة لسطح المكتب الافتراضي.
التحكم ليس سهلاً على الإطلاق
تعجبني فكرة وجود غلاف خفيف الوزن حول المساحات الأصلية، مع دعم لأجهزة سطح المكتب أو تطبيقات ملء الشاشة. فقط مع شبكة للتنقل. لكن هناك سببًا وراء اختفاء جميع الحلول التي كانت تتحكم في المساحات الأصلية. يحافظ نظام macOS على إغلاق معظم واجهات برمجة التطبيقات للتحكم في المهام. إنها ليست مجرد مسألة استدعاء واجهة برمجة تطبيقات موثقة لإضافة سطح مكتب جديد، أو إعادة ترتيبها. لكن القدرة على الانتقال إلى مساحة ما على الفور تعني أنه يمكنني إنشاء نموذج يأخذ المساحات الأصلية للصف الواحد ويقدمها كشبكة.
لذا، وبمساعدة نماذج اللغة الكبيرة (LLMs)، حصلت على نموذج أولي قبيح ولكنه فعال في غضون يوم واحد. لقد نجح الأمر وكنت مبتهجًا، وكان على الفور شيئًا كنت سأدفع مقابله المال قبل أيام فقط. ولكن بعد استخدامه ليومين، أدركت أنني أريد أداة أكثر صقلًا.
بناء شيء حقيقي: ميلاد GridLion
قررت أن أقضي وقت فراغي المحدود للغاية في هذا المشروع. وبعد حوالي شهر، وصلت إلى النقطة التي كنت فيها سعيدًا جدًا به. قررت أن أسميه GridLion، ليس لسبب سوى أنه يعتمد على الشبكة (Grid) ومشكلاتي مع macOS Lion التي ذكرتها أعلاه. لقد تلقيت تعليقات بأن هذا الاسم فظيع، وقد يكون هذا صحيحًا، لكنني أعتقد أيضًا أن الناس يقدرون الأسماء أكثر مما ينبغي 😂. على أي حال، لن أقضي الكثير من الوقت في الحديث عن الميزات المطبقة وما إلى ذلك، حيث يمكن العثور على هذه التفاصيل بشكل أفضل في صفحة التطبيق. بدلاً من ذلك، أعتقد أنه من المثير للاهتمام أن نقرأ عن حواجز الطرق والمواقف غير المتوقعة.
عقبات الأذونات في macOS
من المثير للسخرية أنك لا تلاحظ مدى تعقيد شيء ما إلا عندما تحاول تسهيل الأمر على الآخرين. للسماح لهذا التطبيق بالتقاط اختصارات لوحة المفاتيح العامة والتنقل عبر المساحات، فإنه يحتاج إلى إذن إمكانية الوصول لنظام التشغيل macOS. هذا أمر معقول تمامًا؛ لا أريد أن يكون لدى برنامج ما القدرة على التقاط ضغطات المفاتيح دون علمي. ولكن يمكن تحسين عملية الموافقة على ذلك بشكل أفضل، كما هو الحال على نظام التشغيل iOS. في iOS، إذا طلبت إذنًا، تظهر مطالبة تطلب هذا الإذن، وإذا وافقت عليه، يتم تمكين الإذن. الأمر بسيط وسهل. على نظام macOS، إنها عملية معقدة.
يطلب الإذن، ويحصل المستخدم على مطالبة بفتح إعداد إمكانية الوصول أو الرفض. إذا وافقوا، فسيتم فتح الإعدادات، وسيتعين على المستخدم العثور على مفتاح التبديل الصغير المحدد وتمكينه. ثم يتم تنفيذ مطالبة أمنية أخرى. لماذا لا يمكن أن يكون هذا على الأكثر مطالبتين؟
لكن الأمور تزداد سوءًا إذا كنت تريد معاينات مصغرة لمساحاتك (أنا أفعل ذلك، وأظن أن معظم الناس سيفعلون ذلك). يتطلب ذلك تمكين إذن تسجيل الشاشة وصوت النظام. وكما هو الحال قبل ذلك، يظهر مربع حوار يطلب الإذن، والذي يؤدي بعد الموافقة إلى مربع حوار آخر حيث يتعين عليك مرة أخرى العثور على التبديل الصحيح، وتشغيله حيث يتعين عليك الموافقة على مربع حوار آخر، والذي يؤدي هذه المرة إلى إنهاء التطبيق وإعادة فتحه. تنهد. الأسوأ من ذلك هو أنه كان على المستخدم تجاوز كل هذه العقبات، لأن GridLion يحتاج إلى إنشاء معاينات للنوافذ/الشاشات غير المرئية، فتحصل على الحوار الأكثر رعبًا حتى الآن. هذا الأخير هو حوار فعال جدًا، حتى أنني ترددت في النقر عليه وأنا من قام بإنشاء التطبيق 😬. إنه أمر مبالغ فيه بعض الشيء لقطات معاينة المساحة الصغيرة، لكن هذا ما تحصل عليه عندما تحاول القيام بشيء يجب دمجه في نظام التشغيل. لا يمكن فعل الكثير حيال ذلك باستثناء التأكد من أن التطبيق يبني الثقة من خلال عدم لمس الشبكة مطلقًا إلا إذا طلب ذلك (مثل التحقق من التحديثات إذا رغبت في ذلك والتحقق من صحة مفتاح الترخيص). يعمل التطبيق دون هذا الإذن، ولكن أعتقد أن الترقية تستحق العناء شخصيًا.
متجر التطبيقات ليس خيارًا لـ GridLion!
لقد قمت ببيع البرامج فقط من خلال متجر تطبيقات iOS. لقد بدأت كل شيء منذ فترة طويلة لدرجة أنني لا أتذكر العقبات التي واجهت إعداده. ولكن نظرًا لأن GridLion يستدعي واجهات برمجة التطبيقات الخاصة للحصول على معلومات المساحة، فهذا غير مسموح به على AppStore. لذلك، ألقيت نظرة سريعة على الحلول المحتملة.
كانت غريزتي الأولى هي إعداد موقع ويب يستخدم واجهات برمجة تطبيقات Stripe ويتضمن ضريبة السلع والخدمات للعملاء الأستراليين. أنا أسترالي، وقد قمت بذلك في عدد من مشاريع SaaS في الماضي، ولكن بعد أن أفسدتني الطبيعة الشاملة لمتاجر التطبيقات المختلفة، كنت مهتمًا أكثر بهذا النوع من الخدمة.
السهل الممتنع: Lemon Squeezy
على ما يبدو، ما أردته هو تاجر مسجل (Merchant of Record). شخص ما يتعامل مع المشتريات والضرائب والمبالغ المستردة. ويبدو أن هناك ثلاث شركات رئيسية تقدم هذه الخدمة: Paddle، GumRoad، وLemon Squeezy. لقد انجذبت إلى Lemon Squeezy بسبب واجهة برمجة تطبيقات مفتاح الترخيص الخاصة بهم. عند الشراء، يقومون بمنح العميل مفتاح ترخيص، ويوفرون طرقًا للتنشيط/إلغاء التنشيط/التحقق من الصحة.
لقد اعتقدت بسذاجة أنني يمكنني فقط إنشاء حساب، وربط Stripe الخاص بي (أعتقد أن Stripe استحوذت أو اشترت أو قامت بشيء ما) وبيعه في دقائق. لكن العملية أطول قليلاً من ذلك. عليك أن تثبت لـ Lemon Squeezy أنك تتمتع بسمعة طيبة، وتبيع شيئًا ذا قيمة/استخدام فعلي. تم إرسال عدد قليل من نماذج الشاشة، وكانت هناك حاجة إلى بعض إثباتات حسابات الوسائط الاجتماعية. لم تكن هذه مشكلة بالنسبة لي، لكنني رأيت شخصًا بدأ للتو يواجه بعض الحواجز هنا.
في الماضي، أتفهم تمامًا هذا النوع من المتطلبات. من السهل على أي شخص لديه نوايا حسنة أن ينسى الأشخاص ذوي النوايا السيئة، وبما أن Lemon Squeezy هي التي تتعامل مع العميل (على الأقل فيما يتعلق بالمدفوعات)، فإنهم على حق في اتخاذ الإجراءات اللازمة لحماية سمعتهم.
ومع ذلك، حتى قبل الموافقة، كان لدي وصول كامل إلى حساب اختباري، مما يعني أن التكامل مع التطبيق كان سهل الإعداد والاختبار. هذه تجربة منخفضة المخاطر جدًا بالنسبة لي، ولكن يجب أن أعترف بأنني أتطلع إلى رؤية ما إذا كانت هذه طريقة قابلة للتطبيق لبيع البرامج خارج متجر التطبيقات (نعم، نعم، أعلم أنها كانت بهذه الطريقة لعقود من الزمن 😅).
نماذج اللغة الكبيرة (LLMs) وتجربة المستخدم (UX)
أستخدم نماذج اللغة الكبيرة طوال الوقت في وظيفتي اليومية. أستخدمها كمساعدين للبرمجة وأقوم بإنشاء منتجات تتمحور حول خدماتها، ولكن هذه هي المرة الأولى التي أستخدمها فيها في مشروع تطبيق أصلي شخصي، ووجدت التجربة… مثيرة للاهتمام. نماذج اللغة الكبيرة تشبه السفن فائقة السرعة، حيث يمكنك توجيهها في اتجاه معين ولكن بدون حلقة ردود فعل جيدة سوف تخرج عن المسار. قمت بتخطيط نظام تحديد المواقع العالمي (GPS) لمدينة البندقية، لكنك وصلت إلى فينيسيا لاس فيغاس. بالتأكيد يبدو الجزء مناسبًا، لكنه ليس ما أردته.
تعتمد حلقات ردود الفعل على المشروع. في وظيفتي اليومية، أعمل بشكل عام مع أهداف محددة أو نتائج صحيحة لواجهة برمجة التطبيقات أو استعلامات مجموعة بيانات كبيرة. إذا تم تحديد الخطة جيدًا، يمكن لنموذج اللغة الكبير أن يرى غالبًا على الفور ما إذا كانت النتيجة ليست على النحو المرغوب فيه، ثم يكررها. أقضي الجزء الأكبر من وقتي في المراجعة.
لقد كان هذا المشروع مختلفًا جدًا. الكثير من واجهة المستخدم يدور حول الشعور، لذا بالنسبة لأي شيء يواجهه المستخدم البشري، يجب أن يكون الإنسان في الحلقة. لقد جعلني أتساءل عن المكاسب الفعلية هنا. من ناحية، نظرًا لأنني لم أقم حقًا بعمل أصلي على نظامي التشغيل Mac/iOS منذ ما يقرب من 10 سنوات، فقد ساعدتني نماذج اللغة الكبيرة بالتأكيد، ولكن في الوقت نفسه، أعتقد أنني قبل 10 سنوات كنت سأصنع نفس التطبيق في نفس المقدار من الوقت واكتسبت الكثير من المعرفة على طول الطريق.
GridLion: يلبي تقريبًا كل ما أريد
أنا المستخدم الأول لهذا التطبيق، لذلك حاولت إضافة كل ما أريد:
- سهولة التنقل وإعادة ترتيب شبكة المساحات.
- سرعة وثبات في الأداء بدون أي تباطؤ.
- عرض إعدادات محددة (مثل حجم الشبكة، ومفاتيح التشغيل السريع).
ولكن تبقى بعض الأشياء. إذا كنت ترغب في نقل مساحة من شاشة إلى أخرى أو نقل نافذة من مساحة إلى أخرى، فلا توجد واجهات برمجة تطبيقات موثوقة للقيام بذلك. لحسن الحظ، نظرًا لأن GridLion يعمل جنبًا إلى جنب مع Mission Control، يمكنك فقط استخدام Mission Control للقيام بمثل هذه المهام، لكن هذا يضايقني قليلاً لأنني لا أستطيع القيام بذلك مباشرة من التطبيق.
وأخيرًا، القدرة على ظهور تطبيقات معينة دائمًا في موقع شبكي محدد عند التحميل. كانت هذه إحدى ميزات مساحات macOS الأصلية، لكن ربما لم تعد مفيدة بالنسبة لي الآن. الإعداد وإعادة الترتيب سريعان، ونادرًا ما أقوم بإعادة التشغيل. أيضًا، إذا نظرت إلى لقطات الشاشة، سترى أنه غالبًا ما يكون لدي العديد من نوافذ VSCode مفتوحة، ولست متأكدًا من كيفية التعامل مع ذلك. على أي حال، ربما سأواصل العمل على إيجاد حل في المستقبل.
أمل في نظام macOS الأصلي
بعد قول كل هذا، سأكون سعيدًا جدًا إذا أعلن نظام macOS التالي عن عودة المساحات القائمة على الشبكة. يجب أن تكون هذه إحدى ميزات نظام التشغيل مرة أخرى. حتى ذلك الحين، لا تتردد في تجربة GridLion.