سنة أولى حاسبات

بدايةً، أحب أبارك لكل الحاسوبيين الجدد المسكنين في كلية الحاسبات وتقنية المعلومات. ألف مبروك ما أنجزتموه خلال الفترة الماضية وبداية فصل جديد من حياتكم.

مرحباً بكم في تخصص الحاضر والمستقبل. مرحباً بكم في عالم الإبداع والتميز. مرحباً بكم في بيتكم الثاني كلية الحاسبات وتقنية المعلومات.

في هذه التدوينة سأتحدث لكم عن أول سنة في كلية الحاسبات كطلاب مستجدين وما الذي يساعدكم في التفوق فيها بإذن الله. بالإضافة إلى ذلك الأسئلة الشائعة.

أول فصل دراسي كطالب مستجد

أول فصل دراسي في الكلية هو عام والمفترض أن يتم أخذ المواد الأساسية في الكلية لكي تستطيع أن تتخصص بعد هذا الفصل الدراسي وهي برمجة 1 (CPCS 202مقدمة حوسبة (CPIT 201)، وأساليب الكتابة العلمية (CPIT 221). بالإضافة إلى ثقافة إسلامية 1 (ISLS 101) ونظرية الاحتمالات (STAT 210) لو كنت حاب تتبع الخطة الدراسية وهذا أمر مستحسن.

برمجة 1 (CPCS 202)

البرمجة قد تكون أصعب مادة تواجه الطلاب المستجدون بسبب أنه يتم فيها تعلم مهارات حل المشاكل (Problem-Solving Skills) الأساسية – يقصد بالمشاكل المسائل -. بالإضافة إلى ذلك، ستتعلم أيضاً نوع جديد من التفكير وهو التفكير الحاسوبي (Computational Thinking)، وهذا التفكير هو التفكير بحل المشاكل كما لو كنت حاسب آلي. وهذا التفكير أساسه هو التفكير المنطقي (Logical Thinking). والتفكير المنطقي باختصار هو أنه لا يوجد شيء يحدث هكذا بدون أسباب وخطوات واضحة متسلسلة تسبقه.

لإتقان جزء كبير من مهارات حل المشاكل واكتساب التفكير الحاسوبي والمنطقي تحتاج كطالب مستجد إلى التدرب ثم التدرب ثم التدرب على حل مشاكل (مسائل مختلفة) كثيرة وعدم الإكتفاء بالمسائل الموجودة في السلايدات أو المعامل. والتدرب يكون بالتطبيق على الكمبيوتر وعمل البرامج لحل المسائل.

سبب تدني أو فشل جزء – قد يكون جزء كبير – من الطلاب المستجدين في البرمجة هو أخذها كأي مادة أخرى. لا يتم دراستها إلا قبل الاختبارات أو لا يتم التطبيق على الجهاز. والكارثة الكبرى هي عدم حل الواجبات (Assignments) بنفسهم. حل الواجبات بنفسك هو أحد المفاتيح لفهم المادة والتفوق بها.

تم شرح المادة كاملة على اليوتويب. يمكنك الاستفادة منها والبدء في الاستعداد لها من الآن. رابط الشروحات: youtube.com/AhmadTayeb

ملفات المادة (عرض شرائح المحاضرات والمعامل) تجدها هنــا: ajtayeb.kau.edu.sa

مقدمة حوسبة (CPIT 201)

مادة بسيطة تعتمد على الفهم. تعطيك مقدمة عن أساسيات الحاسب الآلي ومكوناته وكيف يخزن الحاسب البيانات وغيرها من الأساسيات.

أساليب الكتابة العلمية (CPIT 221)

تعتبر مادة من مواد اللغة الإنجليزية. تركز على طرق الكتابة العلمية مثل كيف تكتب مقترح وغيره.

نظرية الاحتمالات (STAT 210)

مادة إحصاء جميلة تعتمد على الفهم. الإحصاء مهم لنا كحاسوبيين في موضوع تحليل وتنقيب البيانات والذكاء الإصطناعي وخصوصاً موضوع تعليم الآلة (Machine Learning).

ما بعد الفصل الدراسي الأول

بعد الإنتهاء من الفصل الدراسي الأول بنجاح، سيتم تسكينكم في التخصصات بناء على الرغبات المحددة والمافضلة في درجات أو فصل دراسي لكم في الكلية. المواد المطلوبة للتسكين في التخصص هي برمجة 1 (CPCS 202مقدمة حوسبة (CPIT 201)، وأساليب الكتابة العلمية (CPIT 221). عدم إكمال هذه المقررات قد يؤدي إلى تسكينك في تخصص لا ترغبه.

هناك ثلاث تخصصات في كلية الحاسبات وتقنية المعلومات، وهي:

  • علوم الحاسب (Computer Science) وهو التخصص الأم الذي تندرج منه كل تخصصات الحاسب. يركز على الجزء النظري في الحاسب أكثر من غيره من التخصصات الأخرى.
  • تقنية المعلومات (Information Technology). يركز على الجزء التطبيقي في الحاسب أكثر من غيره من التخصصات الأخرى.
  • نظم المعلومات (Information Science). يركز على جزء الأعمال (Business) والتحليل في الحاسب.

الإختلاف بين كل التخصصات تقريباُ 30 ساعة أو حولها (أي حوالي 10 مواد). قد تجد مواد برموز مختلفة بين التخصصات ولكن المحتوى مشابه لحد كبير.

دراستك لأي تخصص حاسب في البكالوريوس يتيح لك إكمال الدراسات العليا في أي تخصص من الحاسب ولا يلزم نفس التخصص. مثلاً: خريج تقنية المعلومات يستطيع أن يكمل ماجستير علوم حاسب والعكس صحيح.

في سوق العمل، غالباً لا يتم التمييز بين التخصصات ويعتبرونكم “حاسب” بغض النظر عن تخصصكم. أي أنه غالباً اي وظيفة متعلقة بالحاسب يمكنك التقديم عليها.

وهذا دليل سريع من الكلية عن التخصصات والفرق بينهم.

عن الكلية ومعلومات المواد والأقسام

في موقع الكلية (computing.kau.edu.sa) ستجدون قائمة على اليسار “الروابط السريعة”، بها ملفات يمكنك قرائتها لتعرف أكثر عن الكلية والتخصصات. وكذلك يمكنك متابعة حساب الكلية على تويتر (@FCITKAU) والفيسبوك (facebook.com/groups/FCIT.KAU) لتكون على اتصال بكل ما هو جديد في الكلية.

الختام

أجدد الترحيب بكم. وأرجو لكم التوفيق والنجاح. وكامل الكلية ومنسوبيها في خدمتكم.

 

طريقة سريعة لنسخ مسار ملف في الويندوز

طريقة سريعة لنسخ مسار ملف في الويندوز، إضغط Shift مع زر الماوس الأيمن على الملف الذي تريده، بعد ذلك سيظهر لك خيار نسخ مسار الملف (Copy as path) ضمن قائمة الخيارات.

هذا ، وأسال الله لي ولكم التوفيق.

أداة ضبط دقة تصدير الشرائح كصور من البوربوينت

عندما تقوم بعمل ملصق (Poster) أو إعلان أو اي شيء آخر عن طريق البوربوينت ثم تحاول حفظ الشرائح كصور، ستجد أن جودة الصور الناتجة ضعيفة.

مثال، لنفرض أننا نود عمل ملصق به آلية عمل شيء ما. أي أننا سنقوم بوضع رسم توضيحي كالتالي:

قبل إكمال عمل الملصق، لنجرب نحفظ هذه الشريحة كصورة ثم نشاهد الرسمة التوضيحية عن طريق الصورة الناتجة من عملية تصدير الشريحة كصورة. لنرى النتيجة كالتالي:

نلاحظ أن الصورة غير واضحة بالرغم أنه تم تكبيرها إلى أقصى تكبير. وسيتضح عدم وضوح الصورة كثيراً عندما يتم عرضها على شاشة دقتها كبيرة.

الآن لنحفظ العمل، ثم نغلق البوربوينت، ونجرب الأداة التي قمنا بتطويرها (PowerPoint Resolution Tool 2.1):

نقوم بتفعيل الأداة بالضغط على زر “ضبط دقة وضوح الصور”:

الآن لنغلق الأداة، ونفتح البوربوينت ونقوم بإعادة حفظ الشريحة السابقة كصورة. بعد ذلك لنشاهد النتيجة كالتالي:

نلاحظ ان الأداة قامت بتعديل اعدادات البوربوينت ليقوم بحفظ الصورة بدقة عالية كما هو ملاحظ من الصورة السابقة. وأصبح بالإمكان عرض الصور الناتجة من تصدير الشرائح كصور على شاشة دقتها كبيرة بدون أي مشاكل.

لتحميل الأداة من هنا:
https://ahmad.cc/powerpoint-resolution-tool-2-1

أي ملاحظات أسعد بها. دمتم بود.

خلفية صورة العرض تم أخذها من publicdomainpictures.ne

فهم كيفية إنشاء رقم عشوائي بالجافا

مستوى الدرس: مبتدئ – لغة البرمجة: جافا (Java)

قد يواجه بعض الطلاب وخصوصاً المبتدئين في البرمجة صعوبة في فهم كيفية إنشاء رقم عشوائي خصوصاً ضمن مجال معين. مثال: قد يأتيك سؤال عن ما هو مجال الأرقام التي يستطيع أن ينشئها الكود التالي:

int x = 20 + (int)(Math.random() * 30);

ماذا سيكون جوابك؟ الجواب الصحيح هو أن الكود السابق سينتج أرقام بين 20 و 49.

هل يمكن معرفة الناتج عن طريق اجراء بعض الحسابات؟ بالتأكيد نعم. لنعرف في البداية ماهي حدود دالة Math.random(). الدالة تقوم بإنشاء رقم نوعه (double) أكبر من أو يساوي صفر وأصغر من 1. يعني (الرقم >= 0 و الرقم < 1). مثال على الأرقام التي تقوم بإنشائها هذه الدالة:

0.2045766903616716
0.37790106813735225
0.8582977478804686
0.9393936160319944

بمعرفة السابق، نستطيع أن نحسب الكود السابق بأقل قيمة تستطيع الدالة Math.random() إنشائها، ومرة أخرى نحسب الكود بأعلى قيمة تستطيع الدالة Math.random() إنشائها. أي سنحصل على المعادلتين التاليتين:

أقل قيمة (بتعويض مكان الدالة Math.random بصفر) = 20 ، تم حسابها كالتالي:

x = 20 + (int)(0 * 30);
X = 20 + (int)(0);
x = 20 + 0
x = 20

أعلى قيمة (بتعويض مكان الدالة Math.random برقم يكون أقل من 1 بنسبة بسيطة جداً، مثل 0.9999) = 49 ، تم حسابها كالتالي:

x = 20 + (int)(0.9999 * 30);
X = 20 + (int)(29.99);
x = 20 + 29
x = 49

بهذه الطريقة، عرفنا بسهولة مجال الأرقام التي يستطيع أن ينشئها الكود السابق. ونستطيع أن نقوم بإنشاء معادلة عامة لإنتاج رقم بين رقمين محددين كالتالي:

الرقم العشوائي = أدنى قيمة + (دالة إنشاء الرقم العشوائي * ( أعلى قيمة – أدنى قيمة + 1)

int x = min + (int)(Math.random() * (max - min + 1));

إثبات المعادلة السابقة بحساب اقل وأعلى قيمة تستطيع المعادلة إنشائها. نفترض أن قيمة المتغير (min) هو مثلاً 10، وقيمة متغير (max) هو 50. أي أننا نريد إنشاء رقم عشوائي بين 10 و 50.

أقل قيمة (بتعويض Math.random بصفر) = 10 ، تم حسابها كالتالي:

x = 10 + (int)(0 * (50 - 10 + 1));
x = 10 + (int)(0 * (40 + 1));
x = 10 + (int)(0 * 41);
x = 10 + (int)(0);
x = 10 + 0
x = 10

أعلى قيمة (بتعويض Math.random بـ 0.9999) = 50، تم حسابها كالتالي:

x = 10 + (int)(0.9999 * (50 - 10 + 1));
x = 10 + (int)(0.9999 * (40 + 1));
x = 10 + (int)(0.9999 * 41);
x = 10 + (int)(40.99);
x = 10 + 40
x = 50

بهذا فهمنا لماذا كتبنا المعادلة بالطريقة السابقة وخصوصاً زيادة واحد وطرح الرقم الصغير من الكبير. يمكن كتابة الدالة التالية في الجافا لسهولة إنشاء رقم عشوائي بين قيمتين فيما بعد:

public static int random(int min, int max) {
    return min + (int)(Math.random() * (max - min + 1));
}

تعلمنا في هذا الدرس كيفية إنشاء رقم عشوائي، تحديد مجال وحساب مجال الرقم العشوائي الذي سيتم إنشائه.

تم أخذ صورة العرض من wallpaperbetter.com

تمرير دالة كمعطى لدالة في الجافا (Callback & Lambda)

إذا كنت من محبي لغة الجافا سكربت (JavaScript)، قد يبدوا لك مثل هذا الكود وهو عبارة عن تعريف دالة (function) وتستقبل دوال كمعطيات (Arguments) أمر طبيعي ومعتاد:

function check_grade(score, pass_callback, fail_callback) {
    let grade = null;
    if (score >= 90) {
        grade = "A";
    } else if (score >= 80 && score <= 89) {
        grade = "B";
    } else if (score >= 70 && score <= 79) {
        grade = "C";
    }  else if (score >= 60 && score <= 69) {
        grade = "D";
    }

    if (grade == null) {
        fail_callback();
    } else {
        pass_callback(grade);
    }
}

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

لنجرب الدالة السابقة مرتين، مره عند درجة النجاح، ومره عند درجة الرسوب، ونعطي أوامر مختلفة (دالة) في كل مره:

//Test 1
check_grade(81, (grade) => {
    console.log("Congratulation. You got: " + grade);
}, () => {
    console.log("Unfortunately, You failed.");
});

//Test 2
check_grade(55, (grade) => {
    console.log("Yes, you made it. Your grade is " + grade);
}, () => {
    console.log("No, you didn't work hard.");
});

ناتج الكود السابق (Output):

Congratulation. You got: B
No, you didn't work hard.

نلاحظ أنه تم تمرير الدالة كمعطى بطريقة مختصرة بدل الطريقة العادية وهي:

//Test 1
check_grade(81, function(grade) {
    console.log("Congratulation. You got: " + grade);
}, function() {
    console.log("Unfortunately, You failed.");
});

//Test 2
check_grade(55, function(grade) {
    console.log("Yes, you made it. Your grade is " + grade);
}, function() {
    console.log("No, you didn't work hard.");
});

الطريقة المختصرة التي تم اختصار كتابة دالة بها وتمريرها إلى الدالة تسمى (Lambda)، بينما تمرير دالة كمعطى داخل دالة يطلق عليه (callback function).

حسناً، السؤال هنا: هل يمكن تطبيق المثال السابق بلغة الجافا (Java) كما هو في الجافا سكربت؟ الجواب بالتأكيد نعم، ويمكن استخدام كذلك Lambda في الجافا (JDK 1.8).

في البداية، لأستخدام تعبير Lambda، نحتاج إلى تعريف واجهة (Interface) وبهذه الواجهة دالة واحدة فقط بأي اسم، بأي نوع، وباي عدد بارامترات تحتاجها. لتطبيق المثال السابق، سأقوم بعمل هذه الواجهة:

interface Function {
    void apply(String grade);
}

ثم بعد ذلك أقوم بتعريف الدالة التي تقوم بفحص الدرجات واستدعاء الدالة المناسبة التي تم تمريرها كمعطى كما يلي:

    public static void check_grade(int score, Function pass_callback, Function fail_callback) {
        String grade = null;
        if (score >= 90) {
            grade = "A";
        } else if (score >= 80 && score <= 89) {
            grade = "B";
        } else if (score >= 70 && score <= 79) {
            grade = "C";
        } else if (score >= 60 && score <= 69) {
            grade = "D";
        }

        if (grade == null) {
            fail_callback.apply(null);
        } else {
            pass_callback.apply(grade);
        }
    }

لاحظ كيف تم تعريف بارامتر استقبال الدالة وكذلك كيف تم استدعاء الدالة المناسبة من المعطيات داخل الدالة عن طريق الواجهة (Interface) التي قمنا بتعريفها. لنقم الآن بمعرفة كيفية استخدام الدالة التي قمنا بعملها وكيف نكتب تعبير Lambda، كالتالي:

    public static void main(String[] args) {
        //Test 1
        check_grade(81,
                (grade) -> {
                    System.out.println("Congratulation. You got: " + grade);
                },
                (grade) -> {
                    System.out.println("Unfortunately, You failed.");
                }
        );

        //Test 2
        check_grade(55,
                (grade) -> {
                    System.out.println("Yes, you made it. Your grade is " + grade);
                },
                (grade) -> {
                    System.out.println("No, you didn't work hard.");
                }
        );
    }

عند تشغيل البرنامج، سيكون الناتج كالتالي (Output):

Congratulation. You got: B
No, you didn't work hard.

وبهذا تعلمنا كيف نطبق مفهوم Callback Function وكذلك كيفية استخدام Lambda Expressions. في المرفقات تم إرفاق كامل ملف كود المثال الخاص بالجافا والجافا سكربت كذلك.

تم اخذ صورة العرض من callicoder.com

تحويل التاريخ من هجري إلى ميلادي والعكس بـ C#

عندما تتعامل مع التاريخ والوقت في C#.Net ستستخدم غالباً كلاس DateTime. مثلاً عندما تود أخذ التاريخ والوقت الحالي وطباعته في صندوق نص اسمه (txtOut)، ستكتب مثل هذا الأمر:

DateTime dateTime = DateTime.Now;
txtOut.Text = dateTime.ToString();

ناتج الكود السابق سيكون التاريخ والوقت الحالي عند تشغيل الكود، ولكن سيختلف تنسيق التاريخ ونوعه باختلاف اعدادات النظام للمستخدم. مثلاً: لو كان اعدادات تاريخ نظام المستخدم هو الميلادي (تنسيق الولايات المتحدة)، سيكون الناتج مشابه للتالي:

2/8/2019 10:24:04 PM

ولو كان اعدادت تاريخ نظام المستخدم هو الهجري (تنسيق المملكة العربية السعودية)، سيكون الناتج مشابه للتالي:

03/06/40 10:30:38 م

أحياناً، قد يكون هذا الأمر مزعج لك وترغب في توحيد عرض التواريخ بغض النظر عن اعدادات نظام المستخدم. لذلك أن كنت ترغب في تعديل الكود السابق ليظهر لك التاريخ بالهجري (تنسيق المملكة العربية السعودية)، يمكنك كتابة الكود التالي:

DateTime dateTime = DateTime.Now;
DateTimeFormatInfo format = new CultureInfo("ar-sa", false).DateTimeFormat;
format.Calendar = new HijriCalendar();
txtOut.Text = dateTime.ToString(format);

ليعمل الكود السابق، تحتاج إلى اضافة استخدام المكتبة (System.Globalization) في أعلى الملف:

using System.Globalization;

ناتج الكود السابق سيكون بالتقويم الهجري (تنسيق المملكة العربية السعودية) ولن يتم اخذ اعدادات النظام:

يمكنك تغيير التنسيق “ar-sa” في الكود السابق إلى كود البلد الذي توده. على سبيل المثال: “ar-kw” تنسيق دولة الكويت. أما بالنسبة للتاريخ الميلادي، بنفس الطريقة ولكن فقط نقوم بتغيير التقويم للميلادي، وفي حال الرغبة بعرض التاريخ الميلادي بتنسيق الولايات المتحدة (الشهر/اليوم/السنة) يمكن كتابة الكود التالي:

DateTime dateTime = DateTime.Now;
DateTimeFormatInfo format = new CultureInfo("en-us", false).DateTimeFormat;
format.Calendar = new GregorianCalendar(GregorianCalendarTypes.USEnglish);
txtOut.Text = dateTime.ToString(format);

ناتج الكود السابق سيكون بالتاريخ الميلادي:

تعلمنا مما سبق كيف نجلب التاريخ والوقت الحالي ثم نغير التاريخ بتغيير تنسيق التاريخ والتقويم. ولكن كيف لو كان لدينا تاريخ هجري محدد وليس الحالي ونرغب بتحويله لميلادي؟ الأمر بسيط. لنفرض أن التاريخ الهجري الذي نرغب بتحويله لميلادي هو (1/9/1440 هـ)، يمكنك كتابة الكود التالي:

HijriCalendar hijriCalendar = new HijriCalendar();
DateTime dateTime = new DateTime(1440, 9, 1, hijriCalendar);
DateTimeFormatInfo englishFormat = new CultureInfo("en-us", false).DateTimeFormat;
englishFormat.Calendar = new GregorianCalendar(GregorianCalendarTypes.USEnglish);
txtOut.Text = "Gregorian(US):  " + dateTime.ToString(englishFormat);
DateTimeFormatInfo arabicFormat = new CultureInfo("ar-sa", false).DateTimeFormat;
arabicFormat.Calendar = new HijriCalendar();
txtOut.Text += Environment.NewLine + "Hijri(SA):            " + dateTime.ToString(arabicFormat);

ناتج الكود السابق:

كما تلاحظ، نتيجة تحويل تاريخ (1/9/1440 هـ) إلى ميلادي هو (5/5/2019 م). لنجرب الآن التحويل من ميلادي إلى هجري (تحويل 5/5/2019م):

GregorianCalendar gregorianCalendar = new GregorianCalendar(GregorianCalendarTypes.USEnglish);
DateTime dateTime = new DateTime(2019, 5, 5, gregorianCalendar);
DateTimeFormatInfo arabicFormat = new CultureInfo("ar-sa", false).DateTimeFormat;
arabicFormat.Calendar = new HijriCalendar();
txtOut.Text = "Hijri(SA):            " + dateTime.ToString(arabicFormat);
DateTimeFormatInfo englishFormat = new CultureInfo("en-us", false).DateTimeFormat;
englishFormat.Calendar = new GregorianCalendar(GregorianCalendarTypes.USEnglish);
txtOut.Text += Environment.NewLine + "Gregorian(US):  " + dateTime.ToString(englishFormat);

نتيجة الكود السابق:

بهذه الطريقة يتم التبديل بين التواريخ في C#.Net، وهذه تعتبر أسهل طريقة بدون الحاجة لكتابة أو إضافة مكتبات خارجية لتحويل التواريخ إلى تقويمات مختلفة.

صورة العرض من موقع larutadelsorigens.ca

لا تستخف بقدراتك

غالباً عند بداية الرغبة في عمل ما أو الحصول على أمر ما، سوف ترى ما عمله الآخرين أو كيف حصل عليه الآخرين. لا مشكلة في ذلك، ولكن المشكلة عندما يأتيك الشعور بالعجز أو الشعور بقلة إمكانياتك عندما تدرك أنه لم يكن الأمر بالسهولة التي تتوقعها.

فمثلاً عند بداية دخولك للجامعة، قد يكون حلمك دخول كلية معينة. عند دخولك هذه الكلية وبداية الدراسة فيها، قد تبدأ تفكر في أن قدراتك أقل من هذا التخصص وأن الأمر صعب بعكس ما تخيلت. وأكثر من ذلك، عندما ترى ما يقدمه الطلاب السابقين أو مشاريع التخرج للطلاب، قد يزداد هذا الشعور ويتحول إلى إحباط بسبب الشعور بالعجز.

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

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

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

تذكر كيف استطعت المشي لأول مره في هذه الحياة. لم تستطع ذلك في أول الشهور من ولادتك. وإنما استغرق الأمر شهور ليقوى عظمك وتنمو ثم محاولات لم تنجح في بدايتها، ثم نجاح ثم محاولة للوصول إلى أبعد من ذلك وهو الجري. لم تستطيع أن تجري بدون تعلمك للمشي.

لا تيأس وكن كالطفل في عزيمته وعدم استسلامه. لا تستختف بقدراتك، فلا يوجد شخص أذكى منك. كن أنت أنت، فأنت لا حدود لقدراتك، لا حدود لإبداعك، لا حدود لتميزك، لا حدود لذكائك.

صورة العرض من موقع quotefancy.co

عرض الشرائح الخاص بورشة عمل تطوير تطبيقات الأندرويد في عالم التطبيقات

بسم الله الرحمن الرحيم
السلام عليكم ورحمة الله وبركاته

أرفق لكم ملف عرض الشرائح – السلايدات – الخاص بورشة عمل تطوير تطبيقات الأندرويد في ملتقى عالم التطبيقات في فندق الريتز كارلتون، اليوم الموافق 10/6/2018 من الساعة 5 إلى 7 مساءً.

يفصل تحميل برنامج Android Studio قبل حضور الورشة. للتحميل من هنا: https://developer.android.com/studio

دمتم بود،

بسم الله الرحمن الرحيم

السلام عليكم ورحمة الله وبركاته

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

يسعدني مشاركتكم وسماع أرائكم.
دمتم بود،
أحمد