حصاد الويب (10)

1- Server Fault: هذا الموقع هو الموقع الشقيق لـStack Overflow الذي تحدثنا عنه في الحصاد الماضي، وهو موجه لمدراء الشبكات ومحترفي التقنية الذين تقع على عاتقهم مسؤولية إدارة ومتابعة أجهزة الخوادم والنظم المختلفة.

2- OurSignal: موقع يمزج بين عدة مواقع للأخبار والمفضلات الاجتماعية مثل Digg، reddit، وHacker News. طريقة عرض الأخبار تجعل هذا الموقع مختلفاً عن غيره، فكل خبر يتم تمثيله بصندوق، ويختلف حجم ولون الصندوق حسب حداثة الخبر ومدى شعبيته. يجدر بالذكر هنا أن الموقع يخفي عناوين الأخبار التي من الممكن أن تكون قد قرأتها من قبل عن طريق البحث في العناوين الموجودة في تاريخ متصفحك.

oursignal

3- Clusterify: إذا كانت لديك فكرة لمشروع برمجي صغير وتود أن تعمل عليه مع مبرمجين آخرين لديهم نفس الاهتمامات، فقد تجد ضالتك في هذا الموقع. حتى إذا لم تكن تملك الوقت الكافي للعمل على مشروعك الصغير، فبإمكانك مشاركة فكرتك لمناقشتها والحصول على بعض النصائح، وإذا كنت محظوظاً، فقد يأتي شخص آخر ليقوم بإدارة المشروع وتحويل فكرتك إلى حقيقة.

4- Essential SQL Tips for Developers: معرفة لغة SQL هي أمر ضروري لمن أراد أن يطور موقعاً مربوطاً بقاعدة بيانات. تحتوي هذه المقالة على 10 نصائح أساسية تتعلق بهذه اللغة.

5-Amazing Free Wordpress Themes for 2009: مجموعة مذهلة من قوالب ووردبرس المجانية الرائعة. ستجد في هذه المجموعة 100 قالب عالي الجودة.

إضافات الفايرفوكس (4)

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

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

هذه هي الإضافة الأكثر شعبية حسب تصنيف موقع موزيلا، وهي بالفعل تستحق ذلك. فهذه الاضافة تقوم بحجب الاعلانات في مواقع الانترنت، وهي تقوم بحجب عنوان مزود الاعلانات فلا تظهر اعلاناته في مختلف المواقع على الانترنت، وهذا يزيد من سرعة تحميل الصفحات، ويخفف من بطء التصفح، كما أنه مفيد لحجب بعض الاعلانات ذات المحتوى غير اللائق. وتتميز بسهولة استخدامها مع وجود خيارات متقدمة للمحترفين.adblock-plus

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

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

tiny-menu

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

autofill

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

colorful

أبجدية التقنية للمرة الثانية في كأس التخيل !!

بغض النظر ان كنت تحب شركة مايكروسوفت أم لا، فقد أبدعت تلك الشركة باقامة مسابقة كأس التخيل ولمدة سبع سنوات متتالية. ان كنت لا تعلم ما هي مسابقة  Imagine cup فهذا شرح مبسط عنها

كأس التخيل (Imagine Cup) هي مسابقة سنوية ترعاها مايكروسوفت وتقام على مستوى العالم. هناك عدة مجلات للمنافسة بين الفرق المشاركة، لكن مجال تصميم البرمجيات (Software Design) يعتبر الأبرز.

كل سنة، تتمحور المسابقة حول موضوع محدد. ففي السنة الماضية كان موضوع المسابقة عن البيئة “تخيل عالما حيث تمكن التقنية بيئة مستدامة” وفي هذه السنة الموضوع يتحدث عن حل المشاكل “تخيل عالماً حيث التقنية تساعد في حل أعقد المشاكل التي تواجه العالم اليوم“، موضوع شيق بالفعل! المسابقة عالمية ويشترك فيها سنويا عدة دول عربية منها: السعودية والأردن ومصر والبحرين والامارات. مايكروسوفت تصف المسابقة بأنها أنها ستنتج برمجيات ستغير العالم!!

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

مشروع جامعة الملك فهد الفائز يتحدث عن حل مشكلة الفقر،  فهو يساعد المؤسسات الخيرية في تحديد أماكن الفقراء على الخارطة، مما يسهل عملية ايصال المساعدات اليهم، أيضا المشروع يساعد في التنظيم بين تلك المؤسسات التي سيكون لديهم قاعدة بيانات مرئية، لذا كل المؤسسات ستكون على علم في حالة قيام مؤسسة ما  بخدمة عائلة فقيرة معينة،  ومن ثم تفادي أي تضارب بين الشركات الخيرية التي قد ينتج منه توزيع غير عادل على الفقراء. ليس هذا فقط،  فالأفراد أصبح لهم دورا في حل تلك المشكلة،  فبامكانهم الآن وضع علامة على بيت في الخارطة ليمثل عائلة فقيرة ليسهّل عملية البحث للمؤسسات المعنية. لمزيدا من التفاصيل حول المشروع، عبدالله كونش أحد المشاركين في المشروع يتحدث عنه في مدونته.

وأخيراً، نتمنى لجميع الفرق العربية المشاركة النجاح والفوز، فان كانت الفرق العربية بكرة القدم تخرج  من التصفيات الأولية، فنتمنى في هذه التصفيات البرمجية القادمة أن نرى فريقاً عربيا في النهائيات :)

وولفرام .. محرك البحث المعرفي !

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

مفهوم جديد

وولفرام|ألفا هو محرك بحث معرفي حسابي إن صح التعبير. عند كتابة كلمة في خانة البحث فإنه يقوم بالبحث في قواعد البيانات و يقوم بعمليات حسابية و إحصائية و يعرض لك معلومات عن بيانات و ليس بيانات فقط. بعكس جوجل،عندما تبحث عن كلمة “عدد سكان فرنسا” فإنه يقوم بعرض نتائج لصفحات تتكلم عن الموضوع و تذكر عدد السكان و قد تعطيك رابط لصفحة فرنسا في الويكيبيديا، لكن عندما نضع نفس الكلمة في وولفرام فإنه يعرض لك عدد السكان في جدول، كما يعطيك بيانات عن تزايد عدد السكان خلال الأعوام الماضية و متوسط أعمار السكان و الكثافة السكانية مرفقة برسوم بيانية. هذا هو الفرق !

ما السر ؟

من أين يستمد وولفرام قوته إذاً ؟ إنه يعتمد و بشكل أساسي على برنامج الرياضيات و الإحصاء الشهير “Mathmatica” في العمليات الحسابية. أيضا فلدى الشركة قواعد بيانات ضخمة و حاسوبين فائقي القدرة. إن استخدام “Mathmatica” يحتاج إلى خبرة و لكن وولفرام يقدم لك خدمات مشابهة و لكن بطريقة مبسطة جداً.

كيف أستفيد منه ؟

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

أنصح بمشاهدة شرح مصغر عن خصائص المحرك و كيفية عمله هنا .

تعلم أساسيات البرمجة بلغة روبي – بنى البيانات، بعض التكرار، وقليل من المنطق

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

بالإضافة إلى هذه التدوينة، تتكون السلسلة من التدوينات التالية:

  1. تعلم أساسيات البرمجة بلغة روبي – مُقدِّمة
  2. تعلم أساسيات البرمجة بلغة روبي – أهلاً بالعالم!
  3. تعلم أساسيات البرمجة بلغة روبي – ثوابت، متغيرات، وأنواع بيانات

ملاحظة: في هذا الدرس، سأستخدم النمط المبسّط من irb باستخدام الأمر التالي:

$ irb --simple-prompt

أولا: المزيد من أنواع وبنى البيانات

لنلقِ نظرة على بعض أنواع وبنى البيانات الموجودة في لغة روبي.

المصفوفات (Arrays)

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

>> greek_alphabet = Array.new
=> []
>> greek_alphabet = []
=> []

بإمكاننا التأكد من أن المصفوفة خالية باستخدام طريقة empty?:

>> greek_alphabet.empty?
=> true

المصفوفة الخالية تبدو مملة بعض الشيء. لننشئ مصفوفة جديدة، لكن دعونا نحدد عدد عناصرها بالإضافة إلى العنصر الافتراضي منذ البداية:

>> greek_alphabet = Array.new(4, '!')
=> ["!", "!", "!", "!"]

ماذا إذا أردنا أن تحتوي المصفوفة عناصر مختلفة؟

>> greek_alphabet = ['alpha', 'beta', 'gamma', 'delta']
=> ["alpha", "beta", "gamma", "delta"]

إذا، لدينا مصفوفة تحوي عدة عناصر. مالذي يمكننا فعله بها؟ هناك الكثير من الطرق الخاصة بمصفوفات روبي، لكننا سنتطرق لبعض منها. يمكننا معرفة حجم مصفوفة ما (عدد عناصرها) باستخدام أحد الطريقتين size وlength:

>> greek_alphabet.size
=> 4
>> greek_alphabet.length
=> 4

كما في العديد من لغات البرمجة الأخرى، يبدأ فهرس (index) أي مصفوفة من الرقم 0، بمعنى أنه إذا أردنا استرجاع العنصر الأول، فنستخدم الفهرس 0، وإذا أردنا استرجاع العنصر الثاني، فنستخدم الفهرس 1 وهكذا. لنجرب هذا في irb:

>> greek_alphabet[0]
=> "alpha"
>> greek_alphabet[2]
=> "gamma"

يمكننا القيام بالعكس، أي معرفة فهرس عنصر معين باستخدام طريقة index:

>> greek_alphabet.index('delta')
=> 3

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

>> mixed_array = ['delicious', 3.14, true]
=> ["delicious", 3.14, true]
>> mixed_array[-1]
=> true
>> mixed_array[-2]
=> 3.14
>> mixed_array[-3]
=> "delicious"
>> greek_alphabet[5] = "zeta"
=> "zeta"
>> greek_alphabet
=> ["alpha", "beta", "gamma", "delta", nil, "zeta"]

مالذي يمكننا فعله أيضا؟ حسنا، يمكننا فرز عناصر المصفوفة أو عكس ترتيبها:

>> primes = [7, 5, 11, 13, 3, 2]
=> [7, 5, 11, 13, 3, 2]
>> primes.sort
=> [2, 3, 5, 7, 11, 13]
>> primes.reverse
=> [2, 3, 13, 11, 5, 7]

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

>> primes.sort!
=> [2, 3, 5, 7, 11, 13]
>> primes
=> [2, 3, 5, 7, 11, 13]
>> primes.reverse!
=> [13, 11, 7, 5, 3, 2]
>> primes
=> [13, 11, 7, 5, 3, 2]

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

جداول التلبيد (Hashes)

[ملاحظة: اعتمدت على قاموس عرب آيز لتعريب مصطلح hash. هل يوجد تعريب آخر أفضل أو أوضح؟]
جداول التلبيد تشبه المصفوفات إلى حد بعيد. الفرق يكمن في أنه يمكن استخدام أي نوع من أنواع البيانات كفهرس لجدول التلبيد، وليس الأرقام فقط كما هي الحال في المصفوفات. يسمى الفهرس في جدول التلبيد بالمفتاح (key).
لنجرب المثال التالي في irb:

>> roman_numerals = { 'I' => 1, 'II' => 2, 'III' => 3, 'IV' => 4 }
=> {"II"=>2, "IV"=>4, "III"=>3, "I"=>1}
>> roman_numerals['IV']
=> 4

هناك العديد من الطرق الخاصة بجداول التلبيد في روبي، لكننا لن نناقشها هنا.

الرموز (Symbols)

الرموز هي أحد أنواع البيانات الخاصة في لغة روبي، وهي مستخدمة بكثرة في إطار Ruby on Rails. كل ما نحتاج معرفته في الوقت الحالي هو أن الرمز يبدأ بنقطتين رأسيّتين (:)، وأنه يمثل “ماسك مكان” أو معرّف. لنجرب مثالا عمليا على استخدام الرموز كمفاتيح في جداول التلبيد:

>> roman_numerals = { :I => 1, :II => 2, :III => 3, :IV => 4 }
=> {:I=>1, :II=>2, :III=>3, :IV=>4}
>> roman_numerals[:II]
=> 2

ثانياً: العوامل المنطقية

تدعم روبي العمليات المنطقية المعروفة والموجودة في معظم لغات البرمجة الأخرى. ناتج هذه العمليات هو إما true أو false (تذكروا: كل شيء في روبي هو عبارة عن كائن، حتى true وfalse!). لنجرب الأمثلة التالية في irb:

>> 1 < 2
=> true
>> 2 < = 3
=> true
>> 'ruby' == 'python'
=> false
>> (1 == 1) and (2 == 2)
=> true
>> (1 == 1) and (2 == 3)
=> false
>> (1 == 1) && (2 == 3)
=> false
>> (1 == 1) or (2 == 3)
=> true
>> (1 == 2) or (2 == 3)
=> false
>> (1 == 2) || (2 == 3)
=> false
>> not (1 == 2)
=> true
>> !(2 == 3)
=> true
>> not true
=> false

يمكن لمفسّر روبي أن ينتج قيمة منطقية من أي عبارة. لذلك، بإمكاننا مزج سلاسل نصية، أعداد، وحتى تواريخ في العبارات المنطقية. القاعدة بسيطة: false وnil ينتجان”خطأ”، وأي شيء آخر ينتج “صواب”. هذا يعني بأن العدد 0 ينتج “صواب”، مما قد يفاجئ المبرمجين بلغة C أو C++.

>> 'googol' == 10**100
=> false
>> 'ruby' and true
=> true
>> nil or false
=> false
>> 0 or nil
=> 0
>> 0 and nil
=> nil

ثالثاً: الجمل الشرطية

كأي لغة برمجة أخرى، تحتوي روبي جملا شرطية تمكّن المبرمج من تنفيذ عبارات معينة بناء على تحقق شرط (أو عدم تحققه). لنطّلع على بعض الأمثلة لعبارة if وelsif:

if number_of_open_tabs < = 5
  puts 'Light load.'
elsif number_of_open_tabs <= 10
  puts 'Medium load.'
elsif number_of_open_tabs <= 15
  puts 'Heavy load.'
else
  puts 'Take a bereak!'
end

يجدر ملاحظة أن الكلمة المفتاحية هي elsif – خمسة حروف – وليست elseif.

pi = 3.141; phi = 1.618
if phi < pi
  puts 'Keep in mind that Phi is less than Pi.'
end

من الممكن استخدام الصيغة التالية إذا كانت الشفرة التي نريد تنفيذها مكونة من عبارة واحدة:

puts 'Keep in mind that Phi is less than Pi.' if phi < pi

هناك أيضا عبارة unless، التي يمكن النظر إليها على أنها عبارة if منفية:

unless phi >= pi
  puts 'Keep in mind that Phi is less than Pi.'
end
puts 'Keep in mind that Phi is less than Pi.' unless phi >= pi

يفضّل عدم إساءة استخدام جملة unless، خصوصاً في الجمل الشرطية المعقدة، لأنها قد تربك الشخص الذي سيقرأ الشفرة البرمجية (بل إنها قد تربك كاتب الشفرة نفسه!).

رابعا: حلقات التكرار

تحتوي لغة روبي أيضاً على عدد من حلقات التكرار. أحدها هي حلقة while التقليدية:

greek_alphabet = ['alpha', 'beta', 'gamma', 'delta']
i = 0
while i < greek_alphabet.length
  puts greek_alphabet[i].capitalize
  i += 1
end
# Prints the following:
# Alpha
# Beta
# Gamma
# Delta

هناك أيضاً حلقة until. وكما أن عبارة unless هي عبارة if منفية، فحلقة until هي حلقة while منفية:

i = 0
until i > 4
 puts i
 i += 1
end
# Prints the following:
# 0
# 1
# 2
# 3
# 4

أخيراً، لننظر إلى حلقة times، وهي طريقة موجودة لدى أي كائن من النوع Integer:

5.times { |i| print i, ' ' } # Prints the following: 0 1 2 3 4

فائدة مهمة: القطع الشيفرية (Blocks)

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

greek_alphabet = ['alpha', 'beta', 'gamma', 'delta']
greek_alphabet.each do |element|
  puts element.capitalize
end
# Prints the following:
# Alpha
# Beta
# Gamma
# Delta

element هو الاسم الذي اخترناه للمتغيّر المحلي الذي يمثل العنصر الذي تتم معالجته حالياً. إذا وضعنا كل الشفرة السابقة في سطر واحد، يمكننا استخدام الأقواس بدلاً من do وend:

greek_alphabet.each { |element| puts element.capitalize }

تذكروا: هذا ليس هو الاستخدام الوحيد للقطع الشيفرية. سنعاود زيارة هذا الموضوع في درس قادم بإذن الله.

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