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

هشام رزق الله

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

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

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

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

    31

كل منشورات العضو هشام رزق الله

  1. نعم، يوجد العديد من الطرق في لغة بايثون لفعل ذلك فيمكنك على سبيل المثال استخدام مكتبات dll الخاصة بنظام ويندوز وذلك عن طريق استدعائها عبر مكتبة ctypes كما في المثال التالي: import ctypes ctypes.windll.user32.MessageBoxA(0, "smth", "Title", 1) ويمكنك أيضا إنشاء دالة في حالة ما أردت استخدام السطر السابق مرات عديدة كما في المثال التالي: import ctypes def windowsbox(title, text, style): ctypes.windll.user32.MessageBoxA(0, text, title, style) windowsbox('Title', 'smth', 1) أو يمكنك استخدام easygui لإنشاء النافذة كما في المثال التالي: import easygui easygui.msgbox("smth", title="title")
  2. يوجد العديد من الطرق لفعل ذلك في بايثون، وأسهل هذه الطرق هي استخدام تعليمة الطباعة print العادية لأنها تقوم بطباعة المصفوفات حسب أبعادها بشكل تلقائي دون الحاجة إلى أية معاملات أو دوال أخرى. وعند الطباعة باستخدام print سيتم تحويل المصفوفة إلى سلسلة نصية ومن ثم طباعتها كما في المثال التالي: >>> arr = [[3,2,1],[6,8,1]] >>> print arr [[3,2,1],[6,8,1]] أو يمكنك استخدام دالة pprint من مكتبة pprint كما في المثال التالي: from pprint import pprint family = {'brother1': { 'Age':2}, 'brother2': { 'Age':4}, 'brother3': { 'Age':10} } pprint(family)
  3. نعم توجد العديد من الشهادات لمشروع Metasploit ولكن الشهادة الرسمية من rapid7 أعتبرها الأفضل. الامتحان تطبيقي يجب حله في غضون ساعتين ويجب الحصول على معدل 80% للنجاح وعند بدء الامتحان لا يمكنك التوقف أو الإعادة مرة أخرى إلا لو دفعت مرة أخرى. تبلغ تكلفة الامتحان 195 دولار. الموقع الرسمي للشهادة.
  4. يوجد العديد من الطرق في لغة روبي لفعل ذلك، وأفضل هذه الطرق هي عن طريق استخدام تابع each_index ومن ثم تضع الشرط داخل select كما يظهر في المثال التالي: list = [1,2,4,3,2,3,4,2] p arr.each_index.select{|i| list[i] == 2} #[1, 4, 7] أو يمكنك استخدام توابع times أو size مع وضع الشرط في select كما في المثال التالي: list.size.times.select {|i| list[i] == 2} وتوجد طريق أخرى يمكنك استخدامها كالتالي: list.map.with_index {|a, i| a == 2 ? i : nil}.compact الطرق مرتبة من الأفضل والأسرع إلى أقل من ذلك.
  5. يوجد العديد من الطرق في لغة بايثون لفعل ذلك، وسأذكر الطرق بالترتيب حيث ستكون الطريقة الأولى هي الأفضل والأخيرة في الأسوأ. يمكنك التعامل مع ملف بايثون كوحدة معينة واستدعائها عن طريق التعليمة import file ولتشغيل أي جزء من الملف يمكنك تنفيذ الدالة المسؤولة عنه حيث ستُقَسِم الملف إلى دوال وأصناف يمكنك استدعائها متى تشاء. والطريقة الثانية لفعل ذلك (طريقة غير آمنة) هي عن طريق استخدام دالة execfile كما في المثال التالي: execfile('file.py') وفي النهاية إذا كنت تستخدم نظام لينكس فيمكنك تنفيذ أمر نظام عن طريق دالة system من مكتبة os كما في المثال التالي: os.system('python file.py')
  6. نعم، يوجد العديد من الخيارات التي يمكنك استخدامها لفعل ذلك في بايثون، ,وأفضل هذه الخيارات هي استخدام برنامج Uncompyle2 والذي يعمل بشكل ممتاز مع الإصدار 2.7 من بايثون والذي استطاع التفوق على بقية "مفككات ملفات .pyc “. أما الخيار الثاني فيمكنك استخدام unpyclib والذي تجده في pypi ويمكنك تثبيته بكل سهولة كالتالي: $ pip install unpyclib ومن ثم يمكنك فك ترجمة ملف .pyc كما في المثال التالي: $ python -m unpyclib.application -Dq myfile.pyc
  7. على الرغم من أن بايثون لا يدعم حلقة do.. while كما في اللغات الأخرى إلا أنه يوجد العديد من الطرق والبدائل لهذا النوع من حلقات التكرار، فيمكنك مثلا استخدام حلقة التكرار While مع الجملة الشرطة if وستبقى حلقة التكرار تدور حتى يتحقق شرط الخروج كما في المثال التالي: while True: do_smth() if out_condition: break أو يمكنك فعل العكس كالتالي: while not out_condition: do_smth()
  8. يمكنك الحصول على شهادة SecurityTube Wi-Fi Security Expert (SWSE) عبر شبكة الإنترنت وتعتبر من الشهادات القوية والمحترفة في أمن Wi-FI وينصح بها لكل شخص يريد أن يحترفها. فيديوات الدورة يمكنك الحصول عليها بشكل مجاني (حجمها حوالي 4.2 جيجا) وتتكون من فيديوات يبلغ مجموع زمنها 12 ساعة. للنجاح في هذه الشهادة يجب عليك تطبيق كل ما تعلمته لأن الامتحان تطبيقي. تبلغ تكلفة هذا لامتحان 100$.
  9. يوجد العديد من الحلول للحصول على النص بدون شيفرات HTML وجافا سكربت لكن المشكلة أن أغلب هذه الطرق قد تفتح ثغرات (خاصة من نوع XSS) في موقعك مما قد يتسبب بتسهيل اختراقك فالعديد من الباحثين الأمنيين قد وجدوا الكثير من الطرق للالتفاف حول الدوال المختلفة للحصول على النصوص. أسهل طريقة لفعل ذلك هي عن طريق استخدام دالة strip_tags المدمجة مع دجانغو كالتالي: from django.utils.html import strip_tags print strip_tags("<h1>Hi</h1>") # Hiأو يمكنك استخدام مرشح القالب كالتالي: {{ value|striptags }} حيث أن value هي شيفرة HTML. المصدر
  10. يوجد العديد من الطرق في لغة بايثون لحذف ذلك فيمكنك على سبيل المثال استخدام دالتي read و splitlines مع with open بدلا من دالة readlines كما في المثال التالي: with open(filename) as file1: list1 = file1.read().splitlines() أو يمكنك فعل ذلك بسطر واحد فقط وذلك عن طريق استخدام دالة rstrip مع حلقة التكرار for كما في المثال التالي: list1 = [line.rstrip() for line in open(filename)] أو يمكنك تقسيم السطر السابق ليصبح كالتالي: with open(filename) as file1: list1 = [line.rstrip() for line in file1]
  11. نعم، توجد طريقة لفعل ذلك في بايثون وسأقسمها على أجزاء حتى تفهمها. أولا لحذف جميع الفراغات في السلسلة النصية sent يمكنك استخدام دوال join و split كما في المثال التالي: sent = ''.join(sent.split()) وبعد ذلك لحذف آخر ثلاث أسطر من سلسلة نصية يمكنك استخدام طريقة تشريح السلسلة النصية كالتالي: sent = sent[:-3] وفي النهاية لتغيير حالة الأحرف للسلاسل النصية وجعلها كبيرة يمكنك استخدام دالة upper كالتالي: sent = sent.upper() ويمكنك أيضا دمج السلاسل النصية الثلاث مع بعضها لتكون في سطر واحد كالتالي: sent = ''.join(sent.split())[:-3].upper()
  12. يوجد عدة طرق في بايثون لحساب سرعة تنفيذ شيفرات معينة، والطريقة التي ذكرتها صحيحة وتحتاج فقط إلى حذف الوقت الثاني من الوقت الأول وستحصل على فرق الوقت بالأيام والثواني وميكرو ثانية وللحصول على الفرق بالميكرو ثانية يمكنك استخدام سمةmicroseconds للحصول على جزء ميكرو ثانية مع سمة seconds للحصول على جزء الثواني أو يمكنك استخدام دالة total_seconds() للحصول عليهما معا: from datetime import datetime start = datetime.now() # Code Here !!! end = datetime.now() # Print Diff Here time = end - start time.seconds # 4 time.microseconds # 317834
  13. نعم ولم لا، فالكثير من الأشخاص اشتروا كتبا وتابعوا فيديوهات تعليمية على الإنترنت وطبقوا ما تعلموه واجتازوا شهادات عديدة في البرمجة وإدارة الأنظمة (شهادات ردهات). يجب عليك فقط أن تقرأ عن الاختبار وما أهداف الكورسات التدريبية التي تقدمها الشركات للحصول على الشهادة ومن ثم تعلمها بشكل جيدا وأنصحك أيضا بالبحث عن نوع الأسئلة التي تأتي في الاختبارات وأمثلة منها إذا أمكن ذلك. ملاحظة: أغلب الشهادات يمكنك اجتيازها بدون دورات سابقة أو شهادات.
  14. يوجد عدّة حلول في لغة روبي لفعل ذلك تعتمد على الإصدار الذي تستخدمه، فلو كنت تستخدم الإصدار 1.8.7 أو أحدث فيمكنك في هذه الحالة استخدام توابع each_with_index.max والتي سترجع لك قائمة تحتوي على العنصر الأكبر وموقعه كما في المثال التالي: [55,33,21,1,22,4,35,27,1,17,0,0,1].each_with_index.max [55, 0] أما لو كنت تستخدم إصدار أقدم من ذلك، ففي هذه الحالة أنصحك باستخدام enum_for(:each_with_index).max كما في المثال التالي وستحصل على نفس النتيجة السابقة: require 'enumerator' [55,33,21,1,22,4,35,27,1,17,0,0,1]..enum_for(:each_with_index).max [55, 0]
  15. يوجد العديد من الطرق في بايثون لفعل ذلك، فيمكنك على سبيل المثال استخدام متغير letters من وحدة string والذي سيُرجع لك سلسلة نصية تحتوي على الأحرف الكبيرة والصغيرة ومن ثم استخدام دالة choice من وحدة random عليها لاختيار حرف واحد بطريقة عشوائية كما يظهر في المثال التالي: import string, random random.choice(string.letters) 'x' كما تمتلك وحدة string العديد من المتغيرات الأخرى والتي يمكنك استخدامها مثل ascii_letters و ascii_lowercase وغيرها...
  16. لا لم يتم إلغاء مشروع Pylons وسيستقبل التحديثات الجديدة دون مشاكل، لكن الفرق بينه وبين مشروع Pyramid هو أن هذا الأخير ظهر نتيجة دمج مشروعي Pylons و Repoze.bfg مما أدى إلى إحداث مشروع أقوى وأكثر سهولة وأوضح عند الكتابة. لذلك أنصحك باستخدام Pyramid عند انتقالك لأنه مستقبل مشروع Pylons.
  17. المشكلة أنك استخدمت دالة add ولكن في بايثون تعتبر كائنات set الداخلية قابلة للتغيير (mutable)، ولحل هذه المشكلة أنصحك باستخدام دالة frozenset للـ sets الداخلية. ولفعل ذلك، لنفترض أن لديك القوائم التالية وتريد تحويلها إلى set من مجموعة sets: tab = [[5, 4, 5], [1, 2], [], [1, 9, 5], [1, 2, 3, 4]] فيمكنك تحويلها بكل سهولة عن طريق استخدام هذا السطر: tab1 = set(frozenset(i) for i in tab)
  18. يوجد العديد من النصائح التي يجب عليك اتباعها حتى لا ترسب في امتحانك الأول، فيجب عليك أن تزيد من ممارستك قبل الامتحان لأنه بالممارسة سوف تتعلم وتحفظ الكثير. ونصيحتي الثانية أن تقرأ ما طُلب منك بهدوء وأن تعيده قراءته أكثر من مرة بتركيز لأن الكثير يخطئون في فهم الأسئلة. ونصيحتي الثالثة عند حاجتك لأي مساعدة لا تنس استخدام الأمر man ففي كورس ردهات الرسمي يوجد فصل كامل عن كيفية الحصول على المساعدة وعلى أمر man وذلك لأهميتها في امتحان وفي الاستعمالات اليومية. ونصيحتي الأخيرة أن تقسم وقتك جيدا قبل البدء بإنجاز الاختبار، فابدأ بالأسئلة السهلة وأجعل الأسئلة الصعبة في نهاية الاختبار، لأن الكثير لا يتمكنون من إنهاء الامتحان في الوقت المناسب. بالتوفيق في الاختبار
  19. يوجد عدة طرق في روبي لفعل ذلك، فيمكنك على سبيل إنشاء دالة عن طريق استخدام التعابير النمطية لحذف جميع الحروف واستبدال الرموز برمز _ كما وضعته في مثالك، وهذا سيكون كالتالي: def sanitize_filename(filename) returning filename.strip do |name| name.gsub!(/^.*(\\|\/)/, '') name.gsub!(/[^0-9A-Za-z.\-]/, '_') end end ويمكنك أيضا استخدام هذه الطريقة أيضا: def sanitize_filename(filename) fn = filename.split /(?<=.)\.(?=[^.])(?!.*\.[^.])/m fn.map! { |s| s.gsub /[^a-z0-9\-]+/i, '_' } return fn.join '.' end أما لو كنت تستخدم ريلز فإن هنالك حل أسهل بكثير وذلك عن طريق استخدام تابع parameterize كما في المثال التالي: "my§document$is°° very&interesting___thisIs%nice445.doc.pdf".parameterize
  20. بالنسبة للغة بايثون، فإنه يتم ترجمة الشيفرة المصدرية للملفات قبل التنفيذ (ملفات .pyc) ولذلك فإنه عند تشغيل سكربت أو برامج بايثون فإنها تعمل بكامل سرعتها، والبطء الوحيد (البسيط للغاية) الموجود فإنه يحدث عند ترجمة البرنامج أول مرة. أما بالنسبة للعديد من اللغات المترجمة الأخرى فإن التعليقات تبطئ من عملها بنسبة ضئيلة للغاية إلى درجة أنك لا يمكن أن تشعر بها في الغالب.
  21. يوجد العديد من الطرق في بايثون لفعل ذلك، فيمكنك على سبيل المثال استخدام دالة requests.get لتنزيل الملف ودالة copyfileobj من مكتبة shutil للحفظ إلى ملف كما في المثال التالي: import requests import shutil r = requests.get(settings.STATICMAP_URL.format(**data), stream=True) if r.status_code == 200: with open(path, 'wb') as f: r.raw.decode_content = True shutil.copyfileobj(r.raw, f) أما بالنسبة إلى الملفات الكبيرة فانصحك بالدوران حول الاستجابة (response) بعد تقسيمها إلى أجزاء ومن ثم كتابة الأجزاء في ملف كالتالي: with open('output.jpg', 'wb') as handle: response = requests.get('http://www.example.com/image.jpg', stream=True) if not response.ok: # Something went wrong for block in response.iter_content(1024): handle.write(block)
  22. يوجد العديد من وحدات ومكتبات في لغة بايثون لمراقبة تغييرات نظام الملفات خاصة على نظام لينكس الذي يملك أغلب هذه الوحدات والتي من بينها وحدة pyinotify والتي تعمل على الإصدار 2.6 من نواة لينكس فقط. أما لو أردت حل يعمل على جميع الأنظمة فأنصحك بمكتبة watchdog لمراقبة المجلدات والمسارات.
  23. يوجد عدة طرق لفعل ذلك في روبي، والطريقة التي وضعتها شبه صحيحة، ما عليك سوى أن تحذف علامة التعجب بعد tr ليعمل السطر مثلما تريده كما في المثال التالي: 1.9.3-p0 :010 > str= " John Smith Beer " => " John Smith Beer " 1.9.3-p0 :011 > str.downcase.tr(" ", "_") => "__john___smith_beer_" وهنالك حل آخر أفضل من الحل الذي وضعته والذي يقلل من الفراغات والاستبدالات كما في المثال التالي: 1.9.3-p0 :010 > str= " John Smith Beer " => " John Smith Beer " 1.9.3-p0 :012 > str.squish.downcase.tr(" ","_") => "john_smith_beer" ملاحظة: المثال السابق يعمل على ريلز.
  24. يوجد عدة طرق في روبي وريلز لفعل ذلك، والمثال الذي وضعته شبه صحيح، يحتاج إلى تعديل بسيطة عن طريق استبدال الأقواس بالمعقفات وإضافة رمز * كما في المثال التالي: <%= [*5..30].sample %> أو يمكنك استخدام تابع rand لفعل نفس الشيء كما في المثال التالي: <%= rand(5..30) %> أما في روبي، فيمكنك استخدام تابع rand أيضا وذلك عن طريق القيام بعملية إضافة العدد الأصغر إلى rand(الأكبر-الأصغر) كما في المثال التالي: 5 + rand(25)
  25. يوجد عدة طرق حديثة لتنسيق السلاسل النصية في بايثون، فيمكنك على سبيل المثال استخدام دالة format للتنسيق كما في المثال التالي: "({:d} goals, ${:d})".format(self.goals, self.penalties) أما لو كان كل من المتغيرين goals و penalties من نفس النوع (أعداد صحيحة) فيمكنك اختصار السطر السابق إلى التالي: "({} goals, ${})".format(self.goals, self.penalties) وبما أن جميع المعاملات هي من مجال self فهنالك طريقة تمكنك من فعل نفس المثال السابق لكن بمعامل واحد فقط مرتين كالتالي: "({} goals, ${})".format(self.goals, self.penalties)
×
×
  • أضف...