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

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

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

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

السُّمعة بالموقع

0 Neutral
  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 و اسم المجلد .. إلخ