الحياة قصيرة اذن انت بحاجة لبايثون

برمجة بايثون تطوير مواقع و أشياء أخرى

اعزف ترنيمة ماريو بالبايثون !!!

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

import winsound

nota = ( (659, 125),(659, 125),(32400, 125),(659, 125),(32400, 167),(523, 125), (659, 125),(32400, 125),(784, 125),(32400, 375),(392, 125),(32400, 375), (523, 125),(32400, 250),(392, 125),(32400, 250),(330, 125),(32400, 250), (440, 125),(32400, 125),(494, 125),(32400, 125),(466, 125),(32400, 42), (440, 125),(32400, 125),(392, 125),(32400, 125),(659, 125),(32400, 125), (784, 125),(32400, 125),(880, 125),(32400, 125),(698, 125),(784, 125),(32400, 125) ,(659, 125),(32400, 125),(523, 125),(32400, 125),(587, 125),(494, 125),(32400, 125), (523, 125),(32400, 250),(392, 125),(32400, 250),(330, 125),(32400, 250),(440, 125), (32400, 125),(494, 125),(32400, 125),(466, 125),(32400, 42),(440, 125),(32400, 125), (392, 125),(32400, 125),(659, 125),(32400, 125),(784, 125),(32400, 125),(880, 125), (32400, 125),(698, 125),(784, 125),(32400, 125),(659, 125),(32400, 125),(523, 125), (32400, 125),(587, 125),(494, 125),(32400, 375),(784, 125),(740, 125),(698, 125),(32400, 42) ,(622, 125),(32400, 125),(659, 125),(32400, 167),(415, 125),(440, 125),(523, 125),(32400, 125) ,(440, 125),(523, 125),(587, 125),(32400, 250),(784, 125),(740, 125),(698, 125),(32400, 42),(622, 125) ,(32400, 125),(659, 125),(32400, 167),(698, 125),(32400, 125),(698, 125),(698, 125),(32400, 625),(784, 125) ,(740, 125),(698, 125),(32400, 42),(622, 125),(32400, 125),(659, 125),(32400, 167),(415, 125),(440, 125),(523, 125) ,(32400, 125),(440, 125),(523, 125),(587, 125),(32400, 250),(622, 125),(32400, 250),(587, 125),(32400, 250),(523, 125) ,(32400, 1125),(784, 125),(740, 125),(698, 125),(32400, 42),(622, 125),(32400, 125),(659, 125),(32400, 167),(415, 125) ,(440, 125),(523, 125),(32400, 125),(440, 125),(523, 125),(587, 125),(32400, 250),(784, 125),(740, 125),(698, 125),(32400, 42) ,(622, 125),(32400, 125),(659, 125),(32400, 167),(698, 125),(32400, 125),(698, 125),(698, 125),(32400, 625),(784, 125),(740, 125) ,(698, 125),(32400, 42),(622, 125),(32400, 125),(659, 125),(32400, 167),(415, 125),(440, 125),(523, 125),(32400, 125),(440, 125), (523, 125),(587, 125),(32400, 250),(622, 125),(32400, 250),(587, 125),(32400, 250),(523, 125) )

for i in nota :

     winsound.Beep(i[0],i[1])

دالة العزف Beep تقع في موديول winsound  تأخذ كمدخلات  ،  تردد الصوت بالهرتز ، و مدة تنفيذ الصوت بالملي ثانية ,

بالنسبة للنوتة مأخوذة من هنا

معلومات أكثر عن winsound

مايجب أن تعرفه عن الوقت في بايثون

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

منها وحدة time التي سنتناول بعض دوالها (functions) بالشرح .

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

1- بداية التأريخ “epoch “ :بالطبع لا نقصد بها ميلاد المسيح و لا الهجرة النبوية ، بل هي بداية التأريخ لأنظمة الحاسوب أو التاريخ الذي يساوي الزمن عنده الصفر بالنسبة لنظام يونيكس epoch = 1 jan 1970 12 :00 am

قد تتسائل عن كيفية التعامل مع التواريخ قبل هذا التاريخ أو للمستقبل البعيد ، لا تخف فهناك مكتبة خارجية غير مضمنة مع بايثون تمكننا من ذلك اسمها mxDateTime ,

2-UTC أو GMT : باختصار هو الوقت عند خط طول 0 درجة المار بغرينيتش ، و يستعمل كمرجع للوقت فمثلا الوقت في الجزائر عند لحظة ما هو GMT+1 :00

3-التوقيت الصيفي DST Daylight saving هو تغيير التوقبت الرسمي في بلاد ما لعدة أشهر من كل سنة .(معمول به في الدول المتقدمة) يتم إعادة ضبط الساعات الرسمية في بداية الربيع , حيث تقدَّم عقارب الساعة بساعة كاملة. أما الرجوع إلى التوقيت العادي, أي التوقيت الشتوي, فيتم في موسم الخريف ، الهدف من زيادة ساعة للتوقيت الرسمي هو تبكير أوقات العمل لأن النهار يطلع مبكرا أثناء فصل الصيف

بالنسبة لوحدة الوقت في بايثون يجب علينا معرفة ما يلي :

ان قيمة الوقت تمثل بطريقتين على حسب الدالة المستعملة :

1- سلسلة من تسعة أرقام على الشكل التالي أو مايسمي بهيكلية الزمن struct_time

(2000, 11, 30, 0, 0, 0, 3, 335, -1)

كما تلاحظ فهي تعني على التوالي

(دعم التوقيت الصيفي ، رقم اليوم من السنة ، رقم اليوم من الأسبوع ، الثواني ، الدقائق،الساعة،اليوم،الشهر، السنة)

2-رقم عشري (بالفاصلة ) يمثل عدد الثواني منذ بداية الزمن(epoch)

أهم دوال هذه الوحدة هي

time.time() لمعرفة الزمن بالثواني ،

time.gmtime(): تستعمل هذه الدالة لتحويل الوقت بصيغة الثواني الى صيغة هيكلية الزمن المذكورة انفا ، حسب توقيت غرينيتش

لمعرفة بداية الـتأريخ في نظامك استعمل الدالة (time.gmtime(0

time.localtime() :تستعمل هذه الدالة لتحويل الوقت بصيغة الثواني الى صيغة هيكلية الزمن المذكورة انفا ، حسب التوقيت المحلي

أما لمعرفة الوقت المحلي time.localtime() بدون بارامترات

مثلا الوقت المحلي في الجزائر يساوي غرينيتش زائد ساعة فالدوال السابقة ستعمل كالتالي

>>> time.localtime()

(2011, 7, 15, 17, 16, 24, 4, 196, 1)

>>> time.gmtime()

(2011, 7, 15, 15, 16, 31, 4, 196, 0)

أما المتغير time.timezone فيعطينا الفرق بين الزمن المحلي و غرينيتش بالثواني في مثالنا السابق ستعطينا ناقص 3600 ثانية أي يلزمنا الرجوع ساعة كاملة الى الغرب لنوافق خط غرينيتش

لمعرفة ان كان نظامك يعمل وفق التوقيت الصيفي استعمل المتغير time.daylight الذي لن يساوي الصفر في حالة الايجاب

maketime() تعمل هذه الدالة عكس الدالة localtime() يعني انها تأخذ الوقت بصيغة struct_time وتحوله لصيخة الثواني .

بايثون و البريد الالكتروني

من منا لا يملك بريدا الكترونيا ، سواءا كان استعماله للتراسل والتواصل أو للتسجيل في شتى خدمات الإنترنت و الويب .

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

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

في الحقيقة توجد عدة بروتوكولات للتعامل مع خوادم البريد الإلكتروني ولكن أشهرها

1-   الأول لقراءة البريد ويسمى POP

2-   اما الثاني فهو لارسال البريد و يسمى SMTP

بروتوكول مكتب البريد ، أو Post Office Protocol ،  POPاختصارا هو بروتوكول (طريقة تواصل بين خادم و عميل Client and Server) يستخدم لقراءة البريد الإلكتروني من خادم بريد الكتروني ، سيرفر ،

توجد منه عدة نسخ: POP1,POP2,POP3,POP3S.

يهمنا منها الأخيرين فقط ، POP3   و POP3S   حيث يختلف هذا الأخير عن الأول أنه يوفر الحماية للاتصال باستخدام خوارزمية SSL

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

أما خادمنا هنا فهو أي خادم بريد الكتروني يدعم بروتوكول POP (Hotmail  ,  Gmail,yahoo,، مكتوب ، …) و اليك الخطوات التي يقوم بها العميل

(Ms Outlook ; MailSender , …) :

1-   يقوم العميل بالاتصال

2-   يتلقى رسالة ترحيب من السيرفر

3-   يقوم العميل بتعريف نفسه USER;PASS

4-   بعد الولوج يستطيع العميل استعمال أوامر POP  لقراءة ، حذف أو عرض الرسائل

5-   الخروج و إنهاء الجلسة

مجموعة أوامر POP المهمة :

الأمر

شرح الأمر

STAT

يعطينا عدد الرسائل و حجم مجموع الرسائل بالبايت

LIST

يعطينا قائمة تتكون من رقم الرسالة و حجم الرسالة بالبايت

RETR n

يعطينا نص الرسالة رقم n

DELE n

يقوم  بحذف الرسالة رقم n

QUIT

انهاء جلسة pop باغلاق الاتصال مع السيرفر

مثال تطبيقي باستخدام Python :

من اجل التعامل مع بروتوكول POP  يوفرلن بايثون مكتبة رائعة لهذا الغرض تسمى poplib .

ستحتاج لاعدادات خادم  pop  الذي تملك حسابا عنده ، و لنأخذ Gmail  كمثال :

1-   عنوان الخادم :pop.gmail.com

2-   اسم المستخدم : you_account_name@gmail.com

3-   كلمة المرور : your_pass

اما الان اليك البرنامج التالي :

import poplib

pop = poplib.POP3_SSL(‘pop.gmail.com’)

pop.user(‘you_account_name@gmail.com’)

pop.pass_(‘your_pass’)

message_count, mailbox_size = pop.stat()

pop.quit()

print message_count, mailbox_size

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