-
المساهمات
1070 -
تاريخ الانضمام
-
تاريخ آخر زيارة
-
عدد الأيام التي تصدر بها
15
نوع المحتوى
ريادة الأعمال
البرمجة
التصميم
DevOps
التسويق والمبيعات
العمل الحر
البرامج والتطبيقات
آخر التحديثات
قصص نجاح
أسئلة وأجوبة
كتب
دورات
كل منشورات العضو Mohamd Imran
-
@HA_shafeai أتوقع المشكلة لديك من رقم المنفذ حيث رقم المنفذ الإفتراضي في MAMP هو 8888 لذلك عند الوصول إلى الموقع الخاص بنا نقوم بالوصول إليه هكذا مع رقم المنفذ الذي قمنا بإستخدامه لكن إن لم تقم بتغيير رقم المنفذ الإفتراضي عند تثبيت MAMP جرب الوصول إلى موقعك بهذا الشكل **ملاحظة : يرجى إستبدال "website" بإسم مجلد موقك أتوقع لديك my website ثم إذهب إليه مع ملاحظة رقم المنفذ هو 8888 كما في الأسفل localhost:8888/website
-
بالفعل الإجابة لـ react native ما قصدته هو عندما تقوم بتثبيت المكتبة في مشروعك ستضع api key الخاص بجوجل مابس الذي تحصل عليه من جوجل وبالعادة هذا المفتاح أو ال Api key يكون في ملف AndroidManifest.xml في حال كنت تبني مشروعك للأندرويد يكون بهذا الشكل <meta-data android:name="com.google.android.geo.API_KEY" android:value="YOUR_API_KEY"/> أما إن كنت تبني المشروع للأيفون (IOS) فيكون بهذا الشكل في ملف AppDelegate.m هكذا حيث "YOUR_API_KEY" يجب أن يكون المفتاح الخاص بك الذي حصلت عليه من جوجل [GMSServices provideAPIKey:@"YOUR_API_KEY"];
-
@أحمد ابراهيم عبد الله يمكنك ذلك من خلال إضافة المتغير language إلى الـ Api الذي تستخدمه في مشروعك مثلاً إن كنت تستخدم جوجل مابس وهذا أتوقع ما تستخدمه في مشروعك من خلال مكتبة react-native-maps فا لتغيير اللغة نقوم بإضافة كود اللغة إلى المتغير language هكذا لاحظ language=ar حيث "ar" هو رمز اللغة العربية و "en" اللغة الإنجليزية وكذلك للغات الأخرى <script async defer src="https://maps.googleapis.com/maps/api/js?key=yourkey&callback=initMap&language=ar"></script>
-
@حسين بلعباسي يوجد عدة نقاط قبل برمجة مكبر الصوت أو بالأحرى ربطه مع اﻷردوينو , مثل هل تقصد إنك تريد الأردوينو أن تقوم بعمل معين عند التحدث في مكبر الصوت ,أم تقصد تريد الصوت أن يتكرر بشكل لاسلكي على مكبر صوت آخر مربوط بالأردوينو أم تريد التحدث من خلال مايك وإخراج الصوت من خلال مكبر صوت مربوط بالأردوينو , حتى أستطيع مساعدتك برمجياً
- 1 جواب
-
- 1
-
@Reda Boukheche ما تقصده بالتنقل إلى صفحة أخرى يسمى pagination في بوتستراب والأن سبب عدم ظهوره الجدول كما في الرابط هو يبدو إنك لم تقم بإستيراد مكتبة بوتستراب و إضافاته مثل إضافة datatables وكذلك الjquery الأن لحل المشكلة يجب أن نقوم بإستيراد ما ذكر بالترتيب في وسم ال head هكذا <head> <link rel="stylesheet" type="text/css" href="https://cdnjs.cloudflare.com/ajax/libs/twitter-bootstrap/4.5.2/css/bootstrap.css"> <link rel="stylesheet" type="text/css" href="https://cdn.datatables.net/1.10.25/css/dataTables.bootstrap4.min.css"> <link rel="stylesheet" type="text/css" href="https://cdn.datatables.net/responsive/2.2.9/css/responsive.bootstrap4.min.css"> <script type="text/javascript" async="" src="https://ssl.google-analytics.com/ga.js"></script> <script type="text/javascript" language="javascript" src="https://code.jquery.com/jquery-3.5.1.js"></script> <script type="text/javascript" language="javascript" src="https://cdn.datatables.net/1.10.25/js/jquery.dataTables.min.js"></script> <script type="text/javascript" language="javascript" src="https://cdn.datatables.net/1.10.25/js/dataTables.bootstrap4.min.js"></script> <script type="text/javascript" language="javascript" src="https://cdn.datatables.net/responsive/2.2.9/js/dataTables.responsive.min.js"></script> <script type="text/javascript" language="javascript" src="https://cdn.datatables.net/responsive/2.2.9/js/responsive.bootstrap4.min.js"></script> <meta charset="utf-8"> <title></title> </head> ثم نقوم في وسم ال body بوضع الجداول سأضعها كما في المثال <table id="example" class="table table-striped table-bordered dt-responsive nowrap" style="width:100%"> <thead> <tr> <th>First name</th> <th>Last name</th> <th>Position</th> <th>Office</th> <th>Age</th> <th>Start date</th> <th>Salary</th> <th>Extn.</th> <th>E-mail</th> </tr> </thead> <tbody> <tr> <td>Tiger</td> <td>Nixon</td> <td>System Architect</td> <td>Edinburgh</td> <td>61</td> <td>2011/04/25</td> <td>$320,800</td> <td>5421</td> <td>t.nixon@datatables.net</td> </tr> <tr> <td>Garrett</td> <td>Winters</td> <td>Accountant</td> <td>Tokyo</td> <td>63</td> <td>2011/07/25</td> <td>$170,750</td> <td>8422</td> <td>g.winters@datatables.net</td> </tr> <tr> <td>Ashton</td> <td>Cox</td> <td>Junior Technical Author</td> <td>San Francisco</td> <td>66</td> <td>2009/01/12</td> <td>$86,000</td> <td>1562</td> <td>a.cox@datatables.net</td> </tr> <tr> <td>Cedric</td> <td>Kelly</td> <td>Senior Javascript Developer</td> <td>Edinburgh</td> <td>22</td> <td>2012/03/29</td> <td>$433,060</td> <td>6224</td> <td>c.kelly@datatables.net</td> </tr> <tr> <td>Airi</td> <td>Satou</td> <td>Accountant</td> <td>Tokyo</td> <td>33</td> <td>2008/11/28</td> <td>$162,700</td> <td>5407</td> <td>a.satou@datatables.net</td> </tr> <tr> <td>Brielle</td> <td>Williamson</td> <td>Integration Specialist</td> <td>New York</td> <td>61</td> <td>2012/12/02</td> <td>$372,000</td> <td>4804</td> <td>b.williamson@datatables.net</td> </tr> <tr> <td>Herrod</td> <td>Chandler</td> <td>Sales Assistant</td> <td>San Francisco</td> <td>59</td> <td>2012/08/06</td> <td>$137,500</td> <td>9608</td> <td>h.chandler@datatables.net</td> </tr> <tr> <td>Rhona</td> <td>Davidson</td> <td>Integration Specialist</td> <td>Tokyo</td> <td>55</td> <td>2010/10/14</td> <td>$327,900</td> <td>6200</td> <td>r.davidson@datatables.net</td> </tr> <tr> <td>Colleen</td> <td>Hurst</td> <td>Javascript Developer</td> <td>San Francisco</td> <td>39</td> <td>2009/09/15</td> <td>$205,500</td> <td>2360</td> <td>c.hurst@datatables.net</td> </tr> <tr> <td>Herrod</td> <td>Chandler</td> <td>Sales Assistant</td> <td>San Francisco</td> <td>59</td> <td>2012/08/06</td> <td>$137,500</td> <td>9608</td> <td>h.chandler@datatables.net</td> </tr> <tr> <td>Rhona</td> <td>Davidson</td> <td>Integration Specialist</td> <td>Tokyo</td> <td>55</td> <td>2010/10/14</td> <td>$327,900</td> <td>6200</td> <td>r.davidson@datatables.net</td> </tr> <tr> <td>Colleen</td> <td>Hurst</td> <td>Javascript Developer</td> <td>San Francisco</td> <td>39</td> <td>2009/09/15</td> <td>$205,500</td> <td>2360</td> <td>c.hurst@datatables.net</td> </tr> </tbody> </table> ثم نقوم بوضع كود الjquery الذي سيقوم بتفعيل او عمل initialise للجدول <script type="text/javascript"> $(document).ready(function() { $('#example').DataTable(); } ); </script> بعد ذلك سيعمل كما في المثال يمكنك الإطلاع على الكود أعلاه يعمل من هنا
-
بالتأكيد ليس بحجم الدورة لكن ستساعدك على البدء أو ممكن تساعدك على الوصول إلى مرحلة متوسطة أو أعلى على حسب تطورك
- 5 اجابة
-
- 1
-
السلام عليكم @مروان مروان3 لا يوجد لديك خطأ في الكود بل المشكلة هي من أبل أبل فقط تعيد إسم المستخدم بالكامل وكذلك الإيميل فقط مرة واحد عند أو عملية تسجيل دخول على نفس الجهاز من خلال التطبيق , وإن عاودت تسجيل الدخول ستحصل على null هذا من أبل لكن للحصول على البيانات مرة أخرى بغرض الإختبار , في جهاز الأيفون إذهب إلى Settings > Apple ID, iCloud, iTunes & App Store > Password & Security > Apps Using Your Apple ID ثم إضغط على التطبيق الخاص بك ثم إختر Stop Using Apple ID بعد ذلك يمكنك تسجيل الدخول مرة أخرى وستحصل على البيانات
-
لا بالعكس عندما تكون مؤقتة لن تحفظ في المتصفح لفترة طويلة اي يتم تحديثها من خلال السيرفر او الbackend يعني ليس من خلال العميل لن يكون له اي صلاحيات او وصول لإمكانية تعديل او التلاعب بتلك البيانات إلا في حالة العثور على ثغرة أمنية في موقعك بشكل عام مثل ثغرة XSS عندها يمكنه سرقة تلك البيانات أو تغييرها أو حقن كود خبيث يعتمد على موقعك بشكل عام وليس Vue بشكل أدق إن كنت تقوم بإزالة الأكواد الغير آمنة من مدخلات المستخدم في أي حقل في موقعك فإنك تقريباً ستكون آمناً أما إن لم يكن ذلك متوفر عندها سيكون هناك فرصة لحدوث ثغرة أمنية XSS مثلاً
-
مرحباً @مضحي Modhy بالنسبة ل Vuex والتخزين فهي مثله مثل جافا سكربت تقريباً أي تخزن على متصفح العميل وعند إعادة تحميل الصفحة أو تفريغ كاش المتصفح فإنه يتم إفراغها والحصول على الجديد من الموقع الهدف أي مؤقتة وليس مخزنة بالذاكرة لكن يمكن جعلها تخزن لمدة أطول من خلال localStorage ويوجد إضافات عديدة يمكن إضافتها مع إطار Vuex مثل إضافة vuex-persistedstate
-
مرحباً @Ali Proof في الصورة المرفقة الخطأ واضح دعني أوضحه أكثر وما سببه , أنت تقوم بتعريف متغير من int اي رقم لكن تقوم بلتحقق منه في جملة الشرط كنص أي String لأنك تضعه بين علامتي تنصيص "" وغير ذلك لا يمكنك إستخدام علامات > أو = أو علامات المقارنة المشابه لمقارنة نص , الأن لحل المشكلة يمكننا إما تعريف المتغير age كنص String وإستخدام المقارنة من خلال الميثود Compare أو الإبقاء على المتغير كما هو أي int و تحويل مدخل المستخدم إلى رقم لأنه الميثود Console.ReadLine() تقوم بأخذ مدخل المستخدم كنص لذلك يظهر لك الخطأ في تلك الميثود لأن المتغير age من نوع int أي رقم بينما القيمة التي نأخذها من المستخدم هي قيمة نصية , الأن لتحويل مدخل المستخدم إلى نص أولاً نقوم بجعل المتغير age متغير نص أي String بدلاً من int ومن ثم نقوم بإستخدام الميثود Convert.ToInt32 التي ستقوم بتحويل النص إلى رقم ونمرر لها القيمة النصية أي هكذا Convert.ToInt32(age); ونقوم بإستخدامها هكذا ووأيضاً قم بإزالة علامتي التنصيص من حول الرقم 15 لأنه رقم وليس نص using System; class myclass { static void Main(string[] args){ Console.WriteLine("Enter your age : "); String age = Console.ReadLine(); if (Convert.ToInt32(age) <= 15){ Console.WriteLine("Go back to school -_-!"); } } }
- 1 جواب
-
- 1
-
وعليكم السلام @Khalid Khettary الدورات المتوفرة حالياً هي دورات مدفوعة لكن متوفر كتب لتعلم البرمجة مجانية وأيضاً مقالات مجانية من هنا أو إن كنت ترغب في كتب أو مقالات لمجال غير البرمجة من الواجهة الرئيسية مرر مؤشر الماوس فوق "دروس ومقالات ثم إختر ما يناسبك وكذلك الأمر بالنسبة للكتب
- 5 اجابة
-
- 1
-
السلام عليكم @Hoida Ahamed يمكننا ذلك بعدد طرق لكن بما أننا نريد إيجاد عدد الإجابات الصحيحة أي رقم وليس الإجابة نفسها يمكننا القيام بذلك من خلال تعريف متغير من نوع رقم أو int ونسند له قيمة إفتراضية فلتكن 1 ثم في حالة الإجابة صحيحة نقوم بزيادة ذلك المتغير مرة واحد مثلاً الإجابة الأولى 1 والثانية 2 وهكذا الأن برمجياً نقوم بذلك هكذا ,وأيضاً كان يوجد لديك خطأ في الكود الخاص بك أنت تقومين بإستخدام المصفوفة arr في البداية قبل تعريفها وهذا سينتج لك خطأ الأن نقوم بحساب عدد الإجابات الصحيحة برمجياً هكذا لاحظت متغير answer import java.util.Scanner; public class Questions { public static void questions(String[] args) { Scanner in =new Scanner(System.in); String arr[ ][ ]={{"S","R"},{"M","T"},{"A","D"}}; int answer= 1; for (int i=0;i<arr.length;i++){ System.out.println("ماهي عاصمة ولاية"+arr[i][0]); String x=in.next(); if(x.equals(arr[i][1])){ answer += 1; System.out.println("عددالاجابات الصحيحه هو" + answer); System.out.println("اجابة صحيحة "); }else { System.out.println("اجابة خاطئة! "); System.out.println("الاجابة الصحيحه هي:"+arr[i][1]); } } } } عند تشغيل البرنامج ستلاحظين النتيجة هكذا Housb 2021-08-13 07:32:10.mp4
-
السلام عليكم @Mohammad Kiblawi سبب الخطأ كما يظهر في الصورة المرفقة هو لديك متغير بإسم slot غير معرف في ملف app.blade.php في مجلد resources ->views -> layouts السطر رقم 65 يمكنك إما إرجاع ذلك المتغير في الميثود create في كونترولر الadmin من خلال return view('admin.create')->compact($slot); أو return view('admin.create')->with('slot',$slot); على حسب الإستخدام الخاص بذلك المتغير , أو إزالة ذلك المتغير وإستخداماته في ملف app.blade.php في حال لا تحتاجه.
-
أهلاً بك @عبدالله محمد تفقدت الصفحة الخاصة بك وإذا لاحظت هنا في السطر رقم 32 تقوم بإسناد القيمة forwards للخاصية animation-fill-mode وعند إسناد القيمة forwards سيتم الإحتفاظ بآخر التنسيقات التي وصل إليها آخر keyframe وفي حالتك أخر keyframe هو إلى اليمين الخروج إلى اليمين ,أي سيبقى خارج إلى اليمين والستايل لن يرجع إلى التنسيق الأصلي ,الأن لحل المشكلة ببساطة نقوم بإسناد القيمة backwards إلى الخاصية animation-fill-mode في السطر رقم 32 وما ستقوم به هو إرجاع العنصر إلى ستايله الأصلي أو مكانه الأصلي بالأحرى الستايل الخاص بأول keyframe , بعد ذلك ستحل المشكلة لديك
-
وعليكم السلام @Brahim Semmani يمكنك عمل عمل ذلك من خلال عمل Sequelize مودل ثم نقوم بإستدعاءها وتنفيذ العمليات التي نريدها عليها من خلال إستخدام Sequelize ميثودز سواء للحذف أو الإضافة أو تحديث ,الأن لعمل جدول Products من خلال Sequelize مودل نقوم بعمل Sequelize مودل بإسم فليكن product.model.js في مجلد models ثم نقوم بإضافة الحقول وخصائصها لهذا الشكل module.exports = (sequelize, Sequelize) => { const Product = sequelize.define("product", { title: { type: Sequelize.STRING }, price: { type: Sequelize.DOUBLE }, description: { type: Sequelize.STRING }, published: { type: Sequelize.BOOLEAN } }); return Product; }; بعد أن نقوم بعمل ذلك عند عمل Initialize أو تفعيل لتلك المودل من خلال إستدعائها مثلاً في ملف index.js سيتم عمل الجدول وأعمدته بشكل تلقائي التي قمنا بإضافتها إلى المودل أعلاه ,لن نحتاج إلى كتابة ال CRUD فنشكنز لأن Sequelize تدعهمهن كلهن بشكل تلقائي فقط سنقوم بإستدعاء المودل في الكونترولر الخاص بنا وإستخدام إحدى الفنشكنز التي نحتاجها على حسب طبيعة التطبيق ويوجد العديد من تلك الفنشكنز يمكنك الإطلاع عليها وعلى Sequelize بشكل عام من هنا
- 1 جواب
-
- 1
-
السلام عليكم @Brahim Semmani يوجد عدة طرق لذلك , لكن سأذكر الطريقة الأفضل ,يمكننا عمل ذلك من خلال إضافة حقل فليكن role لجدول المستخدمين وأيضاً نقوم بعمل جدول بإسم roles هذا الجدول يحوي فليكن حقلين حقل id وحقل اسم الدور او ال role ثم نضيف له دورين دور admin ودور user بعد ذلك عند تسجيل أي مستخدم جديد نقوم بإعطاءه دور user بشكل تلقائي وهذه القيمة يتم تخزينها في حقل role الذي قمنا بإضافته في جدول المستخدمين بعد ذلك ببساطة ما سنقوم به في التطبيق هو فقط التأكد من أن المستخدم هو admin أو user ثم نقوم بعرض ما يتناسب معه له ,هذه الطريقة الأفضل سواء لتطبيقات أو مواقع لعمل صلاحيات للمستخدمين
- 1 جواب
-
- 1
-
وعليكم السلام @نصرالدين صالح عطيفة بالتأكيد يمكنك لكن يعتمد على نوع قواعد البيانات المبني عليها الموقع مثلاً إن كان SQL يمكنكم ذلك وهذا مثال بسيط لكيفية عمل ذلك CREATE PROCEDURE SelectAllProducts AS SELECT * FROM Products GO; ثم نقوم بتنفيذ الprocedure (الإجراء) الذي قمنا بعمله اعلاه هكذا EXEC SelectAllProducts;
- 1 جواب
-
- 1
-
السلام عليكم @Hamada Ahmed يوجد عدة طرق لذلك لكن سأعطي مثال لكيفية عمل ذلك من خلال Ajax نقوم بعمل طلب لإرجاع البيانات من السيرفر كل مدة معينة مثلا كل 3 ثواني بدون الحاجة إلى تحديث الصفحة هكذا <script type="text/javascript" src="https://ajax.googleapis.com/ajax/libs/jquery/1.8.3/ jquery.min.js"></script> <script> (function worker() { $.ajax({ url: 'https://mywebsite.com/display_online_memper.php', success: function(data) { $('#content_online_memper').html(data); }, complete: function() { // Isuue The Second request when the current one's complete setTimeout(worker, 3000); } }); })(); </script> بعد ذلك سيتم إرسال طلب للسيرفر لجلب البيانات الجديدة كل 3 ثواني أو يمكنك وضع التوقيت الذي يناسبك (لكن لاحظ الثانية = 1000) بدون اعادة تحميل الصفحة
- 1 جواب
-
- 2
-
السلام عليكم @سرين رحمة يجب أولاً أن تقومي بتثبيت chocolatey الذي بدوره سيقوم بتثبيت إصدار 4 من إطار .Net في حال لم يملكه الجهاز الخاص بك ,الأن لثتبيته إذهبي إلى قائمة إبدأ ثم إبحثي عن "موجه الأوامر" أو "cmd" ثم إضغطي بزر الماوس الأيمن وإختاري تشغيل كمسؤول بعد ذلك من خلال نافذة الأوامر قومي بتنفيذ الأمر التالي @powershell Set-ExecutionPolicy Bypass -Scope Process -Force; [System.Net.ServicePointManager]::SecurityProtocol = [System.Net.ServicePointManager]::SecurityProtocol -bor 3072; iex ((New-Object System.Net.WebClient).DownloadString('https://chocolatey.org/install.ps1')) ثم إنتظري إلى حين الإنتهاء من التنزيل والتثبيت ,بعد ذلك إن لم يظهر لكي أي رسالة خطأ إذا تم تثبيته بنجاح وجاهز للإستخدام ويمكنك إختبار ذلك من خلال الأمر choco ولتنزيل أي برنامج من خلال chocolatey إستخدمي الأمر هكذا cinst vlc أو هكذا choco install vlc حيث "vlc" هو إسم البرنامج الذي ترغبين في تنزيله
-
السلام عليكم @Aisha Zaki تفقد ال Github Repo الخاص بالمشروع وإختبرت المشروع لكن لا يوجد المشاكل التي ذكرتيها , عند محاولة إرسال الطلب بحقول فارغة لا يرسل يظهر رسالة بأن الحقل فارغ وكذلك بالنسبة للشاشات الصغيرة لم أواجه مشكلة حذف المنتج تلقائي عند تحديد الكمية أتوقع المشكلة لديك هي فقط من كاش المتصفح (الذاكرة المؤقتة) خاص ملفات ال .js تحفظ لمدة في المتصفحات عموماً لحل المشكلة جربي متصفح آخر وأتوقع ستعمل معك بدون مشاكل
- 1 جواب
-
- 1
-
السلام عليكم @عبدالرحمن العنزي4 لا أعلم إن كنت تقصد shared preferences في Java أم في Dart , لكن تقريباً الفكرة نفسها يمكنك عمل ذلك مثلاً في الأندرويد ستديو (Java) أو جافا إجمالاً من خلال أولاً تخزين القيمة الأولية(dynamic value) من المتغير(الذي قيمته تتغير dynamic) فلتكن مثلاً 10 كما ذكرت ومن ثم نقوم بعمل شرط إن كان القيمة الأولية (10) التي تغيرت لا تساوي القيمة المخزنة في shared pref نقوم بإفراغها(shared pref) ثم تخزين القيمة التي تغيرت برمجياً (shared pref) قمت بعمل كود صغير يوضح ذلك برمجياً يمكنك عمله بأكثر من طريقة ويعتمد على كيف تتغير القيمة هل يتم تغييرها من خلال Api أم من خلال كود معين كل عدد معين من الثواني ,تفضل int dynamicValue = 10; SharedPreferences sharedPref = getSharedPreferences("name", Context.MODE_PRIVATE); SharedPreferences.Editor editor = sharedPref.edit(); editor.putInt("dynamicKey", dynamicValue); editor.commit(); if (dynamicValue != sharedPref.getInt("dynamicKey",0)) { /** * Clear dynamicKey value with 0 * Then Insert the dynamicValue to the dynamicKey */ sharedPref.edit().putInt("dynamicKey",0).apply(); sharedPref.edit().putInt("dynamicKey",dynamicValue).apply(); }