سعيد

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

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

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

  • Days Won

    6

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

30 Excellent
  1. كلامك صحيح. إذًا أنصحك أن تجرب الطريقة الموجودة ضمن هذا الملف: https://github.com/Muhammad-Khalifa/Free-Snipping-Tool/blob/master/Free Snipping Tool/Operations/UploadToSuar.cs إذا أردت المزيد من المعلومات يمكنك مراجعة الصفحة التالية: https://io.hsoub.com/webdev/43269-فتح-الشيفرة-المصدرية-لـ-suar-me-snipping-tool
  2. إذا كنت تقصد التنبيهات التي تظهر في الجهة اليسرى العليا من هذا الموقع فالأمر بسيط. توجد برمجيّة JavaScript تعمل بشكل مستمر ضمن متصفّح الويب الخاص بك. تعمل هذه البرمجيّة على إرسال طلبات HTTP من النوع GET (بالنسبة لهذا الموقع) وبشكل غير متزامن أي أنّك لا تشعر بها. تُرسل هذه الطلبات إلى خدمة ويب web service التي قد تكون عبارة عن برمجيّة مكتوبة بلغة PHP أو غيرها، لتطلب منها التحديثات الخاصة بالمستخدم. فمثًلا وبينما أكتب إليك ردّي هذا لاحظت أنّ هذه البرمجيّة ترسل الطلب التالي كل فترة زمنيّة قصيرة: https://academy.hsoub.com/questions/6959-%D9%83%D9%8A%D9%81-%D9%8A%D9%85%D9%83%D9%86-%D8%B9%D9%85%D9%84-%D9%86%D8%B8%D8%A7%D9%85-%D8%A7%D8%B4%D8%B9%D8%A7%D8%B1%D8%A7%D8%AA-%D8%A8%D9%84%D8%BA%D8%A9-php%D8%9F/?app=core&module=system&controller=ajax&do=instantNotifications&csrfKey=****&notifications=0&messages=0 وكان الرد عليها من خدمة الويب على الشكل التالي (الرد بصيغة json): {"notifications":{"count":"0","data":[]},"messages":{"count":"0","data":[]}} وكما هو واضح أنّه لا توجد أيّة رسائل أو تنبيهات جديدة بالنسبة لي حاليًّا. لو كان يوجد مثل هذه التنبيهات ستعمل برمجيّة JavaScript السابقة على تحديث الواجهة عندي لإشعاري بوجود تنبيهات محدّدة.
  3. أتصور أنّه لن ينجح استخدام HttpWebRequest وأشباهه دومًا. وغالبًا ستعاني من بعض الصداع نتيجة ذلك . أنصحك باستخدام المكوّن WebBrowser فهو الأفضل والأسلم، وهو ينجح دومًا. سيعمل هذا المكوّن على التعامل مع الموقع الذي ترغبه كما يتعامل أيّ متصفّح آخر مع ذلك الموقع، حيث يمكنك عند تحميل صفحة تسجيل الدخول، الوصول إلى مربعات النص الخاصة باسم المستخدم وكلمة المرور، فتعمل على تزويدها بهذه البيانات ثم تنقر زر تسجيل الدخول برمجيًّا! انظر إلى الشيفرة التالي بلغة سي شارب والتي يمكن تعديلها بسهولة إلى لغة vb.net لتتوضّح لك الفكرة: private void Form1_Load(object sender, EventArgs e) { webBrowser1.Navigate("https://mostaql.com/auth"); } private void webBrowser1_DocumentCompleted(object sender, WebBrowserDocumentCompletedEventArgs e) { if(e.Url.AbsoluteUri != "https://mostaql.com/auth") { return; } HtmlElement userNameElement = webBrowser1.Document.GetElementById("identity"); HtmlElement passwordElement = webBrowser1.Document.GetElementById("password"); HtmlElementCollection buttons = webBrowser1.Document.GetElementsByTagName("button"); userNameElement.InnerText = "*******"; passwordElement.InnerText = "*****"; for(int i = 0; i < buttons.Count; i++) { var button = buttons[i]; if( button.InnerText.Trim() == "تسجيل دخول") { button.InvokeMember("click"); break; } } } يحوي المقطع السابق الشيفرة البرمجيّة اللازمة لتسجيل الدخول إلى موقع مستقل حيث يمكنك أن تعالج مستند HTML وعناصره بالطريقة التي تناسبك، فقط عليك أن تعرف معرّفات أو أنواع العناصر التي لديك في المستند والتي يمكن الحصول عليها بسهولة من خلال أدوات التطوير البرمجي الموجودة في المتصفحات. لا يعني ذلك أنّك لا تستطيع تنفيذ ذلك باستخدام HttpWebRequest ولكن أتصوّر أنّ طريقتي أيسر. على العموم يمكنك الإطلاع على المزيد حول هذا الموضوع من الرابطين التاليين: [Dev Tutorial] WebBrowser - Web Scraping Multi Threaded WebScraping in C#
  4. أخي الكريم لقد اطلعت على هذا الدرس، الفقرة (التمرين) التي تشير إليها مرتبطة بشيفرة برمجيّة موجودة في درس آخر. ولكن من الممكن أنّه قد حدث التباس لديك لأنّ الكاتب لم يذكر في أيّ درس توجد دالة تسجيل الدخول. على العموم يمكنك اعتبار الدالة التالية التي اسمها login كدالة تسجيل دخول: def login(): print 'Hello User, this is a basic sign up/login Program' username = raw_input('Enter your username please: ') password = raw_input('Enter the your password please: ') password_verification = raw_input('Verify password: ') if password == password_verification: print 'You have Successfully Signed up! \n' username_sign_in = raw_input('Enter your username please: ') password_sign_in = raw_input('Enter your password please: ') if username_sign_in == username and password_sign_in == password: is_logged_in = true else: is_logged_in = false print 'username or password do not match! Please try again!' else: print 'The password and the password verification do not match! Please try again' الدالة السابقة حصلت عليها من هذا الدرس وقد أجريت عليها تعديلًا بسيطًا. أمّا الدالة المُزَخرفة if_user_logged_in فيجب أن تختبر ضمنها قيمة المتغير is_logged_in فإذا كان true فهذا يعني أنّ المستخدم قد تمّ تسجيل دخوله، أمّا إذا كان false فيعني ذلك أنّ المستخدم لم يسجّل دخوله بعد لذلك يجب أن تستدعي عندئذٍ الدالة login السابقة. من الواضح أنّك ستحتاج إلى تعريف المتغيّر is_logged_in أولًا خارج أي دالة. ملاحظة: أنصحك بطرح هكذا اسئلة ضمن التعليقات على الدرس نفسه، لكي يستطيع الكاتب التواصل معك مباشرةً.
  5. بالنسبة لبايثون نعم يمكن استخدامها لبرمجة خدمات ويب للتعامل مع تطبيقات الأندرويد. ولكن ماالذي تعنيه بالضبط بتطبيقات realtime apps باستخدام بايثون؟ فيم ستحتاج بايثون لمثل هذه التطبيقات؟
  6. لو تزودنا برابط إلى هذا التمرين يكون أفضل.
  7. يعود ذلك إلى التقنيات التي يستخدمونها. فمع Xamarin كما تعلم فلغة برمجة واحدة كفيلة بتنفيذ المطلوب، أمّا بالنسبة لاستخدام أدوات التطوير البرمجيّة التي تأتي مع كل نظام تشغيل، فهذا يعني كتابة تطبيق جديد لكل نظام تشغيل.
  8. كود سي شارب لا يتم ترجمته إلى كود جافا بأيّ حال من الأحوال. بالنسبة للأندرويد سيتم ترجمته إلى MSIL ومن ثمّ يتم تشغيله باستخدام CLR مخصّص للعمل على أندرويد. أمّا بالنسبة لـ iOS فسيتم ترجمته إلى Native Code مماثل تمامًا لما تنتجه لغة Objective-C. إذا أردت نصيحتي. تعلّم جافا على أندرويد ستوديو، وعند تحترف العمل على أندرويد انتقل إلى iOS. ستشعر بالكثير من التردّد وأنت تعمل على Xamarin.
  9. بالنسبة للنقاط التي أوردتها فسأخبرك بتصوري حول بعضها: 1- يصلح Xamarin للتطبيقات الصغيرة والكبيرة على حدٍّ سواء. وهو احترافي للغاية، وبتقديري أنّ مستقبلًا مشرقًا ينتظره. 2- النقائص لا تكاد تُذكر، وبرأيي أنّه حتى تصل لمرحلة تحتاج فيها لمثل هذه النقائص (وأستبعد ذلك) ستكون هذه الأمور قد تمّ تلافيها. 3- بالنسبة للسرعة فهذا يحتاج إلى دليل! يجب إنشاء تطبيقين متماثلين تمامًا في المهام ثم المقارنة بينهما. بالمناسبة من المستحيل التمييز بالنسبة لأنظمة iOS بين التطبيقات المنشأة باستخدام Xamarin وبين غيرها. 4- بالنسبة للحجم الكبير للتطبيقات، فقد يكون كذلك ولكن هناك بعض المبالغة. 6- مجتمع Xamarin صغير بالنسبة لمجتمع جافا - أندرويد. هذا أمر صحيح، ولكنّه مجتمع نشيط. وأتصوّر أنّ مجتمع مطوّري swift ليس أفضل بكثير من مجتمع Xamarin. 7- موضوع التصميم ليس له علاقة بلغات البرمجة أو ببيئات التطوير المستخدمة حسب رأيي الشخصي. ملاحظة: لا أعني من كلامي السابق أنّ Xamarin هي الأفضل أو ما شابه. ولكن إذا أردت تطوير تطبيق جوال يعمل على أكثر من نظام تشغيل بنفس الوقت فلن تجد أفضل من Xamarin على الأقل في الوقت الحالي.
  10. من الممكن أن يكونوا قد فعلوا ذلك بالتأكيد. إلّا أنّه ليس من الضروري أن تكون أنشؤوا تطبيق لأندرويد بجافا أو تطبيق لأيفون بلغة swift أو objective-c. من الممكن أنّهم قد استخدموا Cordova مثلًا لكي يستخدموا نفس لغة JavaScript لإنشاء تطبيق يعمل على أندرويد وكذلك الأمر على iPhone. وربما يكون هذا الحل أسهل بالنسبة لهم لأنّ تطبيق JavaScript جاهز بالنسبة إليهم.
  11. أولًا اللعبة جميلة حقاً تمّ برمجة هذه اللعبة باستخدام لغتي برمجة: JavaScript و C++ بالنسبة للغة JavaScript فهي اللغة التي تعمل ضمن المتصفّح والتي تتفاعل مع اللاعب. اللعبة بسيطة جدًّا والنواحي الرسوميّة فيها غير متكلّفة وغير معقدة بطبيعة الحال، لذلك تعمل بسلاسة على المتصفّح. بالنسبة للغة C++ فهي اللغة التي استخدمت لكتابة برنامج إدارة اللعبة الذي يعمل على الخادوم Server، والذي يتعامل مع برامج JavaScript التي تعمل ضمن متصفّحات اللاعبين. لغة C++ سريعة بالطبع ولكن العامل الحاسم هنا هو إمكانيات الخادوم (أو الخواديم) الذي يعمل عليها هذا التطبيق، التي يجب أن تكون سريعة كفاية لمعالجة عدد المستخدمين الكبير. لغتي البرمجة JavaScript و C++ بعيدتين جدًّا عن بعضهما. أنصحك أن تبدا بتعلّم JavaScript انظر لهذه السلسلة الممتازة: http://www.w3schools.com/js/
  12. تحتاج لأن تعمل على مشاريع برمجية صغيرة، ولو بالمجان ستستفيد من ذلك خبرة عملية جيدة إن شاء الله.
  13. لا يمكن ذلك من أجل المصفوفات. أنصحك باستخدام القاموس Dictionary<TKey, TValue> لهذا الغرض. حيث من الممكن تعريف المفتاح TKey على أنّه من النوع string. انظر إلى المثال التالي: Dictionary<string,int> dic = new Dictionary<string, int>(); dic.Add("Egypt",20); dic.Add("Syria",963); dic.Add("Saudia", 966); Console.WriteLine(dic["Syria"]); لاحظ كيف نصل إلى العناصر المخزّنة ضمن القاموس dic. ملاحظة: يمكنك استخدام Console Application لتجربة هذا البرنامج، حيث تضع الشيفرة السابقة ضمن التابع Main.
  14. إليك برنامج بسيط أنشأته لهذا الغرض، حيث يفترض أنّه لديك قاعدة بيانات اسمها MyDatabase وجدول اسمه MyTable. سنضيف البيانات من ListBox إلى الحقل MyColumn من هذا الجدول. قاعدة البيانات المستخدم SQL Server. انظر إلى الشيفرة التالية: var items = lstItems.Items; using (SqlConnection conn = new SqlConnection(@"Data Source=(localdb)\Projects;Initial Catalog=MyDatabase;Integrated Security=True;Connect Timeout=30;Encrypt=False;TrustServerCertificate=False")) { conn.Open(); foreach (var item in items) { var command = conn.CreateCommand(); command.CommandType = CommandType.Text; command.CommandText = "INSERT INTO MyTable VALUES(@pItem)"; var pItem = new SqlParameter { ParameterName = "pItem", DbType = DbType.String, Direction = ParameterDirection.Input, Value = item }; command.Parameters.Add(pItem); command.ExecuteNonQuery(); } } MessageBox.Show("Finish"); كما يمكنك تفقد المرفق لترى البرنامج كاملًا. (قد تحتاج إلى تعديل الـ connection string بحسب إعدادات الجهاز لديك). UpdateFromListBox.zip
  15. يختلف بالطبع عن Xamarin. ولكن حسبما وجدت هنا فإنّ استدعاءات NativeScript للواجهة البرمجيّة API الخاصة به، يتم ترجمتها أثناء وقت التنفيذ runtime إلى استدعاءات أصلية للواجهة البرمجيّة API الخاصة بنظام التشغيل الذي يعمل عليه التطبيق. بالنسبة للأداء تدّعي نفس الصفحة السابقة (وهي من شركة Telerik المحترمة) أنّ أداء التطبيق يوازي ذلك المكتوب بلغات مثل Java أو Swift. أمّا عن كون أنّه الحل الأفضل لمطوري الويب، فهذا أمر من الصعب الإجابة عنه، لأنّ الخيارات كثيرة ومتنوعة. ولكن من المهم أن تنتبه إلى أنّ NativeScript جديدة نسبيًا وهكذا تكون المواد التعليمية عنها قليلة. يمكنك الإطلاع على دروس خاصة بالموقع الرسمي لهذه التقنية. انظر هنا.