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

عبدالهادي الديوري

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

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

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

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

    22

كل منشورات العضو عبدالهادي الديوري

  1. سيطلب منك Vim أو أي محرر آخر صلاحيات الجذر إذا كنت تحاول أن تعدّل على ملف مملوك من طرف المستخدم root، وهذه الملفات عادة ما تكون خارج مجلّد المنزل أو داخل مجلّد root الخاص بالمُستخدم الجذر. ولكي تستطيع التّعديل على هذه الملفات المملوكة من طرف root فعليك أن تقوم بفتح الملف عبر sudo ثمّ اسم المحرر ثمّ مسار الملف، انظر المثال: sudo vim /root/f.txtعند تطبيق الأمر سوف يُفتح الملف f.txt على مجلّد root وستتمكن من التّعديل عليه بحرية. لكن عليك أن تكون حذرا من تنفيذ أوامر لا تدري عنها شيئا باستخدام sudo فقد يتسبب الأمر بتخريب جهازك. لذلك فلا تستعمل sudo إلا إذا كنت واثقا مما تفعله.
  2. بعد أن تعرّفنا في الدّرس السّابق على طريقة التّعامل مع البيانات مثل المُتغيّرات وأنواعها كالأرقام وإسناد القيم، سنكمل في هذا الدّرس الثّالث مشوار تعلّم هذه اللغة بتعلّم كيفيّة التّعامل مع كل من القوائم والسّلاسل النّصيّة. تذكير: الشيفرات التّي تكون مسبوقة بعلامة "<<<" يجب أن تُنفّذ على مُفسّر بايثون. القوائم تعتبر القوائم طريقة رائعة للتّعامل مع البيانات في لغة بايثون، وتتعلّق القائمة بمتغيّر معيّن بحيث يحمل أكثر من قيمة، ويمكن الوصول إلى هذه القيم باستعمال رقم كل قيمة. لتفهم أكثر، اعتبر أنّ لك 5 أبناء، بحيث تكون قائمة الأبناء: 0، عمر 1، خالد 2، حسن 3، زيد 4، يوسف في بايثون، ننشئ القائمة بالطّريقة التاليّة: >>> children = ['Omar','Khaled','Hassan','Zaid','Youssef'] لنسمّي القائمة أعلاه باسم children، وتحتوي على خمس عناصر، ولكل عنصر رقم خاص به، بحيث يبدأ العدّ من الصّفر، فمثلا إذا أردنا مناداة الابن "عمر" فسيتوجّب علينا مناداته برقمه (أي الرقم 0)، وطريقة مناداة باقي الأبناء تكون بالشّكل التّالي: >>> print 'Come here ' + children[0] Come here Omar >>> print 'Come here ' + children[1] Come here Khaled >>> print 'Come here ' + children[2] Come here Hassan >>> print 'Come here ' + children[3] Come here Zaid >>> print 'Come here ' + children[4] Come here Youssef الآن، لننتقل إلى تطبيق مبادئ القوائم على بايثون، يُمكننا إسناد قائمة إلى متغيّر كالتّالي: >>> x = [1, 2, 3] ويُمكنك إنشاء قائمة سلاسل نصيّة عوضا عن الأرقام: >>> x = ["hello", "world"] يُمكن أن تجمع بين أنواع القيّم المُختلفة، هذا المثال يجمع بين الأرقام والسّلاسل النّصيّة: >>> x = [1, 2, "hello, "world"] ويُمكن أن تحتوي القائمة على قائمة أخرى: >>> x = [1, 2, "hello, "world", ["another", "list"]] أو بالطّريقة التّاليّة: >>> a = [1, 2] >>> b = [1.5, 2, a] >>> b [1.5, 2, [1, 2]] يُمكن أن نستخدم الدّالة len المعرّفة مُسبقا لنقيس طول قائمة ما (عدد مكونات القائمة): >>> x = [1, 2, 3] >>> len(x) 3 نصل إلى عناصر قائمة ما بكتابة اسم المُتغيّر الذي يحمل القائمة، ثمّ رقم العنصر بين رمزي []: >>> x = [1, 2, 3] >>> x[1] 2 >>> x[1] = 4 >>> x[1] 4 مع ملاحظة أنّ التّرقيم يبدأ بالصّفر، بحيث يكون العنصر الأوّل من القائمة يحمل الرّقم 0 والعنصر الثّاني يحمل رقم 1 وهكذا دواليك. يُمكن إنشاء قائمة تحتوي على أعداد صحيحة من مجال معيّن بالدّالة Range، في المثال التّالي قُمنا بإنشاء قائمة تحتوي على أربعة عناصر من 0 إلى 3، ثمّ قائمة تحتوي على ثلاثة عناصر بين العددين 3 و 6، ثمّ في السّطر الأخير قُمنا بإنشاء قائمة مُتكوّنة من 3 عناصر بين العددين 2 و 10 مع زيادة بقيمة 3 : >>> range(4) [0, 1, 2, 3] >>> range(3, 6) [3, 4, 5] >>> range(2, 10, 3) [2, 5, 8] يُمكن كذلك استخدام الدّالة len لحساب عدد عناصر قائمة ما: >>> a = [1, 2, 3, 4] >>> len(a) 4 كما يُمكنك التّعامل مع القوائم بالرموز الرّياضيّة * و + لتكرار أو الجمع بين عناصر قائمة ما: >>> a = [1, 2, 3] >>> b = [4, 5] >>> a + b [1, 2, 3, 4, 5] >>> b * 3 [4, 5, 4, 5, 4, 5] للوصول إلى عناصر قائمة مُعيّنة نستعين برقم العنصر، مع ملاحظة بأنّ التّرقيم يبدأ من الصّفر إلى ( عدد العناصر-1 ). >>> x = [1, 2] >>> x[0] 1 >>> x[1] 2 إذا استخدمت فهرسا (ترقيما) خاطئا، فسيُرجِع مفسّر بايثون خطأ: >>> x = [1, 2, 3, 4] >>> x[6] Traceback (most recent call last): File "<stdin>", line 1, in ? IndexError: list index out of range يُمكنك كذلك استخدام التّرقيم السّلبي للوصول إلى عناصر القائمة من الآخر إلى الأول ( آخر عنصر يحمل القيمة -1 والعنصر الأول يحمل الرقم السّلبي لعدد العناصر): >>> x = [1, 2, 3, 4] >>> x[-1] 4 >>> x[-2] 3 >>> x[-4] 1 يُمكننا تشريح قائمة (تقسيمها إلى أجزاء)، بالطّريقة التّاليّة: >>> x = [1, 2, 3, 4] >>> x[0:2] [1, 2] >>> x[1:4] [2, 3, 4] ويمكن استخدام الأرقام السلبيّة في التّقسيم كذلك: >>> x[0:-1] [1, 2, 3] إذا تركت مكان الرقم الأول فارغا، فالقيمة الافتراضيّة هي الصّفر، و القيمة الافتراضيّة للشّطر الثاني تكون عدد عناصر القائمة: >>> x = [1, 2, 3, 4] >>> a[:2] [1, 2] >>> a[2:] [3, 4] >>> a[:] [1, 2, 3, 4] يُمكن استخدام رقم ثالث لتحديد الخطوة (يعني المقدار الذي نضيفه في العنصر الحالي مقارنة بالعنصر السّابق)، والذي يكون الرّقم واحد افتراضيّا: >>> x = range(10) >>> x [0, 1, 2, 3, 4, 5, 6, 7, 8, 9] >>> x[0:6:2] [0, 2, 4] يُمكننا عكس عناصر القائمة بتحديد -1 كقيمة للزيّادة بالشّكل التّالي: >>> x = range(10) >>> x [0, 1, 2, 3, 4, 5, 6, 7, 8, 9] >>> x[::-1] [9, 8, 7, 6, 5, 4, 3, 2, 1, 0] يُمكن كذلك تغيير قيم عناصر القائمة بتعيين قيمة أخرى: >>> x = [1, 2, 3, 4] >>> x[1] = 5 >>> x [1, 5, 3, 4] يُمكن استعمال العامل in للتحقق من تواجد عنصر في القائمة، فإن أرجع القيمة True فهذا يعني أن القيمة موجودة، أما إن أرجع False فهذا يعني بأنّ القيمة غير موجودة في القائمة: >>> x = [1, 2, 3, 4] >>> 2 in x True >>> 10 in x False يُمكن إضافة قيم أخرى إلى قائمة بدالّة الإلحاق append، في المثال التّالي نلحق (نضيف) القيمة 3 إلى القائمة a: >>> a = [1, 2] >>> a.append(3) >>> a [1, 2, 3] السلاسل النصية السّلاسل النّصيّة أو Strings هي التّقنيّة المُستخدمة لكتابة النّصوص في بايثون، وهي سلاسل من الحروف (والتّي بدورها تُشكل جملا فنصوصا)، فمثلا الكلمة "مرحبا" عبارة عن سلسلة نصيّة تحتوي على 5 عناصر، ويمكن الوصول إلى كلّ عنصر كالآتي: العنصر رقم 0 => م العنصر رقم 1 => ر العنصر رقم 2 => ح العنصر رقم 3 => ب العنصر رقم 4 => ا مع ملاحظة أنّ المسافات تُحسَبُ كذلك في السّلاسل النّصيّة فمثلا السّلسلة "مرحبا " تحتوي على 6 عناصر (لاحظ المسافة بعد الألف). وتكون السلاسل النّصية ضمن علامتي تنصيص مزدوجتين "" أو علامتي تنصيص مُفردتين ''. >>> x = "hello" >>> y = 'world' >>> print x, y hello world مع ملاحظة أنّ هناك فرقا بين علامات التّنصيص المزدوجة والمنفردة، ويُمكن استعمالهما بشكل تبادلي. أمّا السّلاسل النّصيّة التي تحتوي على أكثر من سطر، فيُمكن تعيينها لمُتغيّر باستعمال ثلاثة رموز إمّا ''' أو """، انظر المثال التّالي (لكي يعمل بشكل جيّد، من المُفضّل وضعه في ملفّ باسم example1.py وتنفيذه بالأمر python example1.py): x = """This is a multi-line string written in three lines.""" print x y = '''multi-line strings can be written using three single quote characters as well. The string can contain 'single quotes' or "double quotes" ''' print y في المثال أعلاه قمنا بتعيين سلسلة من ثلاثة أسطر للمُتغيّر x بحيثُ يكون المُخرج عند طباعة المُتغيّر x: This is a multi-line string written in three lines. يُمكن كذلك إنشاء سلسلة نصيّة متعدّدة الأسطر بإضافة \n إلى نهاية كلّ سطر، انظر المثال: >>> x = 'This is a multi-line string\nwritten in\nthree lines.' >>> print x مُخرجات المثال أعلاه: This is a multi-line string written in three lines. يُمكن الاستعانة بدّالة المُعرّفة مُسبقا في بايثون لقيّاس عدد أحرف سلسلة نصّية، وهذه الدّالة تُدعى len ويُمكن استخدامها على النّحو التّالي: >>> len("Abdelhadi") 9 السّلاسل النّصيّة في بايثون تتصرّف تماما كالقوائم، بحيث تكون السّلسلة بمثابة قائمة تحتوي على عدّة أحرف، ويمكن فهرسة (الوصول إلى عناصر السّلسلة) وتقطيع السّلاسل النّصيّة بتتبع نفس مبدأ القوائم، انظر المثال: >>> a = "helloworld" >>> a[1] 'e' >>> a[-2] 'l' >>> a[1:5] "ello" >>> a[:5] "hello" >>> a[5:] "world" >>> a[-2:] 'ld' >>> a[:-2] 'hellowor' >>> a[::-1] 'dlrowolleh' يُمكن استعمال العامل in للتحقق فيما إذا كانت السّلسلة النّصيّة جزءا من سلسلة أخرى، في المثال التّالي نقوم بالتحقق من أنّ كلّا من hell و full و el ضمن hello: >>> 'hell' in 'hello' True >>> 'full' in 'hello' False >>> 'el' in 'hello' True عندما يكون المخرج True (صحيح) فهذا يعني بأنّ السّلسلة الصغيرة جزء من السّلسلة النّصيّة الكبيرة. هناك العديد من العمليّات التّي يُمكن تطبيقها على السّلاسل النّصيّة، وسنتعرّف على بعض منها فيما يلي من الأسطر: split: فصل سلسلة نصّية إلى أجزاء يفصل بينها أي رمز (شرط أن يكون في السّلسلة) نقوم بتمريره إلى هذه الدّالة، إذا لم تُحدّد أي فاصل فاستعمل split على فصل السّلسلة النّصيّة اعتمادا على مسافة بيضاء (أي تقسيم الجملة إلى كلمات)، لتفهم أكثر ما الذي أقصده تمعّن في المثال التّالي فبه سيتّضح المقال: >>> "hello world".split() ['hello', 'world'] >>> "a,b,c".split(',') ['a', 'b', 'c'] join: هذه الدّالة تعكس مفعول split حيث تجمع بين عناصر القائمة وترجعها سلسلة نصّية: >>> " ".join(['hello', 'world']) 'hello world' >>> ','.join(['a', 'b', 'c']) 'a,b,c' strip: تقوم بإرجاع سلسلة نصية مع حذف المسافات الزائدة. >>> ' hello world\n'.strip() 'hello world' في المثال أعلاه، يدّل الرّمز \n على "سطر جديد" بحيث يطبع السّطر التّالي سطرين الأول hello والثّاني world: >>> print 'hello\nworld' hello world يُمكن كذلك تمرير قيمة نصيّة لـstrip بحيث تُرجع الدّالة سلسلة نصيّة بدون القيمة المُمَرّرَةِ، لاحظ بأنّها تحذف فقط العناصر الموجودة في بداية وآخر السّلسلة، انظر المثال (لاحظ بأنّ d لم تُحذف، وذلك لأنّها وسط السّلسلة): >>> 'abcdefgh'.strip('abdh') 'cdefg' replace: تقوم باستبدال جزء من السّلسلة أو كامل السّلسلة بقيمة أخرى: >>> 'Hsoub Academy'.replace('Academy', 'I/O') 'Hsoub I/O' تمارين تمرين 1 ما مُخرجات البرنامج التّالي (اُكتبه في ملفّ باسم exercise1.py ثمّ قم بتنفيذه بالأمر python exercise1.py): x = [0, 1, [2]] x[2][0] = 3 print x x[2].append(4) print x x[2] = 2 print x تمرين 2 كم عدد عناصر القائمة x في المثال التّالي (لا تقم بالأمر يدويّا، بل استعن بما تعلّمته): x = [1, 2, "hello, "world", ”Hi”, 4, 8, 3, 0, “Abdelhadi”, “Hsoub Academy”] تمرين 3 أزل القيمة "bad" من السّلسلة التاليّة: >>> 'python is awesome bad' ترجمة -وبتصرف- للكتاب Python Practice Book لصاحبه Anand Chitipothu.
  3. لا شكّ بأنّك أدركت بأن التّسويق عبر المُحتوى له فائدة كثيرة، وأنّ من أهمّ وسائل التّسويق تكون بالتّسويق عبر مقاطع الفيديو التّي تقدم مواد تثقيفيّة وتعليمية وإرشادية، وهناك بعض الأمور لأخذها بعين الاعتبار عند التّسويق باستخدام مقاطع الفيديو، أهمّها جودة المُحتوى المُقدّم، إذ عليك أن تقوم بتقديم معلومات صحيحة ومفيدة بطريقة عصرية، خالية من التّفاهة وما لا يقدم للقارئ أية إفادة. كما أنّ جودة المقاطع تحكم كذلك على نجاح أو فشل حملاتك التّسويقية، إذ يجب عليك تصوير الفيديو بأحدث التّقنيات وتقديمه بأعلى جودة وضوح متوفّرة.
  4. التّسويق عبر مدونة الشّركة من أهم أساليب التّسويق المتبعة في أيامنا، وله عظيم المنفعة خاصة إذا كانت شركتك تقنيّة، فالأشخاص المُستهدفون عادة ما يتحولون إلى عملاء إذا كان المحتوى الخاص بك عالي الجودة. وإليك بعض النّصائح للتسويق بمحتوى عالي الجودة. التّسويق عبر نشر المقالات في مدونة الشّركة: أنشئ مدونة بنطاق فرعي blog.example.org واكتب فيها مواد إرشادية وتعليمية في مجالك، احرص على ألا تكون المقالات قصيرة، كما يجب أن تكون خالية من الأخطاء الإملائية واللغوية، ويجب أن تكون متعلّقة بمجال شركتك بحيث تقدّم المُفيد للقراء بشكل مجاني ما سيدفعهم لشراء خدماتك المدفوعة. إذا لم تستطع أن تكتب بشكل دوري على المدونة فمن المُفضّل أن توظف مستقلا للعمل معه بمقابل معين، مثلا 20 دولارا لكل مقال تفوق عدد كلماته الألف كلمة. كما يجب أن تركّز على عدم وضع إعلانات ربحية في مدونة الشّركة فهذه فكرة سيئة جدا، لأنّك بذلك تعطي انطباعا لزوار المدونة بأنّ المهم عندك هو الربح مهما كان المصدر، لذلك فعليك التّسويق لخدمات شركتك بذكاء. يُمكنك كذلك أن تُقدّم لزوار المدونة كتبا رقمية وهدايا قيمة بين الحين والآخر.
  5. يُمكن تقسيم قائمة إلى أقسام متساوية بعدّة طرق منها: الشّيفرة: def chunks(l, n): """Yield successive n-sized chunks from l.""" for i in xrange(0, len(l), n): yield l[i:i+n]طريقة الاستعمال: import pprint pprint.pprint(list(chunks(range(10, 75), 10))) [[10, 11, 12, 13, 14, 15, 16, 17, 18, 19], [20, 21, 22, 23, 24, 25, 26, 27, 28, 29], [30, 31, 32, 33, 34, 35, 36, 37, 38, 39], [40, 41, 42, 43, 44, 45, 46, 47, 48, 49], [50, 51, 52, 53, 54, 55, 56, 57, 58, 59], [60, 61, 62, 63, 64, 65, 66, 67, 68, 69], [70, 71, 72, 73, 74]]في الشّيفرة أعلاه أرجع البرنامج سبعة قوائم كلّ قائمة تحتوي على 10 عناصر بين القيمتين 10 و 75. مع ملاحظة استبدال range بـxrange في بايثون 3. يُمكنك كذلك الاعتماد على الدّالة التّاليّة: def chunks(l, n): n = max(1, n) return [l[i:i + n] for i in range(0, len(l), n)]الدّالة chunks أعلاه تقوم بإرجاع القوائم من القائمة l و n هو عدد عناصر كل قائمة.
  6. التّسويق عبر المحتوى عبارة عن تقديم مقالات مفيدة ذات صلة تنفع القارئ بهدف تحويله إلى عميل لشركتك، والتّسويق عبر المحتوى أهمّ أساليب التّسويق خاصّة إذا كانت الشّركة تقنية، فمدونة الشّركة ستجلب لك العديد من الزوار الذين يمكن أن يتحولوا إلى عملاء في أية لحظة، لذلك فمن المهم الحرص على التّسويق عبر المُحتوى. كما يفيدك إنشاء محتوى عالي الجودة في كسب ثقة عملائك. وتوطيد العلاقات بينهم لن يكون صعبا لأنّك تُوضّح لهم من خلال مُدونة الشّركة بأنّ الرّبح ليس جُلّ اهتمامك، بل إفادة النّاس كذلك خاصّة وأنّ المقالات مجانية بالكامل. كما تعرّف المقالات التي تقدمها مجانا لزوارك على شركتك وفريقها، وبالتّالي فستكوّن فكرة عميقة في ذهن المتلقي وسيدفعه الأمر لشراء منتجاتك والتّعامل مع شركتك.
  7. يُمكنك بالفعل أن تعتمد على خدمة Bitly لتقصير الرّوابط، وذلك بالاستعانة بالـAPI الخاص بهم بالإضافة إلى جوهرة bitly، ولكنّك ستحتاج إلى التّسجيل في الموقع أولا للحصول على مفتاح الـAPI الخاصّ بك (ستحتاج إلى هذا المفتاح في تطبيق Rails). إليك خطوات القيام بالأمر. قم بالتّسجيل على الموقع من هذا الرّابط. ثمّ احصل على مفتاحك من هذه الصفحة. قم بتنصيب الجوهرة على جهازك: gem install bitlyاستدع الجوهرة في ملف Gemfile: gem 'bitly', '~> 0.10.4'ثمّ قم بإنشاء المُتحكم urls : rails g controller urls new createاضبط الموجّهات كالتّالي: BitlyExample::Application.routes.draw do resources :urls, only [:new, :create] root to: 'urls#new' endأنشئ ملفّا باسم bitly.rb على مجلّد config وضع به التّالي: Bitly.configure do |config| config.api_version = 3 config.login = "USERNAME" config.api_key = "API_KEY" endمع تغيير USERNAME ليوافق اسم المُستخدم الخاص بك على موقع Bitly. واستبدال API_KEY بمفتاح الـAPI الخاص بك. الآن تستطيع أن تعدّل ملف urls_controller.rb المتحكم لكي تستطيع إنشاء روابط مختصرة من عوامل Http وذلك عبر صفحات العرض views كالآتي: class UrlsController < ApplicationController def new end def create if !params[:url].blank? client = Bitly.client @url = client.shorten(params[:url]) end end endبعد ذلك، ضع في ملف new.html.erb الشيفرة التّالية لإنشاء نموذج للحصول على عناوين Url لاختصارها: <h1>Create a new Bit.ly URL:</h1> <%= form_for "", url: urls_path, method: :post do |f| %> <%= f.label :url %> <%= f.text_field :url %> <%= f.submit "Create Url" %> <% end %>أمّا في ملف create.html.erb فيمكنك تقديم الرّابط المُختصر للمُستخدم: <h1>Your url for <%= @url.long_url %> is: </h1> <%= link_to @url.short_url, @url.short_url, target: "_blank" %><br /><br /> <%= link_to "Create another Url", root_path %>
  8. التّسويق عبر المُحتوى ببساطة هو تقديم محتوى يتعلّق بمجال شركتك لأشخاص مهتمين في سبيل دفعهم إلى شراء خدماتك والتّعامل مع شركتك، وكلّما كان المحتوى ذو جودة عالية كلما زاد عدد الزوار وبالتّالي يزيد عدد العملاء، لأنّ الهدف الأساسي هو تحويل الزوار إلى عملاء يشترون خدماتك، ويمكن تقديم المُحتوى على شكل كتب، مقالات، مقالات صوتية، فيديوهات. كما تعتبر المواد التّعليمية والإرشادية أحد أهم أشكال التسويق عبر المحتوى. مثلا إذا كنت تمتلك شركة تقنية مهتمة بالكتابة (يعني تُقدّم للنّاس خدمات الكتابة)، فيمكنك إنشاء مدونة لشركتك تنشر فيها عدّة مقالات عن الكتابة كمواد تعليمية للكتّاب والمدونين، ومواد إرشادية للشّركات التي ترغب بالحصول على خدمات كتابة.
  9. phantomjs متوفّرة في المُستودعات الرسمية لتوزيعة ubuntu ويكفي أن تقوم بتحديثها للحصول على آخر نسخة منها. طبّق الأوامر التّالية في الطّرفية واحدة تلو الأخرى: لتحديث المُستودعات وقائمة البرامج: sudo apt-get updateلتنصيب phantomjs: sudo apt-get install phantomjsإذا طُلب منك إدخال كلمة المرور فقم بذلك. واكتب y عندما يطلب منك تأكيد المهمة. عند انتهاء التنصيب تأكّد من أنّ كل شيء جيد وذلك بالتّحقّق من نسخة phantomjs المُنصبة على جهازك، وذلك بالأمر: phantomjs --versionإذا كان المُخرج عبارة عن رقم إصدار معيّن يُشبه السّطر التّالي: 1.9.0فهذا يعني بأنّ phantomjs مُنصّبة بنجاح.
  10. التّابع all يقوم ببساطة بتطبيق شرط معيّن على العنصر الأول من مصفوفة، ثمّ ينتقل إلى المصفوفة الأخرى وذلك باتّباع طريقة العامل AND في الشّروط. يُمكن استعمال all للتحقق من أنّ جميع عناصر مصفوفة ما أصغر من عدد معين، انظر إلى الشّيفرة الآتية: [123,456,789].all?{|b| b > 100 }السّطر أعلاه يرجع القيمة true لأنّ جميع العناصر أصغر من العدد 100 . أما في السّطر التالي: [123,456,789].all?{|b| b > 200 }فسيرجع القيمة false لأنّ 123 ليست أكبر من 200، وبالتّالي فإنّه ليس لجميع عناصر المصفوفة قيمة أكبر من 200.
  11. تُستخدم require لاستدعاء ملفّ خارجي وتطبيق شيفراته (الوحدات مثلا)، وذلك كالتّالي: require "file_name"إذا كان المُخرج true، فهذا يعني بأنّ طلب الملفّ ناجح وقد استُدعِي بنجاح. إذا كان المُخرج false، فهذا يعني بأنّ طلب استدعاء الملفّ قد تم بالفعل. إذا كان المُخرج خطأ Error، فتأكّد من أنّ اسم الملف موجود وتأكّد من مساره. تُستخدم require كذلك لاستدعاء جواهر روبي في ملفّات ruby. ولكنك لن تحتاج إلى هذا الاستعمال لأنك تمتلك ملفّ Gemfile والذي يُمكنك من استدعاء الجواهر ببساطة.
  12. أولا عليك أن تعلم بأنّ أكاديمية حسوب لا تستعمل Blogger كنظام لإدارة المُحتوى، أمّا بالنّسبة لسؤالك حول كيفيّة عرض الشّيفرات بطريقة جميلة في مقالاتك على مُدوّنتك، فيمكنك الاعتماد على تطبيق hilite.me لتنسيق الشّيفرات البرمجيّة، وطريقة عمله تكون كالتّالي: ادخل إلى الموقع من هذا الرابط.قم بكتابة الشّيفرة التّي ترغب بتنسيقها داخل مربّع الإدخال تحت مسمى Source codeاختر لغة البرمجة المُناسبة من قائمة Language، حيث يُوفّر لك الموقع العديد من لغات البرمجة للاختيار بينها.اختر طريقة التّنسيق التّي تعجبك من قائمة Styleيُمكنك الاختيار بين ترقيم الشيفرة حسب الأسطر، وذلك من الخيار Line numbers.اضغط على زر Highlight!سيقوم الموقع بتوليد شيفرة HTML، انسخ هذه الشّيفرة وضعها في المكان المُناسب عند كتابة المقال في Blogger. ولتعديل شيفرة HTML غيّر وضع الكتابة من Compose إلى HTML. كما في الصّورتين التّاليتين:
  13. في Rails 3.2 فما فوق وRails 4 فما فوق أصبح بإمكانك أن تحصل على رابط Url الصّفحة الحاليّة باستعمال السّطر: request.original_urlملاحظة: بما أنّك تعمل على تطبيق ويب، فمن الممكن أن تحصل على رابط الصّفحة بلغة Javascript وذلك بالسّطر التّالي: window.location.href
  14. الحرف x يعني القدرة على تنفيذ الملف، أو قابليّة تشغيله، والحرف x اختصار لـ Execute أو تنفيذ، إذا كان الملفّ يحمل الإذن بالتّنفيذ، فهذا يعني بأنّك تستطيع تشغيله من الطّرفيّة بمجرّد ذكر اسمه ومساره، مثلا لنقل بأنّنا نملك ملفّ f.txt داخل مجلّد المنزل، وهذا الملفّ يحتوي على السّطر التّالي: lsالأمر ls يعرض المجلّدات والملفّات الموجودة داخل المُجلّد الحالي. إذا حاولنا أن ننفّذ الملف من الطّرفيّة كالتّالي: $HOME/f.txtسنحصل على خطأ: bash: /home/dyouri/f.txt: Permission deniedوهذا راجع لكون الملفّ غير قابل للتّنفيذ، ويجب علينا أن نقوم بتغيير الإذن ليصبح بإمكاننا تنفيذه، وإضافة الإذن بالتّنفيذ يكون كالتّالي: chmod +x f.txtالآن إذا نفّذنا الأمر: $HOME/f.txtستُلاحظ بأنّ المُخرجات هي نفسها مُخرجات الأمر ls، (تذكّر بأنّنا وضعنا ls داخل الملف f.txt). إذا كنت ترغب بإزالة قابليّة التّنفيذ، فيكفي أن تنفّذ الأمر التّالي: chmod -x f.txt
  15. الحرف w في أذونات لينكس يعني الإذن بالكتابة أو القدرة على تعديل الملفّ، وهو اختصار للكلمة write. يُخوّل لك الإذن w الكتابة على الملفّ والتّعديل عليه، لكن لتحريره من برنامج للتّحرير يجب أن تمتلك القدرة على قراءته كذلك، يعني لتعديل ملفّ، يجب عليك أن تتمكن من قراءته (الإذن r) والكتابة عليه (الإذن w)، ولجعل ملفّ ما قابلا للقراءة والكتابة في لينكس يكفي أن تنفّذ الأمر التّالي: chmod +wr file.txtمع تغيير file.txt إلى اسم الملفّ عندك.
  16. يُوفّر لنا نظام لينكس إمكانيّة تغيير إذن ملفّ بسهولة من سطر الأوامر. وإليك طرق التّغيير بين الأذونات المُختلفة. لجعل الملفّ حاملا لإذن القراءة فقط، بحيث يكون غير قابل للتّعديل، يُمكنك أن تنفّذ الأمر التّالي: chmod 0444 file.txtلجعل الملفّ حاملا لإذن القراءة والكتابة، بحيث يكون قابلا للتّعديل، يُمكنك أن تنفّذ الأمر التّالي: chmod +wr file.txtلإزالة إمكانيّة الكتابة عن ملفّ ما، بحيث يُصبح غير قابل للكتابة (نفس نتيجة الأمر الأول): chmod -w file.txtلجعل الملفّ غير قابل للقراءة: chmod -r file.txtلجعل الملفّ قابلا للتّنفيذ: chmod +x file.txtلإزالة قابلية التّنفيذ عن الملفّات: chmod -x file.txt
  17. الحرف r في أذونات لينكس يعني الإذن بالقراءة أو القدرة على القراءة، وهو اختصار للكلمة read والتّي تعني قرأ، يقرأ. لن تجد الكثير من الحريّة عند التّعامل مع ملفّ بالإذن r فقط، حيث ستُمنع من الكتابة على الملفّ أو حذف معلومات منه، كلّ ما يُمكنك فعله هو قراءة الملفّ فقط إمّا ببرنامج gedit أو mousepad أو kate أو أي قارئ ملفّات آخر. الأمر يكون مُفيدا في حين أردت أن تُرسل لأحدهم ملفّا لقراءته وترغب بمنعهم من الكتابة عليه أو تعديله.
  18. لا يوجد فرق بين التّابع والدّالة، الدّالة ببساطة هي جزء من شيفرة ما، يُمكن استدعاءها لتأديّة الغرض الذي أنشأت من أجله بالاعتماد على اسمها. مثال على الدّالة في لغة روبي: def say_hello puts 'Hello!' end say_hello المخرج: Hello!يُمكن تمرير المعلومات للدّالة بالطّريقة الآتية: def say_hello(name) puts 'Hello! ' + name end say_hello('Abdelhadi')المُخرج: Hello! Abdelhadiأمّا التّابع فهو أيضا دالة لكنّه مرتبط بكائن معيّن والشّيفرة التّي يحتويها تُطبّق مع ذلك الكائن. مثال على التّابع في لغة روبي: a = [1,3,6,7,8] a.length المخرج: => 5هنا قمنا بتطبيق التّابع length على المصفوفة a.
  19. يُمكنك القيام بالأمر بالاستعانة بمكتبة nokogiri على روبي، وذلك كالآتي: require 'nokogiri' doc = Nokogiri::HTML.parse(<<-HTML_END) <div class="heat"> <a href='http://example.org/site/1/'>site 1</a> <a href='http://example.org/site/2/'>site 2</a> <a href='http://example.org/site/3/'>site 3</a> </div> HTML_END l = doc.css('div.heat a').map { |link| link['href'] }قُمنا بوضع الـHTML بين وسمي HTML_END ثّم قمنا بالحصول على وسوم a داخل الـHTML والتّي تحتوي على الروابط، ثمّ وصلنا إلى الروابط من href وأسندناها إلى المُتغيّر l. المُخرج: ["http://example.org/site/1/", "http://example.org/site/2/", "http://example.org/site/3/"]
  20. الإجابة السّريعة هي لا، Ruby on Rails و Grails ليسا نفس الإطار، Ruby on Rails إطار مكتوب بلغة روبي لتمكين المُطورين الذين يستخدمون هذه اللغة من تطوير تطبيقات للويب مستعينين ببنية وفلسفة لغة روبي، أما Grails فهو إطار مكتوب بلغة Groovy ويقدّم نفس الخدمة لمبرمجي Groovy التّي تقدمها Ruby on Rails لمطوري لغة روبي. الخلاصة: هل أنت مُبرمج له خبرة في لغة روبي؟ إذن استعن بـ Ruby on Rails للعمل على تطبيقات ويب بلغة روبي. هل أنت مُبرمج له خبرة في لغة Groovy؟ إذن استعن بـ Grails للعمل على تطبيقات ويب بلغة Groovy.
  21. يُمكنك الحصول على مسار المجلّد من مسار ملفّ ببساطة بالاستعانة بـالتّابع File.dirname، وطريقة استخدامه كالآتي: File.dirname("/home/aati/folder/f.txt")المُخرج: /home/aati/folderأمّا بالنّسبة لمستخدمي الويندوز، فالأمر كذلك يُطبّقُ وتكون له نفس النّتائج، انظر المثال: File.dirname("C:/Folder/f.txt")المُخرج: C:/Folder
  22. مرحبا، يُمكنك أن تتحقّق من وجود عنوان Url على شبكة الأنترنت وذلك بالاستعانة بجوهرة faraday، وطريقة استعمالها كالتّالي: أولا قم بتنصيب الجوهرة: gem install faradayبعد ذلك قم بتمرير الرّابط للتّابع head ضمن الوحدة Faraday بالطّريقة التّالية: require 'faraday' def url_exist?(u) url = Faraday.head(u) if url.status == 200; true; else; false; end end url_exist?("http://academy.hsoub.com/")في الشيفرة أعلاه نقوم بإنشاء الدّالة url_exist للتمرير الرابط لها، داخل الدّالة نقوم بالتّحقّق من أن الجواب الذي يرجعه الرّابط يساوي رمز النّجاح 200، إذا كان الأمر كذلك فإنّ الدالة ستحمل القيمة true إذا لم يكن الأمر كذلك فالدّالة سترجع القيمة false. ثمّ بعد ذلك نستدعي الدّالة ونمرّر لها الرّابط، إذا قمت بتجربة الأمر فستكون مخرجات البرنامج true ببساطة.
  23. يُمكن تحويل سلسلة نصية إلى رقم صحيح على Javascript بعدّة طرق، وذلك كالآتي: الاعتماد على parseInt: var x = parseInt("1000", 10);يُمكنك كذلك الاعتماد على العامل الحسابي + بوضعه قبل الرّقم داخل السّلسلة النّصية كالآتي: var x = +"1000";إذا كان العدد عشريّا، يُمكنك الحصول على العدد الصّحيح منه عبر Math.floor: var x = Math.floor("1000.01");إذا كنت ستعتمد على بكثرة في برنامجك فمن المُفضّل تعريفها وإسنادها لدالة كالتّالي: var floor = Math.floor; var x = floor("1000.01");ستتمكن من استخدام Math.floor باستدعاء floor فقط.
  24. الكائن window.location مُفيد إذا كنت ترغب بإرجاع عنوان الصّفحة أو مسارها أو الاستضافة أو رقم المنفذ وبعض الخصائص الأخرى. يُمكنك التّعرف على الخصائص من خلال قراءة التّعليقات على الشّيفرة: window.location.host // الحصول على المُضيف window.location.hostname //الحصول على اسم المُضيف window.location.path // الحصول على مسار الصّفحة window.location.href //الحصول على عنوان الرّابط الكامل. window.location.port // الحصول على رقم المنفذ window.location.protocol // الحصول على البروتوكول ملاحظة: البروتوكول هو إمّا http أو https أو ftp... يُمكن كذلك الاعتماد على jQuery للحصول على ذات النّتائج: $(location).attr('host'); $(location).attr('hostname'); $(location).attr('path'); $(location).attr('href'); $(location).attr('port'); $(location).attr('protocol');
  25. يُمكنك بدء تسجيل التّغييرات التّي تقوم بها في ملفّ معيّن على Vim بالضّغط على q ثمّ الضّغط زر آخر من اختيّارك، مثلا qa، في هذه الحالة الزرّ a يُعتبر اسم التّسجيل الجاري، التّسجيل يشمل العديد من الأشياء، كالإضافات على الملفّ المناطق التي أزلت منها كلمات أو حروفا، عمليّات البحث… إذا انتهيت من التّسجيل وترغب في إيقافه كلّ ما عليك فعله هوّ الضّغط على q من جديد ولكن هذه المرّة دون أي زر إضافي. لاستدعاء التّسجيل وتطبيقه من جديد على الملفّ عليك أن تضغط على الزرّ @ ثمّ الزرّ الذي اخترته ليرمز لاسم التّسجيل.
×
×
  • أضف...