اذهب إلى المحتوى

لوحة المتصدرين

  1. Wael Aljamal

    Wael Aljamal

    الأعضاء


    • نقاط

      7

    • المساهمات

      6975


  2. Shahad Mohammad

    Shahad Mohammad

    الأعضاء


    • نقاط

      4

    • المساهمات

      112


  3. Abdollahi Mohammed

    Abdollahi Mohammed

    الأعضاء


    • نقاط

      3

    • المساهمات

      35


  4. اية اية3

    اية اية3

    الأعضاء


    • نقاط

      3

    • المساهمات

      11


المحتوى الأكثر حصولًا على سمعة جيدة

المحتوى الأعلى تقييمًا في 03/26/22 in أجوبة

  1. اقوم بعمل لعبه وهي عبارة عن كروت اريد انها تظهر للممستخدم لمدة ثانيتين وتختفي ، فهمت ان set time out هي من تقوم بهذا العمل فكيف الطريقة لينتظر ثانيتين ثم تختفي، انا مشكلتي مع الوقت لا اعلم كيف اخليه ينتظر ثانتين
    3 نقاط
  2. للتحقق من ملف XML: نتأكد من أن كل وسم تم فتحه يجب إغلاقه بنفس الاسم وأن تداخل العناصر سليم من تم فتحة أخيراً نغلقه أولاً <abc> <cde> </cde> </abc> وفي مثالك: <funcdef> <function>ctime</fnuction> <!-- ^^^^^^^^^ ^^^^^^^^^^^ --> </funcdef> لانضع فراغات في اسم الوسم أو وسم الإغلاق <parameter> time < /parameter>,as returned by ^^^ لا نقوم بتعريف نفس الخاصية أكثر من مرة <para><emphasis role="strong" targetgroup="beginners" role="strong"> ^^^^^^^^^^^^^^^^ ^^^^^^^^^^^^^ وبالنسبة ل &ampdoubleclick; هنا نقوم بجلب قيمة Entity References بدون أن تكون معرفة مسبقاً يجب وضع قيمة لها <!DOCTYPE definition [ <!ENTITY red " & # 1 7 4 ;"> مثال <!ENTITY ampdoubleclick "&ampdoubleclick;"> ]> حيث ان "&ampdoubleclick;" هي القيمة التي نريدها <!ENTITY ampdoubleclick "132131"> أي جميع هذه ال Reference يجب أن يتم تعريفها مسبقاً لنستطيع قراءة قيمتها لاحقا <?xml version="1.0"?> <!DOCTYPE definition [ <!ENTITY ampdoubleclick "1231"> <!ENTITY ampbuttonleft "9987"> <!ENTITY ampidhelp782 "979798"> <!ENTITY ampidhelp785 "983759"> ]> <function> <title>ctime</title> <funcsynopsis> <funcdef> <function>ctime</function> </funcdef> <paramdef> <parameter>time</parameter> <parameter role="opt">gmt</parameter> </paramdef> </funcsynopsis> <para>This function converts the value <parameter> time </parameter>,as returned by <function>time()</function> <function>file_mtime()</function>, into a string of the form produced by <function>time_date()</function>. If the optional argument <parameter>gmt</parameter> is specified and non-zero,the time is returned in <parameter>gmt</parameter>. Otherwise, the time is given in the local time zone. </para> <para><emphasis role="strong" targetgroup="beginners"> Related topics</emphasis> </para> <para>&ampdoubleclick; the <mousebutton>LEFT &ampbuttonleft;</mousebutton> mouse button on a topic </para> <itemizedlist> <listitem> <para><ulink url="&ampidhelp782;"><function>file_mtime()</function>built-in function</ulink> </para> </listitem> <listitem> <para><ulink url="&ampidhelp785;"><function>time()</function> built-infunction</ulink> </para> </listitem> </itemizedlist> </function>
    2 نقاط
  3. مثلا عندي تطبيق وداخله ١٠ شاشه من نوع Fragments وقبل ما اطلع من التطبيق اكون فاتح الشاشه رقم ٨ مثلا فبعد ما افتح التطبيق مره ثاني ابيه يفتح لي دايركت علي الصفحه الي كنت فيه قبل ما اسكر التطبيق
    1 نقطة
  4. لدي مجموعة من النطاقات الفرعية subdomains وفي كل نطاق فرعي لدي نفس المسارات تمامًا، وحاليًا أقوم بكتابة الكود بالشكل التالي: Route::group(array('domain' => array('dashboard.example.com')), function() { // ... }); Route::group(array('domain' => array('dev.example.com')), function() { // ... }); في الكود السابق أقوم بكتابة نفس المسارات مرتين مما يجعل الكود مكررًا بدون فائدة. هل توجد طريقة لتجميع النطاقات معًا في لارافيل Laravel بدلًا من تكرار الكود بالشكل التالي؟ Route::group(array('domain' => array('dev.example.com','dashboard.example.com')), function() { // ... });
    1 نقطة
  5. مرحبا, لدي مشكلة في تشغيل instagram hsoub من خلال الشيفرة الجاهزة من مستودع حسوب على github. يظهر لس هذا الخطأ: و قمت باتباع الخطوات التالية لأقوم بتشغيله و عملت جميعها بالشكل الصحيح. فكيف يمكنني حل هذه المشكلة و شكرا لكم.
    1 نقطة
  6. كيفية انشاء فنكشن في php تاخذ مجموعة من الارقام وترجع مصفوفة من المربعات لكل رقم. وهذه محاولتي في الحل function s(...$numbers) { foreach ($numbers as $n) {$m =$n**2;} return $m ; } echo s( 3).','; echo s( 5);
    1 نقطة
  7. أنا متشتت بين إستخدام mysqli أو PDO للإتصال بقاعدة البيانات. وأقوم بإستعمال mysqli في بعض المشاريع، وPDO في بعضها الآخر. ولم أفهم الفرق حتى الآن. هل هناك أي إيجابيات وسلبيات أخرى لاختيار واحد على الآخر كلي أقوم بتوحيد مشاريعي لاستخدام نهج واحد فقط بدلًا من التشتت بين أنواع مختلفة؟
    1 نقطة
  8. بالتأكيد فإنه توجد هنالك فروقات جوهرية بين الاثنين، نذكر من بينها: PDO تدعم أكثر من 12 نظام قواعد بيانات مختلف في حين ان MySQLi يمكنها العمل مع Mysql فقط. PDO تستعمل البرمجة الكائنية التوجه في عملها في حين Mysqli توفر بجانب خيار الـ OOP واجهة اتصال بسيطة (يعرفان ب Mysqli الاجرائية و Mysqli كائنية التوجه). في هاته الناحية تعطى الافضلية ل PDO فعند تبديل نظام قواعد البيانات لن يكفي في mysqli تغيير نوع الاتصال وانما سيشمل ذلك تغيير كامل الشيفرة ومن بينها استعلامات قواعد البيانات. تعتبر PDO أفضل من ناحية تشخصي الاخطاء وتقريرها. في PDO يمكن تسمية المعاملات وعنونتها بشكل عام global بشكل يجعل من السهل التعديل عليها لاحقا اما في mysqli فلا يمكن. لـ PDO أفضلية استخدامها من قبل اغلب المجتمع البرمجي بلغة PHP، يعني هذا ان اخطاءها ومشاكلها اسهل تشخيصا وحلا مقارنة بـ MySQLi. مبدئيا، استعمال PDO سيكون أفضل بكثير، من ناحية التنفيذ والتعديل وخدمة انظمة قواعد البيانات. اما Mysqli فتعتبر افضل من ناحية التخصص، فإن كنت لا تستعمل الا اتصال MySQL دون وجود اي احتمال لتوسيع قواعد البيانات او تغيير نمطها او نظامها فسيكون استعمال MySQLi عمليا.
    1 نقطة
  9. بعد النقر على زر ما، نستدعي دالة تقوم بإظهار البطاقات ثم ضمنها نستدعي setTimeOut مع تمرير 2000 ميلي ثانية (2 ثانية) ليتم تنفيذ الدالة المرتبطة بها بعد هذه المدة. في HTML <button onclick="showCards();"> start game </button> والكود: function showCard() { // منطق إظهار البطاقات // بعد ثانيتين ستختفي window.setTimeout(hideCards, 2000); } function hideCards() { // منطق إخفاء البطاقات }
    1 نقطة
  10. يمكنك استخدام ذلك الكود من أجل الإنتظار ثانيتين فقط setTimeout(() => { console.log('hi'); }, 2000); كما يمكنك استخدام الكود المقابل له في جافا سكربت في حال الحاجة إليه setTimeout(function(){ alert("Sup!"); }, 2000);
    1 نقطة
  11. لدي تطبيق مبني بإستخدام جانغو Django ويحتوي على العديد من النماذج models، أريد الحصول على كل النماذج الموجودة في التطبيق، النماذج موجودة في الملف models.py في مجلد التطبيق، ويحتوي على الكود بالشكل التالي: from django.db import models class First_Model(models.Model): # ... class Second_Model(models.Model): # ... كيف يمكنني الحصول على قائمة بأسماء تلك النماذج في جانغو Django؟
    1 نقطة
  12. يُمكنك الحصول على أسماء كل النماذج في تطبيق ما باستخدام الشيفرة التالية: from django.apps import apps # للحصول على كل النماذج في التطبيق app_models = apps.get_app_config('my_app').get_models() model_names = [] # نقوم بحفظ أسماء النماذج في المتغير # model_names for model in app_models: model_names.append(model.__name__) كما يُمكنك استخدام الدالة all_models من الوحدة apps للحصول على كل النماذج: from django.apps import apps app_models = apps.all_models['my_app'] حيث: my_app هو اسم تطبيق جانغو.
    1 نقطة
  13. ما يتم طباعته هي عناصر المصفوفة المسترجعة من الدالة s , اذا بالفعل لدينا مصفوفة , ولكن لا يمكن طباعة المصفوفة الا بالمرور على جميع عناصرها باستخدام حلقات التكرار , استخدمنا حلقة التكرار foreach وقمنا بطباعة عناصر المصفوفة , اذا كنتي تريدين أن يكون الناتج يأخذ شكل المصفوفة فيمكنك فعل ذلك كالتالي <?php function s(...$numbers) { foreach ($numbers as $n) { $m[] = $n**2; } return $m; } $result='[';// قمنا بإنشاء متغير واسندنا اليه قيمة نصية قيمتها فقط القوس الواضح أمامك foreach(s(3, 5) as $square) { $result.= $square . ','; // نقوم بإلحاق قيمة العناصر بالمتغير الذي انشأناه } $result.=']';// بعد انتهاء حلقة التكرار نقوم بإغلاق القوس echo $result;// نقوم بطباعة قيمة المتغير الذي أنشأناه ?>
    1 نقطة
  14. function s(...$numbers) { foreach ($numbers as $n) { $m[] = $n**2; } return $m; } foreach(s(3, 5) as $square) { echo s($square) . ','; }
    1 نقطة
  15. لماذا عندما اكتب الكود الذي كتبته ينتج لدي error في سطر الطباعة echo
    1 نقطة
  16. التابع المذكور يقوم بالمرور على الأرقام الممررة له ويحسب مربع كل منها ويخزنه ضمن المتغير m$، الخطأ لديك هو عند تخزين تلك القيمة سيتم مسح القيمة السابقة لها وبالتالي لن نحصل سوى على آخر نتيجة فقط، بما أن استخدامك للتابع هو فقط لتمرير عدد مفرد يمكن كتابته لإرجاع نتيجة مفردة وليس مصفوفة كالتالي: function s($number) { return $number**2; } echo s(3).','; echo s(5); // 9, 25 أما في حالة إرجاع مصفوفة حصرًا يجب تغيير طريقة اسنادك للنتيجة لمتغير مصفوفة النتائج وإضافة قوسين مربعين، ويجب تغيير طريقة استعمال المصفوفة باعتبار أنها ترجع مصفوفة وليس عدد مفرد، لتصبح كالتالي: function s(...$numbers) { foreach ($numbers as $n) { $m[] = $n**2; } return $m; } foreach(s(3, 5) as $square) { echo s($square) . ','; }
    1 نقطة
  17. import requests import time #global variables api_key = '15******-ce*0-42*d-9c*6-17******49*0' bot_key = '51******56:A*H-o_hf******Gm******ON******M4*bg' chat_id = '10******03' limit = 59000 #لو قل المبلغ عن هذا الرقم ارسل رسالة على بوت التلغرام time_interval = 60 * 5 #الاتصال بالموقع لمعرفة السعر كل 5 دقائق # دالة لمخاطبة الموقع وجلب السعر def get_price(): url = 'https://sandbox-api.coinmarketcap.com/v1/cryptocurrency/listings/latest' parameters = { 'start':'1', 'limit':'2', 'convert':'USD' } headers = { 'Accepts': 'application/json', 'X-CMC_PRO_API_KEY': api_key, } response = requests.get(url, headers=headers, params=parameters).json() btc_price = response['data'][0]['quote']['USD']['price'] return btc_price # دالة ترسل رسالة لو قل المبلغ عن الرقم المحدد ارسل رسالة على بوت التلغرام def send_update(chat_id, msg): url = f'https://api.telegram.org/bot{bot_key}/sendMessage?chat_id={chat_id}&text={msg}' requests.get(url) # دالة لتشغيل الدوال السابقة def main(): while True: price = get_price() print(price) if price < limit: send_update(chat_id, f"سعر البتكوين:{price}") time.sleep(time_interval) main() code: import requests import time #global variables api_key = '15******-ce*0-42*d-9c*6-17******49*0' bot_key = '51******56:A*H-o_hf******Gm******ON******M4*bg' chat_id = '10******03' limit = 59000 #لو قل المبلغ عن هذا الرقم ارسل رسالة على بوت التلغرام time_interval = 60 * 5 #الاتصال بالموقع لمعرفة السعر كل 5 دقائق # دالة لمخاطبة الموقع وجلب السعر def get_price(): url = 'https://sandbox-api.coinmarketcap.com/v1/cryptocurrency/listings/latest' parameters = { 'start':'1', 'limit':'2', 'convert':'USD' } headers = { 'Accepts': 'application/json', 'X-CMC_PRO_API_KEY': api_key, } response = requests.get(url, headers=headers, params=parameters).json() btc_price = response['data'][0]['quote']['USD']['price'] return btc_price # دالة ترسل رسالة لو قل المبلغ عن الرقم المحدد ارسل رسالة على بوت التلغرام def send_update(chat_id, msg): url = f'https://api.telegram.org/bot{bot_key}/sendMessage?chat_id={chat_id}&text={msg}' requests.get(url) # دالة لتشغيل الدوال السابقة def main(): while True: price = get_price() print(price) if price < limit: send_update(chat_id, f"سعر البتكوين:{price}") time.sleep(time_interval) main()
    1 نقطة
  18. سلام عليكم لو سمحتوا انا عايز انا عايز اشتغل علي نفسي عايز ابدا بتعلمflutter من الصفر وانا معرفش اي حاجه ف انا بتمنا من حد يوجهني ويعرفني البدايه وكله بيقولي فلتر بتتحدث وانا مش عارف ابدا واي المصادر الصح والمتحدثه وهو انا ابدا بس هي دي الفكره وامشي ازاي لأني ف حسابات ومعلومات وزي م فيها زي غيرها ف انا عايز اشتغل علي نفسي
    1 نقطة
  19. اريد المساعدة في التأكد من الاسطر التي باللون الاصفر , وكيفية تصحيحها ؟ <?xml version="1.0"?> <function> <title>ctime</title> <funcsynopsis> <funcdef> <function>ctime</fnuction> </funcdef> <paramdef> <parameter>time</parameter> <parameter role="opt">gmt</parameter> </paramdef> </funcsynopsis> <para>This function converts the value <parameter> time < /parameter>,as returned by <function>time()</function> <function>file_mtime()</function>, into a string of the form produced by <function>time_date()</function>. If the optional argument <parameter>gmt</parameter> is specified and non-zero,the time is returned in <parameter>gmt</parameter>. Otherwise, the time is given in the local time zone. </para> <para><emphasis role="strong" targetgroup="beginners" role="strong"> Related topics</emphasis> </para> <para>&ampdoubleclick; the <mousebutton>LEFT &ampbuttonleft;</mousebutton> mouse button on a topic </para> <itemizedlist> <listitem> <para><ulink url="&ampidhelp782;"><function>file_mtime()</function>built-in function</ulink> </para> </listitem> <listitem> <para><ulink url="&ampidhelp785;"><function>time()</function> built-infunction</ulink> </para> </listitem> </itemizedlist> </function> XML.docx
    1 نقطة
  20. الحين اسوي حق كل Fragment داخله shared preferences ولا اسويه مره وحده في Main activity عشان يستديعه لما افتح التطبيق؟ ولا اسوي كل الأكواد داخل Main activity?
    1 نقطة
  21. نفس المثال هذا او اذا عندك مثال او فيديو يشرح لي اكثر
    1 نقطة
  22. وضع الشيفرة كاملة في أقل عدد من الملفات أفضل من ناحية الأداء (نسبيًا) للموقع، حيث لن يحتاج الموقع عند الوصول إليه سوى لطلب ملف واحد فقط من المصدر، بينما إذا تطلب الأمر إرسال العديد من الطلبات سيؤثر ذلك على سرعة وأداء الموقع الأولية من ناحية الأداء نعم، يفضل تقليل عدد الملفات التي ستطلب من قبل الموقع ووضع الشيفرة كاملة في ملف واحد على الناحية الأخرى الملفات الطويلة تؤثر على المطور وتعيق عملية التطوير ومن الأسهل وجود العديد من الملفات الصغيرة كل منها وحدة منفصلة صغيرة وواضحة، لكن في بعض الحالات الاستثنائية تكون مضطرًا لوجود ملف ما طويل لا نتكلم عن ذلك هنا، من ناحية سهولة التطوير لا، فيجب تقسيم الشيفرة لقطع صغيرة بسيطة الفهم (قد تكون بعدة ملفات منفصلة أو ملف واحد لكن بوحدات كتوابع منفصلة صغيرة سهلة الفهم). ما الحل إذًا؟ الحل النهائي للمحافظة على الأداء وسهولة التطوير بآن معًا هو استخدام المحزّمات Bundlers، حيث تقوم بكتابة الشيفرة وتركز على الوضوح وسهولة التطوير ما أمكن، ويقوم المحزم خلال مرحلة البناء بدمج الوحدات (الملفات) التي قمت بكتابتها معًا في ملف واحد لرفع سرعة أداء الموقع، هكذا نكون حافظنا على الأداء وسهولة التطوير يمكنك استخدام Webpack لتطبيق ذلك، يمكنك الاستفادة من قراءة المقالات التالية:
    1 نقطة
  23. بارك الله فيك اخي وائل. سانتظر رد الدعم الفني على استفساري لعل وعسى يكون هناك امل ... لانني مهتم بدورة تطوير صفحات الويب.
    1 نقطة
  24. تبين بعد تجريب الشيفرة أن الفراغ بسبب عمل سطر جديد بين الوسوم a tags <nav> <a class="home" href="#">Home</a><a class="news" href="#">News</a><a class="contact" href="#">Contact</a><a class="about" href="#">About</a> </nav> وأحد الحلول بعمل تعليق بشكل غريب كالتالي <ul> <li>Item 1</li><!-- --><li>Item 2</li><!-- --><li>Item 2</li> </ul> المهم عدم وجود فراغ بين بداية و نهاية وسم، أو يمكنك تطبيق float left أو display flex
    1 نقطة
  25. يمكننا لكل عبارة شرطية مرتبطة ب And فصلها ضمن عبارة where مستقلة، أما الشروط التي بينها علاقة Or يمكننا كتابتها مباشرة ضمن نفس الاستعلام في نفس عبارة where أي أن الاستعلام السابق يمكننا تعديله ليصبح DB::table("posts") ->where(DB::raw("(col_1 = 123 or col_2 = 123)")) ->where(DB::raw("(col_3 = 456 or col_4 = 456)")) ->get(); يمكنك الإطلاع على laravel #advanced-wheres
    1 نقطة
  26. يمكنك تحديد مجموعة شروط عن طريق السطر التالي $query->where([ ['column_1', '=', 'value_1'], ['column_2', '<>', 'value_2'], [COLUMN, OPERATOR, VALUE], ... ]) أما إذا أردت الدمج ما بين WHERE , AND يمكنك استخدام الأسطر التالية $matchThese = ['field' => 'value', 'another_field' => 'another_value', ...]; // if you need another group of wheres as an alternative: $orThose = ['yet_another_field' => 'yet_another_value', ...]; ثم $results = User::where($matchThese)->get(); // with another group $results = User::where($matchThese) ->orWhere($orThose) ->get(); لتعادل نفس نتيجة تلك الأسطر SELECT * FROM users WHERE (field = value AND another_field = another_value AND ...) OR (yet_another_field = yet_another_value AND ...)
    1 نقطة
  27. إن سبب الخطأ لوجود شيفرة PHP على سطر جديد new line مما سبب في ظهور المسافة البيضاء. يمكننا كتابة الشيفرة على سطر واحد إن كان بالإمكان مما يزيل الخطأ <textarea cols="60" rows="10" name="user_bio"><?php if($user_bio) echo $user_bio;?> </textarea> وفي حال كان هنالك الكثير من الشيفرات البرمجية يمكننا تطبيق الدالة trim مثلاً في جيكويري على الحقل $('textarea').val($('textarea').val().trim()) هذا يقوم بإعادة إسناد قيمة الحقل نفسه بدون فراغات
    1 نقطة
  28. لا يظهر أي فيديو في الصفحة التي قمت بارفاق رابطها. هلا قمت باضافة تفاصيل أكثر؟
    1 نقطة
  29. لا يوجد أمر مدمج ولكن يمكنك القيام بذلك بسهولة عبر > python manage.py shell $ from django.contrib.auth.models import User $ User.objects.get(username="name", is_superuser=True).delete()
    1 نقطة
  30. اذا كنت تستخدم Django 3.2 فما فوق يمكنك استخدام python manage.py makemigrations --check --dry-run إذا لم تكن هناك تغييرات معلقة في النماذج تتطلب إنشاء تهجير سيكون الناتج المتوقع كالتالي: 'No changes detected' او يمكنك استخدام python manage.py migrate --plan سيكون الناتج المتوقع: 'Planned operations: No planned migration operations.' يمكنك استخدام ايا من الطرق في نص بيثون مع call_command وتطوير طريقة للتحقق من الإخراج المتوقع. إذا كانت هناك أي عمليات تهجير معلقة لمكالمات تهجير، فسيكون الإخراج مختلفًا عن المتوقع.
    1 نقطة
  31. في نسخ جانقو القديمة يتم استخدام الدالة defer لاستبعاد أعمدة من الاستعلام defer('col1', 'col2') كما يتم استخدام الدالة only للحصول على مجموعة محددة من الأعمدة فقط. only('col1', 'col2') الدالة values تفعل شيئًا مختلفًا قليلاً - بواسطتها ستحصل فقط على الأعمدة التي تحددها ، لكنها تُرجع قائمة من القواميس بدلاً من مجموعة من كائنات النموذج. لاستخدامها قم بإلحاقها باستعلامك كالاتي: queryset = User.objects.filter( first_name__startswith='R' ).values('first_name', 'last_name') هذا استعلام للحصول على الاسم الأول والاسم الأخير لجميع المستخدمين الذين يبدأ أسماؤهم بالحرف R.
    1 نقطة
  32. يمكنك جلب مجموعة أعمدة محددة في نموذج Django من خلال السطر التالي qs = Blog.objects.values_list('id', 'name') حيثُ أن Blog يتم استبداله بإسم النموذج الذي تم استدعاؤه من ملف models.py و الجديد في الأمر انك ستستخدم values_list من أجل جلب فقط الأعمدة المخصصة من النموذج و تكون بين الأقواس
    1 نقطة
  33. برجاء ارفاق شيفرة البرنامج ليتم معرفة مكان الخطأ حتى نستطيع معالجة المشكلة شكرا لك,
    1 نقطة
  34. حاول التواصل مع مركز مساعدة و اشرح لهم ما تريده مركز مساعدة حسوب
    1 نقطة
  35. ال epoch هو عملية مرور على كامل بيانات التدريب التي لديك، فمثلاً إذا كان لديك 5000 عينة تدريبية، مقسمة إلى 100 باتش-حزمة- (مفهوم ال Mini-Batches) وبالتالي سيكون لدينا حجم كل باتش batch-size يساوي 50 عينة. هذا يعني أنه عند المرور على كامل البيانات (ال 5000 عينة) سنكون قد قمنا ب 100 iteration أي 100 عملية forward و backward على البيانات (مرور على البيانات ثم تحديث قيم الأوزان في الشبكة). وهذا هو الفرق، ولهذا السبب نستخدم مفهوم ال epoch بدلاً من ال iteration فهو أعم، ونحتاجه في حالة التعامل مع ال Mini-Batches.
    1 نقطة
×
×
  • أضف...