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

ابراهيم محمد11

الأعضاء
  • المساهمات

    37
  • تاريخ الانضمام

  • تاريخ آخر زيارة

كل منشورات العضو ابراهيم محمد11

  1. خوارزمية الترتيب بالاختيار (Selection Sort) تقوم خوارزمية الترتيب بالاختيار بترتيب مصفوفة ، من خلال البحث المتكرر عن العنصر الأصغر (مع مراعاة الترتيب التصاعدي) من الجزء غير المرتب ووضعه في البداية. تحافظ الخوارزمية على مصفوفتين فرعيتين في مصفوفة معينة: المصفوفة التي تم ترتيبها بالفعل مصفوفة فرعية متبقية غير مرتبة في كل تكرار لخوارزمية الترتيب بالاختيار ، يتم اختيار العنصر الأصغر (مع مراعاة الترتيب التصاعدي) من المصفوفة الفرعية التي لم يتم ترتيبها ونقلها إلى المصفوفة التي تم ترتيبها. المثال التالي يوضح ما سبق : arr[] = 64 25 12 22 11 // [0...4] إيجاد العنصر الأصغر من المصفوفة //واستبداله بأول عنصر 11 25 12 22 64 // [1...4] إيجاد العنصر الأصغر من المصفوفة //واستبداله بأول عنصر 11 12 25 22 64 // [2...4] إيجاد العنصر الأصغر من المصفوفة //واستبداله بأول عنصر 11 12 22 25 64 // [3...4] إيجاد العنصر الأصغر من المصفوفة //واستبداله بأول عنصر 11 12 22 25 64 أما كود السي بلس بلس للخوارزمية فهو كالتالي : #include <bits/stdc++.h> using namespace std; void swap(int *xp, int *yp) { int temp = *xp; *xp = *yp; *yp = temp; } void selectionSort(int arr[], int n) { int i, j, min_idx; // قم بتحريك حدود المصفوفة الجزئية غير المرتبة بمقدار عنصر في كل مرة for (i = 0; i < n-1; i++) { // إيجاد العنصر الأصغر في المصفوفة غير المرتبة min_idx = i; for (j = i+1; j < n; j++) if (arr[j] < arr[min_idx]) min_idx = j; // استبدال العنصر الأصغر الذي تم إيجاده مع أول عنصر من عناصر المصفوفة swap(&arr[min_idx], &arr[i]); } } /* تابع لطباعة مصفوفة */ void printArray(int arr[], int size) { int i; for (i=0; i < size; i++) cout << arr[i] << " "; cout << endl; } // استدعاء التوابع التي تم تعريفها في الكود أعلاه int main() { int arr[] = {64, 25, 12, 22, 11}; int n = sizeof(arr)/sizeof(arr[0]); selectionSort(arr, n); cout << "Sorted array: \n"; printArray(arr, n); return 0; } وبالتالي نحصل على الخرج: Sorted array: 11 12 22 25 64 خوارزمية مطابقة سلسلة محارف (String Matching) سنبدأ بمثال يوضح إحدى خوارزميات مطابقة سلسلة المحارف وهي خوارزمية Naive ، ومن المثال ستفهم مبدأ عمل هذه الخوارزمية بكل بساطة Input: txt[] = "THIS IS A TEST TEXT" pat[] = "TEST" Output: Pattern found at index 10 Input: txt[] = "AABAACAADAABAABA" pat[] = "AABA" Output: Pattern found at index 0 Pattern found at index 9 Pattern found at index 12 عليك أن تعلم أن البحث عن الأنماط هو مسألة مهمة في علوم الكمبيوتر. عندما نقوم بالبحث عن سلسلة محرفية في ملف المفكرة أو متصفح أو قاعدة بيانات ، يتم استخدام خوارزميات البحث عن الأنماط لإظهار نتائج البحث. أما كود السي بلس بلس لهذه الخوارزمية فهو التالي: #include <bits/stdc++.h> using namespace std; void search(char* pat, char* txt) { int M = strlen(pat); int N = strlen(txt); /* A loop to slide pat[] one by one */ for (int i = 0; i <= N - M; i++) { int j; /* من أجل الفهرس الحالي ، تحقق من المطابقة */ for (j = 0; j < M; j++) if (txt[i + j] != pat[j]) break; if (j == M) // if pat[0...M-1] = txt[i, i+1, ...i+M-1] cout << "Pattern found at index " << i << endl; } } //استدعاء التابع int main() { char txt[] = "AABAACAADAABAAABAA"; char pat[] = "AABA"; search(pat, txt); return 0; } حساب العاملي (Factorial) #include <iostream> using namespace std; int main() { int i,fact=1,number; cout<<"Enter any Number: "; cin>>number; for(i=1;i<=number;i++){ fact=fact*i; } cout<<"Factorial of " <<number<<" is: "<<fact<<endl; return 0; } حساب أس عدد (pow) #include <iostream> #include <cmath> using namespace std; int main() { float base, exponent, result; cout << "Enter base and exponent respectively: "; cin >> base >> exponent; result = pow(base, exponent);//تابع معرف مسبقاً في اللغة موجود في المكتبة cmath cout << base << "^" << exponent << " = " << result; return 0; }
  2. - قبل كل شيء عليك أن تعلم ما هو الفرق بين overloading و overriding وهو التالي: Method overriding : عندما الكلاس الابن يعيد تعريف نفس ال method في الكلاس الأب بنفس البارامترات. Method overloading : المقصود به تعريف عدة methods في نفس الكلاس والتي تقبل أعداد وأنواع مختلفة من البارامترات ، في هذه الحالة يتم تحديد ال method التي يتم استدعاؤها في وقت التجميع (compile time) بناءً على عدد بارامترات التابع وأنواعها. بناءً على ما سبق فإن الكود في الأعلى (الذي أنت تسأل عنه) هو overriding ، حيث تم إعادة تعريف التابع a2 بنفس البارامترات (int x , double y) ، ولا شك بأن العبارة Override@ الموجودة قبل التابع a2 في الكلاس B تؤكد ذلك. وللإجابة عن سؤالك (فكيف تم استدعاء الميثود في B) لاحظ معي التالي A b=new B(); أنت تعلم ، من خلال دراستك لأساسيات البرمجة أن المعامل "=" يعني عملية إسناد (وليس يساوي) أي إسناد ما على يمين المعامل إلى الكائن الذي على يسار المعامل ، في حالتك أنت تم إسناد كائن من الكلاس B إلى كائن من الكلاس A بالتالي أصبح الكائن b هو فعلياً كائن من الكلاس B فلا عجب أن يتم استدعاء التابع a2 في الكلاس B
  3. إذا كنت بحاجة إلى أن تكون البيانات متاحة في وضع عدم الاتصال بالإنترنت ، فيجب عليك استخدام قاعدة بيانات SQLITE التي تأتي كجزء من android / ios. إذا كان تطبيقك يحفظ البيانات على ال server والتي يتم استخدامها بدورها من قبل بوابة أخرى أو أجهزة أخرى (مشاركة) ، ففكر في تخزين البيانات عبر web/server وقاعدة بيانات mysql. لذا يعتمد الأمر حقًا على متطلبات الاستخدام والمشاركة. تخزين البيانات محليًا له فائدة كبيرة لأنه أسرع ، ولا يتطلب شبكة اتصال ، والبيانات متاحة دائمًا ، وعدم استخدام الشبكة يزيد أيضًا من عمر البطارية... المصدر : stackoverflow
  4. في الواقع ، نحن في الحقيقة لا نقوم بحشر (insert) مقاطع الفيديو في قاعدة البيانات. بدلاً من ذلك ، فإن أسهل طريقة هي تحميل الفيديو إلى مجلد على موقع الويب الخاص بك وإدراج اسم ملف الفيديو ببساطة في قاعدة بيانات MySQL. ثم كل ما عليك فعله بعد ذلك هو تحديد المسار الكامل لاسم الملف هذا ، بحيث يمكن عرض الفيديو وتشغيله. هذه طريقة أسهل بكثير وأبسط من تحميل مقاطع الفيديو في قاعدة البيانات ، والتي بدورها هي عملية معقدة وغير ضرورية حقًا. من أجل حشر مقاطع الفيديو في قاعدة بيانات MySQL ، كما هو موضح من قبل ، لا نقوم في الواقع بوضع مقاطع الفيديو في قاعدة البيانات. نضع مقاطع الفيديو في مجلد عادي على موقعنا. قمت بإنشاء مجلد فيديو (أو دليل) على موقع الويب الخاص بي والذي سيتم تحميل ملفات الفيديو إليه. في قاعدة بيانات MySQL ، كل ما عليك فعله هو وضع اسم الفيديو مع امتداد ملف الفيديو. نضع أيضًا وصفًا للفيديو في قاعدة البيانات. ومع ذلك ، لعرض الفيديو ، كل ما نحتاجه هو اسم ملف الفيديو وامتداد الملف. بمجرد حصولنا على ذلك ، كل ما علينا فعله في كود PHP هو تحديد المسار الكامل لهذا الفيديو ، بحيث يمكن عرضه وتشغيله لذا ، مرة أخرى ، نقوم بتحميل الفيديو إلى مجلد على موقعنا. لا نضع الفيديو مباشرة في قاعدة بيانات MySQL. نقوم بتحميله إلى مجلد على موقعنا. نحصل ببساطة على اسم ملف الفيديو وامتداد ملف الفيديو ونضعه في قاعدة بيانات MySQL. لدينا بعد ذلك المسار الكامل للفيديو في كود ال php الخاص بنا حتى نتمكن من عرضه وتشغيله.لذلك إذا قمنا بحفظ مقطع فيديو باسم amazon.mp4 ، فإننا نحفظ اسم الملف الكامل ، amazon.mp4 ونحفظ أيضًا امتداد ملف الفيديو ، وهو mp4. ، سأستخدم phpMyAdmin. عند إنشاء جدول في MySQL ، نقوم بإنشاء 4 أعمدة كود ال HTML : والآن دعنا نراجع كود HTML اللازم لإنشاء برنامج التحميل الموضح أعلاه ، والذي يسمح بتحميل مقاطع الفيديو. يظهر كود HTML أدناه. <form action="" method='post' enctype="multipart/form-data"> Description of Video: <input type="text" name="description_entered"/><br><br> <input type="file" name="file"/><br><br> <input type="submit" name="submit" value="Upload"/> </form> لاحظ بأنه يجب إضافة العبارة ، "enctype = "multipart / form-data. إذا لم يكن الأمر كذلك ، فلن يعمل تحميل الملف كود ال PHP (الجزء الأول): هذا الجزء من كود ال php مسؤول عن تحميل الملف الذي تم إدخاله إلى المجلد (حيث سيتم تخزين الفيديو) ، في حالتنا هو Uploads/videos/ directory <?php $name= $_FILES['file']['name']; $tmp_name= $_FILES['file']['tmp_name']; $submitbutton= $_POST['submit']; $position= strpos($name, "."); $fileextension= substr($name, $position + 1); $fileextension= strtolower($fileextension); $description= $_POST['description_entered'];//الحصول على وصف الفيديو $success= -1; $descript= 0; if (empty($description)) { $descript= 1; } if (isset($name)) { $path= 'Uploads/videos/'; if (!empty($name)){ if (($fileextension !== "mp4") && ($fileextension !== "ogg") && ($fileextension !== "webm")) { $success=0; echo "The file extension must be .mp4, .ogg, or .webm in order to be uploaded"; } else if (($fileextension == "mp4") || ($fileextension == "ogg") || ($fileextension == "webm")) { $success=1; if (move_uploaded_file($tmp_name, $path.$name)) { echo 'Uploaded!'; } } } } ?> نحدد المجلد الذي نريد تحميل الفيديو عليه. إذا قام المستخدم بالنقر فوق الزر "تحميل" دون تحديد ملف ، يتم إخراج العبارة "الرجاء اختيار ملف". إذا قام المستخدم بإدخال ملف ولكنه ليس بالصيغة mp4 أو ogg أو الويب ، فسيتم عرض العبارة "يجب أن يكون امتداد الملف .mp4 أو .ogg أو .webm ليتم تحميله". إذا أدخل المستخدم ملفًا وكان بتنسيق mp4 أو ogg أو webm ، فسيتم تحميل الملف إلى الدليل الذي حددناه من خلال التابع ()move_uploaded_file ، تنشئ هذه الوظيفة اسمًا مؤقتًا لتحميل الملف ، ثم تنقل الملف بشكل دائم إلى المجلد الذي نحدده. ثم يتم طباعة الرسالة "تم التحميل". كود ال PHP (الجزء الثاني): الكود التالي مسؤول عن حشر البيانات في جدول MySQL للتخزين. يتضمن ذلك وصف الفيديو واسم ملف الفيديو وامتداد ملف الفيديو <?php //Block 1 $user = "user"; $password = "password"; $host = "host"; $dbase = "database"; $table = "table"; //Block 3 $connection= mysql_connect ($host, $user, $password); if (!$connection) { die ('Could not connect:' . mysql_error()); } mysql_select_db($dbase, $connection); //Block 4 if((!empty($description)) && ($success == 1)){ mysql_query("INSERT INTO $table (description, filename, fileextension) VALUES ('$description', '$name', '$fileextension')"); } //Block 5 mysql_close($connection); ?> <p id="para6">Videos تؤسس مجموعة الأكواد البرمجية هذه اتصالاً بقاعدة البيانات MySQL المستخدمة. يتطلب هذا اسم مستخدم وكلمة مرور ومضيف وقاعدة بيانات واسم الجدول. كما ذكرنا أعلاه ، تم إنشاء جدول MySQL باستخدام phpMyAdmin. يحتوي هذا الجدول على 4 أعمدة: ID والوصف واسم الملف وامتداد الملف.إذا لم يكن مربع نص الوصف فارغًا ، فإننا نضيف إلى جدول الفيديو MySQL الوصف واسم الملف وامتداد الملف للفيديو.ثم نغلق قاعدة البيانات. كود ال PHP (الجزء الثالث) تعرض الكتلة التالية من كود PHP الجدول مع وصف الفيديو والفيديو الفعلي <?php $user = "user"; $password = "password"; $host = "host"; $dbase = "database"; $table = "table"; // الاتصال بقاعدة البيانات mysql_connect($host,$user,$password); @mysql_select_db($dbase) or die("Unable to select database"); $result= mysql_query( "SELECT description, filename, fileextension FROM $table ORDER BY ID DESC LIMIT 5" ) or die("SELECT Error: ".mysql_error()); print "<table border=1>\n"; //طالما هنالك صفوف while ($row = mysql_fetch_array($result)){ $videos_field= $row['filename'];//الحصول على اسم الفيديو $video_show= "Uploads/videos/$videos_field"; $descriptionvalue= $row['description'];//الحصول على وصف الفيديو $fileextensionvalue= $row['fileextension'];//الحصول على امتداد الفيديو print "<tr>\n"; print "\t<td>\n"; echo "<font face=arial size=4/>$descriptionvalue</font>"; print "</td>\n"; print "\t<td>\n"; echo "<div align=center><video width='320' controls><source src='$video_show' type='video/$fileextensionvalue'>Your browser does not support the video tag.</video></div>"; print "</td>\n"; print "</tr>\n"; } print "</table>\n"; ?> مرة أخرى ، نقوم بإنشاء اتصال بقواعد بيانات MySQL التي تحتوي على جدول الفيديو ، نقوم بطلب الجدول الذي يحتوي على معلومات الفيديو وقمنا بعرض النتائج في جدول ، وهذه هي الطريقة التي يتم بها رفع فيديو الي قواعد البيانات باستخدام php
  5. للوصول إلى ال Node أو الخلية التي في وسط السلسلة : List list = new LinkedList();//التصريح عن سلسلة for (int i = 0; i < 50; i++) { list.add(String.valueOf(i));//إضافة 50 عنصر للسلسلة } int end = list.size() - 1;//تحديد فهرس آخر عنصر من السلسلة int start = 0;// تحديد فهرس أول عنصر من السلسلة while (start < end) {//خوارزمية بسيطة للوصول إلى العنصر الواقع في وسط السلسلة start++; end--; } if(start == end) //يتحقق هذا الشرط فقط إذا كان عدد عناصر السلسلة فردي return start; // الحصول على فهرس العنصر الواقع في وسط السلسلة else //عدد عناصر السلسلة هو عدد زوجي ولا يوجد عنصر واقع في وسطها لإضافة عناصر إلى السلسلة ، المثال التالي يوضح ذلك: LinkedList<String> list=new LinkedList<String>(); //إضافة عناصر إلى السلسلة list.add("Steve"); list.add("Carl"); list.add("Raj"); لحذف عنصر من السلسلة ، إليكِ المثال التالي: //حذف أول عنصر من السلسلة list.removeFirst();//أو list.remove(0); //حذف آخر عنصر من السلسلة list.removeLast(); //حذف ثاني عنصر من السلسلة ، لاحظ بأن الفهرس يبدأ من الصفر list.remove(1); للبحث عن عنصر معين في السلسلة ، إليكِ المثال التالي الذي يوضح ذلك بالتفصيل: import java.util.LinkedList; public class SearchInLinkedList { public static void main(String[] args) { // إنشاء سلسلة LinkedList<String> linkedlist = new LinkedList<String>(); // إضافة عناصر إلى السلسلة linkedlist.add("Tim"); linkedlist.add("Rock"); linkedlist.add("Hulk"); linkedlist.add("Rock"); linkedlist.add("James"); linkedlist.add("Rock"); //العثور على أول تكرار للعنصر في السلسلة int firstIndex = linkedlist.indexOf("Rock"); System.out.println("First Occurrence: " + firstIndex); //العثور على آخر تكرار للعنصر في السلسلة int lastIndex = linkedlist.lastIndexOf("Rock"); System.out.println("Last Occurrence: " + lastIndex); } } بالنسبة لآخر سؤال قمتِ بطرحه ، من أجل أن نحصل على قيم الخلية (كل منها على حدا) ، اعلمي بأن كل Node أو خلية هي في الحقيقة Object وأن ال Object له attributes أو خصائص بالتالي الخلية التي هي الكائن Point لها اثنتان من الخصائص هما x و y ولكي نحصل على قيمة كل منهما على حدا ، نقوم بتعريف كائن من الكلاس Point ونحصل على قيم الخصائص منه مباشرة أي : Point p = new Point(); System.out.print(p.x);//print x value System.out.print(p.y);//print y value
  6. using System; public class Program { public static void Main() { double[] marks = new double[10];// إنشاء مصفوفة لتخزين درجات 10 طلاب Console.WriteLine("Enter 10 marks : "); /*إدخال درجات 10 طلاب من لوحة المفاتيح*/ for(int i=0;i<marks.Length;i++) { marks[i]=Double.Parse(Console.ReadLine()); } /*طباعة درجات الطلاب المدخلة من لوحة المفاتيح*/ for(int i=0;i<marks.Length;i++) { Console.WriteLine(marks[i]+"\n"); } double sum = 0 ;//تعريف متحول لتخزين مجموع درجات الطلاب double avg; // تعريف متحول لتخزين المتوسط الحسابي لدرجات الطلاب /*حساب مجموع درجات الطلاب*/ for(int i=0;i<marks.Length;i++) { sum+=marks[i]; } avg = sum / 10; // حسابالمتوسط الحسابي لدرجات الطلاب Console.WriteLine("average = "+avg);//طباعة المتوسط الحسابي لدرجات الطلاب double max=0;//تعريف متحول لتخزين أعلى درجة /*حساب أعلى درجة*/ for(int i=0 ; i<marks.Length;i++) { if(marks[i]>max) { max = marks[i]; } } Console.WriteLine("Max = " + max);//طباعة أعلى درجة double min=100;//تعريف متحول لتخزين أدنى درجة /* حساب أدنى درجة */ for(int i=0;i<marks.Length;i++) { if(marks[i]<min) { min=marks[i]; } } Console.WriteLine("Min = "+min);//طباعة أدنى درجة } }
  7. طريقة استخدام ال jQuery Plugin السابق: 1- قم بتضمين مكتبة ال jQuery في قسم ال head من صفحة الويب خاصتك على الشكل التالي <script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.11.0/jquery.min.js"></script> 2- قم بتحميل وتضمين مكتبة الجافاسكريبت الخاصة بال Calenders في قسم ال head من صفحتك <script type="text/javascript" src="js/jquery.calendars.js"></script> <script type="text/javascript" src="js/jquery.calendars.plus.js"></script> 3- قم بتحميل وتضمين jQuery Calendars Datepicker الخاصة بال CSS و ال JS في قسم ال head من صفحتك <link rel="stylesheet" type="text/css" href="css/jquery.calendars.picker.css"> <script type="text/javascript" src="js/jquery.plugin.js"></script> <script type="text/javascript" src="js/jquery.calendars.picker.js"></script> 4- قم بربط وظيفة التقويم (calender) بحقل إدخال أو div أو span $(selector).calendarsPicker(); - كما يمكنك إضافة إعدادت مخصصة كجزء من العملية على الشكل التالي $(selector).calendarsPicker({calendar: $.calendars.instance('persian')}); - لمزيد من التفاصيل ، قم بزيارة الصفحة documentation reference
  8. ()substr_replace : يستبدل جزء من السلسلة المحرفية (string) بشيء آخر <?php // substr_replace() تستبدل جزء من السلسلة المحرفية بشيء آخر $mystring = "The quick brown fox jumps over the lazy dog";//السلسلة المحرفية المراد تطبيق عملية الاستبدال فيها /* ابدأ من المحرف ذو الفهرس 16 وبطول 3 محارف ستتشكل لديك سلسلة من 3 محارف قم باستبدالها بالكلمة cat */ echo substr_replace($mystring,"cat",16,3) , "</br>";//The quick brown cat jumps over the lazy dog ()str_replace : يستبدل تكرارات جزء من سلسلة بقيمة أخرى <?php // str_replace() يستبدل تكرارات جزء من السلسلة بقيمة أخرى $mystring = "The quick brown fox jumps over the lazy dog";//السلسلة المحرفية المراد تطبيق عملية الاستبدال عليها echo str_replace("dog","rat",$mystring);//The quick brown fox jumps over the lazy rat لاحظ في الكود السابق أنه تم استبدال السلسلة "dog" بالسلسلة "rat" في السلسلة mystring$
  9. اختيارك للغة يعتمد على احتياجاتك ، فمثلاً إذا كان عدد المستخدمين الذين يزروون موقعك (في نفس الوقت) بالآلاف عندئذ عليك أن تكون حذراً في اختيارك. تحتوي لغة PHP على عدد كبير من أطر عمل CMS المتاحة. كما يوجد أطر عمل للغة Python. بالنسبة للغة Ruby أعتقد أنك ستكون أكثر محدودية قليلاً (لسبب بسيط هو أن اللغة أحدث). ضع في اعتبارك أيضًا اللغة التي يُرجح أن تجد فيها إجابات بسرعة أكبر إذا كانت حصلت معك مشاكل أثناء البرمجة. من جانب PHP ، فإن أشهر أنظمة إدارة المحتوى هي Wordpress و Drupal و Joomla ، ومعظمها يحتوي على الكثير من الإضافات (Plugins) ، ويمكنك برمجة plugins جديدة بسهولة في بضعة أيام من الصبر ومتابعة البرامج التعليمية. طبعاً يوجد أنظمة إدارة محتوى أخرى جيدة وبنفس الجودة ولكن التمسك بالشائع منها يزيد من احتمالية إيجادك للدعم بسرعة وأن تجد ال plugin التي أنت بحاجتها. إليك أيضًا أطر عمل مثل إطار Zend ، وكذلك Cake PHP و Yii و Laravel والتي تساعدك على إنشاء تطبيق من الصفر بشكل أسرع باتباع مجموعة من القواعد والمعايير. وبالمثل بالنسبة لـ Python ، يوجد إطار عمل Django على الويب ، والذي يمنحك مجموعة أدوات جيدة. بالنسبة إلى Ruby ، فإن الإطار الأساسي هو Rails ، مما يساعدك على إنشاء تطبيق ويب 'scaffold' (أي الهيكل العظمي -skeleton-) لكيانات البيانات الخاصة بك بسرعة بحيث يمكنك التركيز على الوظائف الخاصة بدلاً من الاستعلام المعتاد / حشر / تحديث / حذف الأشياء. في النهاية ، أنصحك بلغة PHP كون 78.9% من المواقع على شبكة الانترنت تمت برمجتها باستخدام هذه اللغة ناهيك عن أن أشهر نظام إدارة محتوى (Wordpress) تمت برمجته بال PHP ويوجد على اليوتيوب العديد من الكورسات منها كورس للأستاذ أسامة الزيرو الغني عن التعريف
  10. قم باستخدام الأداة pageSpeed من غوغل أو الأداة Yslow من ياهو (كإضافة إلى المتصفح) من أجل عرض كل المقترحات اللازمة لجعل موقعك أسرع. على سبيل المثال: هذه هي قائمة من المقترحات الجيدة والتي تم فحصها من قبل Yslow في إحدى مواقع الويب تقليل عدد طلبات HTTP استخدام (CDN (Content Delivery Network تجنب src أو href الفارغة قم بإضافة انتهاء صلاحية أو Cache-Control Header مكونات Gzip قم باستدعاء ملفات ال CSS في الأعلى قم باستدعاء ملفات ال JS في الأسفل ضع أكواد ال CSS و ال JS في ملفات منفصلة خارجية تقليل عمليات البحث في ال DNS تقليل أحجام ملفات ال CSS وال JS قدر الإمكان تجنب عمليات إعادة التوجيه حذف ال scripts المكررة جعل ال ajax قابلاً للتخزين المؤقت (Cacheable) استخدام ال GET في طلبات ال AJAX تقليل عدد عناصر ال DOM تقليل حجم ال Cookie تجنب المرشحات (Filters) عدم تحجيم الصور بواسطة ال HTML وإنما بواسطة ال CSS جعل الملف favicon.ico صغيراً وقابلاً للتخزين المؤقت (Cacheable) أيضًا ، لا توجد مزايا أو عيوب لاستخدام النطاق الفرعي (subdomain) للسرعة ... ولكن ، يمكن أن يكون هذا ميزة أو عيب لـ SEO ، ولكن هذا ليس سؤالك ... المصدر : stackoverflow
  11. من الصعب الإجابة عن هذا السؤال نظرياً. يجب أن تكون Java أسرع لأنه يتم تجميعها مسبقًا (precompiled) ، أي خوارزمية بسيطة ستعمل بشكل أسرع في Java من PHP ، لقد كان هناك قدر كبير من العمل المنجز لتحسين Java من خلال تحسين الكود والمكتبات القياسية ومترجمي JIT ، إلخ. يتم تحميل PHP وتفسيره في كل مرة إذا كنت لا تستخدم محسّن Zend ، يتم تهيئة الكائنات في كل عملية تنفيذ ، حتى أكثر متغيرات السلسلة (string) بساطة هي في الواقع كائن معقد مع العديد من التوابع الداعمة تكمن المشكلة في أنه من الناحية العملية ، يبدو أن مواقع PHP تعمل بشكل أسرع مستخدمةً موارد أقل.أعتقد أن هذا يرجع إلى أن مطوري PHP يتخذون نهجًا أكثر وضوحًا في التصميم ولا يضيعون موارداً في محاولة تنفيذ أنماط تصميم غريبة وتنفيذ تجريد لا فائدة منه المصدر : stackoverflow
  12. سيتم سؤالك عن عدة أمور منها مثلاً : ما مدى خبرتك في هذا المجال؟ هل يوجد لديك أعمال ونماذج سابقة؟ ما أهم البرامج التي تحترف العمل عليها؟ ما مدى إمكانية التعديل على العمل؟ مالذي يميزك عن المصممين الآخرين؟ هل قمت برسم وتصميم الهوية البصرية أم اعتمدت على شئ جاهز ؟ هل لديك مرونة فى التعامل مع العميل ولباقة فى كسب العميل للحصول على العمل؟
  13. سؤال جيد !! أعتقد أنه من الإنصاف أن نقول بأن لديك بالفعل ثلاثة خيارات: استخدام ال Firebase استخدام سيرفر Parse المفتوح المصدر (هذا الخيار يتضاءل) أن تقوم بكتابة أكواد ال back-end بنفسك يمكننا أن نفترض بشكل معقول أنك تبحث عن أداة تم إنجازها من أجلك ، لذلك لا يبدو منطقياً أن تقوم بكتابة أكواد ال back-end بنفسك لأن ذلك له عواقب وخيمة على اختيارك. بمقارنة Firebase و Parse Server ، يصبح الاختيار واضحًا إذا كنت تفكر في راحة البال. إن Firebase عالي المستوى ، ويدمج تقريبًا أي شيء يمكنك التفكير فيه من Android إلى مكونات iOS UI مثل table views و collection views. علاوةً على ذلك ، فإن التحديثات التي طرأت على ال Firebase جعلته يصبح نظاماً أساسياً شاملاً يتضمن منتجات مثل الإشعارات والاختبارات وتقارير الأعطال وغيرها. Parse Server مفتوح المصدر ويعمل على عدد من المنصات التي تم إنجازها لك مثل Heroku و Beanstalk و Azure. إنه بسعر معقول ، ويتضمن خيارات تحجيم بسيطة ولكنها فعالة. لا يزال Parse "الأصلي" كما هو ، مما يعني أن الخدمة ستنتهي في عام 2017 ولكن حزم SDK لنظام Android و Swift و PHP وما إلى ذلك لا تزال تعمل بكامل طاقتها. يتكامل Parse Server مع OneSignal للإشعارات ، ومع Amazon S3 لتخزين الملفات. إذا أردنا أن نقوم بعدّ ميزات Parse Server فمن المؤكد أنه يعتبر منافساً ل Firebase ، على الرغم من أن Parse Server يحتاج إلى المزيد من ضبط الإعدادات ولكنها ليست معقدة للغاية. فلماذا تقوم بكتابة كود ال back-end للتطبيق الخاص بك في النهاية؟حسنًا ... بطريقة ما ، نحن جميعًا حريصون جدًا على نسيان Facebook الذي قتل Parse عندما اعتمد عليه أكثر من نصف مليون صانع تطبيقات. يتم تشغيل Firebase بواسطة Google ، وتربح Google كل أموالها تقريبًا من خلال الإعلانات. تتخذ Google خطوة رائعة من خلال إنشاء مثل هذه المنصة الجذابة والشاملة لصانعي التطبيقات ، ولكن دعنا نسأل لماذا تفعل Google ذلك. لماذا؟ ربما ، إذا كانت 90٪ من عائدات Google تأتي من الإعلانات ، فإنها تبحث عن طريقة لجعل اختيار AdMob أمرًا لا يفكر فيه صانعو التطبيقات! إذا كان تطبيقك بالكامل يعتمد على Firebase و Google ، فلماذا لا تستثمره باستخدام AdMob؟ إنه محرك البحث! المزيد من عمليات البحث بين التطبيقات باستخدام نظامهم الأساسي يعني المزيد من الإعلانات السياقية على Google SERPs. وقيل بشكل مختلف: إذا كانت Google غير راضية عن أداء Firebase ، فسوف تقتلها ، تمامًا كما فعل Facebook مع Parse. قد يؤدي استخدام Parse Server إلى بعض المشاكل ، ولكن عندما بدأت في إنشاء تطبيقات في عام 2009 ، لم يكن هناك منتج يؤدي لك وظيفة ال back-end علاوة على ذلك ، يجب أن تتعلم كيف تعمل هذه الback-ends وكيف يمكنك التأكد من توافق تطبيقك مع خدمات متعددة. لذا ، في الختام: لا ترتكب الخطأ الذي ارتكبه أي شخص آخر. من الرائع الاعتماد على Firebase ، أو على Parse Server ، أو على أي نظام أساسي آخر. ولكن من فضلك ... تأكد من أنك تعرف ما الذي تعمل معه ، وكيف يمكنك استبداله إذا استدعى الأمر. المصدر : Quora بالنسبة لسؤالك 'هل أستطيع تثبيت فايربيس على أمازون ويب سيرفرس؟' فسؤالك عزيزي ليس منطقياً لأن كلاً من Firebase و AWS يمثل Back-end System لموقعك أو لتطبيقك.
  14. أعتقد أن أفضل موقع لتعلم أساسيات قواعد البيانات هو w3schools فهو يساعدك على تجربة أوامر ال SQL مباشرة على قاعدة بيانات وجداول موجودة على الموقع الشيء الذي يجعلك تحظى بفهم أعمق وأوضح للغة ، قم بزيارة هذا الرابط w3schools - SQL Test وقم بتجربة كل تعليمة تتعلمها في ال SQL مباشرةً
  15. يوجد العديد من المكتبات في لغة php والتي تمكنك من التعامل مع الصور ومنها: 1- Imagine مكتبة معالجة الصور هذه هي مكتبة PHP موجهة للكائنات مبنية في PHP 5.3. باستخدام هذه المكتبة ، يمكنك العمل بسهولة على الصور مثل الاقتصاص وتغيير الحجم وإضافة الفلاتر (أو المرشحات). من أجل إنتاج كود RGB ونسبة شفافية للكائن ، تتكون هذه المكتبة من كلاس اللون مع وسيطتين في مشيدها. 2- Php Graphic Works تم إنشاء هذه المكتبة للقيام بمعالجة الصور على جانب الخادم. يمكنك باستخدام هذه المكتبة إجراء معالجة معقدة للصور بطريقة سهلة. يمكنك القيام بذلك باستخدام مجموعة من التعليمات البرمجية. تتضمن العمليات التي يمكن إجراؤها على الصورة التدوير ، والاقتصاص ، وتغيير الحجم ، والتمدد ، والتقليب. 3- Zabra Image تعتبر مكتبة معالجة صور خفيفة وموجهة للكائنات مبنية بلغة PHP ، تدعم هذه المكتبة الصور من النوع JPG أو PNG أو GIF . كما تمتلك هذه المكتبة إمكانية التحويل من تنسيق إلى تنسيق آخر (مثلاً يمكنك بواستطها تحويل صورة JPG إلى صورة PNG) 4- Dynamic Dummy Image Generator يمكنك من خلال هذه المكتبة المجانية أن تقوم بإنشاء صور بأي حجم ولون ، كما يمكنك أيضاً كتابة نص فوق الصور. 5- Image Cache يفيدك كلاس ال PHP هذا في نقل الصورة وضغطها وتخزينها بشكل مؤقت في المتصفح (caching) ثم تُرجع المصدر الجديد للصورة الذي ستتم كتابته داخل ال image tag ، يمكنك استخدام هذه المكتبة من خلال إضافة خيارت متنوعة مثل ال Base URL و اسم المجلد .. إلخ
  16. 1- الدالة (أو التابع) من النوع void public void printString(String str) { System.out.println(str); } نوع الإرجاع "void" في التابع يعني بأن هذا التابع لا يحتوي على نوع إرجاع (return type) ، في الواقع هو لا يحتاج إليه لأنه يقوم بطباعة السلسلة المحرفية مباشرة على دفق خرج النظام (System's output stream) ، يمكن استخدام هذا النوع مثلاً في عرض رسائل خاصة للبرنامج على ال(console) في وقت التنفيذ (run time). 2- الدالة(أو التابع) من النوع return public String stringMethod(String str) { return str; } في هذا النوع يتم إرجاع سلسلة محرفية ، هذا يعني أنه يمكنك استخدام القيمة التي تم إرجاعها في الأكواد البرمجية خاصتك وبالتالي إضافة المزيد من المرونة والمعالجة إلى أكوادك وأعتقد بأن ال "getters" هي خير مثال على هذا النوع من التوابع فهي تقوم بإرجاع قيم حقل كائن. لنأخذ على سبيل المثال الكائن Person في الكود التالي: import java.lang.String; public class Person { private String name; private String surename; private int age; public Person(String name, String surename, int age) { this.name = name; this.surename = surename; this.age = age; } public String getName() { return name; } public void setName(String name) { this.name = name; } public String toString() { return "Person: " + surename + ", " + name + ". Age: " + age; } public void printPerson() { System.out.println(this.toString()); } } لاحظ كيف أن التابع ()printPerson يستخدم القيمة المعادة من التابع ()toString لطباعة النتيجة في دفق الإخراج (output stream) - الفرق بين return 0 و return 50 واضح ، وهو أن الأولى ترجع القيمة 0 (نوع القيمة المعادة هي عدد صحيح وقيمته 0) والثانية ترجع القيمة 50 (نوع القيمة المعادة هي عدد صحيح وقيمته 50)
  17. إذا أردت أن تجعل موقعك متجاوب مع جميع الشاشات فأنصحك باستخدام إحدى المكتبات التي توفر عليك الوقت والجهد مثل Bootstrap , Foundation , Skeleton طبعاً أشهرهم هي Bootstrap وإذا أردت أن تقوم بذلك بشكل يدوي فتعليمة media@ في ال CSS هي المسؤولة عن جعل موقعك متجاوباً وليست position ، لتتعرف على هذه التعليمة (تعليمة media@) قم بزيارة هذا الرابط w3schools - media queries وبالنسبة لسؤالك عن الفرق بين fixed و relative و static و absolute قم بمشاهدة هذا الفيديو ففيه كل ما تريده
  18. سأورد عليك مثالاً يوضح لك كيفية استخدام Google Maps مع Laravel عن طريق استخدام الحزمة farhanwazir/laravelgooglemaps ، توفر هذه الحزمة خدمات مختلفة مثل الاتجاهات والأقاليم وعناصر التحكم وما إلى ذلك إذا كنت تريد معرفة المزيد حول هذه الخدمة قم بزيارة الرابط التالي Github مثال يوضح كيفية استخدام Google Maps مع Laravel 1- قم بتحميل مشروع لارافل جديد عن طريق التعليمة التالية : composer create-project --prefer-dist laravel/laravel googlemapsapi 2- قم بتحميل حزمة GOOGLEMAPS إلى مشروعك : composer require farhanwazir/laravelgooglemaps:dev-master - أضف service provider إلى الملف config/app.php 'GMaps' => FarhanWazir\GoogleMaps\Facades\GMapsFacade::class, - الآن قم بنشر ملف الإعدادات php artisan vendor:publish --provider="FarhanWazir\GoogleMaps\GMapsServiceProvider" 3- قم بضبط إعدادات قاعدة البيانات DB_CONNECTION=mysql DB_HOST=127.0.0.1 DB_PORT=3306 DB_DATABASE=googlemap DB_USERNAME=root DB_PASSWORD= 4- قم بإنشاء Controller واحد php artisan make:controller MapController التعليمة السابقة ستقوم بإنشاء controller يحمل الاسم MapController.php - قم بإضافة البارامترات التالية center, zoom,height إلى التابع ()map على الشكل التالي use FarhanWazir\GoogleMaps\GMaps; public function map() { $config['center'] = 'Sydney Airport,Sydney'; $config['zoom'] = '14'; $config['map_height'] = '400px'; $gmap = new GMaps(); $gmap->initialize($config); $map = $gmap->create_map(); return view('map',compact('map')); } الآن أصبح بإمكاننا أن نمرر ال map إلى ال view 5- إنشاء ملف view قم بإنشاء ملف view في المسار التالي resources >> views >> map.blade.php وقم بوضع الكود التالي فيه ، بعد ذلك يمكننا إضافة HTML و Javascript <html> <head> <title>Laravel Google Maps Example</title> {!! $map['js'] !!} </head> <body> <div class="container"> {!! $map['html'] !!} </div> </body> </html> 6- تعريف مسار كما تعلم كل المسارات تكون في الملف web.php Route::get('googlemap', 'MapController@map'); Route::get('googlemap/direction', 'MapController@direction'); - الآن قم بالحفظ ومن ثم نفذ التعليمة التالية في ال terminal لتشغيل السيرفر php artisan serve الآن سترى الصورة الناتجة التالية :
  19. إذا كنت تملك المقدرة على تطوير جهازك ورفع قيمة ال RAM أو شراء جهاز جديد بمواصفات ممتازة فأنصحك باستخدام Android Studio أما إذا لم تكن تمتلك المقدرة على ذلك ولا تستطيع تحمل تلك التكاليف فأنصحك باستخدام Eclipse وإليك بعض الاختلافات بين Android Studio و Eclipse : 1- واجهة المستخدم : إن eclipse بخلاف android studio ليس بيئة التطوير الأصلية للأندرويد (هو في الأساس بيئة تطوير للجافا) وإنما تمت إضافة الأندرويد له كإضافة (plugin) وبالتالي ليس مستغرباً أن يكون التصميم العام للواجهة (الأزرار وقوائم التنقل وغيرها ..) أكثر تعقيداً من تصميم android studio لذا سيجد مطورو تطبيقات الأندرويد ال android studio أسهل وأسرع. 2- ميزة الإكمال التلقائي للكود : كلاهما يوفر ميزة الإكمال التلقائي لكود الجافا المستخدم في صناعة تطيبقات الأندرويد 3- متطلبات النظام : إن android studio بالمقارنة مع eclipse أكبر بكثير ، يتطلب مساحة أكبر من ال RAM وسرعة CPU عالية إلى حد ما للعمل بشكل صحيح وخصوصاً عند تصدير ملفات ال apk ، ويمكن القول أن eclipse يغنيك عن رفع مستوى أداء جهازك وتحمل تكاليف أنت في غنى عنها إذا كنت ترغب في الاعتماد عليه في برمجة تطبيقات الأندرويد
  20. 1- إضافة زر button في javafx : //زر بدون عنوان Button button1 = new Button(); //زر مع عنوان نصي Button button2 = new Button("Accept"); //زر مع عنوان نصي محدد وأيقونة Image imageOk = new Image(getClass().getResourceAsStream("ok.png")); Button button3 = new Button("Accept", new ImageView(imageOk)); 2- إضافة مؤثر إلى الزر (مؤثر ظل على سبيل المثال): DropShadow shadow = new DropShadow(); //إضافة مؤثر الظل عند دخول مؤشر الفأرة على الزر button3.addEventHandler(MouseEvent.MOUSE_ENTERED, new EventHandler<MouseEvent>() { @Override public void handle(MouseEvent e) { button3.setEffect(shadow); } }); //حذف الظل عند خروج مؤشر الفأرة عن الزر button3.addEventHandler(MouseEvent.MOUSE_EXITED, new EventHandler<MouseEvent>() { @Override public void handle(MouseEvent e) { button3.setEffect(null); } }); 3- عند النقر على الزر يتم النقل إلى واجهة أخرى : try { FXMLLoader fxmlLoader = new FXMLLoader(getClass().getResource("Demo.fxml")); Parent root1 = (Parent) fxmlLoader.load(); Stage stage = new Stage(); stage.initModality(Modality.APPLICATION_MODAL); stage.initStyle(StageStyle.UNDECORATED); stage.setTitle("ABC"); stage.setScene(new Scene(root1)); stage.show(); }
  21. إليكَ بعضاً من خصائص ومميزات لغة #C : 1 – مناسبةٌ للمبتدئين: لأنها لغةٌ بسيطةٌ وسهلةُ الاسِتخدام، ولأنَّها تُعتبرُ لغةً عاليةُ المُستوى High Level Language، فيمكنُ للإنسانِ الذي يُتقنُ اللغةَ الإنجليزية، فهمَ مُعظمِ مصطلحاتها، لأنها تُوفِرُ كلماتٍ مَحْجوزةٍ مَفهومة، تَضعُها بينَ يَديكَ لأداءِ إجراءاتٍ معينة، ثمَّ تُحوِلُها إلى لُغةٍ وسيطة Intermediate Language، ثمَّ إلى لغةِ الآلة Machine Language، فكلُ كلمةٍ مِن كلماتِ لغةِ السي شارب، يُقابِلها عَشراتُ الجُملِ في لغةِ الألة، مما يَدَعُكَ تُركِزُ على فِكرةِ تطبيقك، ولا تقلقُ بِشأنِ الإجراءات المُعَقدَةِ تلك، فمثلاً استِخدامُكَ للكلِمَةِ المَحجوزَةِ Write، يُخِبر الحاسوبَ بِأنْ يَقومَ بِطِباعَةِ جُملةٍ على الشاشة، فنحنُ هنا لا نَهتمُّ أبداً كيفَ قامَ بالطباعة، بلْ نَهتمُ أنَّهُ قامَ بِذلكَ فقط، الأمرُ الذي إن حاولتَ كتابتَهُ بِلُغَةِ الألة، قَدْ يَستغرقُ مِنكَ عَشراتِ الجمل، فضلاً عَنِ الوَقتِ المهدور. 2 – تَزيدُ مِن إنتاجيَتِك : لأنَّها لُغَةٌ تَعتمِدُ على نِظامِ الكِتابَةِ Static Type، فإمكانيةُ اكتشافِ الأخطاءِ في تَطبيقكَ قَبلَ بناءه، تَسهلُ عليكَ تتبُعَها وتَبسيطَها لحَلِها لاحقاً، بالإضافةِ إلى أنَّ لُغَةَ السي شارب، تَفرُضُ عليكَ قواعِدَ مُعينةً لكتابَةِ الأسطرِ البرمجية، مما يجعلُ برنامَجَكَ سَهْلَ الصيانةِ وذو مُرونةٍ عالية. 3 – عددُ مُستخدميها كبير : فتِعدادُ مستخدمي اللغةِ مِن أهمِّ عَواملِ قُوتِها، فكُلما زادَ عَددُ مُستخدميها زادَ غِناها وتَنَوعِها، وسَتُدرِكُ قيمةَ ذلكَ إنْ تَخصَّصْتَ في تَطويرِ التطبيقات، خصوصاً إنْ واجهتكَ مُشكلةٌ ولمْ تَستطعْ حَلها، فلو قُمتَ بالبَحثِ عَنها سَتجدُ أنَّها قَدْ طُرحَتْ سابقاً، وأنهُ تمَّ الإجابةُ عنها أيضاً، بالإضافةِ إلى أنَّكَ سَتجدُ أدواتٍ تَمَّ كِتابتُها بواسِطةِ مُطورين، قاموا ببنائِها لتُسهلَ عليك عَمَلكَ وتَزيدُ مِنْ إنتاجِيَتِكَ بِشكلٍ أفضل. وبما أنَّ لغةَ السي شارب من تطويرِ مايكروسوفت فإنَّ عَدَدَ مُستخدميها كبير، وهنا بَعضُ الشركاتِ الكبيرةِ، Blizzard , Starbucks، التي تَستخدمُ هذِهِ اللغةُ بشكلٍ أساسيٍ في مُعظمِ تطبيقاتها 4 – اللغةُ الأساسيةُ في مُحركِ الألعاب Unity: بالإضافةِ إلى أنَّ لغةَ السي شارب، هيَ اللغةُ الأساسيةُ في مُحركِ الألعاب Unity، وهوَ مِنْ أكثرِ مُحركاتِ الألعابِ رَواجاً في الوقتِ الحالي، ويُمكنكَ بواسطتِهِ تَطويرَ ألعابٍ للعديدِ مِنَ المِنَصَّات، وسَيكونُ المُحركَ المُعتمدَ بِشكلٍ أساسيٍ في مِنَصةِ طورني، حَيثُ سَيتمُ البدءُ بسِلسِلةِ دُروسٍ لهُ فورَ انتهاءِ هَذهِ السِلسِلةِ إن شاءَ الله. لذلك، إنْ كُنتَ تَنوي امتهانَ مَجالِ تَطويرِ التطبيقات، أو حتى لم تكن تنوي ذلك، فتعلُمُ تطويرِ التطبيقاتِ يُنمي مَهاراتٍ عَديدةً لديك. وهنا نأتي إلى سؤالكً الذي قمت بطرحه ، والحقيقةُ أنَّ الإجابةَ على هذا السؤالِ يَتطلبُ مُحاضرةً كاملةً لوحدها، ولكنْ يُمكننا القَولُ إنَّ لُغَةَ السي ++، تُعتبرُ أسرعُ مِنْ لغَةُ السي شارب لأنَها أقربُ إلى لُغةِ الألة، لكنَّكَ لنْ تَشعُرَ بِهذا الفَرْق، إلا إذا كانَ تطبيقُكَ يتعاملُ بشكلٍ أساسي، بإظهارِ صُورٍ ثُلاثيةِ الأبْعادِ أو يقومُ بمُعادلاتٍ رياضِيَةٍ مُعقدة، بالمقابلْ فإنَّ لغةَ السي شاربْ تَحتوي على العديدِ مِنَ الميزات، التي لا تتواجدُ في السي ++ ، ناهيكَ عَنْ أنها أقربُ صيغةً للُغَةِ الإنسان، ويمكنُ اختصارُ السابقِ بمُقارنتكَ لسيارةٍ مِنْ طِرازِ (ألف وتسعمئة وثمانون) 1980، بسيارةٍ حديثةٍ من طرازِ (ألفين وسبعة عشر) 2017، هل يُمكنكَ تَخيُلُ الفرقِ الآن؟ ليس بعد؟ حسناً . أُطلبْ مِنْ صَديقٍ لكَ يَعيشُ في دُولِ الخليج، أنْ يَشرحَ فَائدةَ المُبرِّدِ المَوجودِ في إحدى السيارتين .
  22. الرجاء التواصل مع مركز الدعم للإجابة عن استفسارك ، قم بزيارة الرابط التالي : مركز المساعدة والدعم - حسوب
  23. ابدأ بكتاب الإكسير فهو يعتبر أفضل مرجع عربي للغة ++C ، حيث أن من يقرؤه سيصبح له أساس ممتاز في لغة ++C ويستطيع أن يعتمد على هذا الأساس ليصبح مبرمج محترف في لغة السي بلس بلس ، حيث بدأ مؤلف هذا الكتاب بأكود بسيطة لسهولة تعلمها بالنسبة للمبتدئ . الكتاب عملي أكثر من كونه نظري فهذا هو الجانب المشرق في الكتاب حيث في بدايته يجعلك تكتب كود ويشرح لك تفاصيله بكل صراحة الكتاب يفوق كل التوقعات مقارنة بالجهود العربية في هذا المجال. مؤلف هذا الكتاب هو المهندس سلطان محمد الثبيتي، ويبدأ بالحديث عن أساسيات لغة ال++c والتي لابد من معرفتها قبل البدء، ثم ينتقل للحديث عن بنى التحكم والمتغيرات وحالات if ثم يتناول المصفوفات والسلاسل، والمؤشرات، والتوابع . ويتناول كذلك البرمجة الكائنية وصناعة أنواع البيانات بأشكالها المختلفة والقوائم المترابطة والتعامل مع الاستثناءات، والملفات، ويستعرض لنا مكتبة القوالب القياسية، والخوارزميات. وهذا هو الكتاب الإكسير.pdf
  24. قم بإغلاق XCode و Terminal مرة واحدة ثم أعد تشغيل Terminal. تأكد من تحديد المسار إلى مجلد المشروع فقط. بعد أن تقوم باستدعاء cd /Users/YOUR_USER_NAME/Desktop/PROJECT_NAME ، قم باستدعاء الأمر ls~ وتحقق مما إذا كانت قائمة الملف تحتوي على PROJECT_NAME.xcodeproj ، إذا كان هذا الملف متاحاً هذا يعني أنه يمكنك إعداد pod init وإلا فإنه يجب عليك الانتقال إلى المستوى التالي والعثور على PROJECT_NAME.xcodeproj
  25. أنصحك بمشاهدة هذا الفيديو Intro To Service Workers & Caching
×
×
  • أضف...