كل عام وأنتم بخير 🌙
كنت أكتب 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
خان المُبرمجين (علي فاضل)
Photo
439,376
عدد المواد التي أصبحت منصة باحث تستضيفها بشكل مباشر ولا تعتمد على YouTube اعتمادا كاملا في عرضها للمستخدم!
لم أتصور يوما أن تصل منصة باحث إلى هذا الحد، ولكنه توفيق الله سبحانه وتعالى.
ساهم أحد الإخوة -جزاه الله عنا وعن المسلمين خير الجزاء- في منصة باحث من خلال توفير خادم لنستخدمه في استضافة المواد الموجودة على المنصة بصيغة صوتية (لتوفير المساحة) وتخيير المستخدم بين متابعة المواد من خلال YouTube صوتا وصورة أو متابعتها صوتيًّا فقط من خلال صوتيات باحث والاستفادة من:
- عدم وجود الإعلانات
- إمكانية تشغيل المواد في الخلفية (إمكانية إغلاق التطبيق أثناء الاستماع)
- متابعة المواد المحذوفة من YouTube
تقنيًّا، لم يكن الأمر معقدًّا، كل ما قمت به هو ضغط صوتيات المواد من خلال استخدام صيغة Opus ضمن حاوية WebM و Bitrate يساوي 28K، مما أدى إلى تقليل مساحة الصوتيات من 8TB إلى 1.7TB مع المحافظة على جودة صوت ممتازة، خصوصا وأن أغلب الصوتيات يتكلم فيها شخص واحد فقط.
بعد ذلك رفعت الصوتيات إلى الخادم الجديد من حاسبي الشخصي، واستغرقت هذه العملية 5 أيام تقريبا 😁، وأخيرا وضعت NGINX على الخادم لتمكين باحث من الوصول إلى هذه الصوتيات (وكل شخص على الشبكة فعليا 😂).
من جهة منصة باحث أضفت مصدرًا جديدًا لعرض المواد وكتبت الشيفرة البرمجية الخاصة به، ولم يكن الأمر صعبًا، حيث أنه مشابه إلى حد كبير لما قمت به عندما استخدمت GitHub لعرض بعض المواد المحذوفة من YouTube.
الحمدلله أصبح بإمكان مستخدمي باحث متابعة الدروس الشرعية والمحاضرات النافعة دون الحاجة لمشاهدة إعلانات YouTube مع إمكانية إغلاق التطبيق أو شاشة الهاتف أثناء الاستماع وحافظنا في نفس الوقت على تراث العلماء والمشايخ والدعاة من الحذف.
أيضًا، إذا قمت بتسجيل الدخول إلى منصة باحث، ستستطيع تحديد ما إذا كنت تريد المتابعة بشكل افتراضي من صوتيات باحث أو من YouTube!
حسب التقديرات، فالتجهيزات الحالية تسمح بعدد مستمعين متزامنين للمواد الصوتية بين 5 آلاف و 10 آلاف مستخدم، وهو عدد أكثر من كافٍ حسب إحصائيات مستخدمي المنصة.
لم يكن هذا بالإمكان لولا توفيق الله عز وجل ومن ثم مساهمة الإخوة سواء بتوفير الخادم أو بالنصائح التقنية، والقادم بإذن الله أفضل 😎
والسلام عليكم 👋🏻
عدد المواد التي أصبحت منصة باحث تستضيفها بشكل مباشر ولا تعتمد على YouTube اعتمادا كاملا في عرضها للمستخدم!
لم أتصور يوما أن تصل منصة باحث إلى هذا الحد، ولكنه توفيق الله سبحانه وتعالى.
ساهم أحد الإخوة -جزاه الله عنا وعن المسلمين خير الجزاء- في منصة باحث من خلال توفير خادم لنستخدمه في استضافة المواد الموجودة على المنصة بصيغة صوتية (لتوفير المساحة) وتخيير المستخدم بين متابعة المواد من خلال YouTube صوتا وصورة أو متابعتها صوتيًّا فقط من خلال صوتيات باحث والاستفادة من:
- عدم وجود الإعلانات
- إمكانية تشغيل المواد في الخلفية (إمكانية إغلاق التطبيق أثناء الاستماع)
- متابعة المواد المحذوفة من YouTube
تقنيًّا، لم يكن الأمر معقدًّا، كل ما قمت به هو ضغط صوتيات المواد من خلال استخدام صيغة Opus ضمن حاوية WebM و Bitrate يساوي 28K، مما أدى إلى تقليل مساحة الصوتيات من 8TB إلى 1.7TB مع المحافظة على جودة صوت ممتازة، خصوصا وأن أغلب الصوتيات يتكلم فيها شخص واحد فقط.
بعد ذلك رفعت الصوتيات إلى الخادم الجديد من حاسبي الشخصي، واستغرقت هذه العملية 5 أيام تقريبا 😁، وأخيرا وضعت NGINX على الخادم لتمكين باحث من الوصول إلى هذه الصوتيات (وكل شخص على الشبكة فعليا 😂).
من جهة منصة باحث أضفت مصدرًا جديدًا لعرض المواد وكتبت الشيفرة البرمجية الخاصة به، ولم يكن الأمر صعبًا، حيث أنه مشابه إلى حد كبير لما قمت به عندما استخدمت GitHub لعرض بعض المواد المحذوفة من YouTube.
الحمدلله أصبح بإمكان مستخدمي باحث متابعة الدروس الشرعية والمحاضرات النافعة دون الحاجة لمشاهدة إعلانات YouTube مع إمكانية إغلاق التطبيق أو شاشة الهاتف أثناء الاستماع وحافظنا في نفس الوقت على تراث العلماء والمشايخ والدعاة من الحذف.
أيضًا، إذا قمت بتسجيل الدخول إلى منصة باحث، ستستطيع تحديد ما إذا كنت تريد المتابعة بشكل افتراضي من صوتيات باحث أو من YouTube!
حسب التقديرات، فالتجهيزات الحالية تسمح بعدد مستمعين متزامنين للمواد الصوتية بين 5 آلاف و 10 آلاف مستخدم، وهو عدد أكثر من كافٍ حسب إحصائيات مستخدمي المنصة.
لم يكن هذا بالإمكان لولا توفيق الله عز وجل ومن ثم مساهمة الإخوة سواء بتوفير الخادم أو بالنصائح التقنية، والقادم بإذن الله أفضل 😎
والسلام عليكم 👋🏻
❤18👏3🔥1
خان المُبرمجين (علي فاضل)
Photo
احتجت في الأيام الماضية إلى استخدام أكثر من بريدٍ إلكترونيٍّ مع Git حسب المشروع الذي أعمل عليه، فبدأت البحث في الأمر للمرة الثانية في حياتي، لأن المرة الأولى بائت بالفشل 😂 فاكتشفت أن الأمر سهل، لكنه يحتاج إلى فهمٍ لما تقرأ 😁
ينقسم الأمر إلى خطوتين، إنشاء مفتاح SSH جديد وتخصيص البريد الإلكتروني واسم المستخدم الذي تريد استخدامهما مع المستودعات المختلفة.
نفّذ الأمر التالي لإنشاء مفتاح SSH جديد:
بعد ذلك، ستحتاج إلى إضافة المفتاح الجديد إلى GitHub (إذا كنت تستخدمه) وستحتاج إلى تنفيذ الأمر التالي لإضافة المفتاح الجديد إلى SSH:
ثم أضف المحتوى التالي إلى ملف
وأخيرا، عند إضافتك للـ Remote إلى مستودعك، يجب أن تستخدم نفس اسم الـ Host الذي وضعته في ملف
لتنفيذ الخطوة الثانية، وهي تخصيص البريد الإلكتروني واسم المستخدم حسب المستودع، نحتاج إلى تعديل ملف
داخل هذا الملف ستجد المعلومات الافتراضية الخاصة بك في Git كالتالي:
لنفترض أن المستودعات الخاصة بالبريد الإلكتروني الجديد موجودة داخل مجلد واحد على حاسبك وهو
وأخيرا، ستحتاج إلى إنشاء ملف
قد تبدو الخطوات كثيرة، لكن إذا طبقتها بالشكل الصحيح، سينجح الأمر وسترتاح من تداخل البريد الإلكتروني بين مشاريعك وحساباتك على Git و GitHub 😎
والسلام عليكم 👋🏻
ملاحظة: كل الأوامر ومحتويات الملفات موجودة في الصورة ومرتبة حسب ترتيب ظهورها في المنشور 😁
ينقسم الأمر إلى خطوتين، إنشاء مفتاح SSH جديد وتخصيص البريد الإلكتروني واسم المستخدم الذي تريد استخدامهما مع المستودعات المختلفة.
نفّذ الأمر التالي لإنشاء مفتاح SSH جديد:
ssh-keygen -t ed25519 -C "email@example.com"
بعد ذلك، ستحتاج إلى إضافة المفتاح الجديد إلى GitHub (إذا كنت تستخدمه) وستحتاج إلى تنفيذ الأمر التالي لإضافة المفتاح الجديد إلى SSH:
ssh-add ~/.ssh/id_ed25519_example
ثم أضف المحتوى التالي إلى ملف
config داخل مجلد ssh./~ لتتمكن من استخدام المفتاح الجديد مع Git:Host github-example
HostName github.com
User git
IdentityFile ~/.ssh/id_ed25519_example
وأخيرا، عند إضافتك للـ Remote إلى مستودعك، يجب أن تستخدم نفس اسم الـ Host الذي وضعته في ملف
config قبل قليل (في حالتنا الـ Host هو github-example):git remote add origin git@github-example:username/repo.git
لتنفيذ الخطوة الثانية، وهي تخصيص البريد الإلكتروني واسم المستخدم حسب المستودع، نحتاج إلى تعديل ملف
gitconfig./~.داخل هذا الملف ستجد المعلومات الافتراضية الخاصة بك في Git كالتالي:
[user]
name = Ali Hamdi Ali Fadel
email = aliosm1997@gmail.com
لنفترض أن المستودعات الخاصة بالبريد الإلكتروني الجديد موجودة داخل مجلد واحد على حاسبك وهو
Users/aliosm/Desktop/repositories/other_email/، لتعديل البريد الإلكتروني واسم المستخدم لكل المستودعات الموجودة داخل هذا المجلد سنحتاج إلى إضافة الإعدادات التالية إلى الملف المذكور في الأعلى:[includeIf "gitdir:/Users/aliosm/Desktop/repositories/other_email/"]
path = /Users/aliosm/Desktop/repositories/other_email/.gitconfig
وأخيرا، ستحتاج إلى إنشاء ملف
gitconfig. داخل مجلد other_email وتضع فيه بريدك الإلكتروني الثاني واسم مستخدم مختلف:[user]
name = Ali Hamdi Ali Fadel
email = different@email.com
قد تبدو الخطوات كثيرة، لكن إذا طبقتها بالشكل الصحيح، سينجح الأمر وسترتاح من تداخل البريد الإلكتروني بين مشاريعك وحساباتك على Git و GitHub 😎
والسلام عليكم 👋🏻
ملاحظة: كل الأوامر ومحتويات الملفات موجودة في الصورة ومرتبة حسب ترتيب ظهورها في المنشور 😁
❤7
خان المُبرمجين (علي فاضل)
Photo
أول 200 سطر برمجي في منصة باحث من كتابة أحد غيري!
خلال آخر سنة ونصف، كنت وحيدًا في الشيفرة البرمجية لمنصة باحث، أكتب وأكتب وأكتب دون أن يُراجع أحد ما أكتب (والله وحده يعلم بالأخطاء) ودون أن يكتب أحد معي، ولكن تغيّر كل شيء خلال الأسبوع الماضي، أخيرًا وبعد طول عناء 😂
أضفنا البارحة (ولله الحمد، فالجمع في هذه الجملة جمعٌ حقيقي على عكس منشوراتي السابقة) ميزة جديدة إلى منصة باحث، وهي ميزة "السجل"، حيث أصبحت المنصّة تحتفظ بتقدّمك في مشاهدة المواد وتعرضه لك في صفحة السجل كما هو موضّح في الصورة المرفقة.
كذلك، عند فتح نفس المادة مرة أخرى، سيبدأ التشغيل من آخر نقطة كنت تشاهد عندها.
أضفت ميزة إعادة تشغيل المادة من آخر نقطة كنت تشاهدها منذ فترة، لكنني لم أُضف صفحة السجل بسبب الكسل 😁 فطلبت من أحد الأصدقاء إضافة هذه الميزة للتعرّف على شيفرة المنصة، ولله الحمد، انتهى منها في عضون أيام 🚀
من فوائد التعاون في تطوير هذه الميزة:
- اختبار جاهزية بيئة التطوير للعمل على أجهزة مختلفة، واكتشفنا خلال هذه التجربة بعض الأمور التي يمكن تحسينها بخصوص بيئة التطوير
- اختبار مدى قابلية الآخرين على فهم الشيفرة البرمجية الخاصة بالمنصة والتعديل عليها والبحث داخلها
- خطوة أولى لي في طريق بناء فريق يُساعد في تطوير ومتابعة المنصة
فالحمدلله على نعمائه، وانتظروا المزيد من الميزات التي لن أكتبها بيدي 😎
والسلام عليكم 👋🏻
خلال آخر سنة ونصف، كنت وحيدًا في الشيفرة البرمجية لمنصة باحث، أكتب وأكتب وأكتب دون أن يُراجع أحد ما أكتب (والله وحده يعلم بالأخطاء) ودون أن يكتب أحد معي، ولكن تغيّر كل شيء خلال الأسبوع الماضي، أخيرًا وبعد طول عناء 😂
أضفنا البارحة (ولله الحمد، فالجمع في هذه الجملة جمعٌ حقيقي على عكس منشوراتي السابقة) ميزة جديدة إلى منصة باحث، وهي ميزة "السجل"، حيث أصبحت المنصّة تحتفظ بتقدّمك في مشاهدة المواد وتعرضه لك في صفحة السجل كما هو موضّح في الصورة المرفقة.
كذلك، عند فتح نفس المادة مرة أخرى، سيبدأ التشغيل من آخر نقطة كنت تشاهد عندها.
أضفت ميزة إعادة تشغيل المادة من آخر نقطة كنت تشاهدها منذ فترة، لكنني لم أُضف صفحة السجل بسبب الكسل 😁 فطلبت من أحد الأصدقاء إضافة هذه الميزة للتعرّف على شيفرة المنصة، ولله الحمد، انتهى منها في عضون أيام 🚀
من فوائد التعاون في تطوير هذه الميزة:
- اختبار جاهزية بيئة التطوير للعمل على أجهزة مختلفة، واكتشفنا خلال هذه التجربة بعض الأمور التي يمكن تحسينها بخصوص بيئة التطوير
- اختبار مدى قابلية الآخرين على فهم الشيفرة البرمجية الخاصة بالمنصة والتعديل عليها والبحث داخلها
- خطوة أولى لي في طريق بناء فريق يُساعد في تطوير ومتابعة المنصة
فالحمدلله على نعمائه، وانتظروا المزيد من الميزات التي لن أكتبها بيدي 😎
والسلام عليكم 👋🏻
❤5👍1
قال صلى الله عليه وسلم: "إنَّ اللهَ لا يقبضُ العلمَ انتزاعًا ينتزعُهُ منَ النَّاسِ، ولَكن يقبضُ العلمَ بقبضِ العُلماءِ، حتَّى إذا لم يترُك عالمًا اتَّخذَ النَّاسُ رؤوسًا جُهَّالًا، فسُئلوا فأفتوا بغيرِ عِلمٍ فضلُّوا وأضلُّوا".
تُوُفّي اليوم الشيخ المُحدّث أبي إسحاق الحويني، الذي أفنى عمره في خدمة السُّنة النبوية ونشر العلم الشرعي.
لم أدرس كتابا أو متنا كاملا على الشيخ من خلال شروحاته، لكنني شاهدت العديد من محاضراته المتفرقة والتي أثّرت في وعي الإنسان وطريقة تفكيره وديانته.
نسأل الله أن يرحمه رحمةً واسعة، وأن يجزيه عن الإسلام والمسلمين خير الجزاء، وأن يُسكنه الفردوس الأعلى من الجنة، وأن يُلهم أهله ومُحبيه وطلابه الصبر والسلوان.
ولمن أحب أن يستفيد من علم الشيخ، فهذه قناته على YouTube:
https://youtube.com/@alhewenytube
وهذه صفحته على منصة باحث:
https://baheth.ieasybooks.com/speakers/أبو-إسحاق-الحويني
تُوُفّي اليوم الشيخ المُحدّث أبي إسحاق الحويني، الذي أفنى عمره في خدمة السُّنة النبوية ونشر العلم الشرعي.
لم أدرس كتابا أو متنا كاملا على الشيخ من خلال شروحاته، لكنني شاهدت العديد من محاضراته المتفرقة والتي أثّرت في وعي الإنسان وطريقة تفكيره وديانته.
نسأل الله أن يرحمه رحمةً واسعة، وأن يجزيه عن الإسلام والمسلمين خير الجزاء، وأن يُسكنه الفردوس الأعلى من الجنة، وأن يُلهم أهله ومُحبيه وطلابه الصبر والسلوان.
ولمن أحب أن يستفيد من علم الشيخ، فهذه قناته على YouTube:
https://youtube.com/@alhewenytube
وهذه صفحته على منصة باحث:
https://baheth.ieasybooks.com/speakers/أبو-إسحاق-الحويني
❤4😢2👍1
خان المُبرمجين (علي فاضل)
Photo
في Ruby on Rails، وبشكل افتراضي، يوجد ملف واحد لتعريف الـ Routes في مشروعك وهو ملف
بمرور الأيام وتعاقب السنين يطول هذا الملف ويتعقّد، خصوصا عند وجود Routes للـ APIs وأخرى للوحة إدارة التطبيق، بالإضافة إلى الـ Routes الخاصة بالتطبيق نفسه والتي يستخدمها المستخدم العادي.
هذا ما حدث البارحة في منصة باحث، فقررت تجربة أمرين:
- فصل هذا الملف إلى ملفات أصغر
- إجراء هذا التعديل باستخدام الـ Agents، وتحديدا محرر Cursor
لفصل ملف
بدايةً، طلبت من Cursor استخراج الـ Routes الخاصة بالـ APIs إلى ملف منفصل، وفعلا أنشأ المجلد المطلوب وملف
انتقلت بعدها إلى الـ Routes الخاصة بلوحة التحكم، ونفّذ الـ Agent نفس الأمر.
الملف أصبح أكثر تنظيما، وتجربة الـ Agents كانت لطيفة. أجريت بعض العديلات الأخرى على الملف وأضفت Routes جديدة لإعادة التوجيه، ولكن احتاج الـ Agent إلى مساعدة لإجراء بعض التعديلات المعقدة، رغم استخدامي لأفضل النماذج المتاحة Claude Sonnet 3.7 Thinking.
والسلام عليكم 👋🏻
config/routes.rb.بمرور الأيام وتعاقب السنين يطول هذا الملف ويتعقّد، خصوصا عند وجود Routes للـ APIs وأخرى للوحة إدارة التطبيق، بالإضافة إلى الـ Routes الخاصة بالتطبيق نفسه والتي يستخدمها المستخدم العادي.
هذا ما حدث البارحة في منصة باحث، فقررت تجربة أمرين:
- فصل هذا الملف إلى ملفات أصغر
- إجراء هذا التعديل باستخدام الـ Agents، وتحديدا محرر Cursor
لفصل ملف
config/routes.rb إلى ملفات أصغر يجب إنشاء مجلد جديد باسم config/routes، ثم إنشاء ملفات أصغر داخل هذا المجلد، فمثلا ملف config/routes/api.rb للـ Routes الخاصة بالـ APIs وملف config/routes/admin.rb للـ Routes الخاصة بلوحة التحكم.بدايةً، طلبت من Cursor استخراج الـ Routes الخاصة بالـ APIs إلى ملف منفصل، وفعلا أنشأ المجلد المطلوب وملف
api.rb ونقل الشيفرة البرمجية من ملف routes.rb إليه وقام باستخدام الملف الجديد في الملف الأساسي من خلال كتابة draw(:api) وهذه هي طريقة استخدام الملفات الفرعية في الملف الأساسي للـ Routes في Rails.انتقلت بعدها إلى الـ Routes الخاصة بلوحة التحكم، ونفّذ الـ Agent نفس الأمر.
الملف أصبح أكثر تنظيما، وتجربة الـ Agents كانت لطيفة. أجريت بعض العديلات الأخرى على الملف وأضفت Routes جديدة لإعادة التوجيه، ولكن احتاج الـ Agent إلى مساعدة لإجراء بعض التعديلات المعقدة، رغم استخدامي لأفضل النماذج المتاحة Claude Sonnet 3.7 Thinking.
والسلام عليكم 👋🏻
❤3
خان المُبرمجين (علي فاضل)
GIF
كنت أفكر البارحة في إعادة ترتيب وتنظيم أحد الـ Classes المهمة في منصة باحث وهو الـ Class المسؤول عن إنشاء كل الأوامر الخاصة بتفريغ المواد ونقلها من الحاسب الشخصي إلى خادم باحث وإدخالها إلى المنصة وغيرها من الأوامر.
قررت استخدام الذكاء الاصطناعي في هذه العملية ولكن كان لدي سؤال: "كيف سأتأكد من أن الترتيب والتنظيم الذي قام به الذكاء الاصطناعي صحيح ولم يُغيّر مخرجات الـ Class؟"، فكان الحل هو إنشاء حالات اختبار في البداية قبل ترتيب وتنظيم الملف.
طلبت من الذكاء الاصطناعي كتابة حالات اختبار للملف باستخدام مكتبة RSpec، وفعلا قام بإضافة ملف جديد وأضاف إليه حالات الاختبار لكل الدوال الموجودة في الـ Class، لكنه أخطأ في اختبار دالة واحدة من أصل 10.
قضيت بعض الوقت في إصلاح هذا الخطأ ووصلت نسبة تغطية الشيفرة البرمجية بحالات الاختبار إلى 100%.
بعد ذلك طلبت منه ترتيب وتنظيم الملف وإعادة صياغة بعض الدوال الموجودة فيه مع المحافظة على نجاح حالات الاختبار الخاصة به، وفعلا أعاد ترتيب وتنظيم الملف وأنشأ دوال جديدة وأصبح الملف أفضل بكثير.
أخيرا، طلبت منه إعادة ترتيب وتنظيم ملف الاختبارات ليتماشى مع ملف الـ Class الجديد من حيث تنظيم الدوال وتجميع حالات اختبارها بناء على الوظيفة التي تُقدّمها.
كمُلخّص، إذا كان لديك حالات اختبار، فاستخدام الذكاء الاصطناعي في إعادة ترتيب وتنظيم الشيفرة البرمجية الخاصة بك هو أمر آمن إلى حد كبير، ولكن إذا لم تمتلك حالات اختبار لشيفرتك البرمجية، فابدأ بإنشاء حالات اختبار باستخدام الذكاء الاصطناعي ثم اطلب منه إعادة ترتيب وتنظيم الشيفرة البرمجية.
والسلام عليكم 👋🏻
قررت استخدام الذكاء الاصطناعي في هذه العملية ولكن كان لدي سؤال: "كيف سأتأكد من أن الترتيب والتنظيم الذي قام به الذكاء الاصطناعي صحيح ولم يُغيّر مخرجات الـ Class؟"، فكان الحل هو إنشاء حالات اختبار في البداية قبل ترتيب وتنظيم الملف.
طلبت من الذكاء الاصطناعي كتابة حالات اختبار للملف باستخدام مكتبة RSpec، وفعلا قام بإضافة ملف جديد وأضاف إليه حالات الاختبار لكل الدوال الموجودة في الـ Class، لكنه أخطأ في اختبار دالة واحدة من أصل 10.
قضيت بعض الوقت في إصلاح هذا الخطأ ووصلت نسبة تغطية الشيفرة البرمجية بحالات الاختبار إلى 100%.
بعد ذلك طلبت منه ترتيب وتنظيم الملف وإعادة صياغة بعض الدوال الموجودة فيه مع المحافظة على نجاح حالات الاختبار الخاصة به، وفعلا أعاد ترتيب وتنظيم الملف وأنشأ دوال جديدة وأصبح الملف أفضل بكثير.
أخيرا، طلبت منه إعادة ترتيب وتنظيم ملف الاختبارات ليتماشى مع ملف الـ Class الجديد من حيث تنظيم الدوال وتجميع حالات اختبارها بناء على الوظيفة التي تُقدّمها.
كمُلخّص، إذا كان لديك حالات اختبار، فاستخدام الذكاء الاصطناعي في إعادة ترتيب وتنظيم الشيفرة البرمجية الخاصة بك هو أمر آمن إلى حد كبير، ولكن إذا لم تمتلك حالات اختبار لشيفرتك البرمجية، فابدأ بإنشاء حالات اختبار باستخدام الذكاء الاصطناعي ثم اطلب منه إعادة ترتيب وتنظيم الشيفرة البرمجية.
والسلام عليكم 👋🏻
👨💻6❤3👍1
الحلول الغريبة
عندما أنشأت مكتبة تحويل (رابطها في الأسفل)، لتحويل الصور وملفات PDF إلى نصوص، لم أكتب حالات اختبار لضيق الوقت أولا وللكسل ثانيا 😁
بعد فترة من التطوير، احتجت إلى إضافة حالات اختبار لكي لا أختبر المكتبة في كل مرة أُعدّلها، فلمعت في ذهني الفكرة التالية:
بدلا من كتابة حالات اختبار طبيعية كما يكتبها المطورون الآخرون تختبر كل جزء في المكتبة بشكل منفصل، قررت كتابة حالات اختبار تختبر المكتبة من خلال تشغيلها والتحقق من مخرجاتها النهائية (End-to-end).
فقررت إنشاء GitHub Action يُثبّت المكتبة ويبدأ في إرسال الملفات إليها والتأكد من أن المخرجات سليمة كما هو متوقّع، فكتبت 12 حالة تجدها في هذا الملف:
https://github.com/ieasybooks/tahweel/blob/main/.github/workflows/tests.yml
في كل مرة أُعدّل فيها المكتبة أو يُرسِل أحدهم تعديلًا، يعمل هذا الـ Action ليُخبرنا أن التعديل الجديد لم يؤثر على عمل المكتبة 🥳
الحمدلله كان هذا حلًّا جيِّدا في حالة تحويل، لكنه ليس الأمثل بكل تأكيد.
هذا رابط المكتبة:
https://github.com/ieasybooks/tahweel
والسلام عليكم 👋🏻
عندما أنشأت مكتبة تحويل (رابطها في الأسفل)، لتحويل الصور وملفات PDF إلى نصوص، لم أكتب حالات اختبار لضيق الوقت أولا وللكسل ثانيا 😁
بعد فترة من التطوير، احتجت إلى إضافة حالات اختبار لكي لا أختبر المكتبة في كل مرة أُعدّلها، فلمعت في ذهني الفكرة التالية:
بدلا من كتابة حالات اختبار طبيعية كما يكتبها المطورون الآخرون تختبر كل جزء في المكتبة بشكل منفصل، قررت كتابة حالات اختبار تختبر المكتبة من خلال تشغيلها والتحقق من مخرجاتها النهائية (End-to-end).
فقررت إنشاء GitHub Action يُثبّت المكتبة ويبدأ في إرسال الملفات إليها والتأكد من أن المخرجات سليمة كما هو متوقّع، فكتبت 12 حالة تجدها في هذا الملف:
https://github.com/ieasybooks/tahweel/blob/main/.github/workflows/tests.yml
في كل مرة أُعدّل فيها المكتبة أو يُرسِل أحدهم تعديلًا، يعمل هذا الـ Action ليُخبرنا أن التعديل الجديد لم يؤثر على عمل المكتبة 🥳
الحمدلله كان هذا حلًّا جيِّدا في حالة تحويل، لكنه ليس الأمثل بكل تأكيد.
هذا رابط المكتبة:
https://github.com/ieasybooks/tahweel
والسلام عليكم 👋🏻
❤4
Forwarded from الكتب المُيسّرة
Media is too big
VIEW IN TELEGRAM
استعراض 10 مميزات جديدة في منصة باحث 🚀
0️⃣ البرامج العلمية
1️⃣ تشكيل التفريغات
2️⃣ نسخ التفريغات
3️⃣ صوتيات باحث
4️⃣ تفضيل المتحدثين
5️⃣ Yamli
6️⃣ تفضيل صوتيات باحث
7️⃣ تمييز كمُشاهَد
8️⃣ الملاحظات
9️⃣ تتبع المشاهدة
رابط المقطع على YouTube:
https://youtu.be/BmgzPva671I
رابط موقع المنصّة
رابط تطبيق المنصّة لأجهزة Android
رابط تطبيق المنصّة لأجهزة iPhone
رابط بوت المنصّة على تيليجرام
كل عام وأنتم بخير، وأعاده الله علينا وعليكم بالصحة والعافية، وفرّج الله عن المسلمين ما هم فيه ❤️
0️⃣ البرامج العلمية
1️⃣ تشكيل التفريغات
2️⃣ نسخ التفريغات
3️⃣ صوتيات باحث
4️⃣ تفضيل المتحدثين
5️⃣ Yamli
6️⃣ تفضيل صوتيات باحث
7️⃣ تمييز كمُشاهَد
8️⃣ الملاحظات
9️⃣ تتبع المشاهدة
رابط المقطع على YouTube:
https://youtu.be/BmgzPva671I
رابط موقع المنصّة
رابط تطبيق المنصّة لأجهزة Android
رابط تطبيق المنصّة لأجهزة iPhone
رابط بوت المنصّة على تيليجرام
كل عام وأنتم بخير، وأعاده الله علينا وعليكم بالصحة والعافية، وفرّج الله عن المسلمين ما هم فيه ❤️
❤7⚡2🔥1
#مساعدة
لخبراء GCP، أستخدم Service Account Credentials للتعامل مع Google Drive API وكانت تعمل بدون مشاكل في الأشهر السابقة، ولكن بدأت أواجه مشكلة TimeoutError: [Errno 60] Operation timed out بشكل عشوائي خلال الأربعة أيام السابقة.
غيرت الحاسوب وشبكة الانترنت وحدّثت الاعتماديات واستخدمت Service Account جديد وبحثت في Google ولم أصل إلى أي نتيجة، مع العلم أن سرعة الانترنت عندي 100Mbps!
وجدت شخصا طرح مشكلة مشابهة لمشكلتي على StackOverflow من يومين، وهذا رابط سؤاله:
https://stackoverflow.com/questions/79543938/google-api-python-client-random-timeout-error
فهل من أي نصائح؟
هذه هي الشيفرة البرمجية التي تستخدم الـ Service Account Credentials وتتعامل مع Google Drive API:
https://github.com/ieasybooks/tahweel/blob/main/tahweel/processors/google_drive_base_ocr_processor.py
لخبراء GCP، أستخدم Service Account Credentials للتعامل مع Google Drive API وكانت تعمل بدون مشاكل في الأشهر السابقة، ولكن بدأت أواجه مشكلة TimeoutError: [Errno 60] Operation timed out بشكل عشوائي خلال الأربعة أيام السابقة.
غيرت الحاسوب وشبكة الانترنت وحدّثت الاعتماديات واستخدمت Service Account جديد وبحثت في Google ولم أصل إلى أي نتيجة، مع العلم أن سرعة الانترنت عندي 100Mbps!
وجدت شخصا طرح مشكلة مشابهة لمشكلتي على StackOverflow من يومين، وهذا رابط سؤاله:
https://stackoverflow.com/questions/79543938/google-api-python-client-random-timeout-error
فهل من أي نصائح؟
هذه هي الشيفرة البرمجية التي تستخدم الـ Service Account Credentials وتتعامل مع Google Drive API:
https://github.com/ieasybooks/tahweel/blob/main/tahweel/processors/google_drive_base_ocr_processor.py
❤2
Forwarded from أكاديمية غراس العلم
بسم الله الرَّحمن الرَّحيم...
الحمد لله والصَّلاة والسَّلام على رسول الله...
✉️ كثُر السُّؤال في الآونة الأخيرة عن قضيَّة انتشرت وعمَّت بين النَّاس، وهي محاكاة الصُّور البشريَّة عبر الذَّكاء الاصطناعيِّ (ghibli) وما الفتوى الشَّرعيَّة في ذلك؟
تحرير صورة المسألة :
🟢 أوَّلًا: استخدام الذَّكاء الاصطناعيِّ لتحويل صور لا روح فيها (كصور للأشجار والأنهار والمظاهر الطَّبيعيَّة) لا حرج فيها شرعًا.
🟢 ثانيًا: استخدام الذَّكاء الاصطناعيِّ لمحاكاة صور ذوات الأرواح (الإنسان والحيوان)
حرام على قول جمهور الفقهاء في الحالات الآتية:
1️⃣ إذا تمَّت محاكاة الكائن الحيِّ كاملًا (برأسه وجسده بكلِّ ما فيها من التَّفاصيل).
2️⃣ إذا تمَّت محاكاة شبه كاملة، بحيث يحذف من الصَّورة تفاصيل يمكن بقاء الحياة مع حذفها كأنْ يحذف العين فقط أو الأذن فقط أو الجزء السُّفليَّ من الجسد فقط.
🤍 فلا يجوز في هاتين الحالتين استخدام الذَّكاء الاصطناعيِّ.
📖 الدَّليل:
🤩 جاء في صحيح البخاريِّ من حديث ابن عمر -رضي الله عنهما- قال: قال رسول الله ﷺ: "إنَّ الَّذين يصنعون هذه الصور يعذَّبون يوم القيامة، يقال لهم: أحيوا ما خلقتم".
وهذا الحديث محمول عند جماهير أهل العلم على صناعة التَّماثيل، وعلى الرُّسوم أيضا.
🤩 وجاء أيضا في البخاريِّ ومسلم
عن سعيد بن أبي الحسن قال: كنت عند ابن عبَّاس -رضي الله عنهما- إذ أتاه رجل فقال: يا أبا عبَّاس إنِّي إنسان إنَّما معيشتي من صنعة يدي وإنِّي أصنع هذه التَّصاوير فقال ابن عبَّاس: لا أحدِّثك إلَّا ما سمعت رسول الله ﷺ يقول، سمعته يقول: من صوَّر صورة فإنَّ الله معذِّبه حتَّى ينفخ فيها الرُّوح وليس بنافخ فيها أبدا.
🟢 فربا الرَّجل ربوة شديدة واصفرَّ وجهه فقال: ويحك إن أبيت إلَّا أن تصنع فعليك بهذا الشَّجر؛ كلِّ شيء ليس فيه روح.
⏺ وفي هذا الحديث بيَّن ابن عبَّاس جواز محاكاة الصُّور الَّتي لا روح فيها كالشَّجر ونحوه.
🤩 ومن أشدِّ ما ورد في ذلك أيضاً
ما جاء في صحيح البخاريِّ ومسلم أيضا من حديث أبي هريرة، سمعت رسول الله ﷺ يقول: «ومن أظلم ممَّن ذهب يخلق كخلقي فليخلقوا حبَّة وليخلقوا ذرَّة».
🟢 ثالثًا: إذا تمَّت محاكاة كائن حيٍّ لكن حذف من الصُّورة تفاصيل لا يمكن بقاء الحياة مع حذفها.
⏪ مثال: كأنْ يحاكي الوجه فقط دون باقي الجسد أو يحاكي الوجه والجسد لكن يحذف كلَّ التَّفاصيل في الوجه فيزيل العين والأنف والأذن والفم جميعها.
🔺 في هذه الحالة وقع نزاع بين أهل العلم، والمفتى به عندنا أنَّه لا حرج في هذه المحاكاة، لأنَّه لم يصوِّر كائنا حيًّا موجودا في الواقع في هذه الحالة فلا مضاهاة هنا والله أعلم.
🟢 قال ابن قدامة الحنبليُّ في كتاب (المُغنِي):
وإن قطع منه -أي: من الصورة- ما لا يبقى الحيوان بعد ذهابه -كصدره، أو بطنه، أو جُعل له رأس منفصل عن بدنه- لم يدخل تحت النَّهي؛ لأنَّ الصُّورة لا تبقى بعد ذهابه، فهو كقطع الرَّأس.
🟢 وقال ابن حجر الهيتميُّ الشافعيُّ في التُّحفة:
(وخرج بحيوان: تصوير ما لا رأس له، فيحلُّ... وكفقد الرَّأس فقدُ ما لا حياة بدونه.
نعم، يظهر أنَّه لا يضرُّ فقد الأعضاء الباطنة، كالكبد، وغيره؛ لأنَّ الملحظ المحاكاةُ، وهي حاصلة بدون ذلك) انتهى.
وإن كان الأورع عدم المحاكاة في الوجه حتَّى في هذه الصُّورة خروجا من الخلاف.
🤍 ونختم بالتَّنبيه على أنَّ هذه المسألة مختلفة تماما عن مسألة التَّصوير الحقيقيِّ بأدوات التَّصوير (الكاميرا، والفيديو) فهذا جائز، لأنَّه ليس محاكاة خلق الله بل هو انعكاس للمشهد الحقيقيِّ باستخدام أداة تتيح الاحتفاظ بهذا الانعكاس وليس هذا موطن النِّقاش في هذه المسألة.
🪶 كتبه خادم العلم/ إبراهيم رفيق الطَّويل
- دكتوراه الفقه وأصوله
الحمد لله والصَّلاة والسَّلام على رسول الله...
تحرير صورة المسألة :
حرام على قول جمهور الفقهاء في الحالات الآتية:
وهذا الحديث محمول عند جماهير أهل العلم على صناعة التَّماثيل، وعلى الرُّسوم أيضا.
عن سعيد بن أبي الحسن قال: كنت عند ابن عبَّاس -رضي الله عنهما- إذ أتاه رجل فقال: يا أبا عبَّاس إنِّي إنسان إنَّما معيشتي من صنعة يدي وإنِّي أصنع هذه التَّصاوير فقال ابن عبَّاس: لا أحدِّثك إلَّا ما سمعت رسول الله ﷺ يقول، سمعته يقول: من صوَّر صورة فإنَّ الله معذِّبه حتَّى ينفخ فيها الرُّوح وليس بنافخ فيها أبدا.
ما جاء في صحيح البخاريِّ ومسلم أيضا من حديث أبي هريرة، سمعت رسول الله ﷺ يقول: «ومن أظلم ممَّن ذهب يخلق كخلقي فليخلقوا حبَّة وليخلقوا ذرَّة».
وإن قطع منه -أي: من الصورة- ما لا يبقى الحيوان بعد ذهابه -كصدره، أو بطنه، أو جُعل له رأس منفصل عن بدنه- لم يدخل تحت النَّهي؛ لأنَّ الصُّورة لا تبقى بعد ذهابه، فهو كقطع الرَّأس.
(وخرج بحيوان: تصوير ما لا رأس له، فيحلُّ... وكفقد الرَّأس فقدُ ما لا حياة بدونه.
نعم، يظهر أنَّه لا يضرُّ فقد الأعضاء الباطنة، كالكبد، وغيره؛ لأنَّ الملحظ المحاكاةُ، وهي حاصلة بدون ذلك) انتهى.
وإن كان الأورع عدم المحاكاة في الوجه حتَّى في هذه الصُّورة خروجا من الخلاف.
- دكتوراه الفقه وأصوله
Please open Telegram to view this post
VIEW IN TELEGRAM
❤5👍1