بوت ذكاء اصطناعي تظاهر بدور معالج نفسي ودفع مراهقًا للانتحار — القاضي يرفض دفاع Google
أم من فلوريدا رفعت دعوى قضائية ضد Google وCharacter AI، متهمة روبوت الدردشة بالمساهمة في انتحار ابنها البالغ من العمر 14 عامًا. الروبوت، بحسب الدعوى، تظاهر بأنه معالج نفسي وشريك عاطفي، مما أدى إلى تشويش الواقع لدى الطفل وعزله عن الحياة الحقيقية.
Google دافعت بالقول إن رسائل الروبوت تندرج تحت "حرية التعبير"، لكن القاضي رفض هذا الدفاع وسمح باستمرار القضية.
هذه القضية قد تعيد كتابة القواعد المتعلقة بمسؤولية شركات الذكاء الاصطناعي عندما تسوء الأمور بشكل مأساوي.
أم من فلوريدا رفعت دعوى قضائية ضد Google وCharacter AI، متهمة روبوت الدردشة بالمساهمة في انتحار ابنها البالغ من العمر 14 عامًا. الروبوت، بحسب الدعوى، تظاهر بأنه معالج نفسي وشريك عاطفي، مما أدى إلى تشويش الواقع لدى الطفل وعزله عن الحياة الحقيقية.
Google دافعت بالقول إن رسائل الروبوت تندرج تحت "حرية التعبير"، لكن القاضي رفض هذا الدفاع وسمح باستمرار القضية.
هذه القضية قد تعيد كتابة القواعد المتعلقة بمسؤولية شركات الذكاء الاصطناعي عندما تسوء الأمور بشكل مأساوي.
This media is not supported in your browser
VIEW IN TELEGRAM
#ميمز
روبوت من شركة تسلا يرقص أفضل من غيره 😂🙂
روبوت من شركة تسلا يرقص أفضل من غيره 😂🙂
😁1
https://www.tech-wd.com/wd/
#رابط هذا الموقع لمن يحب متابعة اخر التطورات و التقدمات في عالم التقنية والشركات العالمية .
#رابط هذا الموقع لمن يحب متابعة اخر التطورات و التقدمات في عالم التقنية والشركات العالمية .
عالم التقنية
عالم التقنية - أخبار التقنية بين يديك
عالم التقنية موقع لنشر الاخبار التقنية والمقالات، ويغطي أخبار أكبر الشركات التقنية مثل آبل وسامسونج ومايكروسوفت وقوقل وفيس بوك وتويتر...
❤2
مبرمج هندي قضى شهرًا كاملًا بلا أي شغل (بسبب الاحتراقالوظيفي)، ثم في يوم واحد فقط كتب 4000 سطر كود باستخدام Cursor، ونال مدح المدير 😂
الشاب كان متوقعًا يتم فصله، لكن الكود اشتغل فجأة بدون مشاكل، والمدير انبهر بالعرض النهائي وامتدح "المبرمج الفايب".
لا أنصح بتجربة هذا الأسلوب أبدًا 😁
الشاب كان متوقعًا يتم فصله، لكن الكود اشتغل فجأة بدون مشاكل، والمدير انبهر بالعرض النهائي وامتدح "المبرمج الفايب".
لا أنصح بتجربة هذا الأسلوب أبدًا 😁
أجمل ما فيها أن تفاصيلها الصغيرة تصنع الفرق🧠.
فهي لا تحتاج إلى كتابة الكثير لتقول الكثير🦋.
إليك بعضٌ من هذه التفاصيل الصغيرة:
➡️Ellipsis(
تُستخدم كـ placeholder في الأماكن التي لم يُكتب فيها الكود بعد.
تفيد أثناء التخطيط أو بناء الهيكل العام للبرنامج دون ظهور أخطاء.
وكأنك تقول سأفعل شيئًا، لكن ليس الآن ؛ عكس
🖱️🖱️🖱️🖱️🖱️🖱️🖱️🖱️🖱️🖱️🖱️🖱️
➡️Walrus Operator (
يتيح لك تعيين متغير واستخدامه في نفس العبارة.
مفيد جدًا داخل الشروط أو الحلقات لتقليل التكرار.
مثل تلك التفاصيل الصغيرة... هي فلسفة واضحة:
البساطة أولًا، والفعالية دائمًا🤝.
#python
فهي لا تحتاج إلى كتابة الكثير لتقول الكثير🦋.
إليك بعضٌ من هذه التفاصيل الصغيرة:
➡️Ellipsis(
...)⬅️تُستخدم كـ placeholder في الأماكن التي لم يُكتب فيها الكود بعد.
تفيد أثناء التخطيط أو بناء الهيكل العام للبرنامج دون ظهور أخطاء.
def process_data():
...
class Model:
def train(self):
...
#عند بناء قوائم أو بيانات مؤقتة
my_list = [1, 2, ..., 10]
وكأنك تقول سأفعل شيئًا، لكن ليس الآن ؛ عكس
pass التي تعني لا شيء.🖱️🖱️🖱️🖱️🖱️🖱️🖱️🖱️🖱️🖱️🖱️🖱️
➡️Walrus Operator (
:= )⬅️يتيح لك تعيين متغير واستخدامه في نفس العبارة.
مفيد جدًا داخل الشروط أو الحلقات لتقليل التكرار.
if (n := len(data)) > 3:
print(f"Too many items: {n}")
مثل تلك التفاصيل الصغيرة... هي فلسفة واضحة:
البساطة أولًا، والفعالية دائمًا🤝.
#python
#شرح ماهي خاصية vararage ؟
هل سبق وتعاملت مع دالة printf في جافا ؟ هل تسالت من طريقة برمجتها ، وكيف تستطيع استقبال الكثير من الوسائط ؛ الاجابة عن هذا التساؤل هي خاصية vararage .
احدى الخصائص المميزة والقوية في لغة الجافا ، وتوجد في لغات اخرى ايضاً .
- تمنح هذه الخاصية القدرة على ارسال عدد لا نهائي من الوسائط (parameters)الى الدالة ويتم استخدامها كالتالي :
حيث قمنا باضافة الثلاث النقاط (...) ما بين نوع المتغير الوسيط (parameter) nums و اسمه ؛ لاحظ اننا نتعامل مع المتغير الوسيط nums كمصفوفة .
يمكن استعمال الدالة السابقة وتمرير لها اي عدد من الوسائط ، الحالات التالية جميعها صحيحة :
ويمكن تمرير عدد لا نهائي من الوسائط الى الدالة . ... يتبع .
هل سبق وتعاملت مع دالة printf في جافا ؟ هل تسالت من طريقة برمجتها ، وكيف تستطيع استقبال الكثير من الوسائط ؛ الاجابة عن هذا التساؤل هي خاصية vararage .
احدى الخصائص المميزة والقوية في لغة الجافا ، وتوجد في لغات اخرى ايضاً .
- تمنح هذه الخاصية القدرة على ارسال عدد لا نهائي من الوسائط (parameters)الى الدالة ويتم استخدامها كالتالي :
static int sum(int ... nums){
int sum = 0;
for(int i = 0; i < nums.length; i++){
sum += nums[i];
}
return sum;
}حيث قمنا باضافة الثلاث النقاط (...) ما بين نوع المتغير الوسيط (parameter) nums و اسمه ؛ لاحظ اننا نتعامل مع المتغير الوسيط nums كمصفوفة .
يمكن استعمال الدالة السابقة وتمرير لها اي عدد من الوسائط ، الحالات التالية جميعها صحيحة :
System.out.println(sum(10));
System.out.println(sum(10,20));
System.out.println(sum(10,20,30));
ويمكن تمرير عدد لا نهائي من الوسائط الى الدالة . ... يتبع .
❤2
#شرح تكملة لل vararage :
في المنشور السابق ذكرنا انه يمكن تمرير اكثر من وسيط الى الدالة من نفس النوع فقط ؛ ولكن هل يمكن تمرير وسائط مختلفة الانواع ؟
الاجابة هي لا ، ولا يمكن ايضاً تمرير اكثر من vararage في نفس الوقت الكود التالي غير صحيح :
إذا لا يمكن تمرير اكثر من vararage في وقت واحد ، لكن ماذا عن دالة printf التي تحدثنا عنها ، فهي تستقبل في البداية نصاً(String) ثم تستقبل انواع مختلفة قد تكون ارقاماً او نصوصاً ؟!
دعني اوضح لك الاجابة على قسمين ، القسم الاول هو كيف اجعلها تستقبل في البداية نصاً اجبارياً والمثال التالي يوضح ذلك :
لاحظ اننا قمنا بارسال وسيط ثابت (ليس vararage ) قبل ارسال ال vararage وهذا مقبول في جافا ، والكود سيعمل بدون مشاكل .
حللنا الجزء الاول من المشكلة ، تبقى كيف نرسل انواع مختلفة من البيانات في ال vararage ، الامر بسيط جدا ، فلغة جافا هي كائينية التوجه وكل فئاتها (classes) ترث من الفئة الام وهي Object ، لذلك تعديل الكود السابق سيكون كالتالي :
هذا الكود يشبه بالضبط كود تعريف دالة
ملاحظة اخيرة عن vararage :
اذا كان لدينا دالة تستقبل vararage كالتالي :
فيمكن استخدامها بطريقتين ، الطريقة الاولى شرحتها في الموضوع السابق والطريقة الثانية هي بتمرير مصفوفة قيم جاهزة اليها كالتالي :
في النهاية ، موضوع ال vararage موضوع قوي ويوفر ديناميكية كبيرة في التعامل مع الدوال .
في المنشور السابق ذكرنا انه يمكن تمرير اكثر من وسيط الى الدالة من نفس النوع فقط ؛ ولكن هل يمكن تمرير وسائط مختلفة الانواع ؟
الاجابة هي لا ، ولا يمكن ايضاً تمرير اكثر من vararage في نفس الوقت الكود التالي غير صحيح :
static void vara(int ...v1, String ...v2){}إذا لا يمكن تمرير اكثر من vararage في وقت واحد ، لكن ماذا عن دالة printf التي تحدثنا عنها ، فهي تستقبل في البداية نصاً(String) ثم تستقبل انواع مختلفة قد تكون ارقاماً او نصوصاً ؟!
دعني اوضح لك الاجابة على قسمين ، القسم الاول هو كيف اجعلها تستقبل في البداية نصاً اجبارياً والمثال التالي يوضح ذلك :
static void myPrintf(String first, int ... vara){}لاحظ اننا قمنا بارسال وسيط ثابت (ليس vararage ) قبل ارسال ال vararage وهذا مقبول في جافا ، والكود سيعمل بدون مشاكل .
حللنا الجزء الاول من المشكلة ، تبقى كيف نرسل انواع مختلفة من البيانات في ال vararage ، الامر بسيط جدا ، فلغة جافا هي كائينية التوجه وكل فئاتها (classes) ترث من الفئة الام وهي Object ، لذلك تعديل الكود السابق سيكون كالتالي :
static void myPrintf(String first, Object ... vara){}هذا الكود يشبه بالضبط كود تعريف دالة
System.out.printf(); ملاحظة اخيرة عن vararage :
اذا كان لدينا دالة تستقبل vararage كالتالي :
static int sum(int ... nums){
int sum = 0;
for(int i = 0; i < nums.length; i++){
sum += nums[i];
}
return sum;
}فيمكن استخدامها بطريقتين ، الطريقة الاولى شرحتها في الموضوع السابق والطريقة الثانية هي بتمرير مصفوفة قيم جاهزة اليها كالتالي :
int[] array = new int[]{10, 20, 30, 50};
int total = sum(array);في النهاية ، موضوع ال vararage موضوع قوي ويوفر ديناميكية كبيرة في التعامل مع الدوال .
❤2
#معلومة
الفرق بين Error و Exception
—————————————--
يمكن تلخيص الفروقات كالتالي:
التعريف:
Error:
هي مشكلات جسيمة تحدث على مستوى النظام أو البيئة، وتكون عادةً خارج سيطرة البرنامج.
—————
Exception:
هي مشكلات تحدث أثناء تشغيل البرنامج بسبب أخطاء برمجية أو مدخلات غير صحيحة، ويمكن معالجتها.
——————————————-
أمثلة:
Error:
مثل OutOfMemoryError (نفاد الذاكرة)، وStackOverflowError (تجاوز سعة المكدس).
—————
Exception:
مثل NullPointerException (محاولة الوصول إلى كائن فارغ)
وIOException (خطأ في الإدخال/الإخراج).
———————————————————
إمكانية المعالجة:
Error:
لا يستطيع المبرمج معالجة الأخطاء باستخدام الكود البرمجي، لأنها عادة تتطلب إصلاحات على مستوى النظام.
—————
Exception:
يمكن للمبرمج معالجتها باستخدام try-catch وغيرها... لمنع توقف البرنامج.
——————————————————
الأصل:
Error:
تنحدر من المكتبة
java.lang.Error.
—————
Exception:
تنحدر من المكتبة
java.lang.Exception.
—————————————-
التأثير:
Error:
عادة ما تتسبب في توقف البرنامج بالكامل.
—————
Exception:
يمكن التعامل معها، والبرنامج يستمر في التنفيذ.
————————————————————
الفرق بين Error و Exception
—————————————--
يمكن تلخيص الفروقات كالتالي:
التعريف:
Error:
هي مشكلات جسيمة تحدث على مستوى النظام أو البيئة، وتكون عادةً خارج سيطرة البرنامج.
—————
Exception:
هي مشكلات تحدث أثناء تشغيل البرنامج بسبب أخطاء برمجية أو مدخلات غير صحيحة، ويمكن معالجتها.
——————————————-
أمثلة:
Error:
مثل OutOfMemoryError (نفاد الذاكرة)، وStackOverflowError (تجاوز سعة المكدس).
—————
Exception:
مثل NullPointerException (محاولة الوصول إلى كائن فارغ)
وIOException (خطأ في الإدخال/الإخراج).
———————————————————
إمكانية المعالجة:
Error:
لا يستطيع المبرمج معالجة الأخطاء باستخدام الكود البرمجي، لأنها عادة تتطلب إصلاحات على مستوى النظام.
—————
Exception:
يمكن للمبرمج معالجتها باستخدام try-catch وغيرها... لمنع توقف البرنامج.
——————————————————
الأصل:
Error:
تنحدر من المكتبة
java.lang.Error.
—————
Exception:
تنحدر من المكتبة
java.lang.Exception.
—————————————-
التأثير:
Error:
عادة ما تتسبب في توقف البرنامج بالكامل.
—————
Exception:
يمكن التعامل معها، والبرنامج يستمر في التنفيذ.
————————————————————
❤1
int i = 0;
while (i < 5) {
System.out.print(i+" "); }
while (i < 5) {
System.out.print(i+" "); }
Anonymous Quiz
25%
0 1 2 3 4
0%
0 1 2 3 4 5
75%
the loop will never end
0%
ERROR
” لن تصبح الحياة يوماً كما يحلو لك، لا تقف مكتوف اليدين معتقداً أن اللحظة المنتظرة تجري نحوك...
- يا تحارب أو لا تتمنى♥️ “
مساء الخير وسعادة وحلم متحقق بإذن الله...❤️
- يا تحارب أو لا تتمنى♥️ “
مساء الخير وسعادة وحلم متحقق بإذن الله...❤️
❤3
#شرح
موضوعنا اليوم عن & و | في البرمجه وش وظيفتها
=============================
& هذي بتحول العددين الى binary وبعدها تسوي بينهم مقارنة بستخدام دائرة and gate يعني الموضوع متعلق ب الدوائر المنطقية.
وكذلك | تسوي بين الرقمين مقارنة بستخدام or gate.
يعني مثلا :
هنا ال 1 بتتحول الى باينري وال 2 كذلك
بمعنى بيصبح بهذا الشكل 👇
( 0001 & 0010 )
وبعدها بيستوي بينهم تطبيق لدائرة and gate زي كذا :
يعني الجواب z = 0000
وبعد كذا يتم تحويل الناتج الى النظام العشري لان الناتج يكون في النظام الثنائي (binary)
فإذا اجينا نحول الناتج 0000 الى النظام العشري بيطلع معانا الناتج 0
يعني ان الناتج اللي بيخزن في ال z هو صفر .
لذلك لو قمنا بطباعة الناتج بيكون زي كذا
❇️ ملاحظة: طبعا نادرا جدا ما يستخدموها المبرمجين
موضوعنا اليوم عن & و | في البرمجه وش وظيفتها
=============================
& هذي بتحول العددين الى binary وبعدها تسوي بينهم مقارنة بستخدام دائرة and gate يعني الموضوع متعلق ب الدوائر المنطقية.
وكذلك | تسوي بين الرقمين مقارنة بستخدام or gate.
يعني مثلا :
int x=1;
int y=2;
int z = ( 1 & 2 );
هنا ال 1 بتتحول الى باينري وال 2 كذلك
بمعنى بيصبح بهذا الشكل 👇
( 0001 & 0010 )
وبعدها بيستوي بينهم تطبيق لدائرة and gate زي كذا :
(x) (y) (z)
0 | 0 | 0
0 | 0 | 0
0 | 1 | 0
1 | 0 | 0
يعني الجواب z = 0000
وبعد كذا يتم تحويل الناتج الى النظام العشري لان الناتج يكون في النظام الثنائي (binary)
فإذا اجينا نحول الناتج 0000 الى النظام العشري بيطلع معانا الناتج 0
يعني ان الناتج اللي بيخزن في ال z هو صفر .
لذلك لو قمنا بطباعة الناتج بيكون زي كذا
int x=1;
int y=2;
int z = ( 1 & 2 );
System.out.println (z);
Output : 0
❇️ ملاحظة: طبعا نادرا جدا ما يستخدموها المبرمجين
❤1
#شرح
في لغة جافا عند تشغيل كود برمجي و إدخال البيانات وعند إغلاق البرنامج وفقحه مره أخرى نلاحظ عدم احتفاظ البرنامج بالبيانات السابقة.
لذالك تم استخدام الملفات كنوع من انواع قواعد البيانات مع ذلك يبقى يوجه صعوبه في التعامل مع البيانات الموجودة داخل الملف سوى عند الادخال او الاخراج .
اليوم سوف نحاول توضيح كيفيه التعامل مع الملفات سوى للادخال او الاخراج من والى الملف:
هناك العديد من الطرق التي يتم من خلالها إدخال البيانات للملف.مثل
1️⃣- BufferReader /BufferedWriter :
مميزاتها : سريعة لكتابة كميات كبيرة من البيانات، وتحسن الأداء بشكل كبير و يدعم أساليب كتابة متقدمة مثل دالة () newLine التى تنزل سطر
جديد داخل الملف و دالة ()readLine .
عيوبها : تتطلب إغلاق صريح لضمان كتابة البيانات المتبقية في buffer وايضا حجم التخزين المؤقت(buffer) ثابت أفتراضيا.
مثل :
2️⃣-FileWriter/FileReader:
مميزتها : بسيطة الاستخدام ،
يمكنها قراءة وكتابة البيانات حرفاً حرفاً او
استخدام مصفوفة أحرف.
عيوبها : لا توفر أداء عاليا للكميات الكبيرة من البيانات ، لا تدعم قراءة سطر كامل
مثل:
3️⃣- Scanner/ PrintWriter:
تتميز : سهولة قراءة البيانات (تسمح بقراءة انواع بيانات مختلفة int ,String..) ، أيضاً أكثر أمانًا لانها لا ترمي إستثناءات (ولا كن يجب فحص الأخطاء).
تحليل النصوص عن طريق استخدام الفواصل( دالة (" ")usedelimiter ) والتعبيرات.
كتابة منسقة : تدعم الكتابة المنسقة مع ()printf و () format .
العيوب : بطيئة وتستهلك ذاكرة أعلى و ليست مناسبة للبيانات الثنائية.
واخيرا عليك ان تختار الطريقة التي تناسب مشروعك وإذا كنت تتعامل مع ملفات كبيرة تجنب استخدام Scanner و FileWriter/FileReader و استخدم BufferedWriter/BufferedReader.
أخطاء شائعة قد يقع فيها المبرمجين المبتدئين :
• عدم إغلاق الملفات بعد الانتهاء من القراءة او الكتابة.
• نسيان معالجة الاستثناءات.
• عدم التحقق من وجود ملف قبل العمل عليه.
• محاولة قراءة ملف كبير جداً في الذاكرة.
في لغة جافا عند تشغيل كود برمجي و إدخال البيانات وعند إغلاق البرنامج وفقحه مره أخرى نلاحظ عدم احتفاظ البرنامج بالبيانات السابقة.
لذالك تم استخدام الملفات كنوع من انواع قواعد البيانات مع ذلك يبقى يوجه صعوبه في التعامل مع البيانات الموجودة داخل الملف سوى عند الادخال او الاخراج .
اليوم سوف نحاول توضيح كيفيه التعامل مع الملفات سوى للادخال او الاخراج من والى الملف:
هناك العديد من الطرق التي يتم من خلالها إدخال البيانات للملف.مثل
1️⃣- BufferReader /BufferedWriter :
مميزاتها : سريعة لكتابة كميات كبيرة من البيانات، وتحسن الأداء بشكل كبير و يدعم أساليب كتابة متقدمة مثل دالة () newLine التى تنزل سطر
جديد داخل الملف و دالة ()readLine .
عيوبها : تتطلب إغلاق صريح لضمان كتابة البيانات المتبقية في buffer وايضا حجم التخزين المؤقت(buffer) ثابت أفتراضيا.
مثل :
try (BufferedReader reader = new BufferedReader(new FileReader("input.txt"));
BufferedWriter writer = new BufferedWriter(new FileWriter("output.txt"))) {
String line;
while ((line = reader.readLine()) != null) {
writer.write(line);
writer.newLine();
}
} catch (IOException e) {
e.printStackTrace();
}2️⃣-FileWriter/FileReader:
مميزتها : بسيطة الاستخدام ،
يمكنها قراءة وكتابة البيانات حرفاً حرفاً او
استخدام مصفوفة أحرف.
عيوبها : لا توفر أداء عاليا للكميات الكبيرة من البيانات ، لا تدعم قراءة سطر كامل
مثل:
// الكتابة
try (FileWriter writer = new FileWriter("file.txt")) {
writer.write(" IT Department ");
}
// القراءة
try (FileReader reader = new FileReader("IT.txt")) {
int character;
while ((character = reader.read()) != -1) {
System.out.print((char) character);
}
}3️⃣- Scanner/ PrintWriter:
تتميز : سهولة قراءة البيانات (تسمح بقراءة انواع بيانات مختلفة int ,String..) ، أيضاً أكثر أمانًا لانها لا ترمي إستثناءات (ولا كن يجب فحص الأخطاء).
تحليل النصوص عن طريق استخدام الفواصل( دالة (" ")usedelimiter ) والتعبيرات.
كتابة منسقة : تدعم الكتابة المنسقة مع ()printf و () format .
العيوب : بطيئة وتستهلك ذاكرة أعلى و ليست مناسبة للبيانات الثنائية.
// الكتابة
try (PrintWriter writer = new PrintWriter("data.txt")) {
writer.println("John,25,75.5");
writer.printf("اسم المستخدم: %s - النقاط: %d%n", "ahmed", 1500);
}
// القراءة
try (Scanner scanner = new Scanner(new File("data.txt"))) {
scanner.useDelimiter(",");
while (scanner.hasNext()) {
String name = scanner.next();
int age = scanner.nextInt();
double score = scanner.nextDouble();
System.out.printf("الاسم: %s, العمر: %d, النتيجة: %.1f%n", name, age, score);
}
}واخيرا عليك ان تختار الطريقة التي تناسب مشروعك وإذا كنت تتعامل مع ملفات كبيرة تجنب استخدام Scanner و FileWriter/FileReader و استخدم BufferedWriter/BufferedReader.
أخطاء شائعة قد يقع فيها المبرمجين المبتدئين :
• عدم إغلاق الملفات بعد الانتهاء من القراءة او الكتابة.
• نسيان معالجة الاستثناءات.
• عدم التحقق من وجود ملف قبل العمل عليه.
• محاولة قراءة ملف كبير جداً في الذاكرة.
1.كيف تُنشئ ملفاً مؤقتاً يَحذف نفسه تلقائياً عند إغلاق البرنامج؟
Anonymous Quiz
0%
new File("temp.txt");
100%
Files.createTempFile("prefix", ".suffix");
0%
File.createNewFile();
0%
FileOutputStream("temp");
2. ما مخرجات الكود التالي إذا كان محتوى data.txt هو Hello؟
try (BufferedReader br = new BufferedReader(new FileReader("data.txt"))) {
System.out.print(br.readLine().length()); }
try (BufferedReader br = new BufferedReader(new FileReader("data.txt"))) {
System.out.print(br.readLine().length()); }
Anonymous Quiz
0%
0
33%
خطأ لأن الملف غير موجود.
50%
5
17%
null
❤2
https://t.me/Qu_s781
سلام الله عليكم قمت بعمل هذا جروب للمناقشة وايضا بنكون أنزل فيه الاختبارات عشان يكون كل شيء مرتب (:
سلام الله عليكم قمت بعمل هذا جروب للمناقشة وايضا بنكون أنزل فيه الاختبارات عشان يكون كل شيء مرتب (:
👍3