عُدنا والعود أحمدُ
لا أحب ترشيح أيّ شيءٍ إلا بعد تجربته، سواء كان الأمر يتعلق بتقنية مُعينة أو سلسلة مُصوّرة، لذلك تأخرت في ترشيح البث الذي أجراه الأخ أبو بكر سليمان مع الأخ أحمد الإمام حتى أنهيت مشاهدته، وكانت 4 ساعات رائعة.
البث يتطرّق إلى:
- معالجة البيانات وتجهيزها
- تشغيل النماذج اللغوية ومقارنتها
- تدريب النماذج اللغوية
- حفظ ونشر النماذج اللغوية
- تقدير تكلفة استخدام النماذج اللغوية
ويتخلل هذه المحاور العديد من المعلومات المفيدة، مثل التعرّف على مكتباتٍ جديدة وبعض التقنيات المُساعِدة عند التعامل مع هذه النماذج.
يمكنك مشاهدة البث من هنا:
https://www.youtube.com/live/S9VHQhC3HPc
أنصحك سواءً كنت مبتدئًا أو متقدمًا في هذا العالم أن تُشاهد البث، فهو مفيد جدا.
والسلام عليكم 👋🏻
لا أحب ترشيح أيّ شيءٍ إلا بعد تجربته، سواء كان الأمر يتعلق بتقنية مُعينة أو سلسلة مُصوّرة، لذلك تأخرت في ترشيح البث الذي أجراه الأخ أبو بكر سليمان مع الأخ أحمد الإمام حتى أنهيت مشاهدته، وكانت 4 ساعات رائعة.
البث يتطرّق إلى:
- معالجة البيانات وتجهيزها
- تشغيل النماذج اللغوية ومقارنتها
- تدريب النماذج اللغوية
- حفظ ونشر النماذج اللغوية
- تقدير تكلفة استخدام النماذج اللغوية
ويتخلل هذه المحاور العديد من المعلومات المفيدة، مثل التعرّف على مكتباتٍ جديدة وبعض التقنيات المُساعِدة عند التعامل مع هذه النماذج.
يمكنك مشاهدة البث من هنا:
https://www.youtube.com/live/S9VHQhC3HPc
أنصحك سواءً كنت مبتدئًا أو متقدمًا في هذا العالم أن تُشاهد البث، فهو مفيد جدا.
والسلام عليكم 👋🏻
❤8👍1
الخوف من المجهول
من سنوات طويلة وأنا أسمع عن NGINX وأراه يُستخدم بكثرة وأحيانا أستخدمه من خلال أحد مقدِّمي الخدمات، ولكن لم أُجرّب استخدامه بشكل مباشر أبدًا من قبل، والسبب كان "الخوف من المجهول".
كنت أظن أنه شيء مُعقّد ومن الصعب التعامل معه، إلى أن اضطررت البارحة إلى تشغيله يدويًّا واكتشفت أن الأمر لم يكن صعبا كما كنت أتخيّل!
كل ما احتجته هو تشغيل بعض الأوامر على الخادم وتعديل بعض الإعدادات وكان NGINX مربوطًا باسم النطاق الخاص بي وبدون أي مشاكل. بكل تأكيد هناك العديد من الإعدادات التي لم ألمسها والكثير من الأمور التي أحتاج لتعلمها، ولكن التجربة المبدئية كانت ناجحة.
نفس هذا الأمر يتكرر معنا في حياتنا اليومية خلال العمل أو خارجه، دائما ما نخاف من المجهول إلى أن نجربه فنكتشف أنه لم يكن كما كنا نعتقد.
لو أنني تخلّصت من هذا الخوف من سنوات لكنت الآن أكثر معرفة ولدي تجارب مختلفة في مجالات أكثر، ولكن هذا ما حدث، لذلك أنا آتٍ من المستقبل لأخبرك "لا تخف من المجهول"، فقط جرّب وأعطِ نفسك الفرصة.
ما هي أسوأ الاحتمالات؟ ستفشل في تنفيذ بعض الأفكار؟ لن تستطيع تشغيل بعض التقنيات؟ وماذا بعد؟ فقط جرّب.
والسلام عليكم 👋🏻
من سنوات طويلة وأنا أسمع عن NGINX وأراه يُستخدم بكثرة وأحيانا أستخدمه من خلال أحد مقدِّمي الخدمات، ولكن لم أُجرّب استخدامه بشكل مباشر أبدًا من قبل، والسبب كان "الخوف من المجهول".
كنت أظن أنه شيء مُعقّد ومن الصعب التعامل معه، إلى أن اضطررت البارحة إلى تشغيله يدويًّا واكتشفت أن الأمر لم يكن صعبا كما كنت أتخيّل!
كل ما احتجته هو تشغيل بعض الأوامر على الخادم وتعديل بعض الإعدادات وكان NGINX مربوطًا باسم النطاق الخاص بي وبدون أي مشاكل. بكل تأكيد هناك العديد من الإعدادات التي لم ألمسها والكثير من الأمور التي أحتاج لتعلمها، ولكن التجربة المبدئية كانت ناجحة.
نفس هذا الأمر يتكرر معنا في حياتنا اليومية خلال العمل أو خارجه، دائما ما نخاف من المجهول إلى أن نجربه فنكتشف أنه لم يكن كما كنا نعتقد.
لو أنني تخلّصت من هذا الخوف من سنوات لكنت الآن أكثر معرفة ولدي تجارب مختلفة في مجالات أكثر، ولكن هذا ما حدث، لذلك أنا آتٍ من المستقبل لأخبرك "لا تخف من المجهول"، فقط جرّب وأعطِ نفسك الفرصة.
ما هي أسوأ الاحتمالات؟ ستفشل في تنفيذ بعض الأفكار؟ لن تستطيع تشغيل بعض التقنيات؟ وماذا بعد؟ فقط جرّب.
والسلام عليكم 👋🏻
❤11👍2
خان المُبرمجين (علي فاضل)
Photo
تضمينات (تمثيلات | متجهات) الماتريوشكا أو Matryoshka Embeddings
كل النماذج المُستخدمة في استخراج التضمينات أو الـ Embeddings تُعطيك حجمًا ثابتًا للتضمينات يتراوح بين 384 في النماذج الصغيرة من Sentence Transformer كنموذج MiniLM، ويصل إلى 8,960 في بعض النماذج الضخمة المُقدمة من Nova وعلي بابا.
أحيانا لا نحتاج لهذا الحجم من التضمينات، ولكننا لا نريد استخدام نماذج متعددة في تطبيقاتنا، فظهرت فكرة تضمينات الماتريوشكا.
ماتريوشكا هو اسم الدمى الروسية المتداخلة الموضّحة في الصورة، والفكرة هي تدريب النموذج لاستخراج تضمينات بحجم 1,024 مثلا، ولكن خلال التدريب نُقيّم النموذج باستخدام عدّة أطوال من نفس التضمين.
على سبيل المثال، عندما يُعطينا النموذج تضمين بحجم 1,024 نحسب الـ Loss الخاص به باستخدام التضمين بحجمه الكامل بالإضافة إلى الـ Loss باستخدام أول 512 عنصر من عناصر التضمين بالإضافة إلى الـ Loss باستخدام أول 256 عنصر من عناصر التضمين، وهكذا.
اختيار الأحجام هو شيء يحدده صانع النموذج، فمثلا نموذج silma-embeddding-matryoshka-v0.1 المقدّم من SIMLA AI يُعطيك تضمينات بأحجام 768 و 256 و 48 و 16 و 8.
يمكن الاستفادة من هذا النوع من التضمينات في حالات استرجاع البيانات، فمثلا يمكنك استرجاع عدد كبير من المستندات باستخدام التضمينات الصغيرة (48 مثلا) ثم تُعيد ترتيبها باستخدام التضمينات الأكبر والأكثر دقة (256 مثلا) وتستبعد جزءًا من النتائج لتُعيد ترتيب المُتبقي لديك بأكبر حجم من التضمينات (768 مثلا).
يوجد العديد من النماذج من هذا النوع موجودة على HuggingFace يمكنك الاطلاع عليها من هنا:
https://huggingface.co/models?search=matryoshka
كما يمكنك قراءة هذه المقالة لفهم أعمق:
https://huggingface.co/blog/matryoshka
وأخيرا، يمكنك استخدام متعب (MTEB) لمعرفة أفضل نماذج التضمينات الموجودة على الساحة:
https://huggingface.co/spaces/mteb/leaderboard
والسلام عليكم 👋🏻
كل النماذج المُستخدمة في استخراج التضمينات أو الـ Embeddings تُعطيك حجمًا ثابتًا للتضمينات يتراوح بين 384 في النماذج الصغيرة من Sentence Transformer كنموذج MiniLM، ويصل إلى 8,960 في بعض النماذج الضخمة المُقدمة من Nova وعلي بابا.
أحيانا لا نحتاج لهذا الحجم من التضمينات، ولكننا لا نريد استخدام نماذج متعددة في تطبيقاتنا، فظهرت فكرة تضمينات الماتريوشكا.
ماتريوشكا هو اسم الدمى الروسية المتداخلة الموضّحة في الصورة، والفكرة هي تدريب النموذج لاستخراج تضمينات بحجم 1,024 مثلا، ولكن خلال التدريب نُقيّم النموذج باستخدام عدّة أطوال من نفس التضمين.
على سبيل المثال، عندما يُعطينا النموذج تضمين بحجم 1,024 نحسب الـ Loss الخاص به باستخدام التضمين بحجمه الكامل بالإضافة إلى الـ Loss باستخدام أول 512 عنصر من عناصر التضمين بالإضافة إلى الـ Loss باستخدام أول 256 عنصر من عناصر التضمين، وهكذا.
اختيار الأحجام هو شيء يحدده صانع النموذج، فمثلا نموذج silma-embeddding-matryoshka-v0.1 المقدّم من SIMLA AI يُعطيك تضمينات بأحجام 768 و 256 و 48 و 16 و 8.
يمكن الاستفادة من هذا النوع من التضمينات في حالات استرجاع البيانات، فمثلا يمكنك استرجاع عدد كبير من المستندات باستخدام التضمينات الصغيرة (48 مثلا) ثم تُعيد ترتيبها باستخدام التضمينات الأكبر والأكثر دقة (256 مثلا) وتستبعد جزءًا من النتائج لتُعيد ترتيب المُتبقي لديك بأكبر حجم من التضمينات (768 مثلا).
يوجد العديد من النماذج من هذا النوع موجودة على HuggingFace يمكنك الاطلاع عليها من هنا:
https://huggingface.co/models?search=matryoshka
كما يمكنك قراءة هذه المقالة لفهم أعمق:
https://huggingface.co/blog/matryoshka
وأخيرا، يمكنك استخدام متعب (MTEB) لمعرفة أفضل نماذج التضمينات الموجودة على الساحة:
https://huggingface.co/spaces/mteb/leaderboard
والسلام عليكم 👋🏻
❤4
مما لا يسع المبرمج جهله
تعرّفت على العديد من المبرمجين خلال حياتي البرمجية القصيرة، وجزء لا بأس به منهم لا يعرفون كيفية استخدام Git بشكل جيد أو لم يستخدموه من قبل أساسا (بالإضافة إلى شيء مثل GitHub)، وهذا من المحرمات، صدقًا 😅
"يجب" على المبرمج أن يعرف كيفية استخدام Git سواءً كان مطوّر مواقع أو تطبيقات للهاتف أو عاملا في مجال الذكاء الاصطناعي أو مديرًا للأنظمة والبنية التحتية، هذا ليس رفاهيةً أبدا.
هذان مصدران من المصادر اللطيفة والخفيفة على النفس والتي أنهيتها شخصيا:
- https://ohmygit.org
- https://learngitbranching.js.org
يمكنك مشاهدة بعض الدروس التعليمية كمقدمة ثم استخدام المصدرين في الأعلى للتعلّم والتسلية في الوقت نفسه.
والسلام عليكم 👋🏻
تعرّفت على العديد من المبرمجين خلال حياتي البرمجية القصيرة، وجزء لا بأس به منهم لا يعرفون كيفية استخدام Git بشكل جيد أو لم يستخدموه من قبل أساسا (بالإضافة إلى شيء مثل GitHub)، وهذا من المحرمات، صدقًا 😅
"يجب" على المبرمج أن يعرف كيفية استخدام Git سواءً كان مطوّر مواقع أو تطبيقات للهاتف أو عاملا في مجال الذكاء الاصطناعي أو مديرًا للأنظمة والبنية التحتية، هذا ليس رفاهيةً أبدا.
هذان مصدران من المصادر اللطيفة والخفيفة على النفس والتي أنهيتها شخصيا:
- https://ohmygit.org
- https://learngitbranching.js.org
يمكنك مشاهدة بعض الدروس التعليمية كمقدمة ثم استخدام المصدرين في الأعلى للتعلّم والتسلية في الوقت نفسه.
والسلام عليكم 👋🏻
👍6❤3😱1
خان المُبرمجين (علي فاضل)
Photo
الانتباه للتفاصيل الصغيرة يصنع فرقًا كبيرًا
منذ فترة أطلقت ميزة جديدة في منصة باحث تسمح للمستخدم بعد تسجيل دخوله بتفضيل مجموعة من المتحدثين ليظهروا في بداية قائمة المتحدثين بدلا من البحث عنهم في كل مرة يحتاج فيها إلى الوصول إلى دروسهم.
البارحة، وخلال تجهيزي لبعض البيانات الخاصة بميزة أخرى، وجدت أن اثنين من مجلدات المتحدثين غير موجودة على ذاكرة التخزين الخارجية التي أستخدمها في حفظ نسخة صوتية من الدروس الموجودة على المنصة 🤔
اكتشفت المشكلة وحللتها على ذاكرة التخزين الخارجية، ولكن خلال البحث عن المشكلة لم أجد المتحدثين المذكورين على منصة باحث كذلك، وعند التدقيق وجدت أن صفحة عرض المتحدثين تعرض 7 صفحات من المتحدثين بدلا من 11 (فقد بحدود 80 متحدثًا) 🧐
جرّبت البحث عن المتحدثين بأسمائهم فظهروا، لكنهم لم يظهروا بمجرد تصفح صفحة عرض المتحدثين، وأول ما خطر ببالي كان ميزة تفضيل المتحدثين، لأن هذا الجزء من الشيفرة البرمجية يستخدم هذه الميزة لترتيب المتحدثين في حال تسجيلك على المنصة.
للتأكد من الأمر، قمت بتجربة تصفح المتحدثين دون تسجيل الدخول وظهر جميع المتحدثين بالفعل، فجرّبت تسجيل الدخول بحسابين ثم تفضيل متحدث بالحساب الأول وتحديث الصفحة من الحساب الثاني، لأكتشف أن المتحدث قد اختفى 🤓
فذهبت لأراجع ما قد كتبته بمساعدة ChatGPT وباستخدام ActiveRecord (وهو الـ ORM الخاص بـ Ruby on Rails) لأكتشف أن استعلام SQL المُوضّح في الصورة الأولى لا يُظهر المتحدثين الذين لم تُفضّلهم وفَضّلهم غيرك من المستخدمين 😨
بعد محاولة فهم الأمر والاستعانة بأحد الأصدقاء، وصلنا إلى نتيجة وهي أن الاستعلام المُوضّح في الصورة الأولى يقوم بدمج الجدولين
بهذه الطريقة، إذا تم تفضيل المُتحدّث من قِبل أحد المستخدمين، فباقي المستخدمين لن يظهر لهم هذا المُتحدّث لأنه سيُستثنى من الاستعلام باستخدام
عدّلت الاستعلام كما هو مُوضّح في الصورة الثانية وتخلّصت من جملة
للوهلة الأولى، وعندما كتبت الاستعلام الأول لأول مرة، كان منطقيًّا، ولكن بعد التجربة اكتشفت الخطأ، وهنا نسأل السؤال، كيف يمكن اختبار مثل هذه الأمور في حالات الاختبار؟ فالاستعلام سليم إذا اختبرته على مستخدم واحد، ولكنه كارثي عند اختباره على عدد أكثر من المستخدمين، هل من أفكار؟
والسلام عليكم 👋🏻
منذ فترة أطلقت ميزة جديدة في منصة باحث تسمح للمستخدم بعد تسجيل دخوله بتفضيل مجموعة من المتحدثين ليظهروا في بداية قائمة المتحدثين بدلا من البحث عنهم في كل مرة يحتاج فيها إلى الوصول إلى دروسهم.
البارحة، وخلال تجهيزي لبعض البيانات الخاصة بميزة أخرى، وجدت أن اثنين من مجلدات المتحدثين غير موجودة على ذاكرة التخزين الخارجية التي أستخدمها في حفظ نسخة صوتية من الدروس الموجودة على المنصة 🤔
اكتشفت المشكلة وحللتها على ذاكرة التخزين الخارجية، ولكن خلال البحث عن المشكلة لم أجد المتحدثين المذكورين على منصة باحث كذلك، وعند التدقيق وجدت أن صفحة عرض المتحدثين تعرض 7 صفحات من المتحدثين بدلا من 11 (فقد بحدود 80 متحدثًا) 🧐
جرّبت البحث عن المتحدثين بأسمائهم فظهروا، لكنهم لم يظهروا بمجرد تصفح صفحة عرض المتحدثين، وأول ما خطر ببالي كان ميزة تفضيل المتحدثين، لأن هذا الجزء من الشيفرة البرمجية يستخدم هذه الميزة لترتيب المتحدثين في حال تسجيلك على المنصة.
للتأكد من الأمر، قمت بتجربة تصفح المتحدثين دون تسجيل الدخول وظهر جميع المتحدثين بالفعل، فجرّبت تسجيل الدخول بحسابين ثم تفضيل متحدث بالحساب الأول وتحديث الصفحة من الحساب الثاني، لأكتشف أن المتحدث قد اختفى 🤓
فذهبت لأراجع ما قد كتبته بمساعدة ChatGPT وباستخدام ActiveRecord (وهو الـ ORM الخاص بـ Ruby on Rails) لأكتشف أن استعلام SQL المُوضّح في الصورة الأولى لا يُظهر المتحدثين الذين لم تُفضّلهم وفَضّلهم غيرك من المستخدمين 😨
بعد محاولة فهم الأمر والاستعانة بأحد الأصدقاء، وصلنا إلى نتيجة وهي أن الاستعلام المُوضّح في الصورة الأولى يقوم بدمج الجدولين
speakers و favorite_speakers على المُعرّف الخاص بالمُتحدّث ويستخدم WHERE ليُبقي الصفوف المُنتمية للمستخدم الحالي أو التي لا تنتمي لأي مستخدم.بهذه الطريقة، إذا تم تفضيل المُتحدّث من قِبل أحد المستخدمين، فباقي المستخدمين لن يظهر لهم هذا المُتحدّث لأنه سيُستثنى من الاستعلام باستخدام
WHERE بعد الانتهاء من الـ JOIN.عدّلت الاستعلام كما هو مُوضّح في الصورة الثانية وتخلّصت من جملة
WHERE لأحصل على النتيجة المطلوبة مباشرة بعد الانتهاء من الـ JOIN ونجح الأمر 🥳للوهلة الأولى، وعندما كتبت الاستعلام الأول لأول مرة، كان منطقيًّا، ولكن بعد التجربة اكتشفت الخطأ، وهنا نسأل السؤال، كيف يمكن اختبار مثل هذه الأمور في حالات الاختبار؟ فالاستعلام سليم إذا اختبرته على مستخدم واحد، ولكنه كارثي عند اختباره على عدد أكثر من المستخدمين، هل من أفكار؟
والسلام عليكم 👋🏻
❤5👍1🔥1
هل يلزم توفّر الإمكانيات الكاملة والمثالية لتُنجِز؟
يظن بعض الشباب (إذا اعتبرت نفسي شيخا) أن من شروط الإنجاز وجود الإمكانيات الكاملة لهذا الإنجاز المعيّن، ولكن ما لا يعرفه هذا الشاب أن هذه قد تكون حيلة من حيل الشيطان ليُقعده عن العمل.
على سبيل المثال، في مشروع تخرجنا من الجامعة سنة 2019، والذي رافقني فيه أحد أعز أصدقائي، كنا نقوم ببناء نموذج ذكاء اصطناعي لتشكيل النصوص العربية، وكل ما كان في حوزتنا وقتها حاسبان محمولان بمعالجات رسومية متواضعة: NVIDIA GeForce GTX 970M و NVIDIA GeForce GTX 1050 TI (وأغلب التجارب أُجريت على الـ 970M).
كانت معالجة بيانات المشروع تستغرق عشرات الدقائق (بعد تحسين الشيفرة البرمجية لأقصى الحدود) والتدريب كان يستغرق ساعات ونحن هنا نتحدث عن نموذج صغير لا يتجاوز حجمه الـ 30MB على وحدة التخزين.
ثم، ولحسن حظنا، تحصلنا على معالج رسومي من نوع NVIDIA GeForce GTX TITAN X من الجامعة لإجراء بعض التجارب المُتعلّقة باستخدام التشكيل في مهمات أخرى كالترجمة مثلا، وكانت هذه التجارب تستغرق أياما من التدريب لتنتهي.
ولكن، ولله الحمد، انتهينا من المشروع ونشرنا ورقتين بحثيتين عن الأمر، فأصبحتا من أكثر الأوراق البحثية استشهادًا في المجال.
مثال آخر، شاركت في برمجان العربية سنة 2022 ضمن مسار الشعر، وكان الهدف إنشاء نماذج متعددة لتقديم حلولٍ مختلفة تتعلق بالشعر العربي، فأنشأت 4 نماذج:
- نموذج لتأليف الشعر
- نموذج لتشكيل الشعر
- نموذج للتعرّف على بحر وقافية البيت
- نموذج للتعرّف على تفعيلة البيت
كل هذا باستخدام معالج رسومي واحد من نوع NVIDIA GeForce RTX 3060 بسعة ذاكرة 12GB، ولله الحمد تحصل الفريق وقتها على المركز الثالث في المسابقة.
المثال الأخير (والأمثلة كثيرة)، أراد أحد الأصدقاء استخدام برنامج تفريغ لتفريغ قرابة الـ 12 ألف ساعة من الدروس، فبدأ بالعملية ولكن اكتشف أنها ستستغرق أسبوعًا كاملا (أو أكثر قليلا) فتواصل معي لنجد حلًّا لأن المدة طويلة فكان ردي: "لماذا لا تنتظر؟".
وذكرت له أن تفريغ ساعة واحدة من المواد الموجودة على منصة باحث يستغرق من 3 إلى 4 دقائق، والمنصة عليها الآن أكثر من 122 ألف ساعة، بحساب بسيط، تفريغ هذا العدد من الساعات سيستغرق 254 يومًا تقريبا في أحسن الأحوال، وليس لدي حلٌّ آخر سهل التطبيق، فلماذا لا أنتظر؟
قال رسولنا صلى الله عليه وسلم كما في صحيح مسلم: "المُؤْمِنُ القَوِيُّ خَيْرٌ وَأَحَبُّ إلى اللهِ مِنَ المُؤْمِنِ الضَّعِيفِ، وفي كُلٍّ خَيْرٌ. احْرِصْ علَى ما يَنْفَعُكَ، وَاسْتَعِنْ باللَّهِ وَلَا تَعْجِزْ، وإنْ أَصَابَكَ شَيءٌ، فلا تَقُلْ: لو أَنِّي فَعَلْتُ كانَ كَذَا وَكَذَا، وَلَكِنْ قُلْ: قَدَرُ اللهِ وَما شَاءَ فَعَلَ؛ فإنَّ (لو) تَفْتَحُ عَمَلَ الشَّيْطَانِ.".
"اسْتَعِنْ باللَّهِ وَلَا تَعْجِزْ".
والسلام عليكم 👋🏻
يظن بعض الشباب (إذا اعتبرت نفسي شيخا) أن من شروط الإنجاز وجود الإمكانيات الكاملة لهذا الإنجاز المعيّن، ولكن ما لا يعرفه هذا الشاب أن هذه قد تكون حيلة من حيل الشيطان ليُقعده عن العمل.
على سبيل المثال، في مشروع تخرجنا من الجامعة سنة 2019، والذي رافقني فيه أحد أعز أصدقائي، كنا نقوم ببناء نموذج ذكاء اصطناعي لتشكيل النصوص العربية، وكل ما كان في حوزتنا وقتها حاسبان محمولان بمعالجات رسومية متواضعة: NVIDIA GeForce GTX 970M و NVIDIA GeForce GTX 1050 TI (وأغلب التجارب أُجريت على الـ 970M).
كانت معالجة بيانات المشروع تستغرق عشرات الدقائق (بعد تحسين الشيفرة البرمجية لأقصى الحدود) والتدريب كان يستغرق ساعات ونحن هنا نتحدث عن نموذج صغير لا يتجاوز حجمه الـ 30MB على وحدة التخزين.
ثم، ولحسن حظنا، تحصلنا على معالج رسومي من نوع NVIDIA GeForce GTX TITAN X من الجامعة لإجراء بعض التجارب المُتعلّقة باستخدام التشكيل في مهمات أخرى كالترجمة مثلا، وكانت هذه التجارب تستغرق أياما من التدريب لتنتهي.
ولكن، ولله الحمد، انتهينا من المشروع ونشرنا ورقتين بحثيتين عن الأمر، فأصبحتا من أكثر الأوراق البحثية استشهادًا في المجال.
مثال آخر، شاركت في برمجان العربية سنة 2022 ضمن مسار الشعر، وكان الهدف إنشاء نماذج متعددة لتقديم حلولٍ مختلفة تتعلق بالشعر العربي، فأنشأت 4 نماذج:
- نموذج لتأليف الشعر
- نموذج لتشكيل الشعر
- نموذج للتعرّف على بحر وقافية البيت
- نموذج للتعرّف على تفعيلة البيت
كل هذا باستخدام معالج رسومي واحد من نوع NVIDIA GeForce RTX 3060 بسعة ذاكرة 12GB، ولله الحمد تحصل الفريق وقتها على المركز الثالث في المسابقة.
المثال الأخير (والأمثلة كثيرة)، أراد أحد الأصدقاء استخدام برنامج تفريغ لتفريغ قرابة الـ 12 ألف ساعة من الدروس، فبدأ بالعملية ولكن اكتشف أنها ستستغرق أسبوعًا كاملا (أو أكثر قليلا) فتواصل معي لنجد حلًّا لأن المدة طويلة فكان ردي: "لماذا لا تنتظر؟".
وذكرت له أن تفريغ ساعة واحدة من المواد الموجودة على منصة باحث يستغرق من 3 إلى 4 دقائق، والمنصة عليها الآن أكثر من 122 ألف ساعة، بحساب بسيط، تفريغ هذا العدد من الساعات سيستغرق 254 يومًا تقريبا في أحسن الأحوال، وليس لدي حلٌّ آخر سهل التطبيق، فلماذا لا أنتظر؟
قال رسولنا صلى الله عليه وسلم كما في صحيح مسلم: "المُؤْمِنُ القَوِيُّ خَيْرٌ وَأَحَبُّ إلى اللهِ مِنَ المُؤْمِنِ الضَّعِيفِ، وفي كُلٍّ خَيْرٌ. احْرِصْ علَى ما يَنْفَعُكَ، وَاسْتَعِنْ باللَّهِ وَلَا تَعْجِزْ، وإنْ أَصَابَكَ شَيءٌ، فلا تَقُلْ: لو أَنِّي فَعَلْتُ كانَ كَذَا وَكَذَا، وَلَكِنْ قُلْ: قَدَرُ اللهِ وَما شَاءَ فَعَلَ؛ فإنَّ (لو) تَفْتَحُ عَمَلَ الشَّيْطَانِ.".
"اسْتَعِنْ باللَّهِ وَلَا تَعْجِزْ".
والسلام عليكم 👋🏻
❤18👍1
على سيرة مشروع التخرّج اللي ذكرته في منشور اليوم:
https://t.me/programmerskhan/118
هذه كانت إحدى شرائح العرض النهائي للمشروع 🤣
https://t.me/programmerskhan/118
هذه كانت إحدى شرائح العرض النهائي للمشروع 🤣
😁13
ادفع ثم ادفع ثم ادفع
غالب المنتجات البرمجية مثل Slack وغيرها تُجبر المستخدم (شركات وأفراد) على الدفع باشتراك شهري، ولا تجد في زماننا هذا الكثير من البرمجيات التي توفّر نموذج الدفع لمرة واحدة إلا النزر اليسير، ومن هنا ظهرت منتجات ONCE من 37Signals والمُدارة من قِبل DHH مُنشئ إطار عمل Ruby on Rails (بهذه الطريقة نعرف ارتباط Rails بهذا المنشور، وهو إعلان غير مدفوع للأسف 😁).
فكرة منتجات ONCE سهلة، أنت تدفع مبلغًا لمرة واحدة وتحصل على المنتج البرمجي برخصة تسمح لك باستخدامه مع اسم نطاقٍ واحد على خادمك الخاص، ولاحظ أنك تحصل على الشيفرة المصدرية للبرمجية بالكامل، حيث يمكنك قراءتها والتعلم منها، وستصلك أيضًا التحديثات الخاصة بالإصدار الذي اشتريته (إذا اشتريت الإصدار الأول فستحصل على التحديثات الخاصة به إلى أن يظهر الإصدار الثاني، وهكذا).
حاليا يوجد منتجان من منتجات ONCE:
- نظام Campfire وهو شبيه بـ Slack، ولكنه أبسط.
- نظام Writebook وهو نظام لإدارة ونشر الكتب على الانترنت.
النظام الأول سعره 300 دولار، أما النظام الثاني فمجانيٌّ يمكنك الحصول على نسختك منه الآن وتثبيته على خادمك.
رابط الصفحة الرئيسية لمنتجات ONCE:
https://once.com
والسلام عليكم 👋🏻
غالب المنتجات البرمجية مثل Slack وغيرها تُجبر المستخدم (شركات وأفراد) على الدفع باشتراك شهري، ولا تجد في زماننا هذا الكثير من البرمجيات التي توفّر نموذج الدفع لمرة واحدة إلا النزر اليسير، ومن هنا ظهرت منتجات ONCE من 37Signals والمُدارة من قِبل DHH مُنشئ إطار عمل Ruby on Rails (بهذه الطريقة نعرف ارتباط Rails بهذا المنشور، وهو إعلان غير مدفوع للأسف 😁).
فكرة منتجات ONCE سهلة، أنت تدفع مبلغًا لمرة واحدة وتحصل على المنتج البرمجي برخصة تسمح لك باستخدامه مع اسم نطاقٍ واحد على خادمك الخاص، ولاحظ أنك تحصل على الشيفرة المصدرية للبرمجية بالكامل، حيث يمكنك قراءتها والتعلم منها، وستصلك أيضًا التحديثات الخاصة بالإصدار الذي اشتريته (إذا اشتريت الإصدار الأول فستحصل على التحديثات الخاصة به إلى أن يظهر الإصدار الثاني، وهكذا).
حاليا يوجد منتجان من منتجات ONCE:
- نظام Campfire وهو شبيه بـ Slack، ولكنه أبسط.
- نظام Writebook وهو نظام لإدارة ونشر الكتب على الانترنت.
النظام الأول سعره 300 دولار، أما النظام الثاني فمجانيٌّ يمكنك الحصول على نسختك منه الآن وتثبيته على خادمك.
رابط الصفحة الرئيسية لمنتجات ONCE:
https://once.com
والسلام عليكم 👋🏻
❤3
لا تنسى الاحتفاظ بمخرجات الأوامر التي تنفذّها
دائما ما أستخدم أوامر على الـ Terminal تستغرق ساعات وأحيانا أيامًا لتنتهي، وآخرها الأمر الموجود في الصورة والذي يقوم بتحويل كل ملفات m4a إلى ملفات webm في المجلد الحالي والمجلدات الموجودة داخله.
المشكلة التي أقع فيها دائما هي نسياني الاحتفاظ بمخرجات الأمر، وتركها على الـ Terminal، ولكن لماذا أحتاج لمخرجات الأمر؟
مثلا، في حالة الأمر الموجود في الصورة، أحتاج المخرجات لمراجعة عملية التحويل وفي حال وجود أي أخطاء يمكنني إعادة معالجة الملفات المُتعلّقة بها.
لذلك من الأفضل دائما أن تُضيف:
إلى نهاية الأمر الذي تريد تنفيذه لتحويل المخرجات من الـ Terminal إلى ملف باسم
والسلام عليكم 👋🏻
دائما ما أستخدم أوامر على الـ Terminal تستغرق ساعات وأحيانا أيامًا لتنتهي، وآخرها الأمر الموجود في الصورة والذي يقوم بتحويل كل ملفات m4a إلى ملفات webm في المجلد الحالي والمجلدات الموجودة داخله.
المشكلة التي أقع فيها دائما هي نسياني الاحتفاظ بمخرجات الأمر، وتركها على الـ Terminal، ولكن لماذا أحتاج لمخرجات الأمر؟
مثلا، في حالة الأمر الموجود في الصورة، أحتاج المخرجات لمراجعة عملية التحويل وفي حال وجود أي أخطاء يمكنني إعادة معالجة الملفات المُتعلّقة بها.
لذلك من الأفضل دائما أن تُضيف:
> output.txt 2>&1
إلى نهاية الأمر الذي تريد تنفيذه لتحويل المخرجات من الـ Terminal إلى ملف باسم
output.txt (أو أي اسم تختاره).والسلام عليكم 👋🏻
👍4❤1👌1
خان المُبرمجين (علي فاضل)
Photo
عندما بدأت مشاريع الكتب المُيسّرة، والتي منها باحث وتفريغ وتحويل وغيرها، لم أتوقّع أن تنتشر المشاريع بين مستخدميها النهائيين أو حتى بين المبرمجين، ولكن ولله الحمد وصلت مؤسسة الكتب المُيسّرة في GitHub إلى 102 مُتابِع من أيام قليلة، وأعتبِرُ هذا إنجازًا في سياق المشاريع الإسلامية.
ولكن كنت دائما أسأل نفسي: "هل كان من الصواب إنشاء مبادرة الكتب المُيسّرة من الأساس؟" والجواب باختصار شديد وبعد تفكير طويل: "لا"!
عندما بدأت مبادرة الكتب المُيسّرة في شهر 7 سنة 2022، لم أكن أعلم بوجود مشاريع نُقاية وغيرها من المبادرات، ولم يكن لدي تواصل مع المؤسسات العاملة في مجال المشاريع الإسلامية، وهذا كان سبب إنشائي للكتب المُيسّرة.
فلو كنت وقتها بذلت قليلًا من الجهد للوصول إلى هذه المبادرات والمؤسسات، لما صرفت وقتي في إدارة مشروع جديد، وإنما كنت سأستغل جهدي في إنجاز الأفكار ضمن مؤسسة أو مبادرة أخرى.
لذلك نصيحتي لمن يهتم بالعمل على المشاريع الإسلامية أن يُحاول الوصول إلى هذه المبادرات والمؤسسات، فهي لديها خطط عمل وأفكار روجعت ونُقّحت وتحتاج إلى من ينفذها، وألا ييأس من عدم الرد 😁
أخيرا، كلامي لا يعني إيقاف مجهودات الأفراد، على العكس تماما، فالمبادرات والمؤسسات لها نوع معين من المشاريع التي يمكن أن تعمل عليها، والأفراد لهم نوع مختلف تماما.
فالفرد يستطيع إنشاء أي فكرة جديدة خارج السياق ويُجرّب أمور جديدة، على عكس المبادرات والمؤسسات والتي تحتاج إلى التأكد من كل ما يتعلق بالفكرة ومدى جدواها قبل التنفيذ.
والسلام عليكم 👋🏻
ولكن كنت دائما أسأل نفسي: "هل كان من الصواب إنشاء مبادرة الكتب المُيسّرة من الأساس؟" والجواب باختصار شديد وبعد تفكير طويل: "لا"!
عندما بدأت مبادرة الكتب المُيسّرة في شهر 7 سنة 2022، لم أكن أعلم بوجود مشاريع نُقاية وغيرها من المبادرات، ولم يكن لدي تواصل مع المؤسسات العاملة في مجال المشاريع الإسلامية، وهذا كان سبب إنشائي للكتب المُيسّرة.
فلو كنت وقتها بذلت قليلًا من الجهد للوصول إلى هذه المبادرات والمؤسسات، لما صرفت وقتي في إدارة مشروع جديد، وإنما كنت سأستغل جهدي في إنجاز الأفكار ضمن مؤسسة أو مبادرة أخرى.
لذلك نصيحتي لمن يهتم بالعمل على المشاريع الإسلامية أن يُحاول الوصول إلى هذه المبادرات والمؤسسات، فهي لديها خطط عمل وأفكار روجعت ونُقّحت وتحتاج إلى من ينفذها، وألا ييأس من عدم الرد 😁
أخيرا، كلامي لا يعني إيقاف مجهودات الأفراد، على العكس تماما، فالمبادرات والمؤسسات لها نوع معين من المشاريع التي يمكن أن تعمل عليها، والأفراد لهم نوع مختلف تماما.
فالفرد يستطيع إنشاء أي فكرة جديدة خارج السياق ويُجرّب أمور جديدة، على عكس المبادرات والمؤسسات والتي تحتاج إلى التأكد من كل ما يتعلق بالفكرة ومدى جدواها قبل التنفيذ.
والسلام عليكم 👋🏻
👍3❤2
البارحة بدأت بتطوير مشروع صغير مُساعد لمنصة باحث، قد أُعلن عنه مستقبلًا، ولكن خلال التطوير احتجت للوصول إلى المُعالج الرسومي (GPU) من داخل Docker Container، والذي حاولت فعله مسبقًا ولم أنجح 😁
عدت للبحث في الأمر وكيفية تنفيذه بالشكل الصحيح، وهذه الخطوات التي نجحت معي:
- ثبّت Docker من خلال التوثيق الرسمي: https://docs.docker.com/engine/install/ubuntu
- اتّبع التوثيق الخاص بخطوات ما بعد التثبيت: https://docs.docker.com/engine/install/linux-postinstall
- والخطوة الأهم، استخدم Docker Images الداعمة للمُعالجات الرسومية المقدّمة من Nvidia: https://catalog.ngc.nvidia.com/orgs/nvidia/containers/pytorch
ملاحظة: حجم Docker Images الداعمة للمُعالجات الرسومية من Nvidia كبير، في حدود الـ 22GB، لذلك كن صبورًا 😅
بهذه الخطوات ستستطيع الوصول إلى المعالج الرسومي الموجود على حاسبك من داخل Docker Container، وإذا واجهت مشكلة شبيهة بهذه:
فراجع هذا المنشور من StackOverflow: https://stackoverflow.com/a/77342669
والسلام عليكم 👋🏻
عدت للبحث في الأمر وكيفية تنفيذه بالشكل الصحيح، وهذه الخطوات التي نجحت معي:
- ثبّت Docker من خلال التوثيق الرسمي: https://docs.docker.com/engine/install/ubuntu
- اتّبع التوثيق الخاص بخطوات ما بعد التثبيت: https://docs.docker.com/engine/install/linux-postinstall
- والخطوة الأهم، استخدم Docker Images الداعمة للمُعالجات الرسومية المقدّمة من Nvidia: https://catalog.ngc.nvidia.com/orgs/nvidia/containers/pytorch
ملاحظة: حجم Docker Images الداعمة للمُعالجات الرسومية من Nvidia كبير، في حدود الـ 22GB، لذلك كن صبورًا 😅
بهذه الخطوات ستستطيع الوصول إلى المعالج الرسومي الموجود على حاسبك من داخل Docker Container، وإذا واجهت مشكلة شبيهة بهذه:
docker: Error response from daemon: unknown or invalid runtime name: nvidia
فراجع هذا المنشور من StackOverflow: https://stackoverflow.com/a/77342669
والسلام عليكم 👋🏻
❤7
كل عام وأنتم بخير 🌙
كنت أكتب Script يتحقق من جميع ملفات منصة باحث الموجودة على ذاكرة التخزين الخارجية الخاصة به ومن اكتمالها وعدم فقدان أيٍّ منها أو خراب صوتية من الصوتيات، وكنت أريد كتابته بلغة Python بحكم اعتيادي على كتابة مثل هذه الأمور بها، ولكن قررت كتابته بلغة Ruby من باب استخدام اللغة بشكل أكبر.
كتابة شيء مثل هذا يحتاج إلى معالجة الكثير من المسارات في نظام التشغيل والتنقل بينها والتحقق من وجودها، فكنت أستخدم الميزات الموجودة في لغة Ruby مثل
على كل حال، انتهيت من الـ Script وشغّلته، لأكتشف اليوم صدفة وجود مكتبة
التوثيق الخاص بـ
https://docs.ruby-lang.org/en/3.4/Pathname.html
التوثيق الخاص بـ
https://docs.python.org/3/library/pathlib.html
والسلام عليكم 👋🏻
كنت أكتب Script يتحقق من جميع ملفات منصة باحث الموجودة على ذاكرة التخزين الخارجية الخاصة به ومن اكتمالها وعدم فقدان أيٍّ منها أو خراب صوتية من الصوتيات، وكنت أريد كتابته بلغة Python بحكم اعتيادي على كتابة مثل هذه الأمور بها، ولكن قررت كتابته بلغة Ruby من باب استخدام اللغة بشكل أكبر.
كتابة شيء مثل هذا يحتاج إلى معالجة الكثير من المسارات في نظام التشغيل والتنقل بينها والتحقق من وجودها، فكنت أستخدم الميزات الموجودة في لغة Ruby مثل
Dir و File والتي تسمح لك بالتعامل مع المسارات، ولكني كنت أفتقد شيئا مثل pathlib الموجودة في لغة Python.على كل حال، انتهيت من الـ Script وشغّلته، لأكتشف اليوم صدفة وجود مكتبة
pathname في لغة Ruby والتي تشبه إلى حد كبير pathlib في Python، وهنا توقفت لأسأل نفسي: "لماذا لم تبحث عندما افتقدت وجود pathlib؟"، ولم أدري ما الجواب 😁التوثيق الخاص بـ
pathname من Ruby:https://docs.ruby-lang.org/en/3.4/Pathname.html
التوثيق الخاص بـ
pathlib من Python:https://docs.python.org/3/library/pathlib.html
والسلام عليكم 👋🏻
❤9
الاعتماديات القديمة
يظن أغلب الناس أنه لا يصحّ استخدام الاعتماديات التي لم تُحدّث من فترة طويلة، وأرى أن هذا الأمر مغلوط ويحتاج إلى تفصيل.
في منصة باحث يوجد أكثر من اعتمادية لم تُحدّث من سنوات، منها:
🔶 مكتبة
هذه المكتبة توفّر دالة لمشاريع Ruby on Rails باسم
🔶 مكتبة
هذه المكتبة توفّر لك إمكانية إنشاء Sitemap للموقع الخاص بك ضمن مشروع Ruby on Rails. هذه المكتبة لم تُحدّث منذ 3 سنوات، وكسابقتها، ليس هذا بالأمر المشكل لأنها توفّر الخدمة المطلوبة ولا تُعيق تطوير مشروعك.
🔶 مكتبة
هذه المكتبة توفّر لك إمكانية التعامل مع المكتبة المشهورة FFmpeg من خلال لغة Ruby. هذه المكتبة لم تُحدّث منذ 9 سنوات تقريبًا، ولكن إلى الآن أستفيد منها في منصة باحث لكتابة بعض الـ Scripts لمعالجة بيانات المنصة.
🔶 مكتبة
هذه المكتبة تحل مشكلة الحروف العربية وارتباطها ببعضها في ملفات PDF، وأستخدمها في منصة باحث لإنشاء ملفات PDF الخاصة بتفريغات الدروس باللغة العربية. هذه المكتبة لم تُحدّث إطلاقًا منذ إطلاق أول نسخة منها منذ أكثر من 12 سنة 😁
لا خلاف في أن المكتبات الحديثة أفضل في المجمل من المكتبات القديمة وقد تُعطيك مميزات أكثر وسرعة أكبر، ولكن الهدف من كلامي هذا إيضاح أنه لا ضير من استخدام المكتبات القديمة في مشروعك، المهم هو إنجاز المهمة 🚀
والسلام عليكم 👋🏻
يظن أغلب الناس أنه لا يصحّ استخدام الاعتماديات التي لم تُحدّث من فترة طويلة، وأرى أن هذا الأمر مغلوط ويحتاج إلى تفصيل.
في منصة باحث يوجد أكثر من اعتمادية لم تُحدّث من سنوات، منها:
🔶 مكتبة
rails_autolinkهذه المكتبة توفّر دالة لمشاريع Ruby on Rails باسم
auto_link والتي تكتشف الروابط في أي نصٍّ يُعطى لها وتُحوّله إلى وسم HTML. هذه المكتبة لم تُحدّث منذ سنتين، ولكن هذا ليس أمرًا مشكلًا، فلا داعي لتحديثها بشكل مستمر إذا كانت تعمل بشكل جيد ولا تُعيق تطوير المشروع من خلال فرض حد أعلى لمكتبة أخرى مثلا، كأن تفرض عليك عدم استخدام Rails أعلى من الإصدار السابع.🔶 مكتبة
sitemap_generatorهذه المكتبة توفّر لك إمكانية إنشاء Sitemap للموقع الخاص بك ضمن مشروع Ruby on Rails. هذه المكتبة لم تُحدّث منذ 3 سنوات، وكسابقتها، ليس هذا بالأمر المشكل لأنها توفّر الخدمة المطلوبة ولا تُعيق تطوير مشروعك.
🔶 مكتبة
streamio-ffmpegهذه المكتبة توفّر لك إمكانية التعامل مع المكتبة المشهورة FFmpeg من خلال لغة Ruby. هذه المكتبة لم تُحدّث منذ 9 سنوات تقريبًا، ولكن إلى الآن أستفيد منها في منصة باحث لكتابة بعض الـ Scripts لمعالجة بيانات المنصة.
🔶 مكتبة
arabic-letter-connectorهذه المكتبة تحل مشكلة الحروف العربية وارتباطها ببعضها في ملفات PDF، وأستخدمها في منصة باحث لإنشاء ملفات PDF الخاصة بتفريغات الدروس باللغة العربية. هذه المكتبة لم تُحدّث إطلاقًا منذ إطلاق أول نسخة منها منذ أكثر من 12 سنة 😁
لا خلاف في أن المكتبات الحديثة أفضل في المجمل من المكتبات القديمة وقد تُعطيك مميزات أكثر وسرعة أكبر، ولكن الهدف من كلامي هذا إيضاح أنه لا ضير من استخدام المكتبات القديمة في مشروعك، المهم هو إنجاز المهمة 🚀
والسلام عليكم 👋🏻
👍3❤2
كنت أُعاني من مشكلة مع GitHub و Dependabot، ولمن لا يعرف ما هو Dependabot فهو مجرد مُساعد يقوم بفحص مستودعك على GitHub ويخبرك بالتحديثات الخاصة بالاعتماديات المُستخدمة في مشروعك والمخاطر الأمنية.
هذه التنبيهات مزعجة جدا لكثرتها عندما تستخدم Dependabot في العديد من المستودعات، فهي تصل على البريد وتصل كإشعارات داخل GitHub نفسه، فالإشعارات المهمة تضيع بين هذه التنبيهات الكثيرة.
اليوم قررت البحث عن حل ووجدت أنه أبسط مما كنت أتصور، يوجد اختيار في إعدادات GitHub يمكنك من خلاله إيقاف وصول التنبيهات على البريد وداخل إشعارات GitHub كذلك، فقمت بإيقاف التنبيهات كما هو موضّح في الصورة وارتحت منها 😁
كل ما عليك القيام به هو التوّجه إلى Settings ثم Notifications وستجد هذه الخيارات في قسم System.
هذه التنبيهات مزعجة جدا لكثرتها عندما تستخدم Dependabot في العديد من المستودعات، فهي تصل على البريد وتصل كإشعارات داخل GitHub نفسه، فالإشعارات المهمة تضيع بين هذه التنبيهات الكثيرة.
اليوم قررت البحث عن حل ووجدت أنه أبسط مما كنت أتصور، يوجد اختيار في إعدادات GitHub يمكنك من خلاله إيقاف وصول التنبيهات على البريد وداخل إشعارات GitHub كذلك، فقمت بإيقاف التنبيهات كما هو موضّح في الصورة وارتحت منها 😁
كل ما عليك القيام به هو التوّجه إلى Settings ثم Notifications وستجد هذه الخيارات في قسم System.
❤5