<?xml version="1.0"?>
<rss version="2.0"><channel><title>&#x627;&#x644;&#x628;&#x631;&#x645;&#x62C;&#x629;: &#x644;&#x63A;&#x629; &#x631;&#x648;&#x628;&#x64A; Ruby</title><link>https://academy.hsoub.com/programming/ruby/page/2/?d=2</link><description>&#x627;&#x644;&#x628;&#x631;&#x645;&#x62C;&#x629;: &#x644;&#x63A;&#x629; &#x631;&#x648;&#x628;&#x64A; Ruby</description><language>ar</language><item><title>&#x627;&#x644;&#x639;&#x628;&#x627;&#x631;&#x627;&#x62A; &#x627;&#x644;&#x634;&#x631;&#x637;&#x64A;&#x629; &#x641;&#x64A; &#x631;&#x648;&#x628;&#x64A;</title><link>https://academy.hsoub.com/programming/ruby/%D8%A7%D9%84%D8%B9%D8%A8%D8%A7%D8%B1%D8%A7%D8%AA-%D8%A7%D9%84%D8%B4%D8%B1%D8%B7%D9%8A%D8%A9-%D9%81%D9%8A-%D8%B1%D9%88%D8%A8%D9%8A-r274/</link><description><![CDATA[
<p><img src="https://academy.hsoub.com/uploads/monthly_2016_02/ruby-conditions.png.dc03ed7a1d12d2eee25c364dcda06008.png" /></p>

<div id="wmd-preview-section-42">
	<p id="العبارات-الشرطية-في-روبي">
		سنتعرّف في هذا الدّرس على العبارات الشرطيّة وكيفيّة استخدامها لتنفيذ أوامر أو تجاهلها استنادًا إلى شرط معيّن.
	</p>

	<p style="text-align: center;">
		<img alt="ruby-conditions.png.1684f901dea6c311c1a8" class="ipsImage ipsImage_thumbnailed" data-fileid="12687" data-unique="a5fbir27c" src="https://academy.hsoub.com/uploads/monthly_2016_02/ruby-conditions.png.1684f901dea6c311c1a8acdf4297a4af.png"></p>

	<p>
		افتح ملفّ روبي جديد وسمّه <span style="font-family:courier new,courier,monospace;">logic.rb </span>أو أيّ اسم آخر مع التأكّد من كتابة <span style="font-family:courier new,courier,monospace;">rb.</span> في آخر اسم الملفّ واكتب الشيفرات البرمجيّة التّالية والتي تمثّل نسخة مجرّدة من لعبة إلقاء النّرد:
	</p>

	<pre class="ipsCode prettyprint lang-html prettyprinted" id="ips_uid_6291_9">
<span class="pln">number = rand(1..6)
puts "You rolled #{number}"</span></pre>

	<p>
		ماذا فعلنا هنا؟ أنشأنا متغيّرًا وحفظنا به قيمة عشوائيّة بين 1 و 6، ثمّ استعملنا هذا المتغيّر لطباعة القيمة العشوائيّة على الشّاشة باستخدام أمر <span style="font-family:courier new,courier,monospace;">puts</span> مخبرين المستخدم أنّ ناتج إلقائه للنرد هو ذلك الرقم العشوائي النّاتج عن استخدام دالّة <span style="font-family:courier new,courier,monospace;">rand</span> (التي سبق وأن اطّلعنا عليها في <a href="https://academy.hsoub.com/programming/ruby/%D9%83%D9%8A%D9%81-%D8%AA%D8%AA%D8%B9%D8%A7%D9%85%D9%84-%D9%85%D8%B9-%D8%A7%D9%84%D8%A3%D8%B1%D9%82%D8%A7%D9%85-%D9%81%D9%8A-%D8%B1%D9%88%D8%A8%D9%8A-r270/">الدّرس السّابق</a>).
	</p>

	<p>
		سنتعرّف الآن على بعض العبارات الشرطيّة التي يمكننا استخدامها لإخراج بعض المعلومات عن الرقم استنادًا إلى ما إذا كان الشّرط متحقّقًا أم لا. اكتب السطر التّالي أسفل الشيفرات البرمجيّة السّابقة:
	</p>

	<pre class="ipsCode prettyprint lang-html prettyprinted" id="ips_uid_6291_12">
<span class="pln">puts "You rolled the highest number possible" if number == 6</span></pre>

	<p>
		تلاحظ في العبارة الشرطيّة السّابقة أنّ الشرط هو أن يكون المتغيّر <span style="font-family:courier new,courier,monospace;">number</span> يساوي 6. إذا تحقّق هذا الشرط سنقوم بإخراج رسالة "You rolled the highest number possible". الأمر المهم لدينا هنا هو عبارة if التي تأتي قبل الشّرط الذي يجب أن يكون صحيحًا من أجل طباعة السّلسلة، في حالتنا هذه كما ذكرنا فالشّرط هو أن يكون المتغيّر مساويًا لـ 6. لاحظ كيف استخدمنا علامتي <strong>==</strong> لاختبار المساواة بين الطرفين. يختلف هذا عمّا فعلنا في بداية الشيفرات حيث استخدمنا علامة مساواة واحدة لتعيين قيمة للمتغيّر. إذًا فنستخدم علامة يساوي واحدة لتعيين القيم وعلامتين من أجل اختبار إذا كان طرفين متساويين أم لا. 
	</p>

	<p>
		يمكننا أيضًا استخدام بنية مشابهة لذلك لمعرفة إذا كان الشّرط غير متحقّق كالتّالي:
	</p>

	<pre class="ipsCode prettyprint lang-html prettyprinted" id="ips_uid_6291_14">
<span class="pln">puts "You didn't roll the lowest number possible" if number != 1</span></pre>

	<p>
		كما تلاحظ فالجملة مشابهة إلى حدٍّ كبير، نريد طباعة هذه السلسلة إذا كان المتغيّر <span style="font-family:courier new,courier,monospace;">number</span> لا يساوي (!=) 1. سيتم طباعة تلك السلسلة فقط عن تحقّق هذا الشرط.<br>
		في الحالتين السّابقتين لدينا الجملة الشّرطيّة موجودة بالنهاية والشيفرة البرمجيّة التي نريدها أن تنفّذ موجودة في البداية. يمكننا كتابة ذلك بترتيب مختلف بأن نضع الجملة الشّرطيّة في البداية كالتّالي:
	</p>

	<pre class="ipsCode" id="ips_uid_6291_18">
if number &lt; 5 then puts "You rolled a number less than 5" end</pre>

	<p>
		كما تلاحظ، نحن نخبر روبي إذا كان قيمة المتغيّر أقل من 5 يجب تنفيذ الأمر الموجود بعد الكلمة المفتاحيّة <span style="font-family:courier new,courier,monospace;">then</span>. وبالنّهاية نضع <span style="font-family:courier new,courier,monospace;">end</span> والتي نحتاج إليها لإخبار روبي بأنّ عبارة <span style="font-family:courier new,courier,monospace;">if</span> قد انتهت.
	</p>
</div>

<div id="wmd-preview-section-43">
	<h2 id="كتابة-أكثر-من-شرط">
		كتابة أكثر من شرط
	</h2>

	<p>
		يمكننا أيضًا كتابة أكثر من شرط في أكثر من سطر. مثال على ذلك:
	</p>

	<pre class="ipsCode prettyprint lang-html prettyprinted" id="ips_uid_6291_20">
<span class="pln">if number.even?
    puts "You rolled and even number"
else
    puts "You rolled an odd number"
end</span></pre>

	<p>
		السّطر الأوّل يتحقّق إذا كان المتغيّر <span style="font-family:courier new,courier,monospace;">number</span> عددًا زوجيًّا باستخدام دالّة <span style="font-family:courier new,courier,monospace;">even</span>، إذا كانت الإجابة <span style="font-family:courier new,courier,monospace;">true</span> سيتمّ تنفيذ أمر <span style="font-family:courier new,courier,monospace;">puts</span> الخاصّ بهذا الشرط. إذا كانت قيمة المتغيّر عددًا غير زوجي، فمن البديهي أنه سيكون فرديًّا. إذًا فإنّ <span style="font-family:courier new,courier,monospace;">else</span> تعدّ بمثابة ما نريد تنفيذه إذا لم يتحقّق الشرط. لاحظ أنّه يجب وضع <span style="font-family:courier new,courier,monospace;">end</span> مرّة واحدة في النهاية تمامًا وليس بعد <span style="font-family:courier new,courier,monospace;">if</span> مرّة وبعد <span style="font-family:courier new,courier,monospace;">else</span> مرّة.
	</p>
</div>

<div id="wmd-preview-section-44">
	<h2 id="elsif">
		elsif
	</h2>

	<p>
		يمكننا كتابة عدد أكبر من الجمل الشرطيّة أيضًا باستخدام <span style="font-family:courier new,courier,monospace;">elsif</span>.
	</p>

	<pre class="ipsCode prettyprint lang-html prettyprinted" id="ips_uid_6291_22">
<span class="pln">if    number == 1 then puts "You rolled one"
elsif number == 2 then puts "You rolled two"
elsif number == 3 then puts "You rolled three"
else puts "You rolled a number bigger than three"
end</span></pre>

	<p>
		لدينا في هذا المثال ثلاثة جمل شرطيّة مختلفة متبوعة بجملة <span style="font-family:courier new,courier,monospace;">else</span> والتي ستُنفّذ إذا لم يتحقّق أيّ شرط من الشّروط الثلاثة السّابقة لها.
	</p>

	<p>
		لنبدأ مع أول سطر، جملة <span style="font-family:courier new,courier,monospace;">if</span> عاديّة تتحقّق إذا كانت قيمة المتغيّر <span style="font-family:courier new,courier,monospace;">number</span> تساوي 1، إذا كان الجواب نعم فستنفّذ روبي الأمر الموجود بعد <span style="font-family:courier new,courier,monospace;">then</span> وتستبعد باقي الجمل الشرطيّة. أمّا إذا لم تتحقّق الجملة الشرطيّة الأولى فتنتقل روبي إلى السطر التّالي والذي يحتوي على جملة شرطيّة أخرى والتي تختبرها روبي فقط إذا لم تتحقّق الجملة الشرطيّة السّابقة، لذلك فهي تسمّى <span style="font-family:courier new,courier,monospace;">elsif</span>. تعمل تمامًا <span style="font-family:courier new,courier,monospace;">elsif</span> عمل <span style="font-family:courier new,courier,monospace;">if</span>، الفرق فقط هو أنّها لا تنفّذ في حالة تحقّق الجملة الشرطيّة السّابقة لها. 
	</p>

	<p>
		السطر الثالث مشابه للسطر الثّاني. وبالنهاية لدينا <span style="font-family:courier new,courier,monospace;">else</span> والتي لا تحتوي على شرط محدّد وإنّما تنفّذ في حال عدم تحقّق أي جملة شرطيّة من الثلاث. ثم <span style="font-family:courier new,courier,monospace;">end</span>.
	</p>
</div>

<div id="wmd-preview-section-45">
	<h2 id="عبارة-case">
		عبارة Case
	</h2>

	<p>
		يمكننا استخدام عدد لا نهائي من جمل <span style="font-family:courier new,courier,monospace;">if</span>, <span style="font-family:courier new,courier,monospace;">elsif</span>, <span style="font-family:courier new,courier,monospace;">else</span> ولكن مع زيادى عدد الشروط المطلوبة قد يصبح الأمر متعبًا ومستهلكًا للوقت. لذلك فهناك عبارة أخرى يمكننا استخدامها وهي <span style="font-family:courier new,courier,monospace;">case</span>. حاول تخمين ما تفعله <span style="font-family:courier new,courier,monospace;">case</span> بالاطّلاع على الشيفرات التالية:
	</p>

	<pre class="ipsCode prettyprint lang-html prettyprinted" id="ips_uid_6291_30">
<span class="pln">case number
    when 4 then puts "You rolled four"
    when 5 then puts "You rolled five"
    when 6 then puts "You rolled six"
    else puts "You rolled a number less than four"
end</span></pre>

	<p>
		كما تلاحظ، فهي تعمل بشكل مشابه جدًّا للمثال السّابق. الفرق أنّنا نستخدم <span style="font-family:courier new,courier,monospace;">case</span> بدلاً من <span style="font-family:courier new,courier,monospace;">if</span>. لاحظ أنّنا نضع بالبداية المتغيّر <span style="font-family:courier new,courier,monospace;">number</span> حيث أنّ كل الجمل الشّرطيّة الموجودة بـ <span style="font-family:courier new,courier,monospace;">case</span> تشير إلى هذا المتغيّر. على سبيل المثال بالنّظر إلى السطر الثاني، فهو يشير أنّه عندما (<span style="font-family:courier new,courier,monospace;">when</span>) تكون قيمة المتغيّر <span style="font-family:courier new,courier,monospace;">number</span> تساوي 4 إذًا (<span style="font-family:courier new,courier,monospace;">then</span>) ننفّذ أمر <span style="font-family:courier new,courier,monospace;">puts</span>. وهكذا حتى الوصول إلى <span style="font-family:courier new,courier,monospace;">else</span> ثم <span style="font-family:courier new,courier,monospace;">end</span> في نهاية عبارة <span style="font-family:courier new,courier,monospace;">case</span> واللذان يستخدمان تمامًا مثل استخدامهما في عبارة <span style="font-family:courier new,courier,monospace;">if</span>.
	</p>
</div>

<div id="wmd-preview-section-46">
	<h2 id="سلسلة-عبارات-if">
		سلسلة عبارات if
	</h2>

	<p>
		يمكننا أيضًا وضع جمل <span style="font-family:courier new,courier,monospace;">if</span> كمتسلسلات كما ترى أدناه:
	</p>

	<pre class="ipsCode prettyprint lang-html prettyprinted" id="ips_uid_6291_24">
<span class="pln">if number == 2 or number == 3 or number == 5
    puts "You rolled a prime number"
end</span></pre>

	<p>
		استخدمنا جملة <span style="font-family:courier new,courier,monospace;">if</span> عاديّة ونخبر روبي بأنّه إذا كانت قيمة المتغيّر <span style="font-family:courier new,courier,monospace;">number</span> تساوي 2، أو (<span style="font-family:courier new,courier,monospace;">or</span>) تساوي 3، أو (<span style="font-family:courier new,courier,monospace;">or</span>) تساوي 4 فكما قد تكون توقّعت سيتمّ تنفيذ الأمر الخاصّ بتلك العبارة. إذًا فنحن في الواقع نختبر ثلاث شروط مختلفة وإذا تحقّق شرط واحد منها فإنّ ناتج هذه العبارة الشّرطيّة سيصبح <span style="font-family:courier new,courier,monospace;">true</span>. 
	</p>

	<p>
		هناك طريقة أخرى لكتابة تلك الشيفرات.
	</p>

	<pre class="ipsCode prettyprint lang-html prettyprinted" id="ips_uid_6291_26">
<span class="pln">puts "You rolled a square number" if number == 1 || number == 4</span></pre>

	<p>
		يسمّى<span style="font-family:courier new,courier,monospace;"> ||</span> برمز الأنبوب المزدوج (Double Pipe Symbol) والذي يمثّل كلمة <span style="font-family:courier new,courier,monospace;">or</span>. لاحظ أيضًا كيف قمنا بعكس الجملة الشرطيّة وذلك بوضع الشرط في النهاية كما فعلنا سابقًا.
	</p>

	<p>
		هناك أيضًا عبارة <span style="font-family:courier new,courier,monospace;">and</span> والتي تتحقّق إذا تحقّقت جميع الشروط الموجودة والتي مربوط بينها باستخدام <span style="font-family:courier new,courier,monospace;">and</span>.
	</p>

	<pre class="ipsCode prettyprint lang-html prettyprinted" id="ips_uid_6291_28">
<span class="pln">if number.odd? and number &gt;= 4
    puts "You rolled five"
end</span></pre>

	<p>
		في الشيفرات البرمجيّة أعلاه نتحقّق إذا كانت قيمة المتغيّر هي عدد فردي و (<span style="font-family:courier new,courier,monospace;">and</span>) أكبر من أو تساوي 4. هذا الرّمز <strong>&gt;=</strong> يعني أنّ الطرف الأيسر من الجملة أكبر من أو يساوي الطرف الأيمن. 
	</p>

	<p>
		بالرجوع مجدّدًا إلى الشيفرة البرمجيّة السّابقة فإنّه عند تحقّق الشرطين معًا (وليس أحدهما فقط) فسيتمّ تنفيذ الأمر <span style="font-family:courier new,courier,monospace;">puts</span> الذي يلي العبارة الشرطيّة. <br>
		مثل or، هناك أيضًا طريقة أخرى لكتابة <span style="font-family:courier new,courier,monospace;">and</span>.
	</p>

	<pre class="ipsCode" id="ips_uid_6291_16">
if number.even? &amp;&amp; number &lt;= 3
    puts "You rolled two"
end</pre>

	<p>
		الشيفرة أعلاه مشابهة تمامًا للسّابقة، نتحقّق إذا كانت قيمة المتغيّر عددًا زوجيًّا و (<strong>&amp;&amp;</strong>) أقل من أو تساوي 3. إذا تحقّق الشّرطيّن المربوط بينها باستخدام <strong>&amp;&amp;</strong> فسيتمّ تنفيذ أمر <span style="font-family:courier new,courier,monospace;">puts</span> الخاصّ بالعبارة الشرطيّة. رمز <strong>&amp;&amp;</strong> يسمّى Double Ampersand Symbol.
	</p>
</div>

<div id="wmd-preview-section-47">
	<h2 id="ختام">
		ختام
	</h2>

	<p>
		تعرّفنا في هذا الدّرس على العبارات الشرطيّة في ruby وكيفيّة استخدامها. إذا كتبت الشيفرة البرمجيّة المستخدمة في هذا الدّرس في ملفّ روبي فعلاً فجرّب تنفيذها في سطر أوامر روبي التفاعليّ كما تعلّمنا في الدّروس السّابقة وقارن النتائج بالشيفرات الموجودة لمعرف وظيفة كل جزء منها.
	</p>
</div>
]]></description><guid isPermaLink="false">274</guid><pubDate>Sat, 06 Feb 2016 12:57:00 +0000</pubDate></item><item><title>&#x643;&#x64A;&#x641; &#x62A;&#x62A;&#x639;&#x627;&#x645;&#x644; &#x645;&#x639; &#x627;&#x644;&#x623;&#x631;&#x642;&#x627;&#x645; &#x641;&#x64A; &#x631;&#x648;&#x628;&#x64A;</title><link>https://academy.hsoub.com/programming/ruby/%D9%83%D9%8A%D9%81-%D8%AA%D8%AA%D8%B9%D8%A7%D9%85%D9%84-%D9%85%D8%B9-%D8%A7%D9%84%D8%A3%D8%B1%D9%82%D8%A7%D9%85-%D9%81%D9%8A-%D8%B1%D9%88%D8%A8%D9%8A-r270/</link><description><![CDATA[
<p><img src="https://academy.hsoub.com/uploads/monthly_2016_02/ruby-calculs.png.ec6879162962b7c83bf1afa21cdb3093.png" /></p>

<div id="wmd-preview-section-169">
	<p id="كيف-تتعامل-مع-الأرقام-في-روبي">
		سنتعرّف في هذا الدّرس على كيفية التّعامل مع الأرقام في روبي. سنقوم في البداية بالتعامل مع العمليّات الحسابيّة من خلال سطر أوامر روبي التفاعليّ. ثمّ سنتعرّف بعد ذلك على الأعداد الصحيحة Integers والدوال الخاصّة بها. كما سنتعرف أيضًا على كيفية توليد أرقام عشوائيّة في روبي.
	</p>

	<p style="text-align: center;">
		<img alt="ruby-calculs.png.30d2bee1f70cdd533a36309" class="ipsImage ipsImage_thumbnailed" data-fileid="12390" data-unique="pv0ax4hbd" src="https://academy.hsoub.com/uploads/monthly_2016_02/ruby-calculs.png.30d2bee1f70cdd533a36309b4812e756.png"></p>
</div>

<div id="wmd-preview-section-170">
	<h2 id="الأرقام">
		الأرقام
	</h2>

	<p>
		لنلق الآن نظرة على استخدام الأرقام في سطر أوامر روبي التفاعليّ. افتح الطرفيّة وابدأ جلسة IRB جديدة عن طريق كتابة أمر <span style="font-family:courier new,courier,monospace;">irb</span>. يمكننا كتابة عمليّة جمع كالتالي:
	</p>

	<pre class="ipsCode prettyprint lang-html prettyprinted" id="ips_uid_9616_7">
<span class="pln">3 + 5</span></pre>

	<p>
		علامة الجمع في الأمر السّابق هي عبارة عن دالّة خاصّة بالرقم 3 (الذي يعدّ كائنًا، كما ذكرنا سابقًا أن روبي تتعامل مع أي شيء على أنّه كائن له دوالّ خاصّة به). قد تتساءل كيف لعلامة <strong>+</strong> أن تكون دالّة وقد تعرّفنا أن استدعاء الدوال يتم عن طريق إضافة نقطة ثم اسم الدّالّة بعد الكائن. دعني أخبرك أنّه يمكن بالفعل تنفيذ الدّالّة<strong> +</strong> بهذه الطريقة. ولأنّنا نريد إضافة 5 إلى 3 فإنّنا نريد إضافة ما يسمّى بالمعطى Argument والذي يوضع بين قوسين بعد اسم الدّالّة. لذلك فيمكن إعادة كتابة الأمر السّابق هكذا:
	</p>

	<pre class="ipsCode prettyprint lang-html prettyprinted" id="ips_uid_9616_9">
<span class="pln">3.+(5)</span></pre>

	<p>
		إذا كتبت الأمرين ستحصل على نفس النّتائج. إذًا فرقم 3 هو الكائن الذي يستدعي الدّالّة، علامة الجمع هي اسم الدّالّة وبين القوسين نجد المعطى هو رقم 5. ولأنّه عند كتابة عمليّة الجمع بهذه الطريقة يبدو الأمر صعبًا بعض الشيء، فهذا الاستدعاء لا يبدو كعمليّة الجمع المألوفة لنا. لذلك فإنّ روبي تسمح لنا باستخدام الدّالّة بالصورة الأولى والتي تبدو أسهل في القراءة والاستخدام لإتمام عمليّات الجمع. يسمّى هذا بالتجميل اللّغوي Syntactic Sugar. لذلك فإن الطريقة الأولى لإتمام عمليّة الجمع هي الأكثر شيوعًا عن التنويت النقطي Dot Notation. 
	</p>

	<p>
		لدى روبي الكثير من العمليّات الحسابيّة الأخرى. مثل الطرح:
	</p>

	<pre class="ipsCode prettyprint lang-html prettyprinted" id="ips_uid_9616_11">
<span class="pln">10 – 4</span></pre>

	<p>
		الضرب:
	</p>

	<pre class="ipsCode prettyprint lang-html prettyprinted" id="ips_uid_9616_13">
<span class="pln">4 * 8</span></pre>

	<p>
		القسمة:
	</p>

	<pre class="ipsCode prettyprint lang-html prettyprinted" id="ips_uid_9616_15">
<span class="pln">9 / 2</span></pre>

	<p>
		إذا كنت تنفّذ الأوامر السّابقة في سطر أوامر روبي التفاعليّ ستلاحظ أنّ ناتج عمليّة قسمة 9 على 2 هو 4، وهذا ليس صحيحًا فحاصل قسمة 9 على 2 هو 4.5 وليس 4، أليس كذلك؟ حدث ذلك لأنّ 9 و2 هي أرقام صحيحة ممّا يعني أنّ الناتج سيكون أيضًا الجزء الصحيح فقط من خارج القسمة وهو في هذه الحالة 4 بدلاً من 4.5. 
	</p>

	<p>
		للحصول على الناتج الصحيح لهذه العمليّة نحتاج إلى استخدام نوع آخر من كائنات الأرقام يسمّى بالعدد العشري Float. لاستخدام عدد عشري بدلاً من عدد صحيح كل ما علينا فعله هو على سبيل المثال كتابة 9.0 بدلاً من 9. جرّب إعادة كتابة عمليّة القسمة السّابقة باستخدام 9.0. ستجد أنّ روبي قد أعادت النّاتج 4.5.
	</p>
</div>

<div id="wmd-preview-section-171">
	<h2 id="دالتا-even-وodd">
		دالتا even وodd
	</h2>

	<p>
		تستخدم روبي دالتين لمعرفة ما إذا كان العدد زوجيًّا أم فرديًّا. على سبيل المثال اكتب الأمر التّالي ولاحظ النّتيجة:
	</p>

	<pre class="ipsCode prettyprint lang-html prettyprinted" id="ips_uid_9616_17">
<span class="pln">62.even?</span></pre>

	<p>
		بعد الضغط على Enter ستطبع روبي على الشّاشة <span style="font-family:courier new,courier,monospace;">true</span> ردًّا على سؤالنا لها هل العدد 62 عددًا زوجيًّا؟. يمكننا أيضًا استخدام دالّة <span style="font-family:courier new,courier,monospace;">odd</span> للتحقّق ممّا إذا كان العدد 62 زوجيًّا أم فرديًّا هكذا:
	</p>

	<pre class="ipsCode prettyprint lang-html prettyprinted" id="ips_uid_9616_19">
<span class="pln">62.odd?</span></pre>

	<p>
		تحدّثنا في الدّرس السّابق عن دوال Bang وكيف أنّها تنتهي بعلامة تعجّب. دالّتي <span style="font-family:courier new,courier,monospace;">even</span> و <span style="font-family:courier new,courier,monospace;">odd</span> هما مثالين للدوال الشرطيّة وهي الدوال التي ترجع <span style="font-family:courier new,courier,monospace;">true</span> أو <span style="font-family:courier new,courier,monospace;">false</span> وغالبًا ستجد علامة استفهام بنهاية تلك الدوال والتي تجعل من السّهل تمييز هذا النّوع.
	</p>
</div>

<div id="wmd-preview-section-172">
	<h2 id="دالة-gcd">
		دالة GCD
	</h2>

	<p>
		يمكن لروبي تنفيذ بعض العمليّات الحسابيّة اللّطيفة أيضًا. على سبيل المثال يمكن إيجاد القاسم المشترك الأكبر لعددين (وهو أكبر عدد يقسم في نفس الوقت العددين معًا بدون أيّ باقي قسمة) باستخدام دالّة <span style="font-family:courier new,courier,monospace;">gcd</span>. إذًا لو أردت معرفة القاسم المشترك الأكبر لكلٍّ من 12 و20 فيمكن كتابة هذا كالتّالي:
	</p>

	<pre class="ipsCode prettyprint lang-html prettyprinted" id="ips_uid_9616_21">
<span class="pln">12.gcd(20)</span></pre>

	<p>
		وستكون النتيجة 4
	</p>
</div>

<div id="wmd-preview-section-173">
	<h2 id="دالة-lcm">
		دالة LCM
	</h2>

	<p>
		دالّة <span style="font-family:courier new,courier,monospace;">lcm</span> مشابهة نوعًا ما لدالّة <span style="font-family:courier new,courier,monospace;">gcd</span> وتقوم بإيجاد المضاعف المشترك الأصغر لعددين (وهو أصغر عدد موجب صحيح مضاعف لكلا هذين العددين، أي أنّه يمكن قسمة هذا المضاعف المشترك الأصغر على العددين بدون باقي قسمة). إذا أردت معرفة المضاعف المشترك الأصغر لكل من 15 و20 يمكن كتابة هذا كالتّالي:
	</p>

	<pre class="ipsCode prettyprint lang-html prettyprinted" id="ips_uid_9616_23">
<span class="pln">15.lcm(20)</span></pre>

	<p>
		وستكون النتيجة 60
	</p>
</div>

<div id="wmd-preview-section-174">
	<h2 id="دالة-tos">
		دالة to_s
	</h2>

	<p>
		آخر دالّة خاصّة بالأعداد الصحيحة التي سنتطرّق إليها هي دالّة <span style="font-family:courier new,courier,monospace;">to_s </span>والتي هي اختصار لـ to string. يمكنك من اسمها تخمين وظيفتها، تقوم الدّالّة بتحويل عدد صحيح إلى سلسلة حرفيّة تحتوي على هذا الرقم. على سبيل المثال، الشيفرة البرمجيّة التالية تقوم بتحويل العدد الصحيح 7 إلى سلسلة "7":
	</p>

	<pre class="ipsCode prettyprint lang-html prettyprinted" id="ips_uid_9616_25">
<span class="pln">7.to_s</span></pre>

	<p>
		بعد الضغط على Enter سيتم إرجاع القيمة هكذا "7". نعرف أنّ القيمة نوعها سلسلة من علامات الاقتباس المحيطة بها. الآن يمكننا التّعامل مع هذا الرقم على أنّه سلسلة وتنفيذ دوال السّلاسل عليه.
	</p>
</div>

<div id="wmd-preview-section-175">
	<h2 id="دالة-toi">
		دالة to_i
	</h2>

	<p>
		دالّة<span style="font-family:courier new,courier,monospace;"> to_i </span>مشابهة لدالّة <span style="font-family:courier new,courier,monospace;">to_s </span>ولكنّها خاصّة بالسّلاسل، تقوم الدّالّة بتحويل السلسلة إلى عدد صحيح. لذلك فيمكننا كتابة "42" وتحويلها إلى عدد صحيح هكذا:
	</p>

	<pre class="ipsCode prettyprint lang-html prettyprinted" id="ips_uid_9616_27">
<span class="pln">"42".to_i</span></pre>

	<p>
		سنلاحظ بعد تنفيذ الأمر إرجاع قيمة صحيحة عبارة عن 42 وستختفي علامات الاقتباس المحيطة بالعدد. بذلك يمكننا استخدام الدوال الخاصّة بالأعداد الصحيحة على 42، مثل الجمع والطّرح. 
	</p>

	<p>
		عليك توخّي الحذر عند التّعامل مع هذه الدّالّة، حيث أنّه في حالة عدم احتواء السلسلة على أيّة أرقام فسوف تقوم بإرجاع قيمة 0. على سبيل المثال اكتب الأمر التّالي ولاحظ الناتج:
	</p>

	<pre class="ipsCode prettyprint lang-html prettyprinted" id="ips_uid_9616_29">
<span class="pln">"Hello World".to_i</span></pre>

	<p>
		أمّا في حالة تنفيذ الدّالّة على سلسلة تبدأ بقيمة عدديّة فستقوم الدّالّة بتحويل وإرجاع الرقم الموجود في أوّل السلسلة فقط. مثال على ذلك:
	</p>

	<pre class="ipsCode prettyprint lang-html prettyprinted" id="ips_uid_9616_31">
<span class="pln">"2016 Jan".to_i</span></pre>

	<h2>
		دالة Rand
	</h2>
</div>

<div id="wmd-preview-section-176">
	<p>
		يُعدّ توليد أرقام عشوائيّة أحد الأمور المفيدة في البرمجة وله استخدامات عديدة، يمكن فعل ذلك في ruby بسهولة عن طريق استخدام دالّة <span style="font-family:courier new,courier,monospace;">rand</span>. باستخدام الدّالّة يمكننا توليد عدد عشري بين 0 و 1.0. كلّ ما عليك فعله هو كتابة <span style="font-family:courier new,courier,monospace;">rand</span> في سطر أوامر روبي التفاعليّ والضّغط على Enter، جرّب كتابة الأمر أكثر من مرّة ولاحظ كيف تختلف القيمة في كلّ مرّة ولكنّها لا تزيد عن 1.0 ولا تقلّ عن 0. 
	</p>

	<p>
		ولكن ماذا إذا أردت الحصول على أرقام عشوائيّة صحيحة؟ إذا أضفت عددًا صحيحًا للدّالّة كمُعطى فستقوم الدّالّة بتوليد عددًا عشوائيًّا صحيحًا بين 0 والعدد المعطى ولكن العدد المعطى لن يكون ضمن تلك الأعداد العشوائيّة. فمثلاً إذا أعطيت الدّالّة رقم 6 ستقوم بتوليد رقمًا عشوائيًّا بين 0 و 5:
	</p>

	<pre class="ipsCode prettyprint lang-html prettyprinted" id="ips_uid_9616_33">
<span class="pln">rand(6)</span></pre>

	<p>
		ماذا لو أردت البدء من 1 بدلاً من 0؟ توفّر روبي طريقة لطيفة لفعل ذلك. كلّ ما علينا فعله هو إدخال مجال <span style="font-family:courier new,courier,monospace;">range</span> معيّن من القيم كمُعطى للدّالّة فنكتبها هكذا:
	</p>

	<pre class="ipsCode prettyprint lang-html prettyprinted" id="ips_uid_9616_35">
<span class="pln">rand(1..6)</span></pre>

	<p>
		الأمر السّابق يخبر روبي بأن تختار رقمًا عشوائيًّا بين 1 و 6، متضمّنة 1 و 6 أيضًا ضمن الأرقام العشوائيّة. يذكّرنا هذا بلعبة إلقاء النّرد، أليس كذلك؟
	</p>
</div>

<div id="wmd-preview-section-177">
	<h2 id="خاتمة">
		خاتمة
	</h2>

	<p>
		تعرّفنا في هذا الدّرس على بعض المفاهيم المهمّة في روبي مثل الأرقام والدوال الخاصّة بها وكيفيّة تحويل رقم إلى سلسلة والعكس. 
	</p>

	<p>
		هدف هذا الدّرس هو إعطاؤك لمحة سريعة عن العمليات التي يُمكن تنفيذها على الأرقام ومبدأ عمل ذلك. بطبيعة الحال لم نستعرض سوى عدد محدود من الدّوال. بإمكانك الاطّلاع على باقي الدّوال عبر زيارة <a href="http://ruby-doc.org/" rel="external nofollow">التّوثيق الرّسمي للغة</a> وخاصة <a href="http://ruby-doc.org/core-2.2.0/Integer.html" rel="external nofollow">صفحة الأرقام الصّحيحة</a>.
	</p>
</div>
]]></description><guid isPermaLink="false">270</guid><pubDate>Tue, 02 Feb 2016 20:32:00 +0000</pubDate></item><item><title>&#x627;&#x644;&#x633;&#x644;&#x627;&#x633;&#x644; &#x648;&#x627;&#x644;&#x645;&#x62A;&#x63A;&#x64A;&#x631;&#x627;&#x62A; &#x641;&#x64A; &#x631;&#x648;&#x628;&#x64A;</title><link>https://academy.hsoub.com/programming/ruby/%D8%A7%D9%84%D8%B3%D9%84%D8%A7%D8%B3%D9%84-%D9%88%D8%A7%D9%84%D9%85%D8%AA%D8%BA%D9%8A%D8%B1%D8%A7%D8%AA-%D9%81%D9%8A-%D8%B1%D9%88%D8%A8%D9%8A-r254/</link><description><![CDATA[
<p><img src="https://academy.hsoub.com/uploads/monthly_2016_01/ruby-variables-strings.png.a724fd5da9913a86e6dd487bf699c1af.png" /></p>

<div id="wmd-preview-section-7">
	<p id="السلاسل-والمتغيرات-في-روبي">
		<a href="https://academy.hsoub.com/programming/ruby/%D9%85%D8%AF%D8%AE%D9%84-%D8%A5%D9%84%D9%89-%D9%84%D8%BA%D8%A9-%D8%B1%D9%88%D8%A8%D9%8A-%D8%A7%D9%84%D8%A8%D8%B1%D9%85%D8%AC%D9%8A%D8%A9-r244/">تعرّفنا في الدّرس السّابق على لغة روبي ووميزاتها</a>. في هذا الدّرس سوف نستعرض بعض أنواع البيانات في Ruby، وسنتعرّف باستفاضة على نوع السلاسل. كما سنتعرّف على أحد أهمّ سمات أيّ لغة برمجة، ألا وهي المتغيّرات. 
	</p>

	<p style="text-align: center;">
		<a class="ipsAttachLink ipsAttachLink_image" href="https://academy.hsoub.com/uploads/monthly_2016_01/ruby-variables-strings.png.3378cfc3aa87b49147f92856f7c369b8.png"><img alt="ruby-variables-strings.thumb.png.d51d9e6" class="ipsImage ipsImage_thumbnailed" data-fileid="11848" src="https://academy.hsoub.com/uploads/monthly_2016_01/ruby-variables-strings.thumb.png.d51d9e6594ba374f28e8bf0ba42fb761.png"></a>
	</p>

	<p>
		سنستخدم في الجزء الأول من الدّرس سطر أوامر روبي التفاعليّ. افتح الطرفيّة وابدأ جلسة irb عن طريق كتابة أمر <span style="font-family:courier new,courier,monospace;">irb </span>والضغط على زر Enter.
	</p>
</div>

<div id="wmd-preview-section-8">
	<h2 id="القيم-والأنواع">
		القيم والأنواع
	</h2>

	<p>
		القيمة هي أبسط شيء يتعامل معه البرنامج مثل حرف أو رقم. تعرّفنا في الدّرس السّابق على بعض تلك القيم. تختلف القيمة 2 عن القيمة "Hello World"، حيث أن الأولى هي عدد صحيح Integer أمّا الثّانية فهي من نوع سلسلة String، جاءت التسمية من كونها سلسلة من الأحرف. يمكنك التعرّف بسهولة على السلاسل من خلال علامات الاقتباس المحيطة بالقيمة. هناك نوع آخر يسمّى Float وهو أيّ رقم يحتوي على علامة عشريّة، مثلاً: 2.5، 13.6، 4.0. 
	</p>

	<p>
		<strong>ملحوظة</strong>: قد تعتقد أن "12" و"1.5" هي أرقام وتتعامل معها في برنامجك على ذلك فتنفّذ عليها عمليّات حسابيّة وتكتشف بعد ذلك أنّ مفسّر روبي يظهر لك علّة برمجية Bug. سبب ذلك أنّها ربّما تكون أرقامًا بالنسبة لك ولكن المفسّر يعتبرها سلاسل نصيّة حيث أنّها محاطة بعلامات الاقتباس والمفسّر مُبَرْمَج على تصنيف أيّ شيء بين علامات اقتباس على أنّه سلسلة.
	</p>

	<p>
		تريد التأكد من ذلك بنفسك؟ جرّب جمع <span style="line-height: 22.4px;">"12"</span> + <span style="line-height: 22.4px;">"1.5"</span>. أو بطريقة أخرى يمكنك استخدام الدّالة المدمجة <span style="font-family:courier new,courier,monospace;">is_a</span> لسؤال روبي هل هذه القيمة نوعها Integer مثلاً وستردّ عليك روبي true أو false. فمثلاً إذا أردت التأكّد من نوع قيمة معيّنة مثل 12 اكتب الأمر التالي:
	</p>

	<pre class="html ipsCode prettyprint" data-pbcklang="html" data-pbcktabsize="4">
12.is_a?(Integer)</pre>

	<p>
		الآن للعودة إلى ما إذا كان كل من "12" و"1.5” أرقامًا أم سلاسل، جرّب الأوامر التالية (تأكّد من كتابة أوّل حرف بشكل كبير Capital):
	</p>

	<pre class="html ipsCode prettyprint" data-pbcklang="html" data-pbcktabsize="4">
"12".is_a?(Integer) 
"1.5".is_a?(Float)</pre>

	<p>
		أحيانًا عند كتابة أعداد كبيرة قد تجد نفسك محتاجًا إلى إرفاق فواصل لجعل العدد قابلاً للقراءة أكثر، مثلاً 1,000,000. لو فعلت ذلك في روبي ستحصل على خطأ. ولكن يمكنك فعل ذلك مع الأمر<span style="font-family:courier new,courier,monospace;"> puts</span>. مثلاً يمكن كتابة:
	</p>

	<pre class="html ipsCode prettyprint" data-pbcklang="html" data-pbcktabsize="4">
puts 1,000,000</pre>

	<p>
		ماذا كانت النتيجة؟ لم تتوقعها أليس كذلك؟ قامت روبي قامت بطباعة:
	</p>

	<pre class="html ipsCode prettyprint" data-pbcklang="html" data-pbcktabsize="4">
1
0
0</pre>

	<p>
		رقم 1 و 0 و 0 في أسطر مختلفة. حدث ذلك لأنّ روبي قد فسّرت هذا العدد على أنّه ثلاثة أرقام مستقلّة ومفصول بينها بفواصل. في روبي يمكن استخدام الأمر <span style="font-family:courier new,courier,monospace;">puts</span> لطباعة أكثر من قيمة في أكثر من سطر عن طريق الفصل بين تلك القيم بفاصلة. فمثلاً لو أردت طباعة "Hello" في سطر وبعدها "World" في سطر باستخدام أمر روبي واحد يمكن استخدام الأمر التالي:
	</p>

	<pre class="html ipsCode prettyprint" data-pbcklang="html" data-pbcktabsize="4">
puts "Hello", "World"
</pre>

	<pre class="html ipsCode prettyprint" data-pbcklang="html" data-pbcktabsize="4">
Hello
World
</pre>
</div>

<div id="wmd-preview-section-9">
	<h2 id="السلاسل">
		السلاسل
	</h2>

	<p>
		السلاسل في روبي هي مجموعات من الأحرف. يمكن إنشاء سلسلة نصيّة عن طريق كتابة أحرف ونصوص داخل علامتي اقتباس مزدوجة. مثلاً لكتابة سلسلة تحتوي على نصّ Hello Ruby اكتب الأمر التّالي:
	</p>

	<pre class="html ipsCode prettyprint" data-pbcklang="html" data-pbcktabsize="4">
"Hello Ruby"</pre>

	<p>
		يمكن استخدام علامة الاقتباس المفردة أيضًا لإنشاء سلسلة في روبي، لذلك فيمكن إنشاء السلسلة السّابقة كالتّالي:
	</p>

	<pre class="html ipsCode prettyprint" data-pbcklang="html" data-pbcktabsize="4">
'Hello Ruby'</pre>

	<p>
		إذا أردت استخدام أحد نوعي علامات الاقتباس في داخل نصّك فعليك استخدام النّوع الآخر لإنشاء السلسلة فمثلا لو أردت إنشاء سلسلة نصيّة بها I'm learning Ruby، واستخدمت علامة الاقتباس المفردة لإنشاء السلسلة سيؤدّي ذلك إلى حدوث خطأ ولن يتمّ تنفيذ الأمر. لذلك فالطريقة الصحيحة لكتابة هذه السلسلة هو استخدام علامة الاقتباس المزدوجة:
	</p>

	<pre class="html ipsCode prettyprint" data-pbcklang="html" data-pbcktabsize="4">
"I'm learning Ruby"</pre>

	<p>
		مثال آخر:
	</p>

	<pre class="html ipsCode prettyprint" data-pbcklang="html" data-pbcktabsize="4">
puts '"Never memorize something that you can look up." -Albert Einstein'</pre>

	<p>
		خيار آخر لاستخدام علامات الاقتباس في السلاسل يسمّى هروب علامة الاقتباس escaping، يحدث هذا عن طريق وضع خط مائل عكسي Backslash قبل علامة الاقتباس والذي سيؤدّي إلى اعتبارها حرفًا عاديًّا بدلاً من تنفيذها كوسيلة لإنشاء سلسلة. يمكن إذًا كتابة السلسلتين السّابقتين كالتّالي:
	</p>

	<pre class="html ipsCode prettyprint" data-pbcklang="html" data-pbcktabsize="4">
'I\'m learning Ruby" "\"Never memorize something that you can look up.\" -Albert Einstein"</pre>

	<p>
		ذكرنا في الدّرس الأوّل أنّ كل شيء في روبي هو كائن Object. يمكن للكائنات تنفيذ أفعال يُطلق عليها اسم دوال. هناك الكثير من الطرق لجعل كائن ينفّذ دالّة ولكن الطريقة الأكثر شيوعًا هي التنويت النُقطي Dot Notation وهو عبارة عن أن تكتب الكائن (في مثالنا هذا الكائن هو السلسلة "Hello Ruby") متبوع بنقطة ثم اسم الدّالة التي تريد استدعاءها. لنجرّب استدعاء الدّالة <span style="font-family:courier new,courier,monospace;">length</span> والتي هي دالّة مدمجة في روبي تقوم بإرجاع طول السلسلة أو بمعنى آخر عدد الأحرف الموجودة في السلسلة:
	</p>

	<pre class="html ipsCode prettyprint" data-pbcklang="html" data-pbcktabsize="4">
"Hello Ruby".length
</pre>
</div>

<div id="wmd-preview-section-10">
	<h2 id="المتغيرات">
		المتغيرات
	</h2>

	<p>
		أحد أقوى السمات في أيّ لغة برمجة هي القدرة على التعامل مع المتغيّرات. المتغيّر ببساطة هو عنوان (أو "اسم") يشير إلى قيمة معيّنة. بمعنى آخر فالمتغيّر هو طريقة لحفظ الكائنات في الذّاكرة من أجل الاستخدام لاحقًا. يمكن في روبي تعيين متغيّر إلى كائن بسهولة باستخدام عامل التساوي (Equals Operator =):
	</p>

	<pre class="html ipsCode prettyprint" data-pbcklang="html" data-pbcktabsize="4">
name = "Sara"</pre>

	<p>
		في هذا المثال، اسم المتغيّر يشير إلى السلسلة "Sara". يعني هذا أنّه بإمكاننا استدعاء دوال مختلفة مباشرةً على اسم المتغيّر بدلاً من كتابة السلسلة في كلّ مرة أردنا استدعاء دالّة. الآن إذا أردت استدعاء الدّالة <span style="font-family:courier new,courier,monospace;">length</span> لحساب طول السلسلة يمكن ببساطة كتابة ذلك كالتّالي:
	</p>

	<pre class="html ipsCode prettyprint" data-pbcklang="html" data-pbcktabsize="4">
name.length</pre>

	<p>
		لنجرّب الآن بعض دوّال روبي التي يمكن استخدامها مع السّلاسل في روبي (السّلاسل عبارة عن كائنات في روبي) على هذا المتغيّر. على سبيل المثال، دالّة <span style="font-family:courier new,courier,monospace;">reverse</span> ستقوم بطباعة السلسلة معكوسة:
	</p>

	<pre class="html ipsCode prettyprint" data-pbcklang="html" data-pbcktabsize="4">
name.reverse
</pre>
</div>

<div id="wmd-preview-section-11">
	<h2 id="دوال-upcase-وdowncase">
		دوال upcase و downcase
	</h2>

	<p>
		من الدوال الخاصّة بالسلاسل أيضًا دالّتا <span style="font-family:courier new,courier,monospace;">upcase</span> و <span style="font-family:courier new,courier,monospace;">downcase</span>. تقوم دالّة <span style="font-family:courier new,courier,monospace;">upcase</span> بتحويل كل الأحرف الموجودة في السلسلة النصيّة إلى أحرف كبيرة Capital Letters. أمّا دالّة <span style="font-family:courier new,courier,monospace;">downcase</span> فتحوّل كل الأحرف الموجودة في السلسلة إلى أحرف صغيرة Small Letters. جرّب استدعاء الدّالتين على المتغيّر <span style="font-family:courier new,courier,monospace;">name</span>:
	</p>

	<pre class="html ipsCode prettyprint" data-pbcklang="html" data-pbcktabsize="4">
name.upcase name.downcase</pre>

	<p>
		هناك عدد كبير جدًا من الدوال الخاصّة بالسلاسل يمكنك التعرّف على جميعها عن طريق استخدام دالّة <span style="font-family:courier new,courier,monospace;">methods</span> (نعم هذا هو اسمها) على المتغيّر الخاصّ بك، هكذا:
	</p>

	<pre class="html ipsCode prettyprint" data-pbcklang="html" data-pbcktabsize="4">
name.methods</pre>

	<p>
		عند تنفيذ الأمر ستقوم روبي بعرض جميع الدوال المختلفة التي يمكن لهذا النوع من الكائنات استخدامها. يمكنك أيضًا معرفة أكثر عن تلك الدوال عن طريق قراءة التوثيقات الخاصّة بها.
	</p>
</div>

<div id="wmd-preview-section-12">
	<h2 id="دوال-bang">
		دوال Bang
	</h2>

	<p>
		ربّما لاحظت أن جميع الدوال التي استخدمناها حتّى الآن لم تغيّر شيئًا في السلسلة، فمثلاً إذا أردتُ معرفة القيمة الموجودة في المتغيّر <span style="font-family:courier new,courier,monospace;">name</span> من جديد سأجد أن القيمة ما زالت كما عيّنتها من البداية (لمعرفة قيمة متغيّرك فقط اكتب اسم المتغيّر واضغط Enter أو استخدم <span style="font-family:courier new,courier,monospace;">puts</span> إن أردت). لم تتغيّر القيمة وتصبح السلسلة معكوسة ولا جميع الحروف كبيرة أو صغيرة. لكن ماذا لو أردت فعلاً تغيير تلك القيمة؟ 
	</p>

	<p>
		سنجرّب بعض الدوال التي تقوم بالفعل بتغيير قيمة السلسلة. أنشئ متغيّرًا باسم <span style="font-family:courier new,courier,monospace;">fruit</span> واجعله يساوي السلسلة "apple". يمكن تغيير قيمة ذلك المتغيّر عن طريق استدعاء دوال تسمّى بدوال <span style="font-family:courier new,courier,monospace;">Bang</span>، تنتهي تلك الدوال بعلامة التعجّب أو ما يسمّى برمز <span style="font-family:courier new,courier,monospace;">Bang</span>. فمثلاً لو أردت تنفيذ الدالة <span style="font-family:courier new,courier,monospace;">reverse</span> على السلسلة الخاصّة بك وحفظ القيمة الجديدة بدلاً من القيمة الأصليّة يمكن كتابة ذلك ببساطة هكذا:
	</p>

	<pre class="html ipsCode prettyprint" data-pbcklang="html" data-pbcktabsize="4">
fruit.reverse!</pre>

	<p>
		عندما نقوم بطباعة المتغيّر بعد ذلك نلاحظ تغيّر القيمة إلى elppa بدلاً من القيمة السّابقة apple. بهذا نكون قد استغنينا تمامًا عن القيمة الأصليّة واستبدلناها بالقيمة الحاليّة. 
	</p>

	<p>
		معظم الدوال الخاصّة بالسلاسل لديها دالّة Bang مماثلة. على سبيل المثال هناك أيضًا دالّة Bang مقابلة لدالّة <span style="font-family:courier new,courier,monospace;">upcase</span> العاديّة. إذًا فيمكننا كتابة:
	</p>

	<pre class="html ipsCode prettyprint" data-pbcklang="html" data-pbcktabsize="4">
fruit.upcase!</pre>

	<p>
		سيطبع هذا الأمر قيمة السلسلة بأحرف كبيرة وأيضًا من جديد سيتمّ استبدال القيمة السابقة بالقيمة الجديدة والتي هي ELPPA.
	</p>

	<p>
		إذا كانت هناك علامة تعجّب Bang في نهاية دالّة روبي فهذا غالبًا يعني كن حذرًا، يمكن لهذه الدالّة أن تكون خطرًا. في حالة الأمثلة السّابقة فهي تعني أنّ قيمة السلسلة ستتغيّر فيجب أن تكون حذرًا متى قمت باستخدام هذه الدوال.
	</p>
</div>

<div id="wmd-preview-section-13">
	<h2 id="تسلسل-الدوال">
		تسلسل الدوال
	</h2>

	<p>
		قد يكون راودك تساؤل حول ماذا لو أردت تنفيذ العديد من الدوال على أحد المتغيّرات، هل يجب كتابة استدعاء الدالّة على المتغيّر لكل دالّة على حدة؟ لحسن الحظّ يمكن استدعاء أكثر من دالة في وقتٍ واحد على نفس المتغيّر. على سبيل المثال إذا عدنا من جديد إلى المتغيّر <span style="font-family:courier new,courier,monospace;">name</span> وأردنا كتابته معكوسًا وبأحرف كبيرة، يمكن كتابة ذلك تسلسليًّا هكذا:
	</p>

	<pre class="html ipsCode prettyprint" data-pbcklang="html" data-pbcktabsize="4">
name.reverse.upcase</pre>

	<p>
		ولكن تذكّر دائمًا أنّه يتمّ تنفيذ الدوال بالترتيب من اليسار إلى اليمين. رغمّ أنّها لا تهمّ في حالة المثال أعلاه، فحتى إذا بدّلنا الترتيب ستكون النتيجة مشابهة. إلا أنّه يمكن أن يتغيّر النّاتج عن النّاتج الذي تتوقعه في حالات أخرى، لذلك يجب التحقّق من الترتيب عند استخدام هذه الطريقة في استدعاء الدوال.
	</p>
</div>

<div id="wmd-preview-section-14">
	<h2 id="إدراج-شيفرات-برمجية-في-السلاسل">
		إدراج شيفرات برمجية في السلاسل
	</h2>

	<p>
		يمكن بطريقة بسيطة جدًا إدراج شيفرات برمجيّة في سلاسل نصيّة وتنفيذ تلك الشيفرات. يمكن فعل ذلك عن طريق وضع الشيفرات البرمجيّة داخل حاضنات Curly Brackets مع إضافة رمز التلبيد Hash في البداية:
	</p>

	<pre class="html ipsCode prettyprint" data-pbcklang="html" data-pbcktabsize="4">
"Hello my name is #{name}"</pre>

	<p>
		يطبع هذا نصًا يحتوي على الجملة المكتوبة بالإضافة إلى النصّ الموجود في المتغيّر <span style="font-family:courier new,courier,monospace;">name</span> الذي قمنا بإنشائه سابقًا. لذلك فالسلسلة السابقة ستصبح "Hello my name is Sara". ما حدث هو أنّه قد تمّ إدراج قيمة المتغيّر <span style="font-family:courier new,courier,monospace;">name</span> بداخل السلسلة حيث أنّ علامة التلبيد مع الحاضنات تخبر روبي بأن الموجود بينها هو شيفرات يجب على روبي تنفيذها أولاً وليس طباعتها كما هي. 
	</p>

	<p>
		هناك أمر مهمّ عليك تذكّره وهو أنّه عند استخدام شيفرات برمجيّة بداخل سلسلة فلا بد من استخدام علامات الاقتباس المزدوجة. إذا استخدمت علامات اقتباس مفردة فسيتمّ طباعة النصّ كما هو <span style="font-family:courier new,courier,monospace;">{Hello my name is \#{name</span>. والخط المائل هذا يعني أنّه قد تمّ تخطي هذه القيمة وطُبعت كما هي، مثلما رأينا في السّابق مع<span style="font-family:courier new,courier,monospace;"> 'I\'m'</span>.
	</p>
</div>

<div id="wmd-preview-section-15">
	<h2 id="تطبيق-عملي">
		تطبيق عملي
	</h2>

	<p>
		الآن بعد التعرّف على المتغيّرات والسلاسل حان الوقت لكتابة برنامج حقيقي باستخدامهما. في هذا البرنامج سيتمّ طباعة سلسلة نصيّة تسأل المستخدم عن اسمه، ثمّ يقوم البرنامج بعد ذلك باستخدام الاسم الذي سيدخله المستخدم لتطبيق بعض الدوال التي تطرّقنا إليها. 
	</p>

	<p>
		أوّلاً نحتاج لإنشاء ملفّ روبي، سمّه ما تريد ولكن لا تنس إضافة <span style="font-family:courier new,courier,monospace;">rb.</span> إلى نهاية اسم الملفّ. لقد أسميتُ ملفّي <span style="font-family:courier new,courier,monospace;">greetings.rb</span>. بدايةً سنحتاج إلى طباعة رسالة للمستخدم لسؤاله عن اسمه. لفعل ذلك سنستخدم الأمر <span style="font-family:courier new,courier,monospace;">puts</span>:
	</p>

	<pre class="html ipsCode prettyprint" data-pbcklang="html" data-pbcktabsize="4">
puts "Hello, what's your name?"</pre>

	<p>
		بعد ذلك سنحتاج إلى تمكين المستخدم من كتابة اسمه.
	</p>
</div>

<div id="wmd-preview-section-16">
	<h3 id="أمر-gets">
		أمر gets
	</h3>

	<p>
		أمر <span style="font-family:courier new,courier,monospace;">gets</span> هو اختصار لـ get string والذي يقوم بإيقاف البرنامج وانتظار عمليّة إدخال من المستخدم قبل متابعة تنفيذ البرنامج. سيكون المُدخَل عبارة عن سلسلة كما هو واضح من اسم الأمر. إحدى دوال السلاسل دالّة تسمّى <span style="font-family:courier new,courier,monospace;">chomp</span> يمكن تطبيقها على سلسلة لحذف الحرف الذي يتمّ إضافته افتراضيًّا للسلسلة بعد الضغط على Enter، حيث أنّه عند استقبال إدخال من المستخدم وبضغطه على زرّ Enter يتمّ تلقائيًّا إضافة حرف سطر جديد إلى نهاية السلسلة.
	</p>

	<p>
		إذًا لتمكين المستخدم من إدخال اسمه نحتاج إلى استخدام أمر <span style="font-family:courier new,courier,monospace;">gets</span> للحصول على المدخل واستدعاء دالّة <span style="font-family:courier new,courier,monospace;">chomp</span> لحذف الحرف الزائد وحفظ ناتج ذلك في متغيّر لاستخدامه في وقتٍ لاحق. نكتب ذلك في روبي كالآتي:
	</p>

	<pre class="html ipsCode prettyprint" data-pbcklang="html" data-pbcktabsize="4">
name = gets.chomp</pre>

	<p>
		وأخيرًا سنقوم بكتابة شيفرات برمجيّة تتعامل مع هذا المدخل وتطبع بعض المعلومات عنه، أضف ما يلي بعد الأمرين السّابقين في ملفّ روبي الخاصّ بك:
	</p>

	<pre class="html ipsCode prettyprint" data-pbcklang="html" data-pbcktabsize="4">
puts "Hello #{name}. Your name's length is #{name.length}. That's not really long! Your name backwards is #{name.reverse.downcase.capitalize}"</pre>

	<p>
		ليُصبح كامل الملف على النّحو التّالي:
	</p>

	<pre class="html ipsCode prettyprint" data-pbcklang="html" data-pbcktabsize="4">
puts "Hello, what's your name?" 
name = gets.chomp 
puts "Hello #{name}. Your name's length is #{name.length}. That's not really long! Your name backwards is #{name.reverse.downcase.capitalize}"</pre>

	<p>
		يقوم هذا الأمر بطباعة سلسلة نصيّة تحتوي على شيفرات برمجيّة تطبع اسم المستخدم، عدد الأحرف في اسم المستخدم واسم المستخدم معكوسًا. لاحظ في الجزء الثالث كيف أضفنا تسلسل دوال من ثلاث دوال، إحداها هي دالّة جديدة تسمّى <span style="font-family:courier new,courier,monospace;">capitalize</span>. تقوم دالّة <span style="font-family:courier new,courier,monospace;">capitalize</span> بتغيير الحرف الأوّل فقط من السلسلة وتحويله إلى حرف كبير على عكس دالة <span style="font-family:courier new,courier,monospace;">upcase</span> التي تحوّل جميع أحرف السلسلة. 
	</p>

	<p>
		احفظ الملفّ بعد كتابة الشيفرات البرمجيّة كاملة ثم قم بتنفيذه عن طريق فتح الطرفيّة والتوجّه إلى مسار المجلّد الذي قمت بحفظ الملفّ به ثم كتابة ruby متبوعًا باسم الملف (أي أنه في حالتي سأكتب الأمر <strong><span style="font-family:courier new,courier,monospace;">ruby greetings.rb</span></strong>)، إذا واجهتك مشكلة في ذلك فراجع كيف قمنا بعمل ذلك في الدّرس الأوّل.
	</p>
</div>

<div id="wmd-preview-section-17">
	<h2 id="خاتمة">
		خاتمة
	</h2>

	<p>
		بهذا نكون قد انتهينا من الدّرس الثاني وتعرفنا على بعض المفاهيم الأساسيّة في روبي. جاء دورك للتطبيق وحدك، قارن ما يفعله البرنامج بالشيفرات البرمجيّة الخاصّة به للتعرّف أكتر على وظيفة كل جزء. طبّق أيضًا استخدام دوال أخرى لم نستخدمها في البرنامج. كذلك ربّما تريد تجربة كتابة اسمك ثنائيًّا أو ثلاثيًّا مع إضافة مسافة بين كل اسم، هل يتمّ حساب المسافة كحرف ضمن الاسم؟ ابحث في الدوال الخاصّة بالسلاسل عن سلسلة تعالج هذا الأمر وطبّقها.
	</p>
</div>
]]></description><guid isPermaLink="false">254</guid><pubDate>Mon, 25 Jan 2016 20:11:00 +0000</pubDate></item><item><title>&#x645;&#x62F;&#x62E;&#x644; &#x625;&#x644;&#x649; &#x644;&#x63A;&#x629; &#x631;&#x648;&#x628;&#x64A; &#x627;&#x644;&#x628;&#x631;&#x645;&#x62C;&#x64A;&#x629;</title><link>https://academy.hsoub.com/programming/ruby/%D9%85%D8%AF%D8%AE%D9%84-%D8%A5%D9%84%D9%89-%D9%84%D8%BA%D8%A9-%D8%B1%D9%88%D8%A8%D9%8A-%D8%A7%D9%84%D8%A8%D8%B1%D9%85%D8%AC%D9%8A%D8%A9-r244/</link><description><![CDATA[
<p><img src="https://academy.hsoub.com/uploads/monthly_2016_01/ruby-intro_(1).png.ef2710ad3333ebd906093d0cff4ab60d.png" /></p>

<div id="wmd-preview-section-25">
	<p dir="rtl">
		روبي هي لغة برمجة كائنيّة التوجّه بسيطة وقويّة في ذات الوقت، تم تطويرها في منتصف التسعينات بواسطة عالم الحاسوب Yukihiro Matsumoto والشهير باسم Matz. كان هدفه من تطوير اللغة جعل البرمجة أكثر متعةً وإنتاجيّة. تعمل اللُّغة على العديد من أنظمة التشغيل، مثل ويندوز، ماك والنسخ المختلفة من UNIX.
	</p>

	<p dir="rtl" style="text-align: center;">
		<a class="ipsAttachLink ipsAttachLink_image" href="https://academy.hsoub.com/uploads/monthly_2016_01/ruby-intro_(1).png.8c05dd0b115a29a3266998cc58db80d5.png"><img alt="ruby-intro_(1).thumb.png.8589cf259704f11" class="ipsImage ipsImage_thumbnailed" data-fileid="11847" src="https://academy.hsoub.com/uploads/monthly_2016_01/ruby-intro_(1).thumb.png.8589cf259704f11e6e918287c7926506.png"></a>
	</p>

	<h2 dir="rtl">
		مميزات لغة روبي
	</h2>

	<ul dir="rtl"><li>
			مفتوحة المصدر
		</li>
		<li>
			ذات توجّهات عامّة (general purpose)
		</li>
		<li>
			كائنيّة التّوجّه
		</li>
		<li>
			ديناميكيّة ومفسّرة
		</li>
		<li>
			محمولة
		</li>
		<li>
			صيغة نظيفة
		</li>
	</ul><h3 dir="rtl">
		مفتوحة المصدر
	</h3>

	<p dir="rtl">
		كون اللّغة مفتوحة المصدر يعنى أنّه يوجد عدد غير منتهي من المطوّرين قائمين على اللّغة، وسرعة في معالجة الأخطاء.
	</p>

	<h3 dir="rtl">
		ذات توجهات عامة
	</h3>

	<p dir="rtl">
		يعنى إمكانية استخدامها في أنواع مختلفة من البرامج، سواء في قواعد البيانات أو واجهات رسوميّة أو برامج علميّة أو الويب، إلى آخره.
	</p>

	<h3 dir="rtl">
		لغة كائنية التوجه
	</h3>

	<p dir="rtl">
		الميزة هي أنّها الأسلوب الأفضل والآمن لتطوير البرمجيّات.
	</p>

	<h3 dir="rtl">
		دينامكية
	</h3>

	<p dir="rtl">
		لن تكون مضطرًا أن تعلن عن نوع المتغير، بعكس لغات أخرى مثل Java.
	</p>

	<h3 dir="rtl">
		مفسرة
	</h3>

	<p dir="rtl">
		بمعنى أنها تستخدم مفسّرًا وليس مترجمًا (المترجم: هو برنامج يقوم بتحويل الشيفرات البرمجيّة من لغة مثل C مثلاً إلى ملفّ تنفيذي. أمّا المفسر: هو برنامج يقوم بتنفيذ الشيفرات البرمجيّة سطرًا بعد سطر وهذا له مميزات وسلبيات. فمن المميزات هي المحموليّة على أكثر من نظام تشغيل وأكثر من بنية من العتاد. بعكس اللّغات المترجمة التي ستحتاج إلى إعادة ترجمة برنامجك كل مرّة لكل منصّة. من السلبيات، البطء وإمكانيّة الإطّلاع على الشيفرات البرمجيّة، إلّا أنّ هذا الأمر لا يعتبر مشكلة في عالم المصادر الحرة)
	</p>

	<h3 dir="rtl">
		المحمولية
	</h3>

	<p dir="rtl">
		بمعنى أنّها مدعومة على العديد من النظم. وكذلك هي لغة بسيطة.
	</p>

	<h2 dir="rtl">
		Ruby on Rails
	</h2>

	<p dir="rtl">
		لروبي قاعدة داعمين مخلصين في اليابان منذ بداية صدورها، إلا أنّ انطلاقتها الحقيقيّة كانت عند إطلاق David Heimmier Hansson لإطار العمل <a href="http://rubyonrails.org/" rel="external nofollow">Ruby on Rails</a> والذي يمكن اعتباره سبب شهرة روبي. يجعل إطار العمل Rails من إنشاء تطبيقات الويب عملاً سهلاً وممتعًا، وبديهيًّا فإنّ السبب وراء ذلك هو سهولة لغة روبي في الأساس.
	</p>

	<h2>
		الكائنات Objects
	</h2>

	<p dir="rtl">
		أحد أهم مبادئ روبي هي أنّ كل شيء في اللُّغة هو كائن. الكائن في البرمجة هو أي كيان له خصائصه المميّزة وأفعاله (المسمّاة دوال Methods). على سبيل المثال، اطّلع على الأسطر البرمجيّة التالية:
	</p>

	<pre class="javascript ipsCode prettyprint" data-pbcklang="javascript" data-pbcktabsize="4">
"hello".reverse =&gt; "olleh"
6.even? =&gt; true
[6,4,3,7].sort =&gt; [3,4,6,7]</pre>

	<p dir="rtl">
		في السّطر الأول، كلمة hello هي كائن يمكن كتابته عكسيًّا بتطبيق الفعل/الدالّة <span style="font-family:courier new,courier,monospace;">reverse</span> عليه. السّطر الثّاني يشير إلى إمكانيّة التحقّق ممّا إذا كان الرقم 6 (والذي هو كائن في روبي أيضًا) عددًا زوجيًّا أم لا. السّطر الثّالث يوضح أنّه يمكن ترتيب الأرقام تصاعديّا في قائمة باستخدام الدالة <span style="font-family:courier new,courier,monospace;">sort</span>.
	</p>

	<h2>
		تنصيب روبي
	</h2>

	<p dir="rtl">
		نحتاج قبل البدء في استخدام روبي إلى تنصيبها أوّلاً. تختلف عمليّة التنصيب قليلاً باختلاف نظام التشغيل المستخدم، كذلك هناك العديد من الطرق لتنصيب روبي، اخترنا أبسطها.
	</p>

	<h3 dir="rtl">
		Windows
	</h3>

	<p dir="rtl">
		إذا كنت تستخدم نظام التشغيل ويندوز فإنّ أفضل طريقة هي استخدام <a href="http://rubyinstaller.org/" rel="external nofollow">Ruby Installer</a>، اضغط على زرّ <strong>Download</strong> وانتظر انتهاء التحميل، ثم افتح برنامج Ruby Installer واتّبع التعليمات، في أحد النوافذ سيظهر لك خيار <strong>Add Ruby executable to your path</strong>، أشّر عليه وتابع عمليّة التّنصيب مثلما تنصّب أي برنامج آخر على ويندوز.
	</p>

	<h3 dir="rtl">
		Mac
	</h3>

	<p dir="rtl">
		إذا كنت تستخدم نظام التشغيل ماك فإنَّ روبي مثبَّتة عليه بشكل قياسي ولكن هناك احتمال كبير أنّ النسخة المثبَّتة ليست أحدث نسخة. لمعرفة نسخة روبي الموجودة لديك، افتح الطرفيّة (وذلك بالبحث عن Terminal وفتحه) واكتب الأمر التالي:
	</p>

	<pre class="html ipsCode prettyprint" data-pbcklang="html" data-pbcktabsize="4">
ruby -v</pre>

	<p dir="rtl">
		أبسط طريقة لتنصيب أحدث نسخة من روبي على نظام ماك هو استخدام مدير الحزم <span style="font-family:courier new,courier,monospace;">Homebrew</span>. بعد تنصيب <a href="http://brew.sh/" rel="external nofollow">Homebrew</a> على جهازك، اكتب الأمر التالي في الطرفيّة وسيقوم البرنامج بفعل كل شيءٍ لك:
	</p>

	<pre class="html ipsCode prettyprint" data-pbcklang="html" data-pbcktabsize="4">
brew install ruby</pre>

	<h3>
		Linux
	</h3>

	<p dir="rtl">
		إذا أردت إدارة نُسخ متعدِّدة من روبي على جهازك أو كنت تستخدم نظام لينكس فإنَّ الخيار الأمثل لديك هو استخدام مدير الإصدارات، هناك الكثير من هذه البرامج بما فيها (<a href="http://rvm.io/rvm/install" rel="external nofollow">Ruby Version Manager</a> (RVM. لكي تتمكّن من تنصيب روبي باستخدام RVM، افتح الطرفيّة واكتب الأمر التالي:
	</p>

	<pre class="html ipsCode prettyprint" data-pbcklang="html" data-pbcktabsize="4">
\curl -L https://get.rvm.io | bash -s stable --ruby</pre>

	<p dir="rtl">
		يمكنك بعد ذلك معرفة نسخ روبي المنصّبة على جهازك باستخدام أمر:
	</p>

	<pre class="html ipsCode prettyprint" data-pbcklang="html" data-pbcktabsize="4">
rvm list</pre>

	<p dir="rtl">
		بعد معرفة النسخ يمكنك تحديد النسخة التي تريدها أن تكون الافتراضيّة عن طريق كتابة أمر:
	</p>

	<pre class="html ipsCode prettyprint" data-pbcklang="html" data-pbcktabsize="4">
rvm use [Ruby Version] –default</pre>

	<p dir="rtl">
		حيث [Ruby Version] هو رقم النسخة، مثلا 2.0.0 أو غير ذلك.
	</p>

	<h2 dir="rtl">
		معرفة إصدار روبي على جهازك
	</h2>

	<p dir="rtl">
		كما لاحظت وستلاحظ أيضًا مع تعمّقك في استخدام روبي أنّك ستحتاج في أغلب التنصيبات إلى استخدام الطرفيّة لتنفيذها. هذا الأمر شائع جدًا وستجد أنّك في كثيرٍ من الأحيان تستخدم الطرفيّة لتشغيل سكربتات وكتابة أوامر عندما تتعامل مع روبي. أتوقّع أنّك تعاملت مع الطرفيّة من قبل إذا كنت تستخدم أحد نظامي التشغيل ماك أو لينكس. ولكن على كلّ حال إذا لم تستخدم الطرفيّة من قبل فلا تقلق، ربّما تبدو صعبة في بادئ الأمر ولكن مع الوقت ستلاحظ مدى سهولتها وإنتاجيّتها.
	</p>

	<p dir="rtl">
		سنستخدم الآن الطرفيَّة للتحقُّق من أنّ عمليّة التنصيب تمّت بنجاح. اكتب السطر التالي:
	</p>

	<pre class="html ipsCode prettyprint" data-pbcklang="html" data-pbcktabsize="4">
ruby -v</pre>

	<p dir="rtl">
		إذا انتهى التنصيب بنجاح فسيظهر لك اسم نسخة روبي المنصّبة، كما هو ظاهر في الصورة أدناه، تخبرني الطرفيّة أنّ نسخة روبي الموجودة على حاسوبي هي ruby 2.2.3، وهي أحدث إصدار وقت كتابة هذا الدّرس.
	</p>

	<p dir="rtl">
		<a name="_GoBack" rel="external"></a>
	</p>

	<p dir="rtl" style="text-align: center;">
		<a class="ipsAttachLink ipsAttachLink_image" href="https://academy.hsoub.com/uploads/monthly_2016_01/001-ruby-version.PNG.adf5df670646b237bb3d5c1cdb807226.PNG"><img alt="001-ruby-version.thumb.PNG.c6d2a2b485d21" class="ipsImage ipsImage_thumbnailed" data-fileid="11537" src="https://academy.hsoub.com/uploads/monthly_2016_01/001-ruby-version.thumb.PNG.c6d2a2b485d21c6c42d5e37eb47fe3df.PNG"></a>
	</p>

	<h2>
		سطر أوامر روبي التفاعلي
	</h2>

	<p dir="rtl">
		يوفّر سطر أوامر روبي التفاعلي (IRB) مجالاً لكتابة شيفرات روبي والحصول على نتائج لحظيًّة حيثُ يتمّ تنفيذ الأمر فور ضغطك على زرّ Enter. تأتي هذه الأداة مدمجة مع روبي، لذلك فلن تحتاج إلى عمليَّات تنصيب إضافيّة.
	</p>

	<p dir="rtl">
		سنجرّب الآن كتابة شيفرات برمجيّة بسيطة للتعرُّف على مدى سهولة اللُّغة في سطر أوامر روبي التفاعليّ والتي تعمل في الطرفيّة مباشرةً. للبدء، كل ما عليك فعله هو فتح الطرفيّة وكتابة أمر <strong>irb</strong> ثمّ الضغط على Enter. يؤدّي هذا إلى بدء جلسة IRB، أي أنّه الآن بإمكانك كتابة وتنفيذ أوامر روبي. لطباعة Hello World على الشاشة اكتب الأمر التالي:
	</p>

	<pre class="html ipsCode prettyprint" data-pbcklang="html" data-pbcktabsize="4">
puts "Hello World"</pre>

	<p dir="rtl">
		<span style="font-family:courier new,courier,monospace;">puts</span> هو أمر في روبي وهو اختصار لـ put string والذي يطبع السلاسل النصيّة Strings. سلسلة "Hello World" هي كائن روبي يخزّن النصّ المكتوب بين علامتي التنصيص.
	</p>

	<p dir="rtl">
		لنجرّب استخدام الدالّة المذكورة سابقًا <span style="font-family:courier new,courier,monospace;">reverse</span> على نص "Hello World". اكتب الأمر التالي:
	</p>

	<pre class="html ipsCode prettyprint" data-pbcklang="html" data-pbcktabsize="4">
puts "Hello World".reverse</pre>

	<p dir="rtl">
		ستلاحظ ظهور النصّ معكوسًا. النقطة الموجودة بعد السلسلة هي الطريقة التي نضيف بها الدوال إلى الكائنات في روبي. ربّما تريد أن تجرّب الدالّة على نصوص مختلفة أيضًا لفهم طريقة عملها أكثر.
	</p>

	<h2 dir="rtl">
		العمليات الحسابية
	</h2>

	<p dir="rtl">
		يمكن لروبي التعامل مع الأرقام أيضًا فيمكننا إجراء عمليّات حسابيّة مختلفة. جرّب العمليّات الحسابيّة التالية أو عمليّات حسابيّة أخرى من اختيارك:
	</p>

	<pre class="html ipsCode prettyprint" data-pbcklang="html" data-pbcktabsize="4">
1 + 1
5 – 7 * 2
456549 * 45 + 23543</pre>

	<p dir="rtl">
		كما ذكرنا سابقًا فإنّ روبي تعتبر أن كلّ شيء هو كائن، فالأرقام في روبي إذًا هي كائنات لها خصائص ودوال. اكتب السطر التالي ولاحظ ما سيظهر لك:
	</p>

	<pre class="html ipsCode prettyprint" data-pbcklang="html" data-pbcktabsize="4">
2.even?</pre>

	<p dir="rtl">
		ستجيب عليك روبي <span style="font-family:courier new,courier,monospace;">true</span>، نعم اثنان هو رقم زوجي (even). لاحظ مدى سهولة لغة روبي. لو عرضت السطر السابق على شخص لا يعرف شيئًا على البرمجة، بنسبة كبيرة جدًا سيفهم المقصود منه.
	</p>

	<p dir="rtl">
		تسمّى القوائم الموجودة بين أقواس مربّعة بالمصفوفة Array. إليك مثال على مصفوفة تحتوي على بعض الأرقام:
	</p>

	<pre class="html ipsCode prettyprint" data-pbcklang="html" data-pbcktabsize="4">
[2, 7, 4, 8]</pre>

	<p dir="rtl">
		بديهيًّا فهذه المصفوفة هي كائن، وبالتّالي فهناك دوالّ خاصّة بها. لنجّرب دالّة <span style="font-family:courier new,courier,monospace;">sort</span>. أضف .<span style="font-family:courier new,courier,monospace;">sort</span> إلى نهاية المصفوفة:
	</p>

	<pre class="html ipsCode prettyprint" data-pbcklang="html" data-pbcktabsize="4">
[2, 7, 4, 8].sort</pre>

	<p dir="rtl">
		ماذا حدث بعد كتابة الأمر؟ تم ترتيب المصفوفة تصاعديًّا. لأنّ الدّالة <span style="font-family:courier new,courier,monospace;">sort</span> وكما يوضّح اسمها تُرتّب المصفوفة التي تعمل معها ترتيبًا تصاعديًا.
	</p>

	<h2>
		العبارات المنطقية
	</h2>

	<p dir="rtl">
		مثال آخر على مدى سهولة ووضوح روبي، اكتب السطر التالي في جلسة IRB لديك ثم اضغط Enter:
	</p>

	<pre class="html ipsCode prettyprint" data-pbcklang="html" data-pbcktabsize="4">
4.times do</pre>

	<p dir="rtl">
		لن يحدث شيء ولكن ستلاحظ ظهور علامة (<strong>*</strong>) بدلاً من علامة (<strong>&lt;</strong>) بعد رقم السّطر. هذه العلامة توضّح أنّنا لا زلنا في مرحلة كتابة الشيفرات البرمجيّة، بمعنى آخر أنّ الشيفرات البرمجيّة لم تنته بعد. اكتب شيئًا مثل التّالي أو اطبع نصًّا آخر من اختيارك ثمّ اضغط Enter:
	</p>

	<pre class="html ipsCode prettyprint" data-pbcklang="html" data-pbcktabsize="4">
puts "Ruby is so easy"</pre>

	<p dir="rtl">
		نهايةً اكتب end في السطر الجديد واضغط Enter لإنهاء مرحلة الإدخال. ربّما يمكنك تخمين ماذا تفعل هذه الشيفرات البرمجيّة قبل حتّى تشغيلها. نحن ببساطة نخبر روبي أن تفعل أمرًا لعددٍ من المرّات. في هذا المثال، نطلب من اللُّغة طباعة النصّ الموجود بين علامتي التنصيص 4 مرّات.
	</p>

	<p dir="rtl">
		إذا لم تفهم ما المقصود تمامًا في الفقرة السّابقة فالمطلوب أن نكتب الأسطر التالية (سطرًا بعد الآخر):
	</p>

	<pre class="html ipsCode prettyprint" data-pbcklang="html" data-pbcktabsize="4">
4.times do
puts "Ruby is so easy"
end</pre>

	<h2>
		كتابة برنامج روبي
	</h2>

	<p dir="rtl">
		الآن وبعد أن رأينا كيف تعمل روبي في سطر أوامر روبي التفاعليّ فقد حان الوقت لكتابة روبي وحفظها في ملفّ. افتح محرّر النصوص المفضّل لديك، لا تحتاج إلى برنامج معيّن لكتابة روبي، مجرّد محرّر نصوص بسيط يفي بالغرض. ولكن يفضّل اختيار محرّر نصوص يدعم خاصيّة تعليم الصيغة وتلوينها syntax highlighting. بعض الاقتراحات: <a href="https://notepad-plus-plus.org/" rel="external nofollow">Notepad++</a>، <a href="http://www.sublimetext.com/" rel="external nofollow">Sublime Text</a>.
	</p>

	<p dir="rtl">
		للبدء كل ما علينا فعله هو كتابة ما يلي في الملفّ:
	</p>

	<pre class="html ipsCode prettyprint" data-pbcklang="html" data-pbcktabsize="4">
puts "Hello World"</pre>

	<p dir="rtl">
		لاحظ أنّ هذه الشيفرة البرمجيّة مشابهة تمامًا لما كتبناه سابقًا في سطر أوامر روبي التفاعليّ، وبالتّالي فيجب أن نتوقّع نتائج مشابهة عند تشغيل البرنامج. لتشغيل البرنامج علينا أوّلاً حفظ الملفّ.
	</p>

	<p dir="rtl">
		أقترح عليك إنشاء مجلّد باسم <span style="font-family:courier new,courier,monospace;">learnRuby </span>أو أيّ اسم آخر لحفظ ملفّات روبي التي سنعمل عليها في هذه السلسلة، احفظ الملف باسم<span style="font-family:courier new,courier,monospace;"> hello.rb</span> أو أيّ اسم آخر مع وجوب إضافة <span style="font-family:courier new,courier,monospace;">rb<span style="line-height: 22.4px;">.</span></span> في آخره حيث <span style="font-family: 'courier new', courier, monospace; line-height: 22.4px;">rb</span><span style="font-family: 'courier new', courier, monospace; line-height: 22.4px;">.</span> هو الامتداد المستخدم لكلّ سكربتات روبي.
	</p>

	<p dir="rtl">
		بعد حفظ الملفّ، افتح الطرفيّة واذهب إلى المجلّد الذي قمت بحفظ الملفّ به عن طريق كتابة الأمر التالي:
	</p>

	<pre class="html ipsCode prettyprint" data-pbcklang="html" data-pbcktabsize="4">
cd [file path]</pre>

	<p dir="rtl">
		حيث file path هو مسار الملفّ. مثلاً إذا قمت بحفظ الملفّ في مجلّد learnRuby في C على ويندوز فالمسار سيكون <a href="file:///C:/learnRuby" rel="external">C:\learnRuby</a> وبالتّالي سيكون الأمر:
	</p>

	<pre class="html ipsCode prettyprint" data-pbcklang="html" data-pbcktabsize="4">
cd C:\learnRuby</pre>

	<p dir="rtl">
		بعد التوجّه إلى المجلّد الذي يحتوي على الملفّ نقوم بتشغيل البرنامج، كل ما علينا فعله هو كتابة:
	</p>

	<pre class="html ipsCode prettyprint" data-pbcklang="html" data-pbcktabsize="4">
ruby hello.rb</pre>

	<p dir="rtl">
		بعد تنفيذ الأمر ستلاحظ ظهور النصّ المكتوب، نفس العمليّة التي قمنا بها في سطر أوامر روبي التفاعليّ. الفرق الوحيد بين كتابة روبي في ملف وبين كتابتها في سطر أوامر روبي التفاعليّ هو أن سطر أوامر روبي التفاعليّ ينفّذ أمر روبي في كل مرّة نضغط Enter. أمّا كتابة شيفرات روبي في ملفّات يسمح لك بكتابة أكثر من سطر أوامر والتي ستُنفّذّ جميعًا عند تشغيل البرنامج. يمكننا التحقُّق من ذلك بالعودة إلى الملفّ المستخدم وإضافة أوامر أخرى. مثلاً، جرّب الأوامر التالية أسفل الأمر الموجود في الملفّ:
	</p>

	<pre class="html ipsCode prettyprint" data-pbcklang="html" data-pbcktabsize="4">
puts 1 + 1
3.times do
puts "Ruby"
end</pre>

	<p dir="rtl">
		احفظ الملف، وأعد تشغيله كما فعلت من قبل، ماذا تلاحظ؟ بمجرّد الضغط على Enter نحصل على نتيجة تنفيذ جميع الشيفرات البرمجيّة مرّة واحدة.
	</p>

	<h2 dir="rtl">
		التعليقات في روبي
	</h2>

	<p dir="rtl">
		مع زيادة حجم الشيفرات البرمجيّة وتعقيدها، سيصبح من الصعوبة قراءتها وفهمها. لهذا السبب فمن المفيد إضافة ملاحظات إلى برنامجك لتوضيح وظيفة أجزاء البرنامج لك ولأي مبرمج آخر سيقرأ هذه الشيفرات فيما بعد. تسمّى تلك الملاحظات تعليقات. تبدأ التعليقات في روبي برمز التلبيد Hash (#) وكل ما يأتي بعد هذا الرمز يتمّ تجاهله ولا يُنفّذ. جرّب كتابة تعليق في ملفّ<span style="font-family:courier new,courier,monospace;"> hello.rb</span> وأعد تشغيل البرنامج. تحقّق هل حدث اختلاف في النتائج أم لا.
	</p>

	<p dir="rtl">
		<strong>مثال على تعليق:</strong>
	</p>

	<pre class="html ipsCode prettyprint" data-pbcklang="html" data-pbcktabsize="4">
# هذا البرنامج يطبع حاصل ضرب الرقمين 3 * 4
puts 3 * 4

</pre>

	<h2>
		<span style="line-height: 1.2;">ختام</span>
	</h2>

	<p dir="rtl">
		تعرّفنا في هذا الدّرس على مدى بساطة روبي وقربها من الإنجليزيّة العاديّة، ما يميّزها عن لغات البرمجة الأخرى وكيف يمكن تنصيب وبدء البرمجة باستخدامها. كذلك تعرّفنا على بعض المفاهيم الخاصّة باللّغة والتي إن لم تفهمها فلا تقلق، ليس من المفترض أن تعرف كلّ هذا حيث أنّنا سنستعرض هذا كلّه باستفاضة في الدروس القادمة من هذه السلسلة. إذا استعصى عليك أمر أو واجهت مشكلة، لا تتردد في السؤال عنها في قسم التعليقات أدناه.
	</p>

	<p dir="rtl">
		*مصدر المعلومات: <a href="https://ar.wikipedia.org/wiki/%D8%B1%D9%88%D8%A8%D9%8A_(%D9%84%D8%BA%D8%A9_%D8%A8%D8%B1%D9%85%D8%AC%D8%A9)" rel="external nofollow">ويكيبيديا</a>.
	</p>
</div>
]]></description><guid isPermaLink="false">244</guid><pubDate>Tue, 19 Jan 2016 15:02:00 +0000</pubDate></item><item><title>&#x645;&#x62F;&#x648;&#x646;&#x62A;&#x643; &#x627;&#x644;&#x62E;&#x627;&#x635;&#x629; &#x628;&#x627;&#x633;&#x62A;&#x639;&#x645;&#x627;&#x644; Jekyll - &#x627;&#x644;&#x62C;&#x632;&#x621; &#x627;&#x644;&#x62B;&#x627;&#x646;&#x64A;</title><link>https://academy.hsoub.com/programming/ruby/%D9%85%D8%AF%D9%88%D9%86%D8%AA%D9%83-%D8%A7%D9%84%D8%AE%D8%A7%D8%B5%D8%A9-%D8%A8%D8%A7%D8%B3%D8%AA%D8%B9%D9%85%D8%A7%D9%84-jekyll-%D8%A7%D9%84%D8%AC%D8%B2%D8%A1-%D8%A7%D9%84%D8%AB%D8%A7%D9%86%D9%8A-r45/</link><description><![CDATA[
<p><img src="https://academy.hsoub.com/uploads/monthly_2015_03/Jekyll.png.c34e1ddc3df3d8add38b2e365167f256.png" /></p>

<p dir="rtl" style="text-align:justify;">في <a href="http://academy.hsoub.com/code/ruby/%D9%85%D8%AF%D9%88%D9%86%D8%AA%D9%83-%D8%A7%D9%84%D8%AE%D8%A7%D8%B5%D8%A9-%D8%A8%D8%A7%D8%B3%D8%AA%D8%B9%D9%85%D8%A7%D9%84-jekyll-%D8%A7%D9%84%D8%AC%D8%B2%D8%A1-%D8%A7%D9%84%D8%A3%D9%88%D9%84-r39/">الجزء الأول من هذا الدرس</a>، قمنا بتغطية كيفية إعداد بيئة تطوير محلية خاصة بك، استعمال إطار عمل CSS وإنشاء منشورات للمدونة. في هذا الجزء سنضيف بعض اللمسات النهائية للصفحة الرئيسية، إضافة شيء من التفاعل، وأخيرًا، نشر المدونة على الويب.</p><p dir="rtl"><strong>فهرس الجزء الثاني من هذا الدرس:</strong></p><ul><li><p dir="rtl">مدى التقدّم لحد الآن</p></li><li><p dir="rtl">التصفيح (pagination)</p></li><li><p dir="rtl">التعليقات</p></li><li><p dir="rtl">الأيقونات</p></li><li><p dir="rtl">صفحة 404</p></li><li><p dir="rtl">المشاركة والشبكات الاجتماعية</p></li><li><p dir="rtl">إحصائيات الزوار</p></li><li><p dir="rtl">الخروج للعلن</p></li><li><p dir="rtl">سَير عمل مُتواصل</p></li></ul><p dir="rtl">الناتج النهائي (بالتقريب) لما ستتحصل عليه بعد متابعة كامل الدرس:</p><p dir="rtl" style="text-align:center;"><a class="ipsAttachLink ipsAttachLink_image" rel="external nofollow" href="https://academy.hsoub.com/uploads/monthly_2015_03/jekyll-final-result.png.da9be92a11fcb84ecffe825059a7404b.png"><img data-fileid="627" class="ipsImage ipsImage_thumbnailed" alt="jekyll-final-result.thumb.png.92ea88a74b" src="https://academy.hsoub.com/uploads/monthly_2015_03/jekyll-final-result.thumb.png.92ea88a74b1331846e0eb3dbf1b65329.png"></a></p><p dir="rtl">يُكن أيضا معاينة الناتج النهائي <a rel="external nofollow" href="http://jekyll-tutorial.01walid.com/">مُباشرة من هنا</a>.</p><h2 dir="rtl">مدى التقدم لحد الآن</h2><p dir="rtl" style="text-align:justify;">لتلخيص ما تم تغطيته لحد الآن، فيجدر بنا حاليا أن يكون لدينا مدونة Jekyll تشتغل بشكل جيد على حاسوبنا المحلي. مع تنسيق للصفحة الرئيسية، وتنسيق آخر خاص بصفحة المنشور، كذلك يجدر بنا أن نكون الآن قادرين على إنشاء منشور جديد وكتابة محتوى له. هذه المنشورات تُعرض على الصفحة الرئيسية، كلٌ له رابط يصل إلى صفحة المنشور الخاصة به.</p><p dir="rtl" style="text-align:justify;">في ما يلي سنُحسن قليلا من الصفحة الرئيسية لإضافة التصفيح (pagination).</p><h2 dir="rtl">التصفيح (pagination)</h2><p dir="rtl" style="text-align:justify;">يأتي Jekyll <a rel="external nofollow" href="http://jekyllrb.com/docs/pagination/">بآلية تصفيح بسيطة</a> يُمكن استعمالها للتحكم بعدد المنشورات التي يجب عرضها على الصفحة الرئيسية في كل مرة. الخطوة الأولى لإضافة التصفيح هي زيادة خيار لملف <span style="font-family:'courier new', courier, monospace;">config.yml_</span> بالشكل التالي:</p><pre class="javascript ipsCode prettyprint">paginate: 5</pre><p dir="rtl" style="text-align:justify;">سيُخبر هذا Jekyll بعرض 5 منشورات فقط في كل مرة. قد تحتاج لإعادة تشغيل Jekyll من خلال سطر الأوامر خاصتك، وذلك عبر إيقافه (<span style="font-family:'courier new', courier, monospace;">Ctrl+c</span>) ثم إعادة تشغيله مُجَدَدًا عبر تنفيذ:</p><pre class="javascript ipsCode prettyprint">Jekyll serve --watch</pre><p dir="rtl" style="text-align:justify;">كذلك سيُمرر خيار <span style="font-family:'courier new', courier, monospace;">paginate</span> بعض المعلومات الإضافية لقوالب Liquid التي تستعملها صفحاتنا. يمكننا الاستفادة من هذه المعلومات لإنشاء روابط "التالي" و "السابق" . افتح ملف <span style="font-family:'courier new', courier, monospace;">index.html</span> (الصفحة الرئيسية) وأضف الشفرة التالية في الموضع التي تريد أن تظهر فيه تلك الروابط:</p><pre class="html ipsCode prettyprint">&lt;!-- Pagination links --&gt;
&lt;nav class="pagination"&gt;

  {% if paginator.previous_page %}
    {% if paginator.previous_page == 1 %}
      &lt;a href="/" class="previous"&gt;&amp;laquo;&lt;/a&gt;
    {% else %}
      &lt;a href="/page" class="previous"&gt;&amp;laquo;&lt;/a&gt;
    {% endif %}
  {% endif %}

  {% if paginator.next_page %}
     &lt;a href="/page" class="next "&gt;&amp;raquo;&lt;/a&gt;
  {% endif %}

&lt;/nav&gt;</pre><p dir="rtl" style="text-align:justify;">آلية عمل الشفرة أعلاه بسيطة، فهي فقط تفحص عنصر التصفيح إن كان يحتوي على صفحة تالية أو سابقة، ثم إظهار روابط "السابق" أو "التالي" حسب نتيجة الفحص. يمكن استعمال الشفرة أعلاه في أي صفحة تريد أن تعرض فيها قائمة المنشورات. أما حلقة قائمة المنشورات فهي كالتالي:</p><pre class="javascript ipsCode prettyprint">{% for post in paginator.posts %}
  ... شفرة قائمة المنشورات ...
{% endfor %}</pre><p dir="rtl" style="text-align:justify;">باستعمال هذه الحلقة، يمكنك الوصول إلى معلومات المنشور عن طريق <span style="font-family:'courier new', courier, monospace;">post.value</span> حيث <span style="font-family:'courier new', courier, monospace;">value</span> عبارة عن أحد متغيرات <span style="font-family:'courier new', courier, monospace;">frontmatter</span> التي قمنا بتعيينها في أعلى ملف المنشور . <a rel="external nofollow" href="http://jekyllrb.com/docs/variables/">مزيد من المعلومات حول </a><a rel="external nofollow" href="http://jekyllrb.com/docs/variables/">Frontmatter</a>.</p><h2 dir="rtl" style="text-align:justify;">التعليقات</h2><p dir="rtl" style="text-align:justify;">منصات التدوين مثل Wordpress تأتي بنظام تعليقات ضمني، بما أن المدونة التي نعمل عليها عبارة عن صفحات HTML ثابتة، فليس لدينا هذه الخاصية. لكن هناك بعض الخدمات الرائعة التي تعتمد على Javascript.</p><p dir="rtl" style="text-align:justify;">من أشهر الحلول، نظام تعليقات <a rel="external nofollow" href="http://disqus.com/">Disqus</a>. فهو سهل التنصيب، ومُجهّز بأدوات إدارية كاملة للتحكم بالتعليقات، والأروع أنه مجاني.</p><p dir="rtl" style="text-align:justify;">يكفي فقط زيارة <a rel="external nofollow" href="https://disqus.com/">موقع الخدمة</a> والنقر على "Add Disqus to your site” ثم تسجيل موقعك. عند إتمام عملية التسجيل ستعطيك الخدمة قُصاصة لشفرة Javascript يمكنك وضعها في أي مكان تريد أن يظهر فيه نظام التعليقات في ملف <span style="font-family:'courier new', courier, monospace;">posts.html</span>، وانتهى الأمر.</p><h2 dir="rtl">الأيقونات</h2><p dir="rtl" style="text-align:justify;">إلى هنا، أنهينا الأمور المتعلقة بالمُحتوى وتنسيقه، وقد حان الوقت الآن للاعتناء ببعض التفاصيل الصغيرة التي تُبدي بها مدى اعتنائك بمُدونتك. من ذلك أيقونة المدونة favicon التي تَظهر بجانب العنوان على ألسنة المتصفح أو عند إضافة أحدهم موقعك لمُفضلته.</p><p dir="rtl" style="text-align:justify;">عند إنشاء أيقونة favicon فيجب أن تأخذ في الحسبان أنها أيقونة صغيرة جدا، اختر شيئا يُبرز هوية المدونة، قد يكون ذلك شعار المُدونة أو أحد رُموزها.</p><p dir="rtl" style="text-align:justify;">اسم ملف الأيقونة <span style="font-family:'courier new', courier, monospace;">favicon.ico</span> وهي ذو أبعاد 16 على 16 بكسل.</p><p dir="rtl" style="text-align:justify;">يُمكنك البدء عن طريق إنشاء مُربع صغير على برنامج فوتوشوب أو محررك المُفضل. عادة، من السهل البدء بمُربع أكبر من 16 بكسل (أقترح 500 على 500 بكسل) ثم تصغيره لاحقا. بمُجرد تجميعك لصورة مُعينة، فإن أسرع طريقة لتوليد أيقونة favicon هي عبر رفع التصميم إلى موقع <a rel="external nofollow" href="http://iconifier.net/">Iconifier</a>.</p><p dir="rtl" style="text-align:justify;">سيقوم الموقع بتصغير الملف المرفوع إلى 16 بكسل وتوليد ملف <span style="font-family:'courier new', courier, monospace;">favicon.ico</span> تلقائيا. ضع هذا الملف في جذر مُجلد مشروع مُدونتك.</p><p dir="rtl" style="text-align:justify;">بعدها، أضف السطر التالي في قسم <span style="font-family:'courier new', courier, monospace;">head</span> لشفرة HTML خاصتك، سيُخبر المتصفح بمكان الأيقونة لجلبها:</p><pre class="html ipsCode prettyprint">&lt;link rel="shortcut icon" type="image/x-icon" href="/favicon.ico"&gt;</pre><p dir="rtl"><strong>أيقونات أُخرى</strong></p><p dir="rtl" style="text-align:justify;">من مزايا موقع Iconifier أيضا أنه سيُولد لنا أيقونات أخرى، منها ما هو خاص بأجهزة Apple التي تظهر عند إضافة أحدهم موقعك لشاشة هاتفه مثلا. ستجد أن هناك العديد من أحجام الأيقونات لمختلف الاحتياجات مثل iPad، iPhone .. الخ، هذه الملفات توضع في جذر مُجلد المدونة.</p><h2 dir="rtl" style="text-align:justify;">صفحة 404</h2><p dir="rtl" style="text-align:justify;">قُمنا بتغطية جميع الصفحات المهمة على المدونة لحد الآن، لكن هناك صفحة لا يجب نسيانها، إنها صفحة "صفحة غير موجودة"! يتم عرض هذه الصفحة عندما يكتب أحدهم عنوانا خاطئا على مدونتك أو في حال تم نقل المُحتوى إلى مكان آخر. هدف هذه الصفحة هو مساعدة الزائر وإعلامه أنه وقع على مكان ليس به مُحتوى، واقتراح أمكنة أخرى قد تُهمه أكثر.</p><p dir="rtl" style="text-align:justify;">أنشئ ملفا باسم <span style="font-family:'courier new', courier, monospace;">404.html</span> في جذر مجلد المدونة. سيقوم Jekyll تلقائيا بعرض هذه الصفحة عندما يزور أحدهم عنوانا خاطئًا.</p><p dir="rtl" style="text-align:justify;">مُحتوى ملف <span style="font-family:'courier new', courier, monospace;">404.html</span> من الشكل التالي:</p><pre class="html ipsCode prettyprint">---
layout: default
title: صفحة غير موجودة
---

&lt;article&gt;
  &lt;header id="404"&gt;
    &lt;h1&gt;صفحة غير موجودة&lt;/h1&gt;
  &lt;/header&gt;

  &lt;section class="entry"&gt;
    &lt;p&gt;عفوا، لكن يبدو أن هذه الصفحة غير موجودة &lt;a href="/"&gt;توجّه إلى الصفحة الرئيسية&lt;/a&gt;.
    &lt;/p&gt;
  &lt;/section&gt;
&lt;/article&gt;</pre><p dir="rtl" style="text-align:justify;">بعضهم قد يختار وضع صفحات مَرِحَة أو مُضحكة، أنت حر في تعديل شفرة HTML أعلاه وتخصيصها بما يُناسبك.</p><h2 dir="rtl">المُشاركة والشبكات الاجتماعية</h2><p dir="rtl" style="text-align:justify;">يعتمد هذا على رغباتك، لكن قد تود وضع روابط لحساباتك على الشبكات الاجتماعية أو أزرار مشاركة المنشورات، إن كنت تريد كذلك، فقد تودّ الاعتماد على أحد الخدمات المتوفرة مُسبقا، من ذلك خدمة <a rel="external nofollow" href="http://www.addthis.com/">AddThis</a>.</p><p dir="rtl" style="text-align:justify;">سيُتيح لك موقع AddThis تخصيص أزرار الشبكات الاجتماعية وكيفية عرضها، ثم يعطيك قُصاصة شفرة Javascript لزرعها في موقعك، في هذه الحالة، يُمكنك وضعها في ملف <span style="font-family:'courier new', courier, monospace;">default.html</span> مثلا كي تظهر الأزرار في جميع أنحاء المُدونة!</p><h2 dir="rtl">إحصائيات الزوار</h2><p dir="rtl" style="text-align:justify;">عادة قبل نشر أي موقع، أقوم بإضافة<a rel="external nofollow" href="http://www.google.com/analytics/"> </a><a rel="external nofollow" href="http://www.google.com/analytics/">Google Analytics</a>. فهي خدمة جيدة للاطلاع على نسبة الزوار، موقعهم الجغرافي ووقت الزيارة. ستساعدك الخدمة أيضا في معرفة أي من المنشورات لاقى رواجا.</p><p dir="rtl" style="text-align:justify;">لاستعمال Google Analytics يكفي أن يكون لديك حساب Google عبر التسجيل <a rel="external nofollow" href="http://www.google.com/analytics/">بالموقع</a>، ثم وضع قصاصة شفرة Javascript في قسم <span style="font-family:'courier new', courier, monospace;">head</span> أو في ذيل شفرة HTML.</p><p dir="rtl" style="text-align:justify;">وضع شفرة Google Analytics في قسم <span style="font-family:'courier new', courier, monospace;">head</span> قد يُعيق عملية رسم الصفحة، لذلك أفضّل وضعها أسفل المحتوى، قبل غلق عنصر <span style="font-family:'courier new', courier, monospace;">&lt;body/&gt;</span> حتى يتسنّى للمتصفح تحميل المحتوى أولا وعرضه ثم تحميل Google Analytics تبعا.</p><p dir="rtl" style="text-align:justify;">من المُحبذ أيضا وضع الشفرة في ملف <span style="font-family:'courier new', courier, monospace;">default.html</span> حتى تعمل خوارزمية التعقّب على جميع صفحات المُدونة.</p><h2 dir="rtl">الخروج للعلن</h2><p dir="rtl" style="text-align:justify;">إذا وصلت لهذا الحد، فأنت مُستعد الآن للكشف عن مدونتك في العلن، ستحتاج -على الخيار- إلى اسم نطاق. إن لم تكن تملك أحدها، قد ترغب في شراء اسم نطاق من أحد مزودي أسماء النطاقات المعتمدين كـ name.com أو hover.com.</p><p dir="rtl" style="text-align:justify;">بعد اختيار اسم نطاق، ستحتاج إلى مكان لتستضيف فيه المُدونة. بما أن Jekyll تم تطوير من طرف أحد مؤسسي موقع Github، يُمكنك استضافة مُدونة Jekyll مجانا على<a rel="external nofollow" href="https://pages.github.com/"> </a><a rel="external nofollow" href="https://pages.github.com/">Github pages</a>. و هو الخيار الذي سنعتمد عليه في درسنا هذا.</p><p dir="rtl" style="text-align:justify;">قبل نشر مُدونتك على Github pages، ستحتاج إلى إنشاء ملف باسم <span style="font-family:'courier new', courier, monospace;">CNAME</span>. هذا الملف سيُخبر Github باسم النطاق الذي اخترته للمدونة أو اسم النطاق الفرعي على Github الذي تريده كعنوان ويب للمدونة.</p><p dir="rtl" style="text-align:justify;">بمُجرد إنشاء هذا الملف ووضعه في جذر مجلد العمل، فأنت جاهز الآن لدفع مدونتك لاستضافة Github pages.</p><h3 dir="rtl" style="text-align:justify;">دفع الملفات إلى Github</h3><p dir="rtl" style="text-align:justify;">ستحتاج إلى حساب بموقع Github، بعد تسجيلك في الموقع، أنقر على زر <span style="font-family:'courier new', courier, monospace;">+</span> ثم على خيار "New repository".</p><p dir="rtl" style="text-align:justify;">إذا كانت هذه أول مرة تُنشئ فيها Github page، فإن أبسط طريقة هي أن تسمي مُستودعك (repository) باسم <span style="font-family:'courier new', courier, monospace;">username.github.io</span> حيث <span style="font-family:'courier new', courier, monospace;">username</span> هو اسم المستخدم لحسابك على github. ضع وصفا على الخيار، واترك خيار "public”، لن تحتاج بالضرورة إلى ملف <span style="font-family:'courier new', courier, monospace;">Readme</span>.</p><p dir="rtl" style="text-align:justify;">سيقوم بعدها Github بعرض بعض الإرشادات حول كيفية دفع مشروعك، لكن قبل ذلك، أقترح أن تذهب أولا إلى مجلد مشروعك وحذف مُجلد <span style="font-family:'courier new', courier, monospace;">.git</span> الذي بداخله لمسح مُخلفات Git التي يمكن أن تكون عالقة هناك بسبب استعمالنا <a rel="external nofollow" href="https://github.com/necolas/jekyll-boilerplate">قالب بداية </a><a rel="external nofollow" href="https://github.com/necolas/jekyll-boilerplate">Necolas</a>. يمكنك فعل ذلك مباشرة من الطرفية عبر تنفيذ الأمر التالي في مجلد العمل:</p><pre class="javascript ipsCode prettyprint">rm -rf ./.git</pre><p dir="rtl" style="text-align:justify;">يمكنك بعدها اتباع إرشادات Github الخاصة بإنشاء مستودع جديد (initialising new Git repository)، إضافة الخادوم البعيد (remote) للدفع إليه، ثم عمل إيداع.</p><p dir="rtl" style="text-align:justify;">ستحتاج بعدها إلى إضافة جميع ملفات المشروع إلى مستدوع git عبر تنفيذ الأوامر التالية:</p><pre class="javascript ipsCode prettyprint">git add --all
git commit -am "Adding all the files"
git push origin master</pre><p dir="rtl">سيُضيف هذا جميع ملفاتك ويدفعها إلى خادوم Github.</p><h3 dir="rtl">توجيه اسم النطاق إلى مدونتك</h3><p dir="rtl" style="text-align:justify;">بعد إنشاء مستودع Github، سنحتاج إلى توجيه اسم نطاقك إلى مكان استضافة المدونة. ستحتاج إلى إنشاء سِجِل (record) من صنف "A” عند مزود اسم النطاق الخاص بك. Github لديه دليل خاص بهذا لإرشادك حول<a rel="external nofollow" href="https://help.github.com/articles/setting-up-a-custom-domain-with-github-pages/"> كيفية ضبط إعدادات </a><a rel="external nofollow" href="https://help.github.com/articles/setting-up-a-custom-domain-with-github-pages/">DNS</a>.</p><p dir="rtl" style="text-align:justify;">بعد توجيه اسم النطاق ستحتاج إلى مدة انتظار لا تتجاوز 48 ساعة (غالبا ما تكون ساعة أو ساعتين) لتتم عملية الربط بين استضافتك واسم نطاقك، بعدها سيكون لديك مُدونة على الهواء مُباشرة!</p><h2 dir="rtl" style="text-align:justify;">سير عمل مُتواصل</h2><p dir="rtl" style="text-align:justify;">بمُجرد مواصلة عملك على المدونة، يكفي دفع التغيرات التي تجريها إلى Github وستظهر مباشرة على موقع المدونة. سير عمل git قد يحتاج منك بعض الوقت حتى تألفه وتعتاد عليه، لكنه يستحق ذلك.</p><p dir="rtl" style="text-align:justify;">عند انتهائك من ضبط مدونتك وهيكلتها، إضافة منشور جديد ما هو إلا عبارة عن إضافة ملف جديد في مجلد <span style="font-family:'courier new', courier, monospace;">posts_</span>، إضافة معلومات frontmatter ، كتابة مُحتوىً رائع، ثم إضافة الملف الجديد في git ودفعه إلى Github!</p><p style="text-align:justify;">إلى هنا نصل إلى نهاية كامل الدرس، مُبارك عليك مدونة آمنة، ثابنة، سريعة، قليلة الصيانة، فقط ركزّ على المحتوى!</p><p>ترجمة -وبتصرف- للمقال <a rel="external nofollow" href="http://hop.ie/blog/your-own-blog-2/">Your Own Blog</a> لصاحبه <a rel="external nofollow" href="http://hop.ie/about">Donovan Hutchinson</a>.</p>
]]></description><guid isPermaLink="false">45</guid><pubDate>Fri, 20 Mar 2015 08:12:00 +0000</pubDate></item><item><title>&#x645;&#x62F;&#x648;&#x646;&#x62A;&#x643; &#x627;&#x644;&#x62E;&#x627;&#x635;&#x629; &#x628;&#x627;&#x633;&#x62A;&#x639;&#x645;&#x627;&#x644; Jekyll - &#x627;&#x644;&#x62C;&#x632;&#x621; &#x627;&#x644;&#x623;&#x648;&#x644;</title><link>https://academy.hsoub.com/programming/ruby/%D9%85%D8%AF%D9%88%D9%86%D8%AA%D9%83-%D8%A7%D9%84%D8%AE%D8%A7%D8%B5%D8%A9-%D8%A8%D8%A7%D8%B3%D8%AA%D8%B9%D9%85%D8%A7%D9%84-jekyll-%D8%A7%D9%84%D8%AC%D8%B2%D8%A1-%D8%A7%D9%84%D8%A3%D9%88%D9%84-r39/</link><description><![CDATA[
<p><img src="https://academy.hsoub.com/uploads/monthly_2015_03/Jekyll.png.9f587aa5d6585cbdad2e23bd896b531b.png" /></p>

<p style="text-align:justify;">هُناك العديد مِن الخَدَمات التي توفر لك مُدوَنة خاصة بِك. لكن بالمُقابل يحتفظون بمحتواك ويستعملونه في ما يخدمهم. لعلّ الكثير من المدونين -قد تكون أنت منهم- يريدون الخروج من هذا القيْد، ويحبذّون إدارة محتواهم بأنفسهم والتحكم به على مَوْقِعهم الخاص. إن كنت كذلك، فتنصيبُ مُدَونة تَملِك أنتَ مُحتواها ومَفَاتيحَها يُعدُّ خيارًا أفضلَ بكثير.</p><p style="text-align:justify;">هذا مِن أحد فوائد إنتهاج أسلوب DIY (اختصار لـ Do It Yourself أو أقم شأنك بنفسك) حيث ستتكفل أنت بنفسك من خلال متابعة هذا الدرس، ببناء، نشر واستضافة مدونتك الخاصة والتحكم بزِمَام أمورها عِوضًا عن تفويض أمرها لأحد خدمات التدوين. وسنبدأ من خلال الجزء الأول من هذا الدرس بكيفية تنصيب، تعديل قالب يَرُوقُ لَك ونَشر مُدونة خاصة بك باستعمال Jekyll.</p><p dir="rtl"><strong>فهرس الجزء الأول من هذا الدرس:</strong></p><ul><li><p dir="rtl">التخطيط</p></li><li><p dir="rtl">اختيار منصّة</p></li><li><p dir="rtl">التعريف بـ Jekyll.</p></li><li><p dir="rtl">إعداد بيئة التطوير الخاصة بك</p></li><li><p dir="rtl">إنشاء تنسيقات المدونة (layouts)</p></li><li><p dir="rtl">كتابة منشور على المدونة</p></li><li><p dir="rtl">إنشاء صفحات قائمة بذاتها</p></li><li><p dir="rtl">أوراق الأنماط المتتالية (CSS) باستخدام SASS</p></li><li><p dir="rtl">البناء فوق إطار عمل</p></li></ul><p dir="rtl">الناتج النهائي (بالتقريب) لما ستتحصل عليه بعد متابعة كامل الدرس:</p><p dir="rtl" style="text-align:center;"><a class="ipsAttachLink ipsAttachLink_image" rel="external nofollow" href="https://academy.hsoub.com/uploads/monthly_2015_03/jekyll-final-result.png.da9be92a11fcb84ecffe825059a7404b.png"><img data-fileid="627" class="ipsImage ipsImage_thumbnailed" alt="jekyll-final-result.thumb.png.92ea88a74b" src="https://academy.hsoub.com/uploads/monthly_2015_03/jekyll-final-result.thumb.png.92ea88a74b1331846e0eb3dbf1b65329.png"></a></p><p dir="rtl">يُكن أيضا معاينة الناتج النهائي <a href="http://jekyll-tutorial.01walid.com/" rel="external nofollow">مُباشرة من هنا</a>.</p><h2 dir="rtl">التخطيط</h2><p dir="rtl" style="text-align:justify;">ما نفصده هنا من إنشاء مُدونة أمرٌ بسيطٌ للغاية، وحبّذا يكون شيئا يمكننا تحسينه وتمديد مزاياه مع مرور الوقت. أبسط ما يُمكن أن تكون عليه مُدونة هو مكانٌ لعرض قائمة المنشورات، صفحة لقراءة كل منشور، التعليقات، وطريقة ما لكتابة المنشورات.</p><p dir="rtl" style="text-align:justify;">إلى جانب هذا، لا نُريد أن نقضي فيها الكثير من الوقت من أجل تنصيبها وإدارتها، لذلك فحبذا لو تكون قليلة الصيانة.</p><h2 dir="rtl">اختيار منصة</h2><p dir="rtl" style="text-align:justify;">باعتبار متطلباتنا هذه، فقد ننظر في الخيارات الاعتيادية المتاحة أمامنا. <a rel="external nofollow" href="http://wordpress.org/">Wordpress</a> والتي يُفضلها الكثير، تُعتبر مِنصّة قوية يُصاحبها إضافات غزيرة. لكن تصميم وتطوير قالب خاص لها وتخصيصها قد يأخذ منك الكثير من الوقت.<span style="line-height:22.3999996185303px;"> </span><span style="line-height:22.3999996185303px;">يمكننا اختيار قالب جاهز، فقد قمت بذلك مُسبقا، لكن وجدت نفسي عادة أقضي وقتا أطول في تخصيص القالب لأجعله في المظهر الذي يروق لي</span><span style="line-height:22.3999996185303px;">.</span> زيادة على ذلك، فهي تحتاج إلى متابعة تحديثاتها (خاصة المتعلقة بالثغرات الخطيرة التي تلحق بها أو بأحد إضافاتها)، تنصيب قاعدة بيانات، وخادوم مُجهز بـ PHP، في حين قد لا نحتاج كل هذا من أجل مُدونة شخصية.</p><p dir="rtl" style="text-align:justify;">Jekyll خيارٌ بمنظور آخر. مدونتي الشخصية تستعمل Jekyll وأنا على دراية بكيفية عمله.</p><h2 dir="rtl" style="text-align:justify;">التعريف بـ Jekyll</h2><p dir="rtl" style="text-align:justify;">Jekyll جوهرة (Gem) من جواهر لغة البرمجة Ruby يلعب دور خادوم محلي على حاسوبك. وهو ذو "ذِهنِية مُدوناتية"، أي أنه مُوجَّه خِصّيصا للمساعدة في توليد مُدونة، وذلك عن طريق توليد مجموعة من ملفات HTML ثابتة يُمكن رفعها مباشرة واستضافتها في أي مكان.</p><p dir="rtl" style="text-align:justify;">Jekyll أيضا مدعوم من طرف Github. إن كنت ممن يَسْتَودِعُ شِفرته البرمجية هناك، يُمكنك أيضا دفع شفرة موقع Jekyll خاصتك وسيقوم Github باستضافة موقعك هناك.</p><h2 dir="rtl">إعداد بيئة التطوير الخاصة بك</h2><p dir="rtl" style="text-align:justify;">أول خطوة هي تنصيب Jekyll. <a rel="external nofollow" href="http://jekyllrb.com/docs/installation/">إعدادات التنصيب</a> تشرح الأساسيات، وإن كنت تستعمل Windows، يمكنك تنصيبه<a rel="external nofollow" href="http://www.madhur.co.in/blog/2013/07/20/buildportablejekyll.html"> بهذه الطريقة</a>.</p><p dir="rtl" style="text-align:justify;">بعد تنصيب Jekyll، تحتاج إلى إحدى القوالب للبدء. مثلا <a rel="external nofollow" href="https://github.com/necolas/jekyll-boilerplate">قالب بداية </a><a rel="external nofollow" href="https://github.com/necolas/jekyll-boilerplate">Necolas</a>، يمكنك تحميله عبر Git بكتابة هذا الأمر في سطر الأوامر:</p><pre class="html ipsCode prettyprint">git clone git@github.com:necolas/jekyll-boilerplate.git YourFolderName</pre><p dir="rtl" style="text-align:justify;">يمكن أيضا تحميل الشفرة النهائية لهذا الدرس <a class="ipsAttachLink" href="http://academy.hsoub.com/applications/core/interface/file/attachment.php?id=628">من هنا</a>.</p><p dir="rtl" style="text-align:justify;"><u><strong>تنبيه:</strong></u> إن لم يعمل الأمر أعلاه، تأكد من أن <a rel="external nofollow" href="http://git-scm.com/">Git</a> منصّب على جهازك.</p><p dir="rtl" style="text-align:justify;">غيّر "YourFolderName” بالاسم الذي تريده لمُجلّد العمل، سيقوم الأمر أعلاه بنسخ الشفرة البرمجية إلى مجلد العمل الجديد. يمكنك حينئذٍ تشغيل الأمرين التاليين، كلٌ على حِدى:</p><pre class="javascript ipsCode prettyprint">cd YourFolderName
jekyll serve –watch</pre><p dir="rtl" style="text-align:justify;">بتنفيذ الأمرين أعلاه، ستُخبر حاسوبك بالتنقل إلى مجلد العمل وتشغيل خادوم Jekyll هُناك.. يمكنك حينها تصفح العنوان التالي:<a rel="external nofollow" href="http://localhost:4000/">localhost:4000</a> على متصفحك وسترى نسختك الخاصة من المدونة!</p><h2 dir="rtl">إنشاء تنسيقات المدونة (layouts)</h2><p dir="rtl" style="text-align:justify;">ضمن مجلد المدونة خاصتك ستجد مجلدًا آخرَ باسم “layouts_”. بداخلهِ تجد كلا من ملفي<span style="font-family:'courier new', courier, monospace;"> default.html</span> و <span style="font-family:'courier new', courier, monospace;">post.html</span>، هذين هما ملفا التنسيق المُستخدم لاحتواء مُحتوى موقعك.</p><h3 dir="rtl">1. لغة التوصيف Liquid</h3><p dir="rtl" style="text-align:justify;">يستعمل Jekyll لغة التوصيف Liquid (أو <a rel="external nofollow" href="http://liquidmarkup.org/">Liquid Markup</a>) للقوالب، وهي طريقة بسيطة ولكن فعّالة لإضافة بعض من المنطق إلى ملفات التنسيق، كما تسمح لنا بإنشاء حلقات (loops) توّلد ملفات HTML ثابتة.</p><p dir="rtl" style="text-align:justify;">عند إعداد نسق ما، فعادة ما أبدأ بضبط شفرة HTML التي يحتويها النسق أوّلا، ثم بتزيين التنسيق لاحقا. الخطوة الأولى هي إنشاء صفحة التنسيق العامة، ولهذا سنستعمل ملف <span style="font-family:'courier new', courier, monospace;">default.html</span>.</p><p dir="rtl" style="text-align:justify;">ملف <span style="font-family:'courier new', courier, monospace;">default.html</span> يلعب دور حاوية لمُحتوى الصفحة. يمكنه احتواء أي شيء يتكرر في كل صفحة، مثل الرأسية (header)، القائمة الجانبية (sidebar) ومُحتوى التذييل (footer). كما أنه يحتوى على عنصر <span style="font-family:'courier new', courier, monospace;">head</span> التابع لـ HTML وجميع الوسوم الدلالية (meta tags) وملفات CSS التابعة له.</p><p dir="rtl" style="text-align:justify;">داخل هذا الملف، يجب أن تجد تعليمة <span style="font-family:'courier new', courier, monospace;">{{ content }}</span>. وهي موضع محتوى كل صفحة. يُمكن أيضا تمرير متغيرات أخرى إلى النسق ثم فحصها على هذا النحو:</p><pre class="html ipsCode prettyprint">&lt;title&gt;
    {% if page.title %} {{ page.title }} {% endif %} 
    | blog.example.com
&lt;/title&gt;</pre><p dir="rtl" style="text-align:justify;">في هذه الحالة، يمكن لأي صفحة تعيين قيمة <span style="font-family:'courier new', courier, monospace;">title</span> الخاصة بها، ويمكن الوصول لهذه القيمة ضمن القالب عبر كائن <span style="font-family:'courier new', courier, monospace;">page</span>.</p><h3 dir="rtl">2.  قالب المنشورات</h3><p dir="rtl" style="text-align:justify;">بوجود حاوية للمحتوى، فإن الخطوة التالية هي إعداد قالب لمنشورات المدونة. ملف <span style="font-family:'courier new', courier, monospace;">post.html</span> يحتوي على شفرة HTML المستعملة في كل صفحة منشور. مُحتوى هذا الملف يتم وضعه تلقائيا مكان تعليمة <span style="font-family:'courier new', courier, monospace;">{{ content }}</span> في ملف التنسيق <span style="font-family:'courier new', courier, monospace;">default.html</span>.</p><p dir="rtl" style="text-align:justify;">عند رأس ملف <span style="font-family:'courier new', courier, monospace;">post.html</span> ستجد نَصَّا مُمَاثلا لهذا: </p><pre class="javascript ipsCode prettyprint">---
layout: default 
---</pre><p dir="rtl" style="text-align:justify;">هذا الجزء من الملف يتم استعماله من قِبل Jekyll، واسمه <a rel="external nofollow" href="http://jekyllrb.com/docs/variables/">frontmatter</a>. وهو مكان يسمح لك بتعيين قِيَم مُتغيرات يُمكن استعمالها في القوالب. في مثالنا أعلاه، قمنا بتعيين متغير <span style="font-family:'courier new', courier, monospace;">"layout"</span> بقيمة <span style="font-family:'courier new', courier, monospace;">"default"</span>. سيُخبر هذا Jekyll بمُعالجة الملف باستعمال ملف التنسيق <span style="font-family:'courier new', courier, monospace;">default.html</span>. إذا كانت لديك ملفات تنسيق أخرى، فإن تغيير القيمة هنا كفيل بأن يُعلم Jekyll باستعمال الملف المحدد في القيمة الجديدة.</p><h2 dir="rtl">كتابة منشور على المدونة</h2><p dir="rtl" style="text-align:justify;">كل منشورات مدونة Jekyll يتم حفظها في مجلد <span style="font-family:'courier new', courier, monospace;">"posts_"</span>. كتابة منشور جديد عبارة عن إنشاء ملف Markdown جديد ضمن هذا المجلد، اسم الملف نفسه يحدد تاريخ ووقت نشر الموضوع كذلك يُحدّد المسار اللطيف (slug) لعنوان المنشور على الويب (URL).</p><p dir="rtl" style="text-align:justify;">من مزايا هذه الطريقة أنها تُغنيك عن استعمال أي نوع من قواعد البيانات لأن جميع منشوراتك محفوظة في ملفات نصية في مكان واحد. وهذا يُسَهّل من عملية النسخ الاحتياطي لهم، كما أنه يفتح المجال لتخصيص عملية النشر بطُرق مُثيرة للاهتمام، من ذلك مثلا النشر عن طريق Dropbox.</p><p dir="rtl">لمُعاينة كيفية كتابة المنشورات، يمكنك البدء عن طريق إنشاء ملف جديد داخل مجلد <span style="font-family:'courier new', courier, monospace;">"posts_"</span>:</p><pre class="html ipsCode prettyprint">2015-02-01-my-great-post.markdown</pre><p dir="rtl" style="text-align:justify;">من المنوط بهذا المنشور أن يتم نشره يوم 27 فبراير 2015، وعنوانه على الويب سيكون شيئا مشابها لـ <span style="font-family:'courier new', courier, monospace;">yourblog.com/my-great-post</span> (يتغير هذا حسب قيمة <span style="font-family:'courier new', courier, monospace;">permalink</span> داخل ملف <span style="font-family:'courier new', courier, monospace;">config.yml_ </span>الخاص بك).</p><p dir="rtl" style="text-align:justify;">بوجود هذا، يمكنك إضافة بعض المعلومات عن طريق زيادة متغيرات من نوع YAML frontmatter عند رأس ملف المنشور الجديد:</p><pre class="javascript ipsCode prettyprint" style="text-align:justify;">--- 
layout: post
title: "عنوان المنشور" 
description: "وصف المنشور" 
tags: [العديد, من, الوسوم] 
published: true 
---</pre><p dir="rtl" style="text-align:justify;">سيُخبر هذا Jekyll باستعمال تنسيق قالب <span style="font-family:'courier new', courier, monospace;">post.html</span> وإضافة بعض من الوسوم الدلالية المفيدة للمنشور الجديد. بمُجرد وضع هذا، يُمكنك البدء في كتابة محتوى منشورك.</p><h3 dir="rtl">حول Markdown</h3><p dir="rtl" style="text-align:justify;">Markdown تُعتبر <a rel="external nofollow" href="http://daringfireball.net/projects/markdown/">أداة جميلة لتحويل تنسيق نصي مُتعارف عليه إلى </a><a rel="external nofollow" href="http://daringfireball.net/projects/markdown/">HTML</a>، وهي طريقة مشهورة لكتابة المحتوى دون الحاجة لإدخال عناصر ووسوم لغة HTML. والناتج هو طريقة سريعة وأكثر مقروئية لكتابة المحتوى بالمقارنة بالشفرة المَحْضَة لـ HTML. ستجد العديد من الأمثلة في توثيق الأداة في الرابط المشار إليه أعلاه.</p><h2 dir="rtl">إنشاء صفحات قائمة بذاتها</h2><p dir="rtl" style="text-align:justify;">يُمكنك إنشاء صفحات قائمة بذاتها من أجل موقعك فقط عبر إنشاء ملفات HTML. إذا أضمنت مُحتوى نص الإعداد عند رأس الملف، يقوم Jekyll تلقائيا عندها بأخذ محتوى ملف HTML الجديد ووضعه ضمن القالب المناسب. لرؤية هذا، افتح ملف <span style="font-family:'courier new', courier, monospace;">index.html</span>.</p><p dir="rtl" style="text-align:justify;">هذا الملف عبارة عن الصفحة الرئيسية للمدونة، وبالتالي فهو يحتوى على حلقة (loop) تدور حول جميع منشورات المدونة. يُمكنها احتواء أي محتوى HTML نريده. لاحظ نص frontmatter في أعلى الملف:</p><pre class="javascript ipsCode prettyprint">--- 
layout: default
title: "مدونتي الرائعة" 
bodyTag: home
---</pre><p dir="rtl" style="text-align:justify;">سيُخبر هذا Jekyll باستعمال <span style="font-family:'courier new', courier, monospace;">default.html</span> كملف تنسيق، وعرض العنوان كـ "مدونتي الرائعة".</p><p dir="rtl" style="text-align:justify;">يمكنك إنشاء صفحات دون لاحقة .html ظاهر في مسار الويب خاصتها (URL). للقيام بذلك، يكفي إنشاء مجلد باسم الصفحة المرجوة، ووضع ملف <span style="font-family:'courier new', courier, monospace;">index.html</span> داخله. مثلا، يمكن إنشاء مجلد about ووضع ملف <span style="font-family:'courier new', courier, monospace;">index.html</span> داخله. سيكون عندها مسار الصفحة على الويب من الشكل:  <span style="font-family:'courier new', courier, monospace;">yoursite.com/about.</span></p><h2 dir="rtl" style="text-align:justify;">أوراق الأنماط المتتالية (CSS) باستخدام SASS</h2><p dir="rtl" style="text-align:justify;">بوجود ملف التنسيق، فإن مدونتك تحتاج لبعض من التزيين باستخدام لغة "أوراق الأنماط المتتالية" أو CSS لجعلها تبدو في شكل أفضل. أُفضّل كتابة شفرة CSS باستخدام <a rel="external nofollow" href="http://sass-lang.com/">SASS</a> مع <a rel="external nofollow" href="http://compass-style.org/">Compass</a>، قد تُفضّل أنت طريقة أخرى أو الطريقة الكلاسيكية لكتابة CSS.</p><p dir="rtl" style="text-align:justify;">يُعتبر SASS طريقا بديلا لكتابة CSS حيث يزيد على تعبير اللغة بعض الميزات الإضافية مثل المتغيرات، الوظائف (functions أو mixins) كما يسمح لك بكتابة CSS دون الحاجة لكتابة الفاصلة المنقوطة (;) أو الأقواس المعقوفة {}. أما Compass فهو إطار عمل لـ SASS يجلب معه بعض الوظائف المفيدة (mixins) المُعرّفة مُسبقا لجعل كتابة شفرة CSS أسهل، مع إمكانية رصد تغيّرات الملفات تلقائيا لإعادة تجميعها.</p><blockquote class="ipsQuote" data-cite="اقتباس" data-ipsquote=""><p dir="rtl" style="text-align:justify;">توفر أكاديمية حسوب<a href="http://academy.hsoub.com/code/css/%D9%85%D8%AF%D8%AE%D9%84-%D8%A5%D9%84%D9%89-sass-r8/"> مدخلا إلى Sass قد يهمك الإطلاع عليه</a>.</p></blockquote><p dir="rtl" style="text-align:justify;">عند تشغيل Compass، سيقوم برصد مشروعك وتوليد ملفات CSS بناءًا على ما تقوم بكتابته في ملفات SASS. للقيام بذلك، يقوم Compass بالنظر في ملف تحت اسم <span style="font-family:'courier new', courier, monospace;">config.rb</span> ضمن ملفات مشروعك، هذا الأخير، يُخبر Compass عن مسار المجلدات التي تحتوي ملفات SASS، ومسار المجلد الذي تريده أن يحوي ملفات CSS الناتجة (المُولّدة).</p><p dir="rtl" style="text-align:justify;">إن اخترت استعمال SASS مع Compass، ستحتاج أولا إلى تنصيب Compass، عندها يمكنك أن تجعله يَرصُد تغيرات ملفات SASS الخاصة بمشروعك.</p><p dir="rtl" style="text-align:justify;">لتشغيل Compass وجعله يَرصُد ملفات مشروعك، يكفي التصفح إلى مجلد مشروعك ثم تنفيذ الأمر التالي:</p><pre class="javascript ipsCode prettyprint">compass watch</pre><p dir="rtl" style="text-align:justify;">هناك عدة طرق ومعالجات لكتابة أو توليد ملفات CSS، أنت حرُّ في اختيار ما يناسبك أكثر أو ما اعتدت عليه.</p><h2 dir="rtl">البناء فوق إطار عمل</h2><p dir="rtl" style="text-align:justify;">عند بناء المدونة، احتجت للخروج بتصميم مُتجاوب وسهل التطوير. اختصارا للوقت، اخترت أن أستعمل إحدى أُطر عمل CSS الموجودة.</p><p dir="rtl" style="text-align:justify;">في الواقع، يوجد العديد من أُطر عمل CSS متاحة على الخيار، كنت قد جربتُ سريعا بعضًا مِنهم، لكني توقفت عند إطار عمل <a rel="external nofollow" href="http://getbootstrap.com/">Bootstrap</a>. فهو إطار عمل واسع الانتشار وله مجتمع نشط ومحتوى غزير. بما أني أستعمل SASS لإدارة CSS خاصتي اخترت استعمال<a rel="external nofollow" href="https://github.com/twbs/bootstrap-sass">Bootstrap SASS</a>.</p><p dir="rtl" style="text-align:justify;">بالنظر إلى مُجلد <span style="font-family:'courier new', courier, monospace;">sass/vendor</span>، ستجد ملف <span style="font-family:'courier new', courier, monospace;">bootstrap.scss</span>. هذا الملف بدوره يتم استراده من طرف ملف <span style="font-family:'courier new', courier, monospace;">base.scss_</span> حتى يجلب فيه مُختلف أدوات ووظائف Bootstrap.</p><p dir="rtl" style="text-align:justify;">بالإضافة للتنسيقات الإفتراضية الذي يأتي بها Bootstrap، فإنه يجلب معه أيضا نظام تنسيق شبكي ومُتجاوب (grid-based layout system) عند الشروع في تنصيب مدونتي، قمت باستعمال هذا الهيكل الشبكي والاستفادة منه لتحديد أعمدة المدونة على هذا النحو:</p><pre class="ipsCode prettyprint">&lt;div class="container"&gt; 
  &lt;section class="row"&gt; 
    &lt;section class="col-md-8"&gt;
      ... 
    &lt;/section&gt; 
    &lt;aside class="col-md-4"&gt;
      ...
    &lt;/aside&gt; 
  &lt;/section&gt; 
&lt;/div&gt;</pre><p dir="rtl" style="text-align:justify;">نظام الأعمدة في Bootstrap يوفر 12 عمودًا، في المثال أعلاه، قمت بإعطاء 8 أعمدة كعرض للعُنصر <span style="font-family:'courier new', courier, monospace;">&lt;section&gt;</span> ثم 4 أعمدة كعرض لعنصر aside أما الحاوية التي بها سمة .row فهي لضمان أن كلا العنصرين التي تحويهما سيُحاذون بعضهما جنبا إلى جنب وأنّ أي محتوى إضافي يأتي بعدهما سيُدفع به إلى أسفلهما.</p><p dir="rtl" style="text-align:justify;">دليل <a rel="external nofollow" href="http://getbootstrap.com/getting-started/">الشروع في البدء</a> الخاص بـ Bootstrap يُعتبر مكانا جيدا للاطلاع على ما يُمكن لـ Bootstrap توفيره.</p><p dir="rtl" style="text-align:justify;">في الجزء الثاني من هذا الدرس، سنتعرف على كيفية إضافة لمساتنا الخاصة ونشر المدونة على الويب.</p><p dir="rtl" style="text-align:justify;"> </p><p dir="rtl" style="text-align:justify;">ترجمة -وبتصرف- للمقال <a rel="external nofollow" href="http://hop.ie/blog/your-own-blog-1/">Your Own Blog</a> لصاحبه <a rel="external nofollow" href="http://hop.ie/about">Donovan Hutchinson</a>.</p>
]]></description><guid isPermaLink="false">39</guid><pubDate>Wed, 11 Mar 2015 08:12:00 +0000</pubDate></item><item><title>&#x643;&#x644; &#x645;&#x627; &#x62A;&#x62D;&#x62A;&#x627;&#x62C; &#x625;&#x644;&#x64A;&#x647; &#x644;&#x62A;&#x639;&#x644;&#x645; &#x627;&#x644;&#x628;&#x631;&#x645;&#x62C;&#x629; &#x628;&#x640; Ruby</title><link>https://academy.hsoub.com/programming/ruby/%D9%83%D9%84-%D9%85%D8%A7-%D8%AA%D8%AD%D8%AA%D8%A7%D8%AC-%D8%A5%D9%84%D9%8A%D9%87-%D9%84%D8%AA%D8%B9%D9%84%D9%85-%D8%A7%D9%84%D8%A8%D8%B1%D9%85%D8%AC%D8%A9-%D8%A8%D9%80-ruby-r16/</link><description><![CDATA[
<p><img src="https://academy.hsoub.com/uploads/monthly_2015_03/ruby_480x300.jpg.c1aed1d4ecf161e1a037eb2745f6234b.jpg" /></p>

<p style="text-align:right;">
	رغم أنني لم أنجز بعد أي مشروع عملي بـ Ruby وما زلت مكتفيا في كل مشاريعي بالبرمجة بـ PHP، إلا أنني منذ ألقيت أول نظرة على لغة البرمجة روبي، سنة 2008، وأنا معجب بها بفضل ما تتميز به من سلاسة وقوة وما تضفيه على البرمجة من متعة. أما سبب عدم اعتمادي عليها حتى الآن في مشروع ما هو أنني لم أحتجها بعد بشكل جدي، فغالبا ما أنجز ما أريد بشكل سريع بواسطة PHP، خاصة أنه على مستوى المواقع الصغيرة، يبقى الحصول على استضافة المواقع المبرمجة بـ PHP أسهل وأرخص.
</p>

<p style="text-align:right;">
	كما هي العادة؛ الحاجة أم الاختراع. كان يوكيهيرو ماتسوموتو (Yukihiro Matsumoto) يبحث عن لغة برمجة تزيد من إنتاجيته، لغة تجعله يستمتع بالبرمجة. لم يجد، فبدأ التفكير في إبداع لغة برمجية جديدة سنة 1993 سماها <a href="http://www.ruby-lang.org/en/" rel="external nofollow">روبي Ruby</a> وأطلق أول نسخة عامة منها شهر ديسمبر 1995.
</p>

<p style="text-align: center;">
	<a class="ipsAttachLink ipsAttachLink_image" data-fileid="137" href="https://academy.hsoub.com/uploads/monthly_2015_03/ruby_480x300.jpg.4464f6921cd4b618b5c541e60493d54f.jpg" rel=""><img alt="ruby_480x300.jpg" class="ipsImage ipsImage_thumbnailed" data-fileid="137" src="https://academy.hsoub.com/uploads/monthly_2015_03/ruby_480x300.thumb.jpg.aa62149d2f61b7ba7f6a39df6d33c2df.jpg"></a>
</p>

<p style="text-align:right;">
	استفادت روبي من مميزات لغات برمجة أخرى وأتت بمفاهيم جديدة لترفع من إنتاجية المبرمجين وتشعرهم بمتعة البرمجة، فحققت اللغة بذلك نجاحا كبيرا في اليابان، لكنها رغم ذلك، وبسبب عدم ترجمة وثائقها إلى الانجليزية، لم تستطع إثارة اهتمام المبرمجين من خارج اليابان إلا سنة 2000، واحتاجت بعد ذلك لخمس سنوات أخرى قبل أن تصبح ظاهرة عالمية بعد أن جاء المبرمج الدنماركي دافيد هاينماير هانسون، سنة 2005، بإبداعه الذي غير الكثير من مفاهيم تطوير مواقع وخدمات الويب؛ إطار العمل البرمجي <a href="http://rubyonrails.org/" rel="external nofollow">روبي أون ريلز Ruby On Rails</a>.
</p>

<p style="text-align:right;">
	يقول يوكيهيرو ماتسوموتو أن لغة روبي مصممة للإنتاجية وللمرح، وهي تركز على احتياجات الإنسان، وليس جهاز الكمبيوتر: «الناس في كثير من الأحيان، ولا سيما مهندسو الحاسب الآلي، يكون تركيزهم على الكمبيوتر. إنهم يعتقدون، "من خلال القيام بذلك، فإن الجهاز سوف يعمل بشكل أسرع. من خلال ذلك، فإن الجهاز يعمل بفعالية أكثر. من خلال ذلك، فإن الجهاز سيكون ويكون ويكون" ولكن في الحقيقة نحن بحاجة إلى التركيز على البشر وعلى كيفية كتابة وفهمنا للبرامج أو تطبيقات تعمل على الجهاز. نحن السادة (البشر). هم العبيد (الجهاز).» لذلك فإن تعابير اللغة بسيطة، سهلة الفهم وأكثر إنسانية. النتيجة دائما: نصوص برمجية أنيقة، سهلة القراءة والفهم. مع متعة بلا حدود خلال البرمجة.
</p>

<h2 style="text-align:right;">
	أفضل المصادر لتعلم روبي
</h2>

<p style="text-align:right;">
	يمكنني أن أقول بأنني قرأت الكثير من كتب التقنية والبرمجة، عن لغات برمجة مختلفة، لكتاب مختلفين ومن ناشرين مختلفين. لكن أفضل كتاب -على الإطلاق- لشرح وتعليم لغة برمجية كان كتاب ”<a href="https://www.amazon.com/Beginning-Ruby-Professional-Peter-Cooper/dp/1484212797" rel="external nofollow">Beginning Ruby: From Novice to Professional</a>“، يبدأ من البدايات؛ يشرح المفاهيم الأساسية ثم يتعمق تدريجيا حتى ينقلك من مستوى المبتدئين إلى مستوى المحترفين، بأسلوب سهل وممتع. بالنسبة إليّ، لو كتب المؤلف (<a href="http://peterc.org/" rel="external nofollow">Peter Cooper</a>) أي كتاب آخر، حول التقنية أو البرمجة، فإني حتما سأشتريه مهما يكن موضوعه. هو شخص مبدع ونشيط في المجال التقني، وهو يحرر <a href="http://rubyweekly.com/" rel="external nofollow">نشرة بريدية أسبوعية عن روبي</a>، يجمع فيها أهم الأخبار، المقالات التعليمية وجديد المكتبات البرمجية الخاصة بروبي.
</p>

<p style="text-align:right;">
	بعد هذا الكتاب، يمكنك الانتقال إلى كتاب <a href="https://www.amazon.com/Programming-Ruby-1-9-2-0-Programmers/dp/1937785491" rel="external nofollow">Programming Ruby 1.9 &amp; 2.0</a> الذي يغوص عميقا في تفاصيل اللغة ويشرح وحداتها البرمجية الرئيسية جميعها. هذا الكتاب عبارة عن دليل مرجعي (reference manual) يمكنك العودة إليه في أي وقت تحتاج إلى الإلمام بتفصيلة معينة خاصة باللغة، ولا حاجة لقراءته كاملا من الغلاف إلى الغلاف.
</p>

<p style="text-align:right;">
	تزخر المكتبة البرمجية بكثير من الكتب التي تشرح لغة البرمجة روبي، لكن هاذين الكتابين يكفيان تماما لنقلك من مستوى المبرمج المبتدئ إلى الخبير المتمكن من كل تفاصيل روبي. لا حاجة لك لأن تقرأ كتبا أخرى. يمكنك قراءة وثائق المساعدة في الموقع الرسمي، ومتابعة النشرة البريدية، التي يحررها بيتر كوبر، لتبقى على إطلاع على أخبار اللغة وأبرز ما يكتب عنها.
</p>

<h2 style="text-align:right;">
	أفضل المصادر لتعلم روبي أون ريلز
</h2>

<p style="text-align:right;">
	لا شك أن الفضل في الانتشار العالمي لروبي يعود إلى الإطار البرمجي Ruby On Rails، الذي أحدث ثورة في مجال تطوير تطبيقات الويب خلال فترة الفورة التي عرفتها تطبيقات ويب 2.0، حيث ساعد الإطار كل من لديه فكرة ما، وقدرة على تعلم البرمجة -ولو قليلا- على تنفيذ الفكرة بسرعة كبيرة وإطلاق الموقع للاستخدام خلال أيام أو أسابيع معدودة.
</p>

<p style="text-align:right;">
	إذا أردت أن تلقي نظرة سريعة على إطار ريلز، وتعلمه لتنفيذ مشروع صغير، فلن تجد أفضل من كتاب ”<a href="https://www.amazon.com/Ruby-Rails-Tutorial-Addison-Wesley-Professional/dp/0134598628" rel="external nofollow">Ruby on Rails Tutorial: Learn Web Development with Rails</a>“، الذي يقدم كل ما يحتاج إليه الوافد الجديد لعالم ريلز، من تثبيت النظام إلى رفع الموقع إلى الإنترنت. <a href="https://www.railstutorial.org/book" rel="external nofollow">الكتاب متوفر للقراءة مجانا</a> من الإنترنت. أو يمكنك الاكتفاء بالدليل التعليمي المقدم من فريق ريلز <a href="http://guides.rubyonrails.org/" rel="external nofollow">Rails Guides</a>.
</p>

<p style="text-align:right;">
	حين تحتاج إلى تعميق معرفتك بريلز، أو تحترف البرمجة به، فإن الكتاب الأفضل هو ”<a href="https://pragprog.com/book/rails5/agile-web-development-with-rails-5" rel="external nofollow">Agile Web Development with Rails</a>“، الذي كان أول وأفضل كتاب يصدر عن ريلز، ولعله ما يزال الأفضل. يبدأ الكتاب مباشرة بنموذج عملي لبناء تطبيق ويب، خطوة بخطوة مع شرح كاف لكل مرحلة. ثم في الجزء الثاني من الكتاب ينقلك لتتعمق أكثر في التفاصيل الدقيقة.
</p>

<p style="text-align:right;">
	خلافا للكتب التي نوهت عنها هنا تتوفر عدد من الدروس المرئية لكل من ريلز وروبي، إضافة إلى كثير من المقالات التعليمية. لكني لم أطلع عليها، فأنا بالأساس من هواة التعلم من الكتب، لذلك لم أذكر تلك المصادر واكتفيت بذكر الكتب، التي أراها الأفضل على الإطلاق.
</p>

<p style="text-align:right;">
	تحديثات:
</p>

<p style="text-align:right;">
	14/08/2017: تم تحديث روابط الكتب لآخر الإصدارات
</p>

<p style="text-align:right;">
	04/03/2018: تقدم أكاديمية حسوب <a href="https://academy.hsoub.com/learn/ruby-web-application-development/" rel="">دورة شاملة لتعلم تطوير تطبيقات الويب باستخدام لغة Ruby</a>
</p>
]]></description><guid isPermaLink="false">16</guid><pubDate>Fri, 23 Sep 2011 21:00:00 +0000</pubDate></item></channel></rss>
