سعيد
-
المساهمات
96 -
تاريخ الانضمام
-
تاريخ آخر زيارة
-
عدد الأيام التي تصدر بها
6
إجابات الأسئلة
-
إجابة سعيد سؤال في كيف تم تصميم لعبة agar.io؟ كانت الإجابة المقبولة
أولًا اللعبة جميلة حقاً
تمّ برمجة هذه اللعبة باستخدام لغتي برمجة: JavaScript و C++
بالنسبة للغة JavaScript فهي اللغة التي تعمل ضمن المتصفّح والتي تتفاعل مع اللاعب. اللعبة بسيطة جدًّا والنواحي الرسوميّة فيها غير متكلّفة وغير معقدة بطبيعة الحال، لذلك تعمل بسلاسة على المتصفّح.
بالنسبة للغة C++ فهي اللغة التي استخدمت لكتابة برنامج إدارة اللعبة الذي يعمل على الخادوم Server، والذي يتعامل مع برامج JavaScript التي تعمل ضمن متصفّحات اللاعبين. لغة C++ سريعة بالطبع ولكن العامل الحاسم هنا هو إمكانيات الخادوم (أو الخواديم) الذي يعمل عليها هذا التطبيق، التي يجب أن تكون سريعة كفاية لمعالجة عدد المستخدمين الكبير.
لغتي البرمجة JavaScript و C++ بعيدتين جدًّا عن بعضهما. أنصحك أن تبدا بتعلّم JavaScript انظر لهذه السلسلة الممتازة:
http://www.w3schools.com/js/
-
إجابة سعيد سؤال في ما هو الفرق بين الـAbstract Class و الـInterface في PHP OOP ؟ كانت الإجابة المقبولة
الفرق الأساسي بينهما (من الناحية العمليّة) هو أنّه في الأصناف المجرّدة Abstract Classes من الممكن كتابة توابع Methods تحوي شيفرة برمجيّة فعلية، في حين أنّ هذا الأمر غير ممكن بالنسبة للواجهات Interfaces.
-
إجابة سعيد سؤال في كيف أنشئ نسخة احتياطية من تطبيق على xamarin؟ كانت الإجابة المقبولة
أنصحك ألّا تلجأ لهذا الأسلوب أبدًا. الأفضل أن تستخدم نظام إدارة الإصدارات مثل Git. يُمكّنك أن تُنشأ حسابًا على Github.com لهذا الغرض أو أن تنشأ حسابًا على bitbucket.com إذا كنت تريد أن يكون مشروعك غير متاح للعموم. هذا إذا أردت إنشاء نسخة أون لاين من المشروع. أمّا إذا أردت التخزين على قرصك الصلب فقط؛يمكنك استعمال git فقط. وهذا هو الأسلوب المتبع من أغلب مطوّري التطبيقات (بصرف النظر عن نوعها). توجد سلسلة من المقالات هنا في أكاديميّة حسّوب حول أساسيّات التعامل مع Git يمكنك متابعتها من هنا.
أمّا إذا كنت تريد نسخ المشروع فقط. فقم بإغلاق فيجول ستوديو، واذهب إلى المجلّد الخاص بالحل Solution الذي يتضمّن المشروع، ثم نسخه إلى مكان آخر كما تفعل مع أي مجلّد.
-
إجابة سعيد سؤال في ما الفرق بين Arrays و Matrix بالماتلاب؟ كانت الإجابة المقبولة
ينبغي أن نتفق أولًا أنّ كل متغيّر من متغيّرات ماتلاب MATLAB هو عبارة عن مصفوفة Matrix. أمّا عمليّات الصفوف Arrays Operations وعمليّات المصفوفات Matrix Operations فهي تتعلّق بكيفيّة إجراء العمليّات الرياضيّة على متغيّرات (مصفوفات) ماتلاب.
تجري عمليّات الصفوف Arrays Operations على مستوى العنصر. حيث ينبغي أن يكون للمتغيّرات (التي تخضع المعالجة بهذا النوع) الحجم نفسه وإلّا ستحصل على خطأ. انظر إلى المثال التالي:
A = [1 1 1] B = [1 2 3] A+B ans = 2 3 4 أجرينا عمليّة جمع بسيطة على المتغيّرين A و B. لاحظ من الخرج ans أنّ نتيجة عمليّة الجمع عبارة عن مصفوفة جديدة تنتج من جمع كل عنصر من المتغيّر (المصفوفة) A مع نظيره من المتغيّر (المصفوفة) B. أمّا إذا احببنا إجراء عمليّة ضرب صفوفيّة فعليك استخدام العامل (*.) انظر إلى المثال التالي:
A = [1 1 1] B = [1 2 3] A.*B ans = 1 2 3 بنفس الأسلوب تمامًا نلاحظ أنّ الضرب يجري على مستوى العناصر المتناظرة في كل من المصفوفتين A و B.
بالنسبة للعمليّات المصفوفيّة، فيتشابه أسلوب الجمع والطرح مع العمليّات الصفوفيّة. أمّا بالنسبة للضرب فنستخدم في هذه الحالة العامل * لإجراء عمليّة الضرب بين مصفوفتين بالمفهوم الرياضي المتعارف عليه للضرب بين المصفوفات، حيث يجب أن يتحقّق شرط التوافق بين الأبعاد لتصبح هذه العمليّة صحيحة كما هو معروف. انظر إلى المثال التالي:
A = [1 1 1] B = [1; 2; 3] A*B ans = 6 لاحظ أنّ المصفوفة الناتجة هي من الحجم 1x1 (القيمة 6).
لمزيد من المعلومات يمكنك مراجعة هذا الرابط.
-
إجابة سعيد سؤال في لماذا لا تعد C++ تحديثا للغة سي؟ كانت الإجابة المقبولة
في الحقيقة تُعتبر لغة c++ امتدادًا extension للغة c وليست تحديثًا لها. تم إيجاد هذه اللغة من قِبَل Bjarne Stroustrup لتدعم البرمجة كائنيّة التوجّه Object Oriented Programming (OOP). تدعم لغة c++ البرامج المكتوبة بلغة c بالكامل دون أي مشكلة، وفي ذلك فائدة عظيمة فيما يتعلّق بالتوافقيةّ مع البرامج القديمة.
برأيي ألّا تشغل نفسك بكون لغة c++ هي لغة مستقلة أم ليست مستقلة، فالذي تحتاجه فقط أن تعرف أنّه بإمكانك استخدام مترجمات c++ لكتابة تطبيقات بالنمط القديم (نمط C) أو بالنمط الجديد (C++) أو بمزيج بينهما. والخيار الأخير هو الخيار الذي يلجأ إليه معظم مبرمجي C++.
-
إجابة سعيد سؤال في هل من امكانية التحكم بكاميرا الجوال من خلال الحاسوب؟ كانت الإجابة المقبولة
يمكنك ذلك من خلال الطريقة التالية التي جرّبتها بنفسي.
نزّل البرنامج IP Webcam من هنا.
بعد تثبيت البرنامج، افتحه والمس Start server من الأسفل (استخدم التمرير ليظهر في الأسفل). سيعمل البرنامج على تشغيل الكاميرا بوضعية الفيديو.
شغّل برنامج VLC media player (إذا لم يكن عندك هذا البرنامج يمكنك تحميله من هنا) ثم من قائمة وسائط اختر: افتح دفق شبكة. ثم اكتب عنوان IP الخاص بهاتفك على الشبكة مكان المستطيل الأحمر كما في الشكل التالي:
انقر الزر "شغل" واستمتع بمشاهدة ما تعرضه كاميرا الهاتف.
-
إجابة سعيد سؤال في ملف الـ web.config في تطبيقات الـ ASP.Net؟ كانت الإجابة المقبولة
التحقّق من الطلب request validation هو ميزة في ASP.NET تفحص طلبات HTTP وتتحقّق من كونها خالية من محتوى من الممكن أن يكون ضارًّا. قد يكون هذا المحتوى المشكوك في أمره عبارة عن كود HTML أو حتى كود JavaScript موجود ضمن جسم أو ترويسة أو ضمن الـ cookies الخاصّة بطلب HTTP.
فمثلًا إذا كان للموقع صفحة تسمح للمستخدمين بإدخال بعض التعليقات، فمن غير المنطقي أن تحتوي تلك التعليقات على كود HTML أو كود JavaScript وإلّا فإنّ الطلب هو عبارة عن هجوم XSS وهاذا ما سيمنعه ASP.NET في هذه الحالة يتم وضع الوسم التالي في ضمن ملف web.config:
<system.web> <httpRuntime requestValidationMode="2.0" /> </system.web>
-
إجابة سعيد سؤال في كيف يمكن كتابة الأمر التالي بلغة c؟ كانت الإجابة المقبولة
يمكن ذلك من خلال المكتبة time.h والدالتين time و localtime والبنية time_t انظر إلى الكود التالي:
#include <stdio.h> #include <time.h> int main (int argc, char *argv[]) { time_t now; struct tm *tm; now = time(0); if ((tm = localtime (&now)) == NULL) { printf ("Error extracting time stuff\n"); return 1; } if(tm->tm_hour == 14 && tm->tm_min == 30){ printf("Welcome, time now is: %02d:%02d\n",tm->tm_hour, tm->tm_min); } else{ printf("You are late!\n"); } return 0; }
-
إجابة سعيد سؤال في مشكلة عدم عمل كود بلغة C؟ كانت الإجابة المقبولة
الحقيقة هناك العديد من الأخطاء نتيجة التسرّع في إدخال الشيفرة وعدم الانتباه. بعد عدّة تعديلات أجريتها على برنامجك، البرنامج التالي تمّت ترجمته بنجاح:
#include <stdio.h> #include <stdlib.h> #include <string.h> struct Employe { char nom[50] ; char prenon[50]; char fanction[50]; int salair[50]; char matricle[50]; } employe ; int main() { FILE *index; int i,n; char nomfichier[50]; Employe E; do { printf("entrez nom fichier\n"); scanf("%s",&nomfichier); index=fopen(nomfichier,"W"); if(!index) { printf("ereeur impossible \n"); } }while(!index); printf("entrez nombre employe \n"); scanf("%d",&n); for(i=0;i<n;i++) { printf("entrez nom employe \n"); scanf("%S",&E.nom); printf("entrez prenon \n"); scanf("%S",&E.prenon); printf("entrez nom fanction \n"); scanf("%S",&E.fanction); printf("entrez salair \n"); scanf("%d",&E.salair); printf("entrez matricle \n"); scanf("%S",&E.matricle); fprintf(index,"%s\n%s\n%s\n%s\n%d\n",&E.nom,&E.prenon,&E.fanction,&E.matricle,&E.salair); } fclose(index); system("pause"); } إذا أحببت أن تعرف أخطائك، قارن بين برنامجي وبرنامجك
-
إجابة سعيد سؤال في أحتاج مساعدة في فهم كود php كانت الإجابة المقبولة
يعني ذلك أنّك تمرّر المتغيّر بالمرجع أي تمرّر عنوانه وليس قيمته.
في البرنامج السابق، أسندت القيمة 3 للمتغيّر a$ ثم مرّرته بالمرجع إلى الدالة doSomething، فأصبح كل من المتغيرين arg$ و a$ يشيران إلى نفس القيمة.
ضمن الدالة doSomething أسندنا قيمة arg$ إلى المتغيّر return$ ثم زدنا قيمة arg$ بمقدار واحد:
$arg+=1; فأصبح كل من arg$ و a$ يحمل القيمة 4
ثم أعادت الدالة القيمة الأصلية للمتغيّر a$ (قبل الزيادة) والتي خزنّاها ضمن المتغيّر return$ وذلك عن طريق العبارة:
return $return; ستخزّن القيمة المُعادة ضمن المتغيّر b$ الذي ستكون قيمته في هذه الحالة 3، وتصبح قيمة a$ تساوي 4.
-
إجابة سعيد سؤال في ما هو multithreading؟ كانت الإجابة المقبولة
تقنيّة مسارات التنفيذ المتعدّدة Multithreading هي تقنيّة يمكن من خلالها تنفيذ أكثر من مسار تنفيذ Thread بنفس الوقت. وهي تقنيّة ليست خاصّة بـ Java بل هي مستخدمة في العديد من لغات البرمجة.
في لغات البرمجة التي تدعم مفهوم OOP (مثل جافا) يكون مسار التنفيذ Thread عبارة عن تابع Method ضمن أحد الأصناف، يحتوي هذا التابع عن بعض الشيفرة البرمجيّة التي يتم تنفيذها، بمجرّد الخروج من هذا التابع يتوقّف تنفيذ مسار التنفيذ. تعتمد التطبيقات عادةً على وجود مسار تنفيذي رئيسيّ يعمل على إنشاء مسارات تنفيذ أخرى عند الحاجة.
فإذا جرّبت مثلًا في أحد البرامج أن تنقر على زر يعمل على جلب بيانات ذات حجم كبير من الانترنت، وأثناء ذلك استطعت أن تنفّذ بعض المهام الأخرى على نفس البرنامج، فأنت في الحقيقة تكون قد استخدمت مسارات تنفيذ متعدّدة MultiThreading. السبب في ذلك أنّ مسار التنفيذ الرئيسي الذي يسمح لك بالتفاعل مع أزرار البرنامج، قد أنشئ مسار تنفيذ جديد (نتيجة نقرك للزر) يعمل على جلب البيانات المطلوبة من الانترنت دون أن يشغل مسار التنفيذ الرئيسي، بدليل أنّك استطعت أن تنفّذ مهام أخرى من نفس البرنامج.
الوصف السابق بسيط للغاية، والموضوع كبير جدًّا، ولكن بعض لغات البرمجة قد تجعل منه أكثر سهولة من ناحية الاستخدام مثل لغة سي شارب.
-
إجابة سعيد سؤال في ما هو urlencode وurldecode؟ كانت الإجابة المقبولة
يعمل التابع HttpUtility.UrlEncode على إجراء ما يلي على النص الممرّر له:
1- استبدال كل فراغ بالمحرف (+).
2- استبدال كل محرف غير حرفي (أحرف الأبجديّة الانجليزية) أو غير رقمي بتمثيله الست عشري hexadecimal.
مثال:
رابط هذه الصفحة هو:
https://academy.hsoub.com/questions/6169-ما-هو-urlencode-وurldecode؟/ بعد تمرير هذا النص إلى التابع HttpUtility.UrlEncode سنحصل على النتيجة التالية:
https%3a%2f%2facademy.hsoub.com%2fquestions%2f6169-%d9%85%d8%a7-%d9%87%d9%88-urlencode-%d9%88urldecode%d8%9f%2f أي باختصار، يستبدل هذا التابع المحارف التي قد تسبّب بعض المشاكل حين يتمّ تفسيرها على الأنظمة المختلفة، بمحارف أخرى تكافئها ولا تسبّب مثل هذه المشاكل.
بالنسبة للتابع HttpUtility.UrlEncode فيعمل بالعكس تمامًا.
ملاحظة: ستحتاج إلى إضافة مرجع reference إلى الملف System.Web.dll إلى مشروعك، في حال كان هذا المرجع غير موجودًا.
-
إجابة سعيد سؤال في ما الفرق بين JavaScript و CoffeeScript؟ كانت الإجابة المقبولة
لغة CoffeeScript هي لغة نصيّة Scripting Language تُترجم إلى JavaScript. بمعنى أنّ أي تعليمات برمجيّة تكتبها باستخدام هذه اللغة، سيتمّ تحويلها إلى مكافئاتها من العبارات البرمجيّة المكتوبة بلغة JavaScript قبل أن يتم تنفيذها.
تستطيع القول أنّها عبارة عن أسلوب مختلف لكتابة JavaScript. فأي مكتبة مكتوبة بلغة CoffeeScript سيتم تحويلها بالكامل إلى مكافئها بلغة JavaScript. والعكس صحيح. إذ من الممكن تحويل مكتبة بلغة JavaScript إلى ما يكافئها بلغة CofeeScript وإجراء بعض التعديلات عليها ومن ثمّ ردّها مرّة أخرى إلى JavaScript.
توجد أيضًا لغة TypeScript التي تسلك نفس سلوك CoffeeScript في علاقتها مع JavaScript.
انظر إلى كود CoffeeScript التالي:
Square = (x) -> result = x * x result alert Square(5) سيتم تحويل الكود السابق إلى الكود التالي بلغة JavaScript:
var Square = function(x) { var result = x * x; return result; }; alert(Square(5));
-
إجابة سعيد سؤال في كيف أمنع المستخدم من الدخول إلى صفحة تسجيل الدخول باستخدام ASP.NET؟ كانت الإجابة المقبولة
هناك حل بسيط. أضف الكود التالي إلى حدث Page_Load الخاص بصفحة تسجيل الدخول Login على الشكل التالي:
protected void Page_Load(object sender, EventArgs e) { if (Session["username"] != null) Response.Redirect("welcome.aspx"); }
ستعمل الشيفرة السابقة ضمن الحدث Load للصفحة Login على التأكّد من وجود جلسة صالحة للعمل قبل تحميل صفحة تسجيل الدخول. فإن كانت هذه الجلسة موجودة (أي صالحة) سيتم تحويل المتصفّح فورًا إلى صفحة الترحيب welcome ولا تظهر صفحة تسجيل الدخول، وإلّا فسيكون المستخدم غير مسجّل للدخول، لذلك ستظهر له صفحة تسجيل الدخول كالمعتاد.
-
إجابة سعيد سؤال في كيف أعمل نسخة image للويندوز؟ كانت الإجابة المقبولة
1- من زر إبدأ Start اختاري لوحة التحكم Control Panel.
2- من System And Security اختاري Back up your computer.
3- من القائمة الجانبية اليسرى انقري Create a system image.
ستظهر لك هذه النافذة:
لاحظي أنّني أستخدم قرص صلب خارجي، وقد اكتشفه ويندوز تلقائيًّا.
4- يمكنك إنشاء صورة image على محرّك أقراص DVD ولكن غالبًا لن تجدي محرّك أقراص DVD كافٍ لهذه العمليّة. أو يمكنك إنشاء هذه الصورة على محرّك أقراص شبكي (الخيار On a network location ) والذي يتطلّب من حاسوبك أو يكون على شبكة محليّة، وأن تكون هناك مشاركة معه على مجلّد ما.
5- بعد نقر زر Next. ستنتقلين إلى نافذة توضّح مالذي سيتم ضمّه في النسخ الإحتياطي image، مع الوسيط الذي سيُستخدَم في التخزين.
6- انقري زر Start Backup لتبدأ عملية إنشاء النسخة الإحتياطية image لكامل محرّك الأقراص الذي اخترته.
ملاحظة: إذا كنت تمتلكين قرصي صلب منفصلين، فيمكن إجراء نسخ إحتياطي من أحدهما على الآخر دون الحاجة إلى قرص صلب خارجي أو مشاركة على الشبكة.
-
إجابة سعيد سؤال في ما هي التعليمات التي تستخدم للكتابة على الملفات النصية و القراءة منها في لغة سي؟ كانت الإجابة المقبولة
بالنسبة للكتابة إلى الملفات النصية:
1- يجب تضمين المكتبة stdio.h.
2- ثمّ نعرّف مؤشّر للكائن FILE.
3- نفتح الملف باستخدام الدالة fopen الذي يتطلب وسيطين: مسار الملف، بالإضافة إلى طريقة الفتح (نضع الخيار w للكتابة فقط، والخيار +w للكتابة مع القراءة على أن يتم مسح محتويات الملف في حال كان موجودًا أو إنشاء واحد جديد إن لم يكن كذلك).
4- يمكن كتابة أي نص ترغبه باستخدام التابع fprintf وهو يطلب وسيطين أيضًا: المؤشّر إلى الملف الذي فتحناه قبل قليل، بالإضافة إلى النص المراد كتابته إلى الملف.
5- إغلاق الملف باستخدام الدالة fclose التي تتطلّب مؤشّر الملف الذي فتحناه سابقًا.
بالنسبة للقراءة من الملفات النصية:
1- نفس الخطوة 1 السابقة.
2- نفس الخطوة 2 السابقة.
3- نفس الخطوة 3 السابقة مع الانتباه إلى الخيار r يعني قراءة فقط، والخيار +r يعني القراءة والكتابة معًا.
4- يمكن قراءة أي نص باستخدام الدالة fgets وهي تتطلّب ثلاثة وسائط: الأوّل هو مؤشر الملف الذي فتحناه، والثاني هو كمية المحارف المراد قراءتها، والثالث هو متغيّر (يكون عادة مؤشّر) لكي تستطيع الدلة fgets تخزين النص الذي تقرؤه من الملف ضمنه.
5- نفس الخطوة 5 السابقة.
إليك الآن البرنامج التالي الذي ينشئ ملفًا نصيًا اسمه test.txt ضمن المجلد tmp (يجب أن تنشئ هذا المجلد) ويكتب إليه النص "My name is saeed\n" ثم يقرأ نفس النص مرة أخرى ويطبع النتيجة على الشاشة، ومن ثم يغلق الملف:
#include <stdio.h> main() { FILE *fp; char buff[255]; fp = fopen("/tmp/test.txt", "w+"); fprintf(fp, "My name is saeed\n"); fseek(fp, 0, SEEK_SET); fgets(buff, 255, fp); printf("%s\n", buff ); fclose(fp); }
لاحظ المتغيّر buff الذي سيستخدم كوسيلة تخزين للنص المقروء من الملف.
ملاحظة: تقرأ الدالة fgets نفس عدد المحارف المعيّن إليها ناقص واحد، أو حتى تبلغ نهاية الملف، أو حتى تصادف محرف سطر جديد n\
-
إجابة سعيد سؤال في كيف أكتب سكربت يستخدم BenchMark لقياس أحمال وحدة التخزين؟ كانت الإجابة المقبولة
اعتقد أنني وجدت ما تبحثين عنه. في المقالة الموجودة على الرابط التالي شرح تفصيلي لكيفية انشاء مجلد على نظام التشغيل ubuntu ومن ثم كتابة سكريبت باستخدام أداة FIO لاختبار عمليات الدخل والخرج إلى المجلد بما يعادل 2 جيغا بايت من البيانات الاختبارية. يوجد السكريبت المطلوب آخر المقالة:
FIO (Flexible I/O) – a benchmark tool for any operating system
كما يمكنك الاطلاع على المقالة التالية لمعرفة كيفية استثمار أداة FIO لاختبار قاعدة بيانات اوراكل. تحتوي هذه المقالة أيضا على السكريبت اللازم لإجراء هذا الاختبار
Simulating database-like I/O activity with Flexible I/O
-
إجابة سعيد سؤال في كيف أستخدم كلاس أمازون s3 لرفع الصور أوتوماتيكيا إلى s3 storage بإستخدام أكواد php؟ كانت الإجابة المقبولة
توفّر أمازون شرحًا تفصيليًّا لهذا الموضوع، حيث يمكنك تحميل أيّ object سواءً كان صورة أم ملف. عليك أولًا أن تتأكّد من تنصيب أدوات التطوير الخاصّة باللغة AWS SDK for PHP. يوفّر لك الرابط التالي معلومات تفصيليّة حول هذا الموضوع:
http://docs.aws.amazon.com/aws-sdk-php/v2/guide/installation.html
ومن ثمّ يمكنك الإطّلاع على الرابط التالي الذي يرشدك خطوة بخطوة إلى كيفيّة تحميل ملف جاهز أو ملف من دفق stream:
http://docs.aws.amazon.com/aws-sdk-php/v2/guide/service-s3.html
كما يمكنك الإطلاع على الفيديو التالي من يوتيوب الذي يتحدّث عن هذا الأمر: