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

Wael Aljamal

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

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

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

  • عدد الأيام التي تصدر بها

    218

كل منشورات العضو Wael Aljamal

  1. صحيح, لكنه يستعمل تطبيق على الهاتف ربما لا يوفر له مسار مطلق تأكد من أن التطبيق الذي تشغل عليه جافا يدعم تنفيذ هذه المكتبات في بيئة أندرويد
  2. ملاحظات عامة: البرمجة المتوازية هي تشغيل عدة برامج في نفس الوقت (Process or threads) ,وبدرجة أعلى تشغيل نفس البرنامج بشكل متواز و تقسيم العمل على عدة مسالك برمجية في أنظمة التشغيل كل برنامج يقوم بإنشاء Process خاصة به للقيام بالعمليات البرمجية. نستخدم عدة Processes في النظام الحاسوبي لكي نستطيع تقسيم الوقت و الموارد بين البرامج المختلفة بشكل مناسب. كل Process يمكن أن يكون لديها sub process أي عملية ابن لها يتحكم الأب فيه عن طريق إشارت تحكم (ويرسل الابن اشارات تحكم أيضا) Pool: يوزع المجمع المهام على المعالجات المتاحة باستخدام جدولة FIFO (نظام الرتل). إنه يعمل مثل بنية map-reduce. يقوم بتعيين المدخلات إلى المعالجات المختلفة ويجمع المخرجات من جميع المعالجات (تنسيق عملية البرمجة المتوازية بين عدة Processes). العملية Process هي مثال على البرنامج (مثل دفتر Notepad، مترجم Python). تنشيئ العمليات المسالك (threads)(العمليات الفرعية) للتعامل مع المهام الفرعية مثل قراءة ضغطات المفاتيح ، وتحميل صفحات HTML ، وحفظ الملفات. المسالك تعيش داخل العمليات وتشترك في نفس مساحة الذاكرة. #!/usr/bin/env python3 from multiprocessing import Pool // تضمين المكتبة الخاصة بالبرمجة المتعددة أي المتوازية def run(task): # Do something with task here print("Handling {}".format(task)) // Handling task1 طباعة اسم العملية مثل if __name__ == "__main__": tasks = ['task1', 'task2', 'task3'] // تهيئة البرامج للتشغيل مع اسما افتراضية # Create a pool of specific number of CPUs p = Pool(len(tasks)) // إنشاء عدة معالجات بعدد العمليات المطلوبة # Start each task within the pool p.map(run, tasks) // لكل واحدة من هذه المهمات لكي يقوم بتنفيذهم (process handler) معالج الطلبات run إسناد التابع # الجزء الثاني: walk() في بيثون؟ walk() قم بإنشاء أسماء الملفات في شجرة الدليل عن طريق السير في الشجرة إما من أعلى إلى أسفل أو من أسفل إلى أعلى. لكل دليل في الشجرة جذر Root في أعلى الدليل (بما في ذلك الجزء العلوي نفسه) ، فإنه ينتج 3 متغيرات (المسارات و أسماء المجلدات و أسماء الملفات) (dirpath ، dirnames ، filenames). الجذر: يطبع الدلائل فقط مما حددته. الكود الثاني يقوم بإنشاء دليل للملفات و المجلدات التي جذرها هو src لنسخ الملفات من المصدر src إلى الوجهة dest بطريقة متوازية ( متزامنة عودية لكي لا يحدث خطأ في المسارات rsync) rsync: remote sync (المزامنة عن بُعد) هي أداة مساعدة لنقل ومزامنة الملفات بكفاءة بين الكمبيوتر ووحدة تخزين خارجية
  3. إضافة لشرح زملائي المدربين في حال لم يتم تطبيق فكرتك 100% لنفرض لديك مجموعة الأعداد (4,5,6) وتريد في كل مرة اختيار عدد منهم مختلف و عدم تكرار الاختيار حتى انتهاء المجموعة. قم بتعريف مصفوفة Array تحوي العناصر التي تريد الإختيار منها, تابع التهيئة, تابع اختيار رقم عشوائي من المصفوفة, تابع اختيار صورة. var arr; // مجموعة الأعداد التي ستختار منها عشوائيا // تابع التهيئة الذي يسند القيم للمصفوفة function initialize(n,m) { // التهيئة بإضافة أعداد محددة برمجيا للمجموعة if (m > n) [a, b] = [b, a]; // تبديل قيم المتحولين للتأكد من بداية و نهاية المجال لتعمل الحلقة بطريقة صحيحة for (let i=n; i<=m ; i++){ arr.push(i); // إضافة العناصر للمصفوفة } } // تابع اختيار رقم عشوائي من المصفوفة function randomInteger() { // نختار عدد بين 1 و عدد عناصر المصفوفة ثم نطرح منه 1 لنحصل على دليل العنصر return Math.ceil(Math.random() * arr.length) -1; } // التابع الذي سيختار رقم الصورة التي سوف نعرضها function choose() { if (arr.length == 0) // في حال كانت المصفوفة فارغة نقوم بتهيئتها initialize(4,6); let x = randomInteger(); // اختيار دليل عنصر عشوائي ضمن المصفوفة arr.splice(x, 1); // حذف عنصر ذو دليل محدد من المصفوفة return arr[x]; // نعيد رقم الصورة التي سوف نعرضها } قم بتعريف ال HTML و CSS و jQuery كما قام به المدرب عبود سمير
  4. حاول مايلي: تأكد من أن المسار يكون كله حروف انكليزية و لاتضع فراغات شغل برنامج التثبيت عن طريق إعطائه صلاحيات الأدمن Administrator
  5. هو مصطلح يدل على مدى التعقيد الزمني الذي يتطلبه تنفيذ الحلقة Time Complexity مثال بسيط" if statements are usually of O(1) complexity => فإن تنفيذ الشرط يتطلب فقط وحدة زمنية / One Time Unit أما تنفيذ الحلقة فهو مرتبط بعدد تكراراتها وبشكل عام for/while statements are usually of O(n) complexity => فإن تنفيذ الشرط يتطلب N وحدة زمنية / N Time unit طبعا هي مدة زمنية غير ثابتة إنما بالخوارزمييات نتعامل مع زمن التنفيذ بطريقة التعقيد الزمني أي عدد مرات تنفيذ Block of code معين حتى تزيد كفائة استخدام حلقة مثلا تخلص من العمليات الحسابية التي تعطي قيم ثابتة دوما, مثال: for (int k = 0; k < length - 1; k++) { //نحسب دليل آخر عنصر عدة مرات by lengthMinusOne = length - 1; for (int k = 0; k < lengthMinusOne; k++) { // قيمة ثابتة في علوم الكمبيوتر ، يعد تسرب الذاكرة (خسارة جزء منها) نوعًا من تسرب الموارد الذي يحدث عندما يدير برنامج كمبيوتر بشكل غير صحيح تخصيصات الذاكرة بطريقة لا يتم تحرير الذاكرة التي لم تعد هناك حاجة إليها. قد يحدث تسرب للذاكرة أيضًا عند تخزين كائن Object في الذاكرة ولكن لا يمكن الوصول إليه عن طريق التعليمات البرمجية قيد التشغيل. بشكل بسيط: عدم تحرير الذاكرة بعد استخدامها (برنامج يحجز 200 ميغا بايت من الذاكرة RAM وينهي عمله و لا يحرر منطقة الذاكرة التي استخدمها)
  6. لا تضع إشارة التنصيص حول الاسم phones
  7. بشكل عام كل لغات البرمجة تقوم بترميز المحارف (حروف و أرقام و رموز مختلفة) بقيم رقمية موحدة تدعى جدول ASCII. لحل السؤال عليك المرور بحلقة For loop على عناصر السلسلة واختبار حالة المحرف: هل المحرف الحالي هو حرف أبجدي و من النوع small استبدال الحرف الحالي ب النوع capital لنفس الحرف في جدول ASCII لدينا: small case: الحرف a=97 و b=98 و هكذا بنفس الطريقة حتى z=122 capital case: الحرف A=65 و B=66 و هكذا بنفس الطريقة حتى z=90 نستنتج أن الفرق بين حالة نفس الحرف بين small و capital هو 32 (قيمة رقمية / فرق الترميز) مثال في لغة ++C: #include <iostream> #include <cstring> // مكتبة للتعامل مع السلاسل using namespace std; int main() { char arr[] = "Engineering Discipline."; // التهيئة cout << "Original String:\n"<< arr<< endl; // السلسلة الأصلية cout<<"String in UPPERCASE:\n"; for (int x=0; x<strlen(arr); x++) // المرور على عناصر المصفوفة if (isalpha (arr[x]) ) // هل المحرف الحالي هو حرف أبجدية putchar(toupper(arr[x])); // تحويل الحرف للنوع الكبير و طباعته return 0; } مثال في لغة JAVA: import java.io.*; public class Test { public static void main(String args[]) { String Str = new String("Welcome to Tutorialspoint.com"); System.out.print("Return Value :" ); System.out.println(Str.toUpperCase() ); // دالة مبنية في لغة جافا تعيد السلسلة بأحرف كبيرة } }
  8. تصميم جيد و بداية موفقة الملاحظات: الألوان فاقعة و متنوعة جدا (النصف الثاني من الموقع ألوان غير مريحة, الجزء العلوي جيد) (نكتفي ب 3 ألوان رئيسية) خطأ في التصميم (محاذاة آخر عنصر في الأسفل جهة اليسار) /مولد النص العربي/ ال navbar خذها إلى اليسار قليلا (حافظ على تباعد متساوٍ لجميع العناصر عن أطراف الصفحة) (اجعل الهامش موحداً)
  9. ضمن mysql جدول بالطريقة العادية لكن استرجاع البيانات يمكن أن يحصل بهذه الطريقة على شكل JSON SELECT json_object('name', name, 'phone', phone) FROM person; و النتيجة : { "name": "Jack", "phone": "12345" } مثال آخر: SELECT JSON_OBJECT( 'name_field', name_field, 'address_field', address_field, 'contact_age', contact_age ) FROM contact; مرجع , حلول إضافية
  10. ستتعامل مع المنتج كغرض له خصائص معاملت للغرض ك JSON ستوضح الأمور و تنظمها (في حال وجود بيانات مفقودة ناتجة عن القراءة الخاطئة لن تحصل على JSON Object عند عملية Parsing) أنت لست بحاجة لتشكيل JSON إنما سيكون لديك طريقة فعالة لحفظ معلومات المنتج و استرجاعها ك Object
  11. يمكنك إضافة عدد حقول محدود تقريبا بطول يساوي مجموع السلاسل (يعتمد على إصدار الباركود) أي (عدد المحارف الممكن تخزينها ضمنه) إقتراحي أن تطلع على السوق وتدرس الحاجة لمعلومات للمنتج أي قم بتخزين مايتطلبه السوق ونصيحتي هي تخزين البيانات بصيغة JSON (يتوفر مكتبات بجميع لغات البرمجة للتعامل معها وسوف تضمن طريقة مريحة لضمان وجود البيانات بتنسيق معين ضمن كل باركود وفي حال لم يقرأ الرمز بشكل كامل أو قراءة رمز مخرب (سيحدث Exception) و تستطيع تشغير البيانات أيضا مثال: { "id" : "abc123", "title": "Brown eggs", "type": "dairy", "description": "Raw organic brown eggs in a basket", "price": 28.1, "Production_Date": "2020-5", "Expiry_date": "2020-9" } حدد إصدار الباركود الذي تنوي استخدامه و تأكد من سعته (عدد المحارف القادر على تخزينها) وقم بتمثيلها بطريقة مناسبة و مختصرة قدر الإمكان مثلا : (بدل production_date) ضع (PD)
  12. الفرق باستخدام DOM بين React و React Native: لكل من React و React Native طرقهما الخاصة في تصميم المكونات (component) والواجهات (Views). نظرًا لأن React يعرض عناصر HTML إلى DOM افتراضي ، يتم إجراء التصميم غالبًا باستخدام نفس معيار الويب: CSS. يتطابق ناتج React مع مخرجات صفحة ويب HTML التقليدية ، مما يسمح لك باستخدام الأساليب القياسية للتصميم عندما يتعلق الأمر بإضافة تنسيقات خارجية (تنسيق الموقع بالستخدام CSS). مع React Native ، لا تتمتع بنفس الحرية. نظرًا لأن React Native تُخرج تطبيقًا أصليًا (Native app)، فلا يوجد DOM مع عناصر HTML يمكن تصميمها باستخدام الطرق المعتادة مثل CSS. يتم التعامل مع الأنماط في React Native بدلاً من ذلك باستخدام كائنات Javascript التي تعدل خصائص المكونات الأصلية الأساسية. لا يستخدم CSS ، على الرغم من أن العديد من الخصائص تشبهها. مثال لتنسيق مكون: import React from 'react'; import { View, Text } from 'react-native'; export default class App extends Component { render () { return ( <View style={styles.appContainer}> <Text style={styles.appText}>Hello world</Text> <View /> ) } const styles = { appContainer: { flex: 1 }, appText: { fontSize: 18, color: 'white', textAlign: 'center' } } مصدر
  13. Redux: تُستخدم Redux لإدارة الحالة العامة للتطبيق (global state management) حيث يتم الحفاظ على الحالة على مستوى المكون في React عن طريق State خاصة بها ، يمكنك تمرير المعالجات ذات المتغيرات (handlers with variables) إلى المكونات الفرعية من الآباء وبالعكس والتي تصبح فوضوية ويصعب إدارتها عندما ينمو تطبيقك ويصبح معقدًا. يأتي Redux ليحل المشكلة.في بعض الأحيان في التطبيقات الصغيرة ، من الأفضل عدم استخدام redux. لذا استخدمها بعد أن ننعلم أساسيات React. مقالة كتبها مؤلف Redux بشكل عام يمكنك استخدام كل من الحالة المحلية state و redux store في المكون الخاص بك(component). في رأيي ، يجب عليك استخدام الحالة المحلية (state) لتطبيقات البسيطة. استخدم Redux لتطبيقات الأعمال ، التي تتطلب توسيع الميزات بحلول الوقت إذا كان المكون (component) شديد التعقيد ، فيجب عليك تقسيمه إلى مكون صغير لإعادة استخدامه والتحكم في كيفية عمله. كقاعدة عامة بسيطة ، استخدام متجر Redux للبيانات ذات الصلة بمكونات مختلفة غير مرتبطة ,و state في المكون للبيانات التي ليس لها معنى خارج المكون والوالد أو الأطفال. Redux هو في الأساس مخزن بيانات في الذاكرة ، ويضيف الكثير من التعليمات البرمجية المعيارية إلى تطبيقك إذا لم تكن في حاجة إليها حقًا.
  14. يتم عمل هكذا خلفية باستخدام CSS: عن طريق الدالة التالية: angel : يأخذ الزاوية التي ترغب بقص الخلفية بها color1 : اللون الأول ومن ثم (اختياري) نضع النسبة التي تدل على تشبع اللون color2 : اللون الثاني ومن ثم (اختياري) نضع النسبة التي تدل على تشبع اللون background: linear-gradient(<angle>, color1 color1-stop-at, color2 color2-start-at); مثال: background: linear-gradient(110deg, #fdcd3b 60%, #ffed4b 60%); و الصورة المرفقة توضح النتيجة: ملاحظة: قم بتعديل الزاوية وقيم الألوان بما تجده مناسبا.
  15. إن الكود الذي تكتبه مرتبط ب Activity معينة ولن ينفذ إلا في حال تشغيل التطبيق. حتى يعمل المؤقت في حال كان التطبيق مغلق عليك تشفيل Background service و استخدام الصف Timer وعمل جدولة بذلك.. background-service Timer CountDownTimer
  16. نعم شعور طبيعي .. نقوم بمراجعة مشاريع أخرى دوما عند بناء أي مشروع بالرغم من وجود خبرة جيدة. عليك التمرن بشكل أكبر و زيادة الخبرة. وعند بناء مشروع جديد قم بعمل خريطة ذهنية متكاملة و التفكير العميق وتقسيم العمل ومراجعة أفكار قديمة مع الاطلاع على التوثيق للتقنيات المستخدمة و أمثلة عليها .. بعد فترة من الوقت سترى تحسن في مهاراتك وزيادة سرعة التفكير والإنتاجية.
  17. لدينا خوارزمية sieve التي تقوم بإيجاد الأعداد الأولية بتعقيد زمني سريع (يفضل استخدامها) class SieveOfEratosthenes { void sieveOfEratosthenes(int n) { // إنشاء مصفوفة بوليانية و تهيئتها "prime[0..n]" // true نفرض جميع الأعداد أولية عن طريق إعطاء القيمة // في حال كان مضاعفا لعدد آخر false كل عدد سنضع قيمة boolean prime[] = new boolean[n+1]; for(int i=0;i<n;i++) prime[i] = true; for(int p = 2; p*p <=n; p++) { // بدون تغيير فهو عدد أولي i إذا بقيت قيمة العنصر if(prime[p] == true) { // قاسم لها i ,وجعلها غير أولية i تعديل مضاعفات العدد for(int i = p*p; i <= n; i += p) prime[i] = false; } } // طباعة الأعداد الأولية for(int i = 5; i <= n; i++) // نلاحظ أن الثنائية 3-5 هي أول ثنائية مقبولة فنبدأ من العدد 5 { if(prime[i] == true && prime[i-2] == true) // 2 مع العدد الأصغر منه ب i نختبرالعدد System.out.println( "(" + (i-2) + "," + i + ")" ); } } // اختبار الدالة أعلاه public static void main(String args[]) { int n = 100; System.out.print("Following are the prime numbers "); System.out.println("smaller than or equal to " + n); SieveOfEratosthenes g = new SieveOfEratosthenes(); g.sieveOfEratosthenes(n); } }
  18. نعم يوجد العديد من الطرق لتشغيل سكربتات PHP عن طريق مكتبات Node.Js (أنا لم أقم بتجريب أيِّ منها) SPHP: يمكنك تشغيل PHP كما هو الحال مع أي خادم ويب ، باستخدام SPHP وهي Module في Node.Js. كما أنه يدعم طلبات Websockets على منفذ HTTP. إنه يميل للسرعة تحت حمولة صغيرة ، بدلاً من توفير الموارد. طريقة التثبيت شرح على موقع github أو أحد الطرق التالية: DNode node-php-fpm node-php
  19. إن عملية ضبط مقياس الصورة لكل حجم شاشة بالضبط هو مهمة صعبة جدا فنحن نضع مجالات كاملة لقيم عرض الشاشة ليعمل عليها تنسيق معين.. عليك استخدام خاصية media query التي تدعمها css مثلا من موقع w3schools @media only screen and (max-width: 600px) { body { background-color: lightblue; } } كما لدينا نقاط مفصلية لحجم الشاشات يُعمل بها عالميا: /* Extra small devices (phones, 600px and down) */ @media only screen and (max-width: 600px) {...} /* Small devices (portrait tablets and large phones, 600px and up) */ @media only screen and (min-width: 600px) {...} /* Medium devices (landscape tablets, 768px and up) */ @media only screen and (min-width: 768px) {...} /* Large devices (laptops/desktops, 992px and up) */ @media only screen and (min-width: 992px) {...} /* Extra large devices (large laptops and desktops, 1200px and up) */ @media only screen and (min-width: 1200px) {...} يمكنك التعلم من خلال هذه السلسلة: الفيديو الأول لاحقا أنصحك بتعلم إطار العمل الخاص ب JS+CSS الذي يدعى Bootstrap وهو إطار العمل الأكثر شهرة لتصميم واجهات المستخدم في الويب Front-end إذا تفضلت وقمت بتحميل ملفات التصميم بحيث نستطيع الاطلاع عليها وتعديلها لك (مع توضيح أماكن الأخطاء في السورس كود خاصتك) لايوجد مشكلة.
  20. الحل مع الخطوات موجود في الصور المرفقة.. الحل المباشر: a. 5+(((9/8)+(4-6))+7) => 5 9 8 / 4 6 - + 7 + + b. 6+(5-8+3)*(8+3)=> 6 5 8 - 3 + 8 3 + * + c. 7-(5+6)*(4+7)/5 => 7 5 6 + 4 7 + * 5 / - يمكنك استخدام هذا الموقع لحل هذه المعادلات : web4college
  21. كل تقنية cross platform لها متطلبات مختلفة عليك تحديد التقنية التي ترغب بالبرمجة بها.. بشكل عام عليك زيادة الذاكرة RAM على الأقل حتى (8GB), المعالج مقبول لكن يفضل معالج أحدث. تشغيل التطبيق على الهاتف (وصله عن طريق USB , تفعيل USB debugging) بدل استخدام المحاكي يقلل استخدام المعالج و الذاكرة.
  22. يوجد مثال تطبيقي من ORACLE ومثال آخر من stackoverflow كحد أدنى ، تحتاج إلى ثلاث صفوف classes: صف لتمثيل بياناتك ، وواحدة لواجهة المستخدم الخاصة بك ، وواحدة لإدارة اتصال قاعدة البيانات. فيديو يوتيوب يشرح ربط JAVAFX ب MYSQL : الفيديو
  23. لقد سبق و قمت ببرمجة تطبيق أندرويد واستخدمت مكتبة ZXing لعمل QR code وكانت جيدة جدا من حيث عدد المحارف (السعة) و سرعة القراءة و الكتابة (الترميز و فك الترميز) ولاحظت أنها ديناميكية. ZXing : مكتبة معالجة صور الباركود متعددة الأشكال 1D / 2D وهي هي المكتبة الرئيسية التي تدعم رموز QR code في JAVA
  24. عليك تقديم عرض وتوظيف مهندس برمجيات ليقوم بتنفيذ التطبيق خاصتك. إن منصة مستقل هي منصة عربية يوجد عليها مبرمجين عرب مميزين سيقدمون خبرتهم لإنجاز العمل لمطلوب. المنصة تابعة لشركة حسوب.. رابط المنصة مستقل
×
×
  • أضف...