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

طارق جهاد

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

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

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

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

    17

كل منشورات العضو طارق جهاد

  1. وعليكم السلام ورحمة الله. حتى تستعيدي الشغف بالبرمجة يجب ان تحصلي على أمرين: 1. الرغبة الحقيقة في جعلها مهنتك المستقبلية (وهي من افضل المهن في الوقت الحالي) 2. العمل على مشاريع حقيقية وطلب المساعدة من اهل الاختصاص، لان عملية تعلم البرمجة بدون هدف او مشروع، امر ممل فعلاً. بالنسبة للنقطة الثانية، يجب ان تحددي مجال العمل الذي ترغبين فيه بالبداية (ويب، ديسكتوب، موبايل) وما هي التقنيات التي تفضلينها، ثم قومي بكتابة مشروع مكتوب مسبقا خطوة بخطوة، وهذا تجديه في الكتب التي توضح التقنية بالتفصيل مع خطوات كتابة المثال من الصفر. وعند نقطة معينة ستجدي الدافع لكتابة مشروع صغير نسبيا اعتماداً على الخبرة الجيدة التي اكتسبناها خلال هذه الفترة، ثم حاولي البحث عن بعض العملاء الذين هم بحاجة مشاريع صغيرة نسبياً، وابدأي بالعمل معهم. اذكر اول مشروع لي عملت عليه بشكل حر، كان بهذا الشكل، وقد واجهت العديد من التحديات اثناء كتابتي للمشروع، وكانت جميعها تحل بفضل الله، واكتسبت خبرات جيدة، بعد حوالي شهرين كان المشروع يعمل بشكل ممتاز (وما زال يعمل حتى الآن، بعد مرور ما يقارب 4 سنوات). وكل مشروع كان يعطيني دفعة كبيرة نحو الأمام. لذلك كنصيحة اخيرة: حاولي تخصيص وقت معين (وليكن شهرين) للبدء بكتاب تخصصي (مثلا في .NET يوجد العديد من الكتب الاكثر من ممتازة) والتي يمكنك تطبيقها بشكل مفصل وممتع، وبعد هذه المدة، ابدأي بالبحث عن عملاء سواء في محيطك او على الانترنت، والله ولي التوفيق.
  2. وعليكم السلام ورحمة الله DOM هي تمثيل لعناصر الصفحة في الذاكرة، وانت تحتاج بالطبع لمعرفة الية للوصول لجميع هذه العناصر، والوصول لخصائص هذه العناصر. جافا سكربت تعطيك هذه الامكانية، jQuery تعطيك هذه الامكانية ايضا، لكن بشكل مختصر، او فعليا هي تقدم خدمات جافاسكربت نفسها لكن بشكل مختصر، ولا تخترع شيئاً جديداً. لذلك ارى اذا كنت تستخدم jQuery فهي تكفي حالياً، الا في الحالات التي قد تواجهك لاحقاً، بحيث انك تريد التعامل مع DOM، لكن لا يوجد لديك مكتبة jQuery هناك، وقتها يمكنك البحث عن الطريقة المناسبة باستخدام جافا سكربت، اما الأن اكتفي ب jQuery، وحاول توجيه جهدك نحو تعلم اشياء اكثر اهمية. بالتوفيق،،
  3. الأمر يعتمد اولا على لغة البرمجة التي ستسخدميها. لكن كخوارزمية بشكل عام، الخطوات كالتالي: 1. قراءة مجموعة الأسماء وحفظها في بنية بيانات (Data Structure) معينة، مثل المصفوفة على سبيل المثال. 2. نستخدم احدى خوارزميات الترتيب Sorting Algorithm (اغلب لغات البرمجة، تحوي العديد من الخوارزميات الجاهزة في ترتيب هكذا عناصر) 3. بعد ان ننتهي من ترتيب الاسماء، نقوم بتعريف متغير نصي string مثلا، ثم نقوم بعمل حلقة تكرارية على مصفوفة الاسماء، وفي كل مرة نضيف عنصر المصفوفة الحالي متبوعا برمز السطر الجديد، بحسب لغة البرمجة ونظام التشغيل، في ويندوز سنضيف n\ 4. مرحلة الاخراج Output، وهنا نحدد نوع Output المطلوب، هل نريد النتيجة ان تكتب إلى ملف، او ان تظهر للمستخدم مباشرة، ونقوم فقط بكتابة او طباعة المتغير النصي الذي يحوي الاسماء مرتبة ومفصولة بالاسطر. لناخذ المثال التالي بلغة سي شارب. using System; using System.Collections.Generic; namespace SortingNames { class Program { static void Main(string[] args) { List<string> names = new List<string> { "Ahmad", "Khaled", "Bilal", "Mohammad", "Samer", "Ali", "Ibrahim" }; names.Sort(); string output = string.Join("\n", names); Console.WriteLine(output); } } } في هذا المثال استخدمنا بنية البيانات من نوع List، ثم قمنا بترتيبها باستخدام الدالة Sort بكل بساطة، واخيراً استفدنا من ميزات اللغة، في اضافة سطر جديد بعد كل اسم، وذلك باستخدام الدالة string.Join ويمكن ايضا كتابته بشكل مختصر اخر: using System; using System.Linq; namespace SortingNames { class Program { static void Main(string[] args) { string[] names = {"Ahmad", "Khaled", "Bilal", "Mohammad", "Samer", "Ali", "Ibrahim" }; names = names.OrderBy(x => x).ToArray(); string output = ""; for (int i = 0; i < names.Length; i++) { output += names[i] + "\n"; } Console.WriteLine(output); } } } في هذا المثال استفدنا من تقنية LINQ في ترتيب عناصر المصفوفة بالتوفيق،،،
  4. وعليكم السلام ورحمة الله. من عادتي اخي اعن اعطي ردود مفصلة، لكن هنا سأعطيك رد مختصر، لاني سأجيبك بقدر فهمي لسؤالك. سأفترض انك تريد الآتي: بمجرد ضغط المستخدم على زر تحميل، ننتقل لصفحة جديدة (او نفس الصفحة) ويظهر عداد لمدة معينة (30 ثانية مثلا)، وبعدها يظهر زر او رابط التحميل، وعندما يقوم المستخدم بالضغط، تبدأ عملية التحميل. اولاً: في الصفحة الاولى وعند الضغط على زر تحميل، تستخدم عنصر a، وتضع الخاصية target تساوي _blank، كما في الرابط التالي: رابط التحميل <a href="https://cima4x.tv/%D9%85%D8%B4%D8%A7%D9%87%D8%AF%D8%A9-%D9%83%D8%B1%D8%AA%D9%88%D9%86-%D9%83%D8%A7%D8%A8%D8%AA%D9%86-%D9%85%D8%A7%D8%AC%D8%AF-%D9%85%D9%88%D8%B3%D9%85-2-%D9%83%D8%A7%D9%85%D9%84/" target="_blank"> رابط التحميل</a> في الصفحة التي سينتقل لها المستخدم، تقوم بتعريف دالة ضمن JavaScript مهتمها العد للمدة المطلوبة، ثم اظهار رابط التحميل، الذي يكون مخفياً فقط، اثناء عملية العد. رابط التحميل يمكن ان يكون بالشكل التالي: <a href="http://syrengs.org/uploads/magazine/news-letter-4.pdf" download> تحميل الملف </a> هنا تضع مسار الملف المطلوب تحميله (اياً كان نوعه) وثم تقوم بتغيير سلوك الرابط، إلى سلوك تحميل بدل تصفح، وذلك بوضع الخاصية download كما تشاهد في الرابط. بالتوفيق،،،
  5. وعليكم السلام ورحمة الله المناسب وصحاب الفرص الاكبر هو مجال البرمجيات بالتأكيد، فلا حدود تقيدك في مجال البرمجة، وخيارات العمل مفتوحة اكثر، كما يمكنك العمل كمستقل تتفرع البرمجيات إلى عدة اقسام(مثل تطوير الويب، تطبيقات الجوال، تطبيقات سطح المكتب) بالإضافة لكل ما يمكن برمجته. وكل قسم منها يحوي العديد من التقينات تختلف فيما بينها. في تطبيقات الجوال مثلا: لديك الاندرويد وال iOS و الويندوز فون، و Web OS وغيرها الكثير في الويب، لديك PHP, ASP.NET, Ruby on Rails, Python, Java وغيرها ايضا تطبيقات المكتب يوجد الكثير ايضا من التنقيات، ويوجد الكثير من المواقع التي يمكنك الاستفاده منها، كأديمية حسوب، او اذا كانت لغتك الانجليزية جيدة، فافضل طريق هو المواقع التدريسية المتخصصة، مثل lynda.com و pluralsight.com, و udemy.com وغيرها. لذلكانت بحاجة لعمل مقارنة شامله قبل الاختيار. بالتوفيق،،،
  6. وعليكم السلام ورحمة الله. نبدا من اخر نقطة، Google Play بالتأكيد ليس لديه أي مشكلة، يتم تعريف التطبيق على Google Play عن طريق APP ID وهو غالبا اسم التطبيق مع نطاق الشركة بشكل معكوس، مثلا: com.plevina.myapp عندما تقوم بإصدار نسخة جديدة من التطبيق مهما كانت المنصة التي قمت بالتطوير عليها، بالنهاية انت لديك تطبيق بامتداد .apk بالإضافة لهذا الـ App ID، كل ما عليك فعله، هو اعطاء التطبيق الجديد رقم نسخة يزيد عن اخر نسخة على المتجر. اما اذا اختلف App IDK، فانت في حالة تطبيق جديد كلياً. بالنسبة لقاعدة البيانات ليس لها دخل بالتطبيق، بمعنى، ان تطبيقك (او مجموعة تطبيقات اخرى) سيرتبط مع خدمة ويب او Web API تقدمها انت (او قاعدة بياناتك)، تقوم هذه الخدمة بقراءة البيانات من قاعدة البيانات او الكتابة عليها عن طريق روابط، في الفقرة التالية شرح مفصل لهذه النقطة. بالنسبة لعملائك، لا انصحك بإجراء تغيير مفاجىء وكبير في شكل والية عمل تطبيقك. او اجراء تعديلات من شأنها التأثير على عمل التطبيق القديم. لذلك، ومهما كانت قاعدة البيانات او التكنولوجيا التي تستخدمها، انت بحاجة لعمل version جديدة من خدمة الويب التي يتواصل التطبيق معها. مثلا لنفرض ان تطبيقنا السابق com.plevina.myapp يقوم بجلب مجموعة المنتجات عن طريق خدمة الويب (Web API)، ويستخدم لذلك الرابط التالي: http://www.plevina.com/api/products الآن عندما تقوم بتطوير التطبيق الجديد، وفي حال كانت بيانات المنتجات فيه تختلف عن بيانات المنتجات في التطبيق السابق، هنا "إحذر" يجب ان تترك الرابط السابق يعمل بشكل سليم، وتقوم بإنشاء نسخة جديدة من هذه الخدمة، مثلاً: http://www.plevina.com/api/v1/products بالتالي، عند اصدار النسخة الجديدة من التطبيق، لن يؤثر ذلك على عمل التطبيق السابق، وسيتمكن جميع عملائك من الانتقال للتطبيق الجديد بسلاسة. نقطة اخيرة أوؤكد عليها، سواء طورت تطبيقك بلغة الجافا او اي تقنية هجينة اخرى، انت ستحصل على ملف APK او Android Package، يمكن تثبيته على اي نظام تشغيل اندرويد، وبالنسبة للمتجر، جميعها تطبيقات اندرويد، لذلك لا فرق تقنياً بين هذه التطبيقات، وانما الفرق بالإداء والشكل والحجم والإمكانيات. بالتوفيق،،،
  7. UX أو User Experience او تجربة المستخدم يمكنك اعتبارها كدستور اثناء تطويرك لواجهة المستخدم، وهي غير مرتبطة بالويب فقط، بل بجميع انواع التطبيقات. سأعطيك مثال بشكل مختصر. تطبيقات الأندوريد تختلف عن تطبيقات الآيفون من حيث الشكل، لكن غالبا تكون المهام التي يقوم بها التطبيق على كلا الجهازين متشابه، مثلا تطبيق الواتساب على نظام الاندرويد يحوي على Tabs لعرض الدردشة، والحالة والمكالمات، تكون هذه ال tabs من أعلى الشاشة، وعبارة عن نص فقط CHATS STATUS CALLS لكن ضمن تطبيق الواتساب على الآيفون توجد هذه ال Tabs في الأسفل وتحوي على أيقونة ايضا وتحتها نص. أيضا، في اجهزة الأندرويد يوجد زر الرجوع (زر أساسي من الجهاز نفسه) يمكنك من الرجوع للصفحة السابقة، بينما على آيفون لا يوجد هذا الزر، بكل بإمكانك سحب الشاشة لليمين للرجوع للصفحة السابقة. وقس على ذلك العديد من الأمثلة والاختلافات. الآن، مستخدم الأندرويد، ومن خلال اعتياده على استخدام نظام الاندرويد، عندما يقوم بتثبيت تطبيق جديد، يتوقع أن يكون استخدام هذا التطبيق واضح اعتمادا على تجربته السابقة في استخدام نظام الاندرويد بشكل عام. الآن انت عندما تقوم بتصميم تطبيق للأندرويد، ولا تدعم زر الرجوع مثلا، او تضع ال Tabs في الأسفل، أو... فأن المستخدم سيحصل له حالة من النفور او الانزعاج من هذا التطبيق، لانه غريب عليه ولم يدخل في تجربته السابقة. نفس الحالة تنطبق على مستخدم آيفون ايضاً شركة غوغل من اكثر الشركات التي تحاول جعل هذه العملية منظمة ومقننة، واطلقت تصميمها الخاص Material Design والذي يقصد استخدام المواد الموجودة حولنا في التصميم. فتشعر المستخدم أنه ببيئة واقعية من خلال تفاعل عناصر الواجهة بشكل كما لو كانت مواد طبيعية بدل ان تكون ازرار او قوائم. في النهاية، UX ليست شي منفصل بحد ذاته، بقدر ما هي قواعد ونصائح واساليب واضحة لتطوير الواجهات UI بشكل يأخذ تجارب المستخدم السابقة بعين الاعتبار. بالتوفيق،،،
  8. وعليكم السلام ورحمة الله. باختصار الرمز هو: ar لكن يمكن ان تستخدم ar-sy او ar-qa بحسب الدولة! اذا يجب ان ننتبه لمفهومين اساسين هما: 1. Globalization 2. Localization والذان يتم دمجهما في مصطلح واحد هو Internationalization او اختصار i18n (اي حرف i ويليه 18 حرف ثم اخيرا حرف n) Globalization: تعني انك تريد تطوير التطبيق بأكثر من لغة (العربية، الانجليزية، الفرنسية...) Localization: تعني انك ستنزل في تفاصيل globalization الواحد (بنفس اللغة) اكثر لدعم المناطق المختلفة، كمثال: يمكن لتطبيقك ان يدعم اللغة العربية وتستخدم الرمز ar، وانتهى الأمر، لكن هناك بعض القيم تختلف من دولة عربية لأخرى. مثلاً: المملكة العربية السعودية تستخدم التاريخ الهجري، وعملتها الريال السعودي. بينما دولة قطر تستخدم التاريخ الميلادي وعملتها الريال القطري. في قطر يتم استخدام اسماء الأشهر كما في مصر (يناير، فبراير، مارس... ديسمبر) بينما في سوريا يتم استخدام الاسماء العربية (كانون الثاني، شباط، اذار... كانون الأول) اذا يوجد اختلاف في الثقافات بين هذه البلدان. لذلك تجد في لغات البرمجة ما يسمى ب culture، يعنى بإمكانك تغيير ثقافة التطبيق بحسب ثقافة البلد. اذا ar وحدها تعتبر Globalization، و ar-sy تعتبر Globalization + Syrian Localization الأمر مشابة للغة الانجليزية مثلا en-us للولايات المتحدة الامريكية en-uk للمملكة المتحدة en-in للهند الانجليزية بالتوفيق،،،
  9. يمكنك عمل ذلك بأي تكنولوجيا لتطوير الويب، الأمر متروك لخيالك في التصميم. بالطبع الـ Animation يتم بواسطة JavaScript + CSS او ما يمسمى Front-End أما حفظ المنتجات وإدارتها يتم عن طريق Back-End، فيمكن ان تكون PHP او ASP.NET او JAVA او Ruby on Rails وغيرها. بالتوفيق،،،
  10. وعليكم السلام ورحمة الله الأمر يعتمد على نوع Business المراد تطويره. مثلا لو كان لديك شركة واحدة (مشروع رئيسي) والمشاريع الاخرى هي من نفس نطاق العمل (Business Domain) سيكون خيار الدومين الفرعي هو الافضل. لنفرض أن لدينا شركة اسمها Plevina وتقدم هذه الشركة مجموعة من الخدمات، كتطوير التطبيقات، ومدونه خاصة بها، او منتدى للنقاش عندها من الافضل ان تكون النطاقات بالشكل التالي: www.plevina.com blog.plevina.com forum.plevina.com لان جميع الخدمات السابقة هي من وإلى الشركه نفسها (اعتبرها خدمات فرعية). لكن لو فرضنا انها ستقوم بتطوير مدونه لصالح شركة اخرى، او تطوير خدمة جديده، تريد طرحها كخدمة مستقلة، عندها من الافضل ان يكون لها النطاق الخاص بها. مثلا: www.parmajiat.org هي منصة لتعليم البرمجيات تقدمها هذه الشركة، لكن يمكن اعتباره مشروع مستقل، ربما يكون له فريق العمل الخاص به واهداف تختلف عن اهداف الشركة نفسها "ولا مانع من ذكر اسم الشركة الأم في الموقع المستقل، كما هو الحال في اكاديمية حسوب" بالتالي القاعدة هي في تحديد درجة ارتباط النطاق مع نطاق عمل الشركة ورؤيتها واهدافها. (احيانا تفيد النطاقات الفرعية في تقسم المشاريع الكبيرة الى وحدات مستقلة، بحيث تسهل عملية ادارتها. تجد مثال في موقع github.com) النقطة الاخيرة، ليس لها علاقة بالنطاقات مثلا facebook.com/messages، وانما ب Routing، بحيث يكون الإسم معبر اكثر عن هذه الخدمة. مثلا في هذا النطاق نفهم ان المقصود هو قسم الرسائل الخاص بالفيسبوك، لكن لو كان الدومين بشكل اخر مثل: facebook.com/services/messags، ربما نظن ان هناك خدمات اخرى مرتبطة بالرسائل، او ان الرسائل هي قسم جزئي من قسم الخدمات. لذلك الافضل دائما ان نبذل جهدنا لتكون URLs الخاصة بنا واضحة ومعبرة عن نفسهاـ وايضا مختصرة قدر الإمكان (ولا اعني مختصرة اي اختصار الكلمات مثل: facebook.com/msg) هذا ابتعد عنه! تخيل معي مجموعة الروابط التالية: www.plevina.com/account/registration www.plevina.com/join - www.plevina.com/blog?title=android&datetime=20-10-2011 www.plevina.com/blog/android/20102011 لاحظ شكل الروابط والتي تؤدي نفس الغرض، لكن هنا يوجد نوع من انوع الفن، للاسف يتجاهله الكثيرون، فتجد روابط طويلة وغير معبرة. طبعا يمكنك التحكم بالروابط عن طريق Routing بحسب التكنولوجيا التي تستخدمها في تطوير تطبيقك. ملاحظة اخيرة: ما دام القسم المطلوب صغير نسبيا يمكن دمجه مع الدومين الام واستخدام Routing لانشاء رابط مختصر وجميل. لكن مع تطور هذا القسم الصغير، نصل لنقطة يجب فصله إلى دومين منفصل blog.plevina.com، واذا اصبحت امكانياته اكبر واكبر ربما يصبح مشروع مستقلا بالتالي له النطاق الخاص به. حدث أمر مشابه مع تطبيق فيسبوك ماسنجر، عندما كان مدموج بنفس التطبيق، لكن مع اضافة العديد من الميزات، دعت الحاجة لفصله في تطبيق منفصل، وقد عانت فيسبوك الكثير في توضيح وجهة نظرها هذه، وبأن التطبيق آمن وليس هدفه اختراق الخصوصية (وبالنسبة لي فهو امر ممتاز - لاني افضل تصفح الفيسبوك قليلا وبعيدا عن ضجة الرسائل والدردشات) اخيرا اشكرك واحييك على التفكير في هذه الامور التنظيمية منذ البداية والتي فعلا من شأنها تنظيم العمل اكثر واكثر مع مرور الوقت. بالتوفيق،،،
  11. Ionic تهتم بالجانب التصميمي للتطبيق، وتعتمد على Cordova كأساس للتواصل مع نظام تشغيل الموبايل. Cordova عبارة عن مجموعة مكتبات ولواحق تم كتابتها لكل نظام تشغيل على حدة (Android, iOS, windows Phone, Web OS) وغيرها، ثم قامت Cordova بتقديم هذه الخدمات APIs كخدمة موحدة وبشكل دوال جافا سكربت. JavaScript API بمعنى لو اردنا عمل تطبيق يقوم بفتح الكاميرا والتقاط صورة، فإن طريقة تطويره على اندرويد تختلف عن iOS وعن باقي الأنظمة الاخرى. Cordova قامت بكتابة هذه الأكواد المختلفة نيابة عنك، ثم وحدت ألية استخدامها وصدرتها بشكل جافا سكربت. بالتالي يمكنك فتح الكاميرا ضمن تطبيق Cordova بواسطة دالة واحدة فقط بالجافا سكربت، وسيعمل التطبيق على جميع المنصات، بدون الحاجة لمعرفة الطريقة الاصلية في كتابة ذلك. قس على ذلك باقي الخدمات التي تقدمها انظمة التشغيل المختلفة. بالتالي Cordova ليس لها علاقة بشكل التطبيق، هي فقط المحرك او الجسر الواصل بين تطبيق الموبايل (بالجافا سكربت) وبين انظمة التشغيل المختلفة. الآن حتى نتغلب على مشكلة التصميم، ظهرت مكتبات ومشاريع اخرى، مثل Framework 7, BootStrap و بالطبع Ionic. وغيرها الكثير. ولكل وجه نظر مختلفة في الية الاستخدام، لكن في النهاية انت ستكتب جافا سكربت! الذي قدمته Cordova! البرمجة الهجينة لم ولن تكن كالبرمجة الآم او Native، لان البرمجة الهجينة Hybrid ذات امكانيات محدودة، فهي تقوم بتغليف المهام الأصلية لنظام التشغيل وعمل طبقة مجردة Abstraction Layer، لتتمكن من جعل هذه الوظيفة عامة ومشتركة بين جميع انظمة التشغيل المختلفة. بالنسبة للواجهات، هي ليست كواجهة الويب، بل هي الويب نفسها، لان تطبيق Hybrid عبارة عن تطبيق أصلي Native يحوي على شاشة واحدة فقط هي Web View (يمكنك تصور Web View كمتصفح بدون أزرار وبدون حقل Url، وبدون ألية Back- Forward) وكل ما يقوم به التطبيق هو رسم عناصر HTML وتفسير (تنفيذ) كود جافا سكربت على هذه الشاشة، وايهام المستخدم بان هناك مجموعة شاشات تعمل. بالتالي تطبيقك سيعتمد على قدرة المتصفح الرسومية لانشاء الواجهات، وليس على كارد الشاشة الخاص بالجهاز! وللتحايل على شكل عناصر HTML ظهرت مشاريع مثل Ionic لتعطي للتطبيق شكل مشابه للتطبيق الأصلي (فتجد مفهوم Material Design المطبق بانظمة الاندرويد) موجود ضمن Ionic، او لنقل عمل CSS مشابه للاندرويد. الآن، لماذا يتم استخدام Cordova او التطبيقات الهجينة، الجواب مرة اخرى "الاختلاف والتنوع" وحجم المشروع الذي تعمل عليه ومتطلباته وميزانياته. تقريبا يعتبر هكذا نوع من التطبيقات مناسب للتطبيقات التي تسمى LOB او Line of Business والتي غالبا تقوم بعرض مجموعة بيانات وادراتها، مثل محرك بحث معين. بحيث لا تتعامل بكثرة مع نظام التشغيل (مثل الملفات والكامير والرسوميات وغيرها). بالنسبة لي، عملت على مشروع واحد باستخدام Cordova وكان ناجحاً، لكني لن أكرر التجربة! لان المتطلبات التي نعمل عليها وحجم العملاء، قد لا تتمكن Cordova من تحقيق المتطلبات المناسبة. بالتوفيق،،،
  12. لو كان الخيار لي، لاخترت WPF (Windows Presentation Foundation مع نمط التصميم MVVM. فهي تعطيك الكثير من خيارات التصميم Styles, Animation, Templates, Data-Binding, Resources وبما أنها بالنهاية سي شارب، يمكنك الاستفادة من ميزات السي شارب مثل LINQ لعمل فلترة وبحث متقدم وسهل على البيانات عندك. شاهد مثال على تقنية WPF + MVVM في الصورة التالية، لتطبيق نعمل عليه حالياً. لاحظ ان قائمة الدردشات على اليسار هي عبارة عن ListBox تم تخصيصها بهذا الشكل، كما أن مربع الدردشة بجانبه، هو ايضا ListBox تم تخصيص عناصرها لعرض الرسائل بهذا الشكل، فهي تميز بين الرسائل المرسلة والرسائل المستلمة، وتعطي العنصر الشكل الموافق. تم عمل هذا الشكل بواسطة Templates + Template Selector + Styles سأقوم بعمل محاضرة اون لاين (مجانية)، عن هذه التقنية، اذا كنت ترغب بالحضور، بإمكانك مراسلتي على الايميل: tareqjehad@yahoo.com واخبارك اصدقائك ايضاً. حالياً انصحك باستخدام اكثر بيئة تتقنها، حتى لا تدخل في مفاهيم جديدة، وتضيع الهدف الاساسي من مشروعك. بالتوفيق،،،
  13. في الانجليزية يسمى Development، بالعربية تطوير وفعلا التطوير يعني التحديث والتحسين، لكنك عندما تقوم بتطوير نظام معين، فأنت تنطلق من الفكرة على الاقل وتقوم بتطويرها (او تطبيقها) لذلك تسمى تطوير التطبيقات بالتوفيق،،،
  14. وعليكم السلام ورحمة الله. الأمر يعتمد على لغة البرمجة التي تتقنها، لانك بالنهاية بحاجة لعمل تطبيق سطح مكتب Desktop Application يقوم بالقراءة والكتابة على قاموس Dictionary هناك العديد من التقنيات: 1. من مايكروسوفت يمكنك استخدام Windows Forms, WPF, UWP 2. من جافا استخدام Java SE لبناء تطبيقات سطح المكتب 3. Python استخدم Tkinter 4. يمكنك ايضا استخدام Qt مع لغة سي بلس بلس 5. واذا كان لديك معرفة ب جافا سكربت، استخدم Electron والتي تعمل على جميع انظمة التشغيل. بالنهاية تطبيق قاموس هو عبارة عن برنامج لقراءة من ملف، واعتقد ان السرعة ستكون مثالية في جميع التقنيات السابقة، كونها تعمل بشكل local على نفس الجهاز، العقبة الوحيدة لديك هي درجة اتقانك لاحدى التقنيات السابقة، وكتابة التطبيق بالشكل الأمثل. بالتوفيق،،،
  15. وعليكم السلام ورحمة الله. 1. حتى لو اندثرت هذه اللغة كما تقول، فإنها تحتاج إلى وقت طويل نسبياً، حتى تصبح نسياً منسيا، لان الكثير من المواقع والتطبيقات ما زالت تعمل بهذه اللغة، وعملية التطوير ستستمر بها. لكن حقيقة انه يوجد لغات وأطر عمل جديدة ومتطورة، هذا امر اخر. وحقيقة انك مبتدأ في هذا المجال، تجعل التفكير في بديل معقول نسيباً. لكن في النهاية المنطق البرمجي واحد، و PHP وغيرها ستعلمك اساس التفكير والتحليل البرمجي. ويصبح الانتقال للغة او منصة اخرى اكثر سهولة. اذا كنت في طور اختيار التقنية المناسبة لك. فهناك مجموعة من التقنيات التي فعلا اصبحت تتصدر القائمة اليوم. مثل ASP.NET, Java, Ruby on Rails, Django وغيرها. من وجهة نظري انصح (وليس اتحيز) لتقنيات مايكروسوفت كونها تقنيات متكاملة، على سبيل المثال. حتى تكتب تطبيق ASP.NET (سواء MVC أو Web Forms) انت بحاجة لتعلم لغة السي شارب. والتي ستمكنك ايضا من كتابة تطبيقات سطح المكتب Desktop Application مثل (Windows Forms, WPF, UWP) وتمكنك ايضا من كتابة تطبيقات ويندوز فون، وحتى تطبيقات اندرويد و iOS اذا استخدمت تقنية xamarin. وبالتأكيد يمكنك استخدام السي شارب مع نفس مفاهيم ASP.NET MVC لبناء خدمات الويب Web API وغيرها، طبعاً معظم هذه التقينات اصبحت تعمل على جميع انظمة التشغيل. الجافا تعطيك العديد من الميزات وتعمل على مختلف انظمة التشغيل، ولكن اعتقد بان تكنولوجيا مايكروسوفت متسارعة اكثر، واكثر توافقية واداء. المنصات الاخرى مثل Ruby on Rails هو اطار عمل ممتاز وسابق لغيره في بناء تطبيقات الويب، لكنك بحاجة لمعرفة بلغة Ruby، والحال نفسه مع اطار عمل Django بحاجة لمعرفة بلغة Python. بالتالي اذا كنت تبحث عن منصة لتطبيقات الويب فقط، يمكنك الاطلاع على التقنيات المتوفرة حاليا، وصرف بعض الوقت لقراءة وتطبيق امثلة بسيطة عليها لتعرف من هي اكثر تقنية مناسبة لك. اما اذا كنت تبحث عن اطار عمل متكامل وبإمكانيات شاملة. فمرة اخرى عليك النظر إما ب مايكروسوفت او جافا. 2. الجافا سكربت نعم هي لغة front-end يتم تنفيذها (تفسيرها) ضمن المتصفح نفسة، اي لم يكن لها وجود خارج اطار المتصفح. حتى قام Ryan Dahl بإخراجها من هذا القمقم، مستخدما محرك جافا سكربت V8 الخاص بقوقل، ومع بعض التعديلات ليصبح لديك Node JS والتي فعلا اصبحت تعتبر back-end، والمميز بمحرك V8 أنه يتم ترجمته وتحويله للغة الة، على عكس المحركات الاخرى التي يتم تفسيرها بواسطة المتصفح وتتنفذ ضمن المتصفح نفسة، بالتالي، يمكنك اعتبار Node JS اطار عمل مكتوب بلغة C و ++C في النهاية: الاختلاف والتنوع هو ما يعطي الجمال لهذه الطبيعة والكون، لذلك لابد من الاختلاف في التقنيات واللغات، وتميز كل منها عن الاخر في جانب عن جانب اخر. ولا يمكن لاحد ان يلغى الاخر وينفرد بشكل مطلق فالوحدانية المطلقة للّه تبارك وتعالى. لذلك انت مسؤول عن اختيارك للتقنية او اللغة التي تراها مناسبة، ولا ضير في التغيير ان وجدت في نقطة ما ان تقنية اخرى مناسبة اكثر لك، على العكس سيكون الانتقال اسهل، وستتعلم اكثر. ابدء من الان وحاول تجنب النقاشات في مثل هذه المواضيع لانها غالبا مضيعة للوقت (كما تلاحظ في رديّ هذا!) لكن عندما تدخل في مفهوم معين وتبدء بالعمل عليه، هنا يمكنك قراءة المقالات والتعمق في المفاهيم بعيدا عن اثبات ان تقنية او جهاز او شركة افضل من الاخر. بالتوفيق،،،
  16. وعليكم السلام ورحمة الله. JavaScript يتم تفسيرها على المتصفح (Interpreted Language)، بالتالي يجب ان تكون واضحة له حتى يستطيع قرائتها، يقابلها Compiled Language والتي يتم ترجمتها إلى Machine Code لا يمكن فهمة إلا بواسطة المعالج. احدى الطرق التي يمكن حماية كود جافا سكربت وأيضا زيادة الأداء في التطبيق، هي باستخدام Minification اي استخدام نسخة مضغوطة من كود الجافا سكربت، بمعنى اخر، إعادة تسمية المتغيرات إلى حرف واحد (مثل بدل name نستخدم m)، وايضاً تغيير اسماء الدوال، واختصار كل ما يمكن اختصاره، بالإضافة لإزالة جميع التعليقات Comments، بالتالي، ودمج جميع ملفات الجافا سكربت في ملف واحد Minified يكون حجمه صغير، ويصعب جدا قرائته. بالإضافة طبعاً، لذكر حقوق الملكية للكود المصدري بشكل واضح على الموقع، وعم قانونية التلاعب به. يوجد موقع يمكنه المساعدة في حماية هكذا ملفات: https://javascriptobfuscator.com/ بالتوفيق،،،
  17. Equal مقارنة نوعين من البيانات مع بعضهما، وترجع true في حال تساوت القيم. مثال: class Program { static void Main(string[] args) { int x = 5; int y = 5; bool isEqual = x.Equals(y); Console.WriteLine(isEqual); } } بالطبع النتيجة ستكون True. لان قيمة x تساوي قيمة y. لكن لو فرضنا نوع بيانات معقد مثل Student Class (اي ليس int, double, string, ...)، وأردنا التحقق من المساواة كما في المثال التالي: using System; namespace School { class Student { public string ID { get; set; } public string Name { get; set; } } class Program { static void Main(string[] args) { Student student1 = new Student(); student1.ID = "2007"; student1.Name = "Ahmad"; Student student2 = new Student(); student2.ID = "2007"; student2.Name = "Ahmad"; bool isEqual = student1.Equals(student2); Console.WriteLine(isEqual); } } } عند التشغيل نلاحظ أن النتيجة False، رغم ان بيانات الطالب الأول هي نفسها بيانات الطالب الثاني! الإجابة طبعا تكمن بأن المقارنة لا تتم على قيم البيانات (الإسم والرقم) وإنما على مؤشر هذا الطالب في الذاكرة (Pointer Reference in Stack Memory)، ولكي نغير من هذا السلوك الافتراضي، يجب علينا تغيير سلوك الدالة Equal التابعة للنوع Student، كما يلي: class Student { public string ID { get; set; } public string Name { get; set; } public override bool Equals(object obj) { Student student2 = (Student)obj; return (this.ID == student2.ID) && (this.Name == student2.Name); } public override int GetHashCode() { return base.GetHashCode(); } } الأن اصبحت عملية التحقق من المساواة تتم على مستوى القيم. بالتالي النتيجة True. GetType في المثال السابق قمنا بإنشاء نوع بيانات جديد هو Student، وكان اسم مشروعنا School، كما هو واضح من namespace، لذلك فإن الإسم الكامل لهذا النوع هو School.Student الأن لو فرضنا لدي مشروع أخر، وليكن اسمه University، ويوجد نوع بيانات اسمه Student ايضا ضمن هذا المشروع، ولكن يحوي على بيانات مختلفة، كما يلي: using System; namespace University { class Student { public string ID { get; set; } public string Name { get; set; } public string Faculty { get; set; } public double GPA { get; set; } public string PhoneNumber { get; set; } } } الآن كيف يتم تمييز Student التابع ل School عن Student التابع ل University: الإجابة هي بالإسم الكامل للنوع: School.Student student1 = new School.Student(); University.Student student2 = new University.Student(); بالتالي هناك حالات معينة أكون بحاجة معرفة نوع البيانات المستخدم، على سبيل المثال: class Program { static void Main(string[] args) { Student student = new Student(); if(student.GetType() == typeof(School.Student)) Console.WriteLine("This is a high school student"); else if(student.GetType() == typeof(University.Student)) Console.WriteLine("This is a university student"); else Console.WriteLine("Unknown student!"); } } الامر ينطبق حتى لو كان School.Student يطابق بالشكل تماما ل University.Student، اي يبقى كل منهما مختلف عن الآخر. بالتوفيق،،،
  18. وعليكم السلام ورحمة الله. بإمكانك استخدام مهاراتك في HTML, CSS, JavaScript لتطوير تطبيقات سطح مكتب تعمل على جميع انظمة التشغيل، باستخدام تقينات كثيرة اهمها Electron https://electronjs.org/ لكني انصحك وبشدة اذا اردت تعلم عمل تطبيقات سطح مكتب بشكل متقن، ان تستخدم WPF، مع نمط التصميم MVVM. اقوم حالياً بتحضير محاضرة اونلاين مجانية حول هذا الموضوع وجميع المتطلبات اللازمة للبدء فيه ومثال جيد يعرض الية استخدام نمط التصميم مع MVVM وربطه ايضا مع خدمات الويب والعديد من الميزات الأخرى. اذا رغبت بالحضور راسلني على الايميل tareqjehad@yahoo.com بالتوفيق،،،
  19. وعليكم السلام ورحمة الله. نعم var هي variable تستخدم فيما يسمى Dynamic Type، يعنى عندما لا تريد او لا ترغب بالضبط بتحديد نوع البيانات التي تتعامل معها. بحيث يقوم الـ Compiler بمعرفة نوع البيانات خلال وقت التنفيذ، وانت يمكنك استخدامها والتعامل معها كباقي المتغيرات الأخرى. في المثال المرفق المتغير cameraRotation غالبا سيكون من نوع double أو float او ربما يكون عدد صحيح int، يمكنك استخدام var وسيتم تحديد النوع تلقائيا. طبعا الأمر يختلف من لغة برمجة إلى لغة اخرى. كلامي السابق ينطبق على لغة مثل سي شارب، لكن كلغة مثل الجافا سكربت، لايوجد اصلا إلى var باعتبارها لغة Dynamic Type بتصميمها. في لغة Swift ستجد مفهوم let, var ايضا، حيث ان let تشبة const اي لا يمكن تغيير قيمته بعد تعريفها. في لغة Kotlin ستجد مفهوم var, val، ايضا بنفس المفاهيم. في النهاية، الافضل دائما استخدام اللغات التي تسمى ب Type Safe، كي لا يحدث اي ضرر بالأداء او الذاكرة. ويتم اكتشاف الاخطاء في اوقات مبكرة. وهذا احد الاسباب الذي دفع مايكروسوفت لتطوير لغة TypeScrpit والتي هي مبينة على جافا سكربت لكنها TypeSafe بالتوفيق،،،
  20. وعليكم السلام ورحمة الله لا يمكن الهروب من فكرة وجود موقع ويب (تطبيق ويب) او فقط Web Service، تقوم بحفظ بيانات المستخدمين وبيانات الدورات التدريبية، بحيث يقوم التطبيق بقراءة هذه البيانات. وبحيث يتم ادخال بيانات الدورات إما عن طريق صفحة خاصة على موقع الويب، او عن طريق تطبيق الموبايل (ايضا ضمن واجهة خاصة بالإدارة). يمكنك استخدام ASP.NET Web Api والذي يسهل عملية إنشاء الـ Web Service او REST Api، ويحتوي على ألية جاهزة لإدارة بيانات المستخدمين. (اذا وجدت الامر صعبا يمكنني المساعدة في بناءها). اخيراً: واذا فهمت سؤالك جيداً. SQLite هي قاعدة بيانات خاصة بكل جهاز على حدة، بمعنى عند كتابة بيانات عليها، فإن فقط الجهاز الذي تمت عليه الكتابة يمكنه القراءة منها، بالتالي لا يمكن مشاركة هذه البيانات مباشرة! اذا ما نحتاجه الآن: 1. خدمة ويب او بالتحديد REST API 2. إدارة حسابات المستخدمين وبيانات الدورات التدريبية واي بيانات اخرى من على REST API هذه. (بغض النظر عن نوع التطبيق سواء اندرويد او iOS او Desktop) 3. طلب هذه البيانات عن طريق تطبيق الموبايل (في الاندرويد يمكنك استخدام OkHttp او Retrofit) (ولسنا بحاجة SQLite هنا، ضمن توصيف التطبيق الحالي). 4. المستخدم للتطبيق عندما يفتح صفحة الدورات (او غالبا سيقوم بالبحث) سيحصل على احدث البيانات الموجودة (التي تم اضافتها عن طريق الموقع او تطبيق الويب او REST API) 5+ . يمكن اضافة ميزة Push Notification لإشعار المستخدمين عند إضافة بيانات جديدة على الموقع. بالتوفيق،،،
  21. اذا لم تستخدم محتوى خاص لتطبيق اخر (مثل الايقونات او الاسماء) فلا يوجد أي مانع، من تقوم بتطوير التطبيق الذي تريد بالخيارات التي تريد. بالتوفيق،،،
  22. كل شيء مسموح، Xamarin تتيح لك 100 % من الميزات الموجودة في اندرويد او iOS بالإضافة لاعادة استخدام اجزاء كبيرة من الكود بين هذين المنصتين، بمعنى هناك اجزاء معينة من الكود ستكون مشتركة يمكنك اعادة استخدامها. للتوضيح اكثر: Xamarin تتيح لك تطوير تطبيقات اندرويد بلغة السي شارب بدل الجافا، وبشكل مشابه للهيكلة الأساسية للاندرويد سواء من ناحية ملفات المشروع، او انماط التصميم الموجود، ويمكنك تصميم الواجهات كما في اندرويد تماماً، مرة اخرى، ستسفيد من سي شارب، كونها تقدم الكثير من الميزات التي تساعد في كتابة الكود بشكل افضل. نفس الأمر ينطبق على iOS لكنك بحاجة لجهاز Mac موجود على نفس الشبكة لتستطيع تصميم واجهات iOS. في هذين المنصتين، يمكنك كتابة واجهات الاندرويد بشكل مشابة للاندرويد مع جافا، وكتابة واجهات iOS بشكل مشابه ل Storyboard، ويمكنك اعادة استخدام الكود المتعلق بالاتصال بالانترنت او معالجة البيانات وغيره، مع كلا المنصتين. بالتالي لديك نسبة اعادة استخدم للكود تزيد عن 70 %. الخيار الثاني الذي تقدمه Xamarin هو Xamarin Forms وهذا يمكنك من مشاركة تقريبا 100% من الكود، اي انك تقوم بكتابة الواجهات بلغة مشركة هي Xaml، وستقوم Xamarin لاحقا بتحويلها إلى واجهات أساسية Native سواء للاندوريد او iOS لكن Xamarin Forms يوجد بها بعض التقييد في تصميم الواجهات كونها تقدم طبقة مشتركة بين المنصات، لكن في العموم يمكنك استخدامها لبناء تطبيقات رائعة. اخيرا كل ما تحدثنا عنه سابقا ينطبق أيضا على اجهزة التي تعمل بنظام Windows Phone. وحتى نظام الويندز نفسة بالتوفيق،،،
  23. وعليكم السلام ورحمة الله بالتأكيد Xamarin تدعم اللغة العربية. لكن اذا كنت تستخدم Xamarin Forms عليك القيام ببعض الجهد لجعل الواجهات تناسب اللغة العربية (اتجاه من اليمين لليسار)
  24. هذه هي نقطة البداية لتطبيق سي شارب. معرفة بهذه الشكل ليقوم نظام التشغيل باستدعائها تلقائياً. Static تعنى انها وحيدة على مستوى التطبيق، ولا يمكن عمل نسخة اخرى منها بالتالي فهي نقطة البداية الوحيدة للتطبيق، ويمكن استدعائها مباشرة دون الحاجة لعمل Object void اي اننا لا نتوقع منها اي نتائج بعد عملية استدعائها (فقط مهمتها كنقطة بداية) string[] args هذه هي مجموعة ال Parameters التي يمكن تحديدها عند تشتغيل التطبيق من Command Line على سبيل المثال: في نظام التشغيل ويندوز يوجد تعليمة mkdir لإنشاء مجلد جديد ضمن المسار الموجودين فيه، لكن التعليمة بحد ذاتها غير كافية فهي تحتاج لإسم المجلد الجديد مثلا: mkdir MyFolder هذه التعليمة ستقوم بإنشاء مجلد اسمه MyFolder الأن بإمكانك اعتبار التعليمة mkdir هي نفسها اسم برنامج السي شارب، و MyFolder هي args الاول في هذه المصفوفة. شاهد الصورة المرفقة namespace mkdir { class Program { static void Main(string[] args) { if (args.Length > 0) { string folderName = args[0]; System.IO.Directory.CreateDirectory(folderName); } } } } بالتوفيق،،،
  25. فقط للتوضيح: Xamarin هي شركة مستقلة، تم الاستحواذ عليها من قبل مايكروسوف في March 2016، وتم دمج تقنياتها مع Visual Studio واصبحت مفتوحة المصدر، وتحت ترخيص MIT. وكما اخبرتك هي منصة مستقلة يوجد برنامج Xamarin Studio يمكنك من تطوير تطبيقات الموبايل والديسك توب، وتم دعم Linux في النسخة المحدثة، بالتالي بإمكانك إنشاء تطبيقات لنظام التشغيل Linux باستخدام Xamarin. بالنسبة لتطبيق محادثة او اي تطبيق اخر يقوم بإدارة بيانات معينة، كما اخبرتك سابقاً، يمكنك ذلك بالطبع، وسأشرح ذلك لك، لكن ايضا ليس له أي علاقة برفع التطبيق على Google Play، بمعنى إن كان تطبيقك خاص بجهاز الاندرويد مثلا، (كادراة الملفات او الصور، او اي تطبيق مساعد لمستخدم الاندرويد) او سواء كان تطبيقك هو خدمي، يعتمد على الويب، او سيرفر خارجي لإدارة بياناته وبيانات المستخدمين، بالنهاية سيكون لديك ملف .apk هذا ما سيتم رفعه على المتجر، بغض النظر عن المهام التي يقوم بها. حتى تتمكن من إنشاء هكذا تطبيق، انت بحاجة لتطبيق ويب (Web Application) وليس Web Site، بمعنى انت بحاجة لقاعدة بيانات على سيرفر ما، وتطبيق ويب يقوم باستقبال الطلبات على البيانات ويرد بالشكل المناسب، هذا السلوك هو ما يطلق عليها Web Service، من خدمات الويب هذه يوجد العديد من المفاهيم، ما تحتاجه انت لتربط تطبيقك الجوال مع خدمة الويب هذه هو REST API. سأبسط لك العملية اكثر. بوجود تطبيق الويب خاصتنا على سيرفر معين، وبدعمه ل REST API، الأن بإمكانك استخدام Uri مع HTTP سواء لطلب البيانات لعرضها للمستخدم، او ارسالها للمعالجة (تشمل هذه العملية تسجيل المستخدمين، والمحادثة، وكل ما قد تحتاجه) الفكرة نفسها. مثلا لو فرضنا انك تريد جلب بيانات مستخدم من مستخدمين تطبيقك، من على تطبيق الويب التابع لك، الذي قمت بإنشائه مسبقا، وقمت باستضافته على سيرفر معين. لنفرض ان اسم الموقع الخاص بك mohammad http://www.mohammad.com/api/users/123 من خلال هذا الـ Uri (الرابط) يمكنك طلب بيانات الملف الشخصي للمستخدم صاحب الرقم 123. وبما أني ذكرت (طلب البيانات) اي الميثود GET، التابعة ل HTTP، اي عندما تطلب هذا المصدر من خلال تطبيق الجوال، يجب ان تحدد ان نوع الفعل او الأكشن المطلوب هو GET أو قراءة فقط. بمعنى انك لو قمت بتغيير نوع الفعل إلى DELETE فإنه سيقوم بحذف هذا الملف الشخصي صاحب الرقم 123 اذا: انت تتعامل مع البيانات بشكل بسيط، وباستخدام مفاهيم HTTP. وبالتأكيد يمكنك استخدام POST لكتابة البيانات الجديدة، او PUT للتعديل على بيانات سابقة. السؤال الآن: كيف احصل على على خدمة الويب هذه )REST API) الجواب: ستقوم بتطويرها (بشكل موقع الكتروني، بدون واجهات للمستخدم ان لم تكن بحاجتها)، يمكنك استخدام تقنية ASP.NET Web API، لانجاز المهمة بشكل مثالي. كما يمكنك ايضا استخدام API، تابعة لشركة او تطبيق اخر، اذا قاموا هم بتوفير هذا الخدمة (مثال خدمة الطقس، انت تستطيع قراءتها من Yahoo مثلاً، دون الحاجة لكتابة خدمة ويب خاصة بالطقس). ويمكنك ايضا استخدام Google Firebase لإدارة بيانات المستخدمين وعمل تطبيق محادثة والعديد من الخيارات الاخرى، ويمكنك ايضا استخدام Microsoft Azure، او اي منصة سحابية اخرى. غالبا سيكون الخيار الاول هو المناسب، وهو ان تقوم ببناء الخدمة بنفسك، لانك اعلم باحتياجات تطبيقك. في النهاية، بعد الانتهاء من تطوير خدمة الويب، يمكنك رفعها على اي سيرفر كما نقوم برفع اي موقع الكتروني اخر. (مرة اخرى لا علاقة لتطبيق الجوال بهذه المتطلبات). بعد رفع التطبيق على المتجر، وبافتراض ان (موقعك) او خدمة الويب تعمل بشكل صحيح على www.mohammad.com، فإن تطبيقك سيعمل بالشكل المطلوب. بالتوفيق،،،
×
×
  • أضف...