عالم برمجةوتقنية الحاسوب C. P. W
740 subscribers
496 photos
55 videos
260 files
480 links
عالم الحاسوب برمجه وتقنيه وتطوير شرح كل ما يتطلب في مجال علوم الحاسوب والبرمجة
https://t.me/programming_C_w
قنات الجرافيكس @l_d_gh
#Digitalmarketing
#programming
#AI #CPA
#learn
التواصل معي @Eng_sharaf1
Download Telegram
#شرح ماهي صيغة Json ؟
JSON : JavaScript Object Notation .
هي احدى صيغ نقل البيانات في عالم البرمجة وعادة ما تستخدم لنقل البيانات بين الخادم والعميل .
- ماهو الخادم وما هو العميل ؟ دائما نسمع عن الخادم والعميل ولكن بعضنا لا يعرف من هو الخادم اصلاً ومن هو العميل !
سابدأ مع العميل ، وهو انت عزيزي القارئ عندما تتصفح احد المواقع فانت تعتبر عميل لذلك الموقع (عميل مشتقه من عمل ، ولا تعني خائن كما هو متعارف ]: )
اما الخادم فهو السيرفر الذي تتصفح منه الموقع ، فكل موقع على الانترنت يجب ان يكون مستضافاً على سيرفر وهذا السيرفر متصل بالانترنت لكي يستطيع الاتصال بك وارسال صفحات الموقع الى متصفحك .

حسناً ... تعرفنا على JSON ، الخادم و العميل . والان سنبدا نتعلم معلومات اكثر عن JSON .

كيف يتم كتابة Json
صيغة Json تعتمد على طريقة كائنات JavaScript فهي مشتقه منها وسميت باسمها ، لذلك فهي تعتمد على مبدأ (المفتاح : القيمة) المثال التالي يوضح ذلك
{
   "first_name":"Asem",
   "last_name":"Najee",
   "ID":87
}
هنا الاسم الاول والاسم الاخير لشخص غير معروف :( وايضاً معرف المستخدم (ID) بشكل بسيط ، واليكم مثال عملي من الواقع في زر الاعجاب بمنشور في احد المواقع ؛ ولكن لن نتطرق لطريقه ارسال البيانات من والى الخادم .
في البداية عندما يضغط العميل زر الاعجاب سيتم معالجه الحدث وارسال البيانات التالية الى الخادم
{
   "user_id":87,
   "post_id":123
}
سيصل الطلب الى الخادم وتحديداً ملف ادارة الاعجابات وسيتم معالجه الاعجاب والرد الى العميل بالصيغة التالية
{
   "ok":true,
   "message":"Succesful"
}
هذا في حاله نجحت العملية ، وسيقوم متصفحك بمعالجة البيانات المرجعة من الخادم وتغير لون زر الاعجاب الى الازرق مثلاً للدلالة انك قد اعجبت بهذا المنشور .

انواع البيانات في JSON
غالباً وفي اغلب لغات البرمجة ان لم يكن كلها ، هناك انواع محددة للبيانات وهي (Boolean, numeric, String) اي بالعربي(المنطقية ، الرقمية ، النصوص) وهكذا في Json ايضاً حيث يجب وضع القيم النصية بين علامتي اقتباس مزدوجتين ("هنا النص") اما القيم المنطقيه والرقمية فتكتب بدون علامات تنصيص ، ستجد المثالين السابقين يحتويان على الانواع الثلاثة .

المصفوفات
يمكن ايضاً اضافة المصفوفات الى Json كالتالي :
{
   "name":"Asem",
   "ID":87,
   "languages":["Java","PHP","JS"]
}
تلاحظ ان اللغات مصفوفة من القيم .

الكائنات
خزن Json يعتمد على الكائنات بشكل اساسي ، والكائن هو المحصور بين {} والمثال السابق يمثل كائن يحتوي على قيم نصية ومصفوفة ، لكن يمكن لاحد مفاتيح الكائن ان يحتوي على كائن آخر كالاتي
{
   "name":"Asem",
   "ID":87,
   "languages":["Java","PHP","JS"],
   "contact":{
      "Telegram":"@AsemNaji",
      "E-mail":"a**m@gmail.com"
   }
}
ونلاحظ انه يجب كتابة المفاتيح ضمن علامتي اقتباس وفقاً لمعايير JSON .

كما يمكن جعل المصفوفات تحتوي على كائنات .. وهلم جراً .
لماذا نبدا تعلم البرمجة بإحدى اللغات الصعبة ؟

غالباً ما ينصح المعلمون بان نبدأ تعلم البرمجة بلغة C++ او Java ، لكن لماذا ونحن لدينا python افضل منها بكثير واسهل من ناحية التعلم ، والجميع يريدها وتعتبر مطلوبه في سوق العمل ايضاً ، ألم يكن من الافضل البدء بها ؟

لإجابة السؤال هذا يجب ان تطرح على نفسك سؤالاً ، هل انا اتعلم البرمجة والمفاهيم في البداية ، ام اريد الدخول مباشرة الى سوق العمل بدون خبرة في عالم البرمجة ؟
والسؤال هذا يجيب عن السؤال السابق ، حيث ان بدايتك مع Python تحرمك من تعلم الكثير من المفاهيم ، لانها لغة سهله وغالباً نستعمل شيئاً جاهزاً ودوال جاهزة للقيام بعملنا !!
اللغات السهلة القريبة جداً من الانسان مثل Python لا تعطي تحكم كامل بالعمليات من خلف الكواليس وهي ابطا من ناحية التنفيذ حيث قد يصل وقت التنفيذ الى اكثر من خمسه اضعاف وقت تنفيذ C++ ، اما في C++ كنا نستطيع التحكم بشكل كبير في العمليات ، هذا التحكم بالعمليات ليس سهلاً عندما يكون متروكاً على عاتق المبرمج ، لذلك يتعلم المبرمجون بهذه اللغات الصعبه خوارزميات وطرق ومفاهيم تساعدهم في عملهم ، ومن الناحية الايجابية للمبتدئين يصبح لديهم فكر منطقي وديناميكية عالية في التعامل مع باقي اللغات بسهولة لان باقي اللغات تكون اقل صعوبة من اللغة التي بدأو بها .

لماذا هناك اشخاص بدايتهم تكون مع Python ؟
تعلم Python في البداية ليس للتخصصات التي يكون عملها بناء مشاريع برمجية والاهتمام بتفاصيل التنفيذ ، بل لمن هم يهتمون بعمليات اخرى مثل الشبكات والحماية السيبرانية ولكنهم يحتاجون الى تنفيذ اوامر برمجية تقوم بالعمل المطلوب فقط بدون الانغماس بالتفاصيل الصغيرة ، هل نقوم بتعليمهم Java ونجعلهم يحتارون بين اختيار int ام long عملية مشابهة للتي اسقطت الصاروخ في التسعينيات ؟

#شرح
ماذا تعرف عن HTML ؟
غالباً عند سؤال المبتدئين في عالم البرمجة او حتى بعض المتقدمين هذا السؤال يخبرك انها ليست لغة برمجة وهذا امر خاطئ كلياً فهي لغة برمجة وصفية .
ما معنى لغة برمجة وصفية ؟
اللغات الوصفية تسمح للمبرمج بالاهتمام بماذا يريد تنفيذه وليس كيفية تنفيذه فمثلا في حالتنا في لغة HTML يمكنك تفسير الكود التالي
<h1>العنوان الرئيسي</h1>
الكود يصف انك تريد وضع "العنوان الرئيسي" كعنوان رئيسي(h1) في الصفحة .

وليست html وحدها لغة وصفية ، هناك عدة لغات اخرى من اشهرها MarkDown و SQL .
#معلومة
نطاق المتغيرات في جافا .
المتغيرات في جافا وفي اغلب لغات البرمجة لديها نطاق ، نستطيع استخدام هذه المتغيرات ضمن هذا النطاق فقط ولا يمكن الوصول الى المتغيرات من خارجه .
 int variable = 0;
 System.out.print(variable);
بدون اي مشاكل يمكن طباعه قيمه المتغير لانه بنفس النطاق ، اي بشكل اصح يمكن القول اننا استطعنا الوصول الى المتغير ، لكن لاحظ الكود التالي :
int variable = 0;
System.out.print(variable);
if(true){
    System.out.print(variable);
}
في هذه الامر الذي داخل الشرط يعتبر في نطاق آخر ولكن يمكنه الوصول الى المتغير لان نطاق الشرط هو ضمن النطاق الكلي للمتغير .
الشرط لم يكن مهما ، نحن فقط كنا بحاجه لحجز نطاق جديد ويمكننا الاستغناء عن الشرط وحجز نطاق بدون شرط وسيصبح الكود السابق كالتالي :
int variable = 0;
System.out.print(variable);
{
    System.out.print(variable);
}
حسنا ، متى يكون المتغير لا يمكن الوصول اليه ، لاحظ الكود التالي :
int variable = 0;
System.out.print(variable);
{
    int localVariable = 0;
    System.out.print(localVariable);
}

System.out.print(localVariable);
هذا الكود سيسبب خطا ، والسبب اننا حاولنا الوصول الى المتغير localVariable من خارج نطاقه وهذا امر غير مقبول ، حيث ان نطاقه ينتهي بانتهاء القوس المعكوف } .

حسناً عرفنا الان نطاق المتغيرات ، لكن ما الفائدة من استخدام النطاقات ؟ أليس امراً سيئاً ان اُعَرِف متغير وتنتهي حياته قبل انتهاء البرنامج ؟
حسناً انظر المثال التالي وستغير رأيك
int x = 5;
int y = 10;
{
    int temp = x;
    x = y;
    y = temp;
}
هل استطعت ان تعرف ما وظيفة الكود السابق ؟ لا تكمل القراءة وحاول معرفة ذلك .

نعم احسنت ، الكود يقوم بتبديل قيم المتغيرات x , y ، ولكن ماذا عن المتغير temp ، هنا سيساعدنا هذا المتغير على تبديل القيم ثم بعدها سيتم حذفه من الرام لاننا لم نعد بحاجته ، هكذا يتم الامر مع المتغير الشهير (i) في حلقة التكرار for يموت فور انتهاء الحلقة لاننا لم نعد بحاجته .

اذاً يفضل ان نقوم بقتل المتغيرات اذا لم نعد بحاجتها ، ولا تقلق ، فقتل المتغيرات حلال .
#شرح
البوابات المنطقية وعلاقتها بالبرمجة .
تعرفنا اليوم في احد المقررات على مفهوم البوابات المنطقية في الدوائر الالكترونية ان صح التعبير ، وكانت تتمحور حول ثلاث بوابات رئيسية وهي (not , and , or) واربع بوابات اخرى يمكن اشتقاقها من هذه البوابات .

هذه البوابات من ناحية تسميتها ووظيفتها تشبه الى حد كبير بعض الوظائف في لغات البرمجة ، وهي العمليات المنطقية (&& , || , !) .
والامر الاكثر تشويقاً هو ان هذه العمليات المنطقية تقوم بالتحكم المباشر بالبوابات المنطقية في اللغات منخفظة المستوى ، اما في حلتنا مع جافا فالامور مختلفة قليلاً فلا يوجد تحكم مباشر بالهارد وير ولكن ما زال هناك عمليات منطقية تقوم بنفس العمل  . مثال للتوضيح :
int x = 3;
if(x < 5 && x > 0)
    System.out.print("X between 5 and 0");
هنا لدينا && تقوم بفحص صحة الشرطين .

ملاحظة : في لغات برمجية كثيرة يتم اعتماد القيمة true على انها 1 والقيمة false على انها 0 .
وايضاً في لغات اخرى يمكنك كتابة and بشكل مباشر بدلاً من && و or بدلا من || .

#معلومة
◂ عناوين مهمة جداً في البرمجة، يجب تعلم جزء كبير منها في الزمن الحالي
1. Basics
2. Testing
3. Handling
4. OOP (Object Oriented Programming)
5. Data Structures
6. Algorithms
7. DSA (Data Structures and Algorithms)
8. Database
9. Network
10. OOD (Object Oriented Design)
11. Design Patterns
12. Solid Principles
13. Best Practices

◂ اسماء مواقع لحل المسائل والمشكلات بلغات البرمجة
1. Codeforces
2. LeetCode
3. HackerRank
4. TopCoder
5. AtCoder
6. HackerEarth
7. Codewars
8. W3Schools
9. W3Resource
10. Satr
11. CoderHub
متغيرات باسماء مختلفة !
لدينا انواع كثيرة من المتغيرات ، دعوني اتحدث عن جافا ، في جافا هناك تسميات مختلفة تطلق على المتغيرات لكن متى نستعملها وما الفرق بينها .

اعرف ان الاغلب من المبرمجين يفرقون فقط بالتسمية بين متغير وباراميتر ، بالطبع هذه احدى تسميات المتغيرات وهناك تسميات اخرى دعني اسردها .

متغير : هذا المصطلح يمكن ان نطلقه على اي متغير في اي مكان لانه الاسم العام .
باراميتر : هذا المصطلح يطلق على المتغير الذي تستقبله الدالة ، كمثال :
void print(String text){
    System.out.print(text);
}
المتغير text في السطر الاول يسمى باراميتر .

وسيط/وسائط : هذا ليس متغير حقاً ، انما هي قيمة ، وتحديداً القيمة التي تُرسل الى الدالة ، كما في الكود السابق السطر الثاني ، حيث قمنا بارسال قيمة المتغير text الى دالة الطباعة .

خاصية/حقل :  هذه التسمية تطلق على المتغيرات التي تُعرف داخل الفئة ، مثال
class Person{
    String name;
    int age;
}
هنا يمكن تسمية name و age انهما حقلين او خاصيتين للفئة Person .

عضو : هذه التسمية تشمل المتغيرات والدوال ، حيث تعني اي متغير او دالة تابع لفئة معينه كالتالي :
class Person{
    String name;
    int age;
    void setAge(int newAge){
        age = newAge;
    }
}
كلاً من name , age , setAge يعتبر اعضاء للفئة Person .

كما ان هناك تسمية شائعة وهي "طريقة" وتعني دالة كما يمكن تسمية الدالة "وظيفة" .

تجدونها كثيراً في المراجع العربية .
#شرح
لإنشاء واجهة ويب تحتوي على زرين (تسجيل الدخول والتسجيل) ونقل المستخدم إلى الصفحة الرئيسية (Homepage) عند إدخال المدخلات بشكل صحيح، يمكنك استخدام HTML وJavaScript. إليك مثال بسيط على كيفية إنشاء ذلك:

### 1. HTML - واجهة المستخدم

<!DOCTYPE html>
<html lang="ar">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>واجهة المستخدم</title>
<style>
body {
font-family: Arial, sans-serif;
}
.container {
margin: 20px;
}
input {
margin: 10px 0;
display: block;
}
</style>
</head>
<body>
<div class="container">
<h2>تسجيل الدخول أو التسجيل</h2>
<input type="text" id="username" placeholder="اسم المستخدم">
<input type="password" id="password" placeholder="كلمة المرور">
<button onclick="login()">تسجيل الدخول</button>
<button onclick="register()">تسجيل</button>
</div>

<script>
function login() {
// تحقق من المدخلات
const username = document.getElementById("username").value;
const password = document.getElementById("password").value;

// يمكنك إضافة شروط تحقق للمدخلات هنا إذا لزم الأمر

// إذا كانت المدخلات صحيحة، انتقل إلى الصفحة الرئيسية
if (username && password) {
window.location.href = "homepage.html"; // استبدل بـ الرابط الصحيح
} else {
alert("يرجى إدخال اسم المستخدم وكلمة المرور بشكل صحيح!");
}
}

function register() {
// تحقق من المدخلات أو قراءة المدخلات إذا لزم الأمر
const username = document.getElementById("username").value;
const password = document.getElementById("password").value;

// يمكنك إضافة شروط تحقق للمدخلات هنا إذا لزم الأمر

// إذا كانت المدخلات صحيحة، انتقل إلى الصفحة الرئيسية
if (username && password) {
window.location.href = "homepage.html"; // استبدل بـ الرابط الصحيح
} else {
alert("يرجى إدخال اسم المستخدم وكلمة المرور بشكل صحيح!");
}
}
</script>
</body>
</html>
### 2. الصفحة الرئيسية (homepage.html)

قم بإنشاء ملف جديد باسم homepage.html يحتوي على المحتوى الذي تريده في الصفحة الرئيسية:

<!DOCTYPE html>
<html lang="ar">
<head>
<meta charset="UTF-8">
<title>الصفحة الرئيسية</title>
</head>
<body>
<h1>مرحبًا بك في الصفحة الرئيسية!</h1>
</body>
</html>
### الشرح:

- في الكود أعلاه، قمنا بإنشاء واجهة بسيطة تتضمن حقلين لإدخال اسم المستخدم وكلمة المرور وزرين لتسجيل الدخول والتسجيل.
- عند النقر على زر "تسجيل الدخول" أو "تسجيل"، يتم استدعاء دالة login() أو register()، والتي تتحقق من أن المدخلات ليست فارغة ثم تنقل المستخدم إلى homepage.html.
- تأكد من أن صفحة homepage.html موجودة في نفس المجلد مع الملف الذي يحتوي على واجهة المستخدم.

يمكنك إضافة مزيد من التحقق والشروط حسب احتياجات مشروعك. إذا كان لديك أي استفسارات إضافية، فلا تتردد في طرحها!
العدو الصهيوني احرق ورقة تقنية ارهابية خبيثه كان يخبؤها دون تحقيق الهدف الاكبر الذي بحثوه عنه
لا مفر بعد اليوم من الحرب الشاملة ، حرب وجودية بكل معنى الكلمة
دعواتنا بالشفاء العاجل للجرحى والرحمه للشهداء في تلك الارض التي لم تترك غزة وحيده".
👍2
#معلومة_عالماشي 💻📱💜
Dart
🔴 هي لغة برمجة تعمل على مترجم (JIT) ومصدر مفتوح، تستخدم للبرمجة العامة وبرمجة تطبيقات الويب والهاتف المحمول وسطح المكتب والخوادم.

🔴 صممت لتوفير تجربة بناء جديدة للمبرمجين، بفضل العديد من الميزات الرائعة التي توفرها كالأداء الممتاز والتعددية في الإدارة والمخصصة للأداء.

🔴 تم إنشاؤها من قبل شركة #Google على سبيل المثال للتعامل مع بناء تطبيقات الويب بأداء ممتاز،
وتستخدم أيضاً في تطوير تطبيقات الأجهزة المحمولة مثل نظام التشغيل #Flutter الذي يعتمد عليها. علاوة على ذلك، تستخدم #Dart في تطبيقات الخادم تمامًا مثل Node.js.

🔴تتميز Dart بالعديد من الميزات الرائعة مثل:

1️⃣مترجم JIT يفتح برامج Dexy في ثانية واحدة (leapfrogging).

2️⃣توفير نوع القسطرة (type inference) لإضفاء طابع قوي النوع على اللغة.

3️⃣منهج Async/await المستوحى من #C يتيح للمبرمجين كتابة الأكواد المؤرشفة عديمة الحالة بأسلوب يشبه الأكواد المتزامنة بطريقة أنظف وأكثر وضوحًا.

4️⃣توفير العديد من أدوات التنمية المثيرة للاهتمام مثل واجهة برمجة تطبيقات Eclipse، و Visual Studio Code، و IntelliJ

🔴أخيراً، تعد #Dart لغة شائعة لاستخدامها في تطوير تطبيقات الويب والموبايل وبرمجة الخادم، وتتميز بسهولة التعلم والاستخدام وتوفير العديد من الميزات المناسبة لبناء تطبيقات مثيرة وقوية بشكل لا يصدق.
👍1
🙃#include <iostream>
#include <cmath>

using namespace std;

// هذه الدالة تحسب قيمة الجذر التربيعي لعدد غير سالب
double calculateSquareRoot(double num) {
    if (num >= 0)
        return sqrt(num);
    else
        return -1; // رقم سالب يعني أنه لا يوجد جذر حقيقي
}

// هذه الدالة تقوم بحساب جذري المعادلة الثانية
void calculateQuadraticRoots(double a, double b, double c) {
    double discriminant = b * b - 4 * a * c;
   
    if (discriminant > 0) {
        // لدينا جذرين حقيقيين
        double root1 = (-b + calculateSquareRoot(discriminant)) / (2 * a);
        double root2 = (-b - calculateSquareRoot(discriminant)) / (2 * a);
       
        cout << "لدينا جذرين حقيقيين:" << endl;
        cout << "الجذر الأول: " << root1 << endl;
        cout << "الجذر الثاني: " << root2 << endl;
    } else if (discriminant == 0) {
        // لدينا جذر واحد متكرر
        double root = -b / (2 * a);
       
        cout << "لدينا جذر واحد متكرر:" << endl;
        cout << "الجذر: " << root << endl;
    } else {
        // ليس لدينا أي جذر حقيقي
        cout << "لا يوجد جذر حقيقي للمعادلة." << endl;
    }
}

int main() {
    double a, b, c;
   
    cout << "أدخل قيمة a: ";
    cin >> a;
   
    cout << "أدخل قيمة b: ";
    cin >> b;
   
    cout << "أدخل قيمة c: ";
    cin >> c;
   
    calculateQuadraticRoots(a, b, c);
   
    return 0;
}
#include <iostream>
#include <cstdlib>
#include <ctime>

int main() {
    // ضبط بذرة العشوائية باستخدام الوقت الحالي
    srand(time(0));

    // إنشاء مصفوفة بحجم 10
    const int size = 10;
    int arr[size];

    // ملء المصفوفة بالقيم العشوائية
    for (int i = 0; i < size; i++) {
        arr[i] = rand();
    }

    // طباعة المصفوفة
    std::cout << "المصفوفة: ";
    for (int i = 0; i < size; i++) {
        std::cout << arr[i] << " ";
    }
    std::cout << std::endl;

    return 0;
}
#include <iostream>
#include <algorithm>

int main() {
    // إنشاء مصفوفة بالأعداد
    int arr[] = {2, 5, -1, 4, 100};
    const int size = sizeof(arr) / sizeof(arr[0]);

    // ترتيب المصفوفة
    std::sort(arr, arr + size);

    // طباعة المصفوفة
    std::cout << "المصفوفة المرتبة: ";
    for (int i = 0; i < size; i++) {
        std::cout << arr[i] << " ";
    }
    std::cout << std::endl;

    return 0;
}
#include <iostream>

int main() {
    // إنشاء مصفوفة بالأعداد
    int arr[] = {2, 5, -1, 4, 100};
    const int size = sizeof(arr) / sizeof(arr[0]);

    // طباعة الأعداد الزوجية والفردية
    std::cout << "الأعداد الزوجية: ";
    for (int i = 0; i < size; i++) {
        if (arr[i] % 2 == 0) {
            std::cout << arr[i] << " ";
        }
    }
    std::cout << std::endl;

    std::cout << "الأعداد الفردية: ";
    for (int i = 0; i < size; i++) {
        if (arr[i] % 2 != 0) {
            std::cout << arr[i] << " ";
        }
    }
    std::cout << std::endl;

    return 0;
}
👍1
لقد متنا عدة مرات الآن ولا يسعنا إلا أن نتساءل لماذا لا نزال نهتم.
ب js سابقا كان يستخدمون var لتعريف متغير او object
var a=1

بالوقت الحالي يستخدمون const و let والافضل والأكثر استخداما هي const

const a=1
👍1
#معلومة_عالماشي
توضح هذه الصورة مقارنة بين أمان كل من Apple Pay و Google Pay في عملية الدفع الإلكتروني، حيث تشرح الخطوات التي تتبعها كل خدمة لمعالجة الدفعات بطريقة آمنة.

Apple Pay:

1. المعلومات الائتمانية (Credit card info): يتم إدخال معلومات بطاقة الائتمان الخاصة بالمستخدم.


2. تمرير المعلومات إلى الشريحة (Pass credit card info): المعلومات يتم إرسالها إلى شريحة مدمجة في جهاز Apple (ممثلة بالصورة باللون الأسود داخل الهاتف).


3. تخزين المعلومات على الشريحة (Store to chip): يتم تخزين المعلومات على الشريحة وتوليد رقم حساب خاص بالجهاز يُسمى Device Account Number (DAN).


4. إرسال DAN إلى خادم التجارة الإلكترونية (Send DAN to E-commerce server): يتم إرسال DAN إلى الخادم الذي يدير عمليات الشراء (خادم التجارة الإلكترونية).


5. إرسال DAN إلى البنك (Send DAN to bank): يقوم الخادم بإرسال DAN إلى البنك لإتمام عملية الدفع.



Google Pay:

1. المعلومات الائتمانية (Credit card info): يتم إدخال معلومات بطاقة الائتمان الخاصة بالمستخدم.


2. تخزين المعلومات على Google Server (Store info to Google server): يتم تخزين المعلومات على خادم Google.


3. إرسال الرمز المولد (Payment token): يتم توليد رمز دفع (Payment Token) من خلال خادم Google.


4. إرسال رمز الدفع إلى خادم التجارة الإلكترونية (Send Payment Token to E-commerce server): يتم إرسال الرمز إلى خادم التجارة الإلكترونية الذي يدير عملية الشراء.


5. إرسال الرمز إلى البنك (Send payment token to bank): يقوم الخادم بإرسال الرمز إلى البنك لإتمام عملية الدفع.


6. تمرير المعلومات المالية إلى البنك (Send card info to bank): يتم تمرير المعلومات المالية إلى البنك للتحقق وإتمام العملية.



الخلاصة:

Apple Pay يعتمد على استخدام شريحة داخل الجهاز لتخزين البيانات وتوليد رقم حساب خاص بالجهاز (DAN).

Google Pay يعتمد على خوادم Google لتخزين المعلومات وتوليد رموز دفع آمنة يتم استخدامها بدلاً من البيانات الفعلية.


كلتا الخدمتين تسعيان إلى تأمين عمليات الدفع عبر الإنترنت عبر تقنيات مختلفة تضمن الخصوصية ومنع الوصول غير المصرح به إلى معلومات البطاقة.
👍1
لعمل Extension في Visual Studio Code (VSCode) وتقديمه لشخص آخر يستخدم VSCode، يمكنك اتباع الخطوات التالية:

1. إعداد بيئة التطوير

تأكد من أنك قمت بتثبيت Node.js و npm على جهازك.

قم بتثبيت Yeoman و VSCode Extension Generator عبر الأوامر التالية:

npm install -g yo generator-code


2. إنشاء Extension جديد

افتح الـ Terminal (أو موجه الأوامر) ثم قم بتشغيل الأمر التالي لإنشاء Extension جديد:

yo code

ستقوم الأداة بسؤالك عدة أسئلة مثل اسم الامتداد، الوصف، وواجهة البرمجة. يمكنك اختيار نوع الامتداد الذي تريد تطويره (JavaScript أو TypeScript).


3. تطوير Extension

بعد إنشاء المشروع، سيتم إنشاء مجموعة من الملفات الأساسية تلقائيًا. قم بفتح المشروع في VSCode لبدء التعديل على الملفات.

الملف الرئيسي الذي ستعمل عليه هو extension.js أو extension.ts حسب اختيارك.

أضف الأكواد التي تريدها لتخصيص الامتداد.


4. تشغيل واختبار الـ Extension

لاختبار الامتداد الذي قمت بإنشائه، يمكنك فتح command palette في VSCode (اضغط Ctrl+Shift+P)، ثم اكتب Run Extension لتشغيله في نافذة جديدة.


5. تجميع ونشر الـ Extension

بعد الانتهاء من التطوير والاختبار، يمكنك نشره ليكون متاحًا لشخص آخر أو على متجر VSCode.


نشر الامتداد محليًا:

إذا كنت تريد إرسال الـ extension مباشرة لشخص آخر دون نشره في متجر، قم بإنشاء vsix (ملف الامتداد) باستخدام الأمر التالي داخل مجلد المشروع:

vsce package

سيقوم الأمر بإنشاء ملف .vsix. يمكنك إرسال هذا الملف للشخص الآخر، ويمكنه تثبيته محليًا عبر:

1. فتح command palette في VSCode.


2. كتابة Extensions: Install from VSIX....


3. اختيار ملف الـ .vsix الذي تم إرساله.




نشر على متجر VSCode:

لإنشاء حساب ونشر الامتداد على VSCode Marketplace، يجب أن تقوم بإعداد حسابك على Visual Studio Marketplace.

ثم استخدم الأمر:

vsce publish


الخلاصة

بتطوير Extension في VSCode، يمكنك إنشاء أدوات مفيدة لمساعدتك ومساعدة الآخرين. إذا كنت ترغب في توزيعه يدويًا، يمكن للشخص الآخر تثبيته بسهولة باستخدام ملفات .vsix. أما إذا كنت تريد أن يكون متاحًا على مستوى أوسع، يمكنك نشره في VSCode Marketplace.
👍1
لربط ملف CSS بملف HTML في Visual Studio Code (VS Code)، يمكنك اتباع الخطوات التالية:

1. إنشاء ملف HTML وملف CSS:
- افتح VS Code وأنشئ ملف HTML جديد (مثل index.html) وملف CSS جديد (مثل styles.css).

2. إضافة رابط CSS إلى ملف HTML:
- في ملف HTML، استخدم وسم <link> في قسم <head> لربط ملف CSS. يجب أن يكون الشكل كالتالي:

<!DOCTYPE html>
<html lang="ar">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>صفحة تجريبية</title>
<link rel="stylesheet" href="styles.css"> <!-- ربط ملف CSS هنا -->
</head>
<body>
<h1>مرحباً بك في صفحة التجربة!</h1>
</body>
</html>


3. كتابة أكواد CSS:
- افتح ملف styles.css وابدأ بكتابة أنماط CSS. على سبيل المثال:

body {
background-color: lightblue;
font-family: Arial, sans-serif;
}

h1 {
color: darkblue;
text-align: center;
}


4. فتح ملف HTML في متصفح:
- يمكنك فتح ملف index.html في متصفح الويب لرؤية التغييرات. يمكنك القيام بذلك عن طريق النقر بزر الفأرة الأيمن على الملف واختيار "Open with Live Server" إذا كان لديك هذا الامتداد مثبتًا، أو يمكنك فتحه مباشرةً من المتصفح.

بهذا الشكل، سيكون لديك ملف HTML مرتبط بشكل صحيح بملف CSS، وستتمكن من رؤية الأنماط المطبقة على العناصر الموجودة في الصفحة. إذا كان لديك أي استفسارات أخرى، فلا تتردد في طرحها!
👍2
يا الله نبدأ على بركة الله باساسيات الجافا اللي تحتاجونها حاليًا وهي

scanner

if

for
وراح اسوي شرح على طريقة المقارنة ويَّ c++ علمود تسهللكم باحسن الطرق الممكنة

طبعا بالc++ اذا جنتم تريدون تسوون input, output فتحتاجون المكتبة الثابتة iostream اللي اظن ماكو برنامج العام سويتوه العام اذا ماجان اله علاقة بالمكتبة هاي
for example:
#include<iostream>
using namespace std;

int main()
{
cout << "bya bya c++!" << endl;
return 0;
}
اما بالجافا الوضع مختلف الoutput مايحتاج استدعاء تعلميات او مثل ما انتم تعرفونها "مكتبة"
"هنا مراح تعتبر مكتبة وانما شوي تختلف عنها بس بعدين يتوضح كل شيء"

المهم الoutput مباشرة تكدر تسوونه مثل

public class Main {
public static void main(String[] args) {
System.out.println("Ah, Here we go again");
}
}
ولكن هنالك شيء اسمه سكانر اللي تكدرون تكولون حاليًا انه الinput مالت الجافا فهاي لازم تستدعا قبل البرنامج مثل ماتستدعي المكتبة بc++

فيكون استدعائها هكذا
for example:
import java.util.Scanner;

public class Main {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
System.out.println("What's your name?");
String name = scanner.nextLine();
System.out.println("Hello " + name);
}
}
👍1
هنا اول شيء استدعينا تعليمة السكانر
** الS لازم كابتل غيرها البرنامج راح ينفجر ويكلك شجاي تسوي
انوب اذا تدخل للبرنامج راح نلكا

Scanner scanner = new Scanner(System.in);
اولا الScanner الاولى هاي تعتبر class وثابته مايمكنك تغيرها ولا تعدلها ولا شيء لانها مخصصة للقراءة والبرنامج من يشوفها يكول
حلو هذا جاي يطلب قراءة شيء ما

الScanner الثانية اللي بالحقل هي اختيارية حتة تكدر تسميها
Car
Animal
Human
Students
Blah blah blah...
وهو اسم متغير الكائن الجاي تشتغله


الnew scanner هاي تعليمة كلش مهمة وحلوة
مثال توضيحي

import java.util.Scanner;

public class Main {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);

System.out.println("How old are you?");
int age = scanner.nextInt();

System.out.println("What's your name?");
String name = scanner.next();

System.out.println("Hello " + name + ", you are " + age + " years old.");

scanner.close();
}
}