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

هشام رزق الله

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

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

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

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

    31

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

  1. إذا كنت تستخدم الإصدار 1.4 من دجانغو فلقد تمت إضافة فلتر للقالب يدعى "template filter” وهو يفعل ما تريده بالضبط، ولاستخدامه، أضف أولا 'django.contrib.humanize' إلى إعدادات INSTALLED_APPS الموجودة في ملف settings.py وأضف كذلك {% load humanize %} إلى القالب الذي ستستخدم فلتر فيه. وبعد ذلك في قالبك، إذا كان لديك متغير datetime يدعى the_date، فيمكنك في هذه الحالة طباعته بطريقة جميلة عن طريق استخدام {{ the_date|naturaltime }} والذي سيقوم بطباعة شيء مثل "2 minutes ago”.
  2. يوجد العديد من الطرق في لغة بايثون لفعل ذلك، فيمكنك على سبيل المثال استخدام طريقة "تفهيم القاموس" باستعمال حلقة التكرار كما في المثال التالي: dict((e,0) for e in a) أما في الإصدارات الحديثة من بايثون (2.7+) فيمكنك استخدام هذه الصياغة: {e:0 for e in a} أو يمكنك استخدام دالة formkeys حيث ستمرر لها القائمة ورقم 0 لتقوم بالمطلوب كما في المثال التالي: d = dict.fromkeys(a, 0)
  3. يوجد العديد من الطرق في روبي أو في ريلز للتأكد من ذلك، لكن أشهر طريقة لفعل ذلك هي عن طريق استخدام التابع المدمج include? الذي سيرجع قيمة منطقية true أو false حسب حالة وجود العنصر في المصفوفة والذي يمكنك استخدام كالتالي: myarr.include?('me') أما الطريقة الثاني لفعل ذلك هي عن طريق التأكد من موقع هذا العنصر عن طريق تابع index فإذا أرجع لنا nil فهذا يعني أن العنصر غير موجود: myarr.index('me')
  4. توجد عدة طرق في روبي أو في ريلز للتأكد من ذلك فيمكنك على سبيل المثال تحويل جميع هذه الأرقام إلى أعداد صحيح عن طريق تابع to_i بعد أن تقوم بتحويلها عن طريق IPAddr ومن ثم تتأكد ببساطة من وجود IP الذي تريده مع المجال كما في المثال التالي: >> require "ipaddr" => true >> low = IPAddr.new("62.0.0.0").to_i => 1040187392 >> high = IPAddr.new("62.255.255.255").to_i => 1056964607 >> ip = IPAddr.new("62.156.244.13").to_i => 1050473485 >> (low..high)===ip => true أما إذا أردت التأكد من وجود IP في شبكة معينة فسيكون هذا أسهل بكثير كما في المثال التالي: >> net = IPAddr.new("62.0.0.0/8") => #<IPAddr: IPv4:62.0.0.0/255.0.0.0> >> net==="62.154.244.31" => true
  5. نعم، يوجد العديد من الطرق في لغة بايثون لفعل ذلك، ويمكنك استعمال التعابير النمطية باستخدام دالة sub من وحدة Re كما ذكرت وذلك عن طريق استخدام الرمز ^ مع نطاق الأرقام 0-9 كما في المثال التالي: import re re.sub("[^0-9]", "", "hichem313131hichem") #'313131' # أو يمكنك أيضا استخدام حلقة تكرار for مع الجملة الشرطية if في سطر واحد للتأكد من نوع كل حرف من السلسلة النصية ما إذا كان رقم أم لا كما في المثال التالي: ''.join(c for c in "hichem313131hichem" if c.isdigit()) #'313131'#
  6. يوجد العديد من الطرق لفعل ذلك بناءا على النظام الذي تستخدمه فإذا كنت تستخدم نظام لينكس فيمكنك في هذه الحالة تمرير رقم pid و 0 إلى دالة kill من os فإذا تم إصدار خطأ من نوع OSError فهذا يعني أن العملية غير موجود والعكس صحيح كما في المثال التالي: import os def check_pid(pid): try: os.kill(pid, 0) except OSError: return False else: return True أما إذا أردت طريقة تعمل على جميع الأنظمة فيمكنك في هذه الحالة استخدام دالة pid_exists() من وحدة psutil الذي سترجع true إذا كانت العملية موجودة كما في المثال التالي: import psutil pid = 162732 if psutil.pid_exists(pid): print "exists" else: print "doesn't exist"
  7. في الوقت الحالي، لا يدعم بايثون رمز %s كمعامل إلى strftime فالسبب الوحيد لاشتغال الأمثلة التي كتبتها (على الرغم من أنها تعطيك وقت خاطئ) أن بايثون يمرر المعلومات إلى نظام strftime الخاص بك والذي يستخدم المنطقة الزمنية المحلية. فالطريقة الصحيحة لفعل ذلك عن طريق بايثون 2 هي عن طريق استخدام عملية الطرح كما في المثال التالي: >>> (datetime.datetime(2012,04,01,0,0) - datetime.datetime(1970,1,1)).total_seconds() 1333238400.0 أما في الإصدار الثالث من بايثون(3.3+) فيمكنك استخدام دالة timestamp كما في المثال التالي: >>> datetime.datetime(2012,4,1,0,0).timestamp()
  8. يوجد عدة طرق في لغة روبي لفعل ذلك فيمكنك على سبيل المثال استخدام تابع tr وعن طريق استخدام التعبير النمطي حذف جميع الحروف ما عدا التي نريدها كما في المثال التالي: text = "HBHBBH89';lasij" puts text.tr('^A-Za-z0-9','') "HBHBBH89lasij" أو يمكنك استخدام التابع delete لفعل نفس الشيء كما في المثال التالي: text = "HBHBBH89';lasij" puts text.delete("^a-zA-Z0-9") "HBHBBH89lasij" في بعض الأحيان يمكنك استخدام التعبير النمطي \W لكن عيبه أن لا يحذف رمز الخط السفلي: text = "HBHBBH8_9';lasij" text.gsub /\W/, '' "HBHBBH8_9lasij"
  9. أصبحت التعابير النمطية الحديثة تسمح بإجراء تطابق معين لجزء فقط من التعبير النمطي، فإذا وضعت المحول (?ism) فسيتم تطبيقه في الجزء على اليمين من التعبير النمطي حتى يتم إيقافه عن طريق استخدام رمز الطرح – كالتالي: (?i-sm) أي أن (?i) يعبر عن بداية حالة الأحرف الغير حساسة في حين أن (?-i) يعبر عن نهاية هذه الحالة.
  10. يوجد العديد من الطرق لفعل ذلك، فيمكنك على سبيل المثال تحويل كلا التاريخين إلى timestamps ومن ثم قم بطرح التاريخ الحديث من التاريخ الأقدم ثم اضرب الناتج برقم عشوائي بين 0 و1 وبعد ذلك أضف العدد المتحصل عليه إلى التاريخ القديم وأرجع وقت timestamps إلى تاريخ وستحصل على ما تريده كما في المثال التالي: import random import time def strTimeProp(start, end, format, prop): stime = time.mktime(time.strptime(start, format)) etime = time.mktime(time.strptime(end, format)) ptime = stime + prop * (etime - stime) return time.strftime(format, time.localtime(ptime)) def randomDate(start, end, prop): return strTimeProp(start, end, '%m/%d/%Y %I:%M %p', prop) print randomDate("31/01/2015 1:30 PM", "31/03/2016 4:50 AM", random.random())
  11. نعم يمكنك استخدام رمز # للدلالة على التعليق حسب التوثيق الرسمي: أي سطر موجود في ملف متطلبات البرنامج ويبدأ برمز # سيتم التعامل معه كتعليق وسيتم تجاهله كما سيتم اعتبار أي فراغ متبوع برمز # فسيتم اعتبارها مع بقية السطر (الجزء الذي يأتي بعد الرمز) كتعليق أيضا وسيتم تجاهلها.
  12. على الرغم من وجود عدة خيارات أخرى إلا أن Pylint يبقى الأفضل بينها وأنصحك باستخدامه في مثل هذه الحالات لأنك لن تجد أفضل منه. أما في الحالة أردت استبداله فيمكنك في هذه الحالة استخدام هذه الأداة التي تُعتبر أداة متميزة للغاية لكن عيبها الوحيد أنها لا تدعم بعض الصياغات مثل try except.
  13. حسب علمي في لغة بايثون فإنه لا يوجد برنامج لإنشاء ملف تنفيذي لبرنامج/سكربت بايثون يعمل على جميع الأنظمة، فتقريبا كل نظام لديه برنامجه الخاصة، فإذا كنت تريد إنشاء نسخة تنفيذية من برنامج على نظام ويندوز فأنصحك باستخدام py2exe أو يمكنك استخدام برنامج PyInstaller الذي يعمل على نظامي ويندوز ولينكس وفي حالة نظام ماك فيمكنك استخدام Py2app.
  14. في العادة في مثل هذه الحالات، أفك ضغط البرنامج إلى مجلد مؤقت وثم من ذلك المجلد أشغل ملف setup.py باستخدام المسار المباشر إلى مثيل بايثون لـ virtualenv، فعلى سبيل المثال إذا كان virtualenv موجود في /home/username/virtualpy فيمكنك في مثل هذه الحالة استخدام هذا السطر للتثبيت: /home/username/virtualpy/bin/python setup.py install وسيتم تثبيته في المكان الذي أردته.
  15. توجد في لغة بايثون العديد من الطرق لفعل ذلك، ولكن الطريقة الرسمية هي عن طريق استخدام وحدات pwd أو grp، فللحصول على معلومات uid لمستخدم معين يكفي أن تمرر اسم المستخدم لدالة getpwnam من وحدة pwd ومن ثم استعمال سمة pw_uid أو المؤشر رقم 2 كما في المثال التالي: from pwd import getpwnam print getpwnam('hichem')[2] # or print getpwnam('hichem').pw_uid وبالنسبة إلى المجموعات فيمكنك استخدام دالة getgrnam() من مكتبة grp مع سمة gr_gid أو المؤشر رقم 2 كما في المثل التالي: from grp import getgrnam print getgrnam('family')[2] # or print getgrnam('family').gr_gid
  16. لا، هذه الدالة هي عكس eval وليست شبيهتها فحسب التعريف الرسمي للدالة فإن هذه الدالة تعرض محتويات المتغير بطريقة تشبه طريقة حفظه (وناتج هذا الأمر يمكنك استخدامه مع دالة eval لإرجاعه إلى صيغته الأصلية) ولكي تفهم أكثر أنظر إلى المثال التالي: x = 'test' repr(x) "'test'" كما ترى فإن هذه الدالة أرجعت لنا محتويات المتغير كما هي داخل سلسلة نصية. ويمكنك استخدام eval مع الناتج لإرجاعه إلى صيغته الأصلية كالتالي: eval("'test'") 'test'
  17. يوجد العديد من الطرق في لغة بايثون للفعل ذلك، وهذه الطرق تختلف من قاعدة بيانات إلى أخرى، فلو كنت تستخدم Mysql على سبيل المثال فيمكنك في هذه الحالة استخدام دوال select و func من وحدة sqlalchemy.sql.expression مع دالة rand() كما في المثال التالي: from sqlalchemy.sql.expression import func, select select.order_by(func.rand()) أو إذا كنت تستخدم قاعدة بيانات PostgreSQL أو SQLite فيمكنك استخدام دالة random() بدلا من rand() كما في المثال التالي: from sqlalchemy.sql.expression import func, select select.order_by(func.random())
  18. تعتبر هذه الشهادة من الشهادات المتميزة في المجال الأمني باستخدام لغة بايثون وتتضمن جميع المواضيع المهمة حول استخدام لغة بايثون في اختبار الاختراق والتي من بين مواضيعها الهجوم على تطبيقات الويب وبرمجة الأمنية الخاصة بالشبكات والهندسة العكسية وتحليل البرمجيات الخبيثة وغيرها من المواضيع. لا توجد نسخة مجانية من فيديوات كورس هذه الدورة كبقية شهادات securitytube بل يجب عليك شراء الدورة بمبلغ 250 دولار (دورة+شهادة) وتبلغ تكلفة الامتحان بمفرده 100 دولار. الموقع الرسمي للشهادة
  19. يوجد العديد من الطرق في بايثون لفعل ذلك، وتعتمد الطرق على الإصدار الذي تستخدمه فلو كنت تستخدم الإصدار الثاني من بايثون فيمكنك استخدام دالة find_module من وحدة imp كما في المثال التالي: import imp try: imp.find_module('amodule') ifmodulefound = True except ImportError: ifmoduleerro = False أما بالنسبة لإصدارات بايثون 3.0-3.3 فيمكنك استخدام دالة find_loader من وحدة importlib كما في المثال التالي: import importlib test = importlib.find_loader('amodule') iffound = test is not None أما بالنسبة للإصدارات الأحدث فيمكنك في هذه الحالة استخدام دالة importlib.util.find_spec كما في المثال التالي: import importlib test = importlib.util.find_spec('amodule') iffound = test is not None
  20. بالنسبة للغة بايثون فلا توجد أية مشكلة في إصدار استثناء مع __init__ فلا توجد أية طرق أخرى لمعرفة الأخطاء التي تحدث مع المؤشر وكمثال يوجد المئات من المكتبات القياسية في بايثون التي تضع استثناء على __init__. يمكنك استخدام خطأ ValueError في الاستثناء للتأكد من معاملات التي تم تمريرها. يذكر أن هذه المشكلة موجودة في لغات برمجة أخرى.
  21. هي إحدى أنواع tuple في لغة بايثون والتي تُسهّل من عملية استخدام tuple في بعض الأحيان وتحفظ لك الوقت وتسرّع من عملية الوصول إلى عناصر tuple، ولتسهيل شرح هذا النوع من tuple سأضع مثال لـ tuple عادي ومن ثم سأطوره باستخدام named tuple كما في المثال التالي: point1 = (5.3, 1.5) point2 = (2.3, 2.3) x = point1[0]-point2[1]وبعد استخدام named tuple ستصبح الشيفرة أسهل عند القراءة والفهم كما تظهر في المثال التالي: from collections import namedtuple Point = namedtuple('Point', 'x y') point1 = Point(5.3, 1.5) point2 = Point(2.3, 2.3) point1.x-point2.yأي ببساطة أن named tuple هي عملية تسمية tuple للدلالة على نوع معين من مجموعة أشياء.
  22. يوجد عدة طرق صحيحة وقصيرة منصوح بها من قبل محترفي بايثون للتأكد من قيم None و True و False وأفضلها التأكد من قيمة None أولا واختصار إجابة True بكتابة اسم المتغير مباشرة وخلافا لذلك ستكون False، ولتفهم أكثر يمكنك الإطلاع على السطور التالية: if thefunc is None: print "error" elif thefunc: print "true" else: print "false" ملاحظة: في بعض الحالات سيكون استخدام try except هو أفضل خيار لكن هذا الخيار لا يمكنك استخدامه مع جميع الدوال.
  23. تعتبر هذه الشهادة من أفضل الشهادات في مشروع Metasploit بعد الشهادة الرسمية من rapid7 وتتميز بأن امتحانها تطبيقي بشكل كامل ويمكنك تحميل فيديوات الدورة مجانا وتتضمن العديد من المواضيع في Metasploit مثل أساسياته وكتابة وحداته واستكشاف واستغلال ثغراته واستخدام أدوات أخرى مثل SET وarmitage. تبلغ كلفة الامتحان 100 دولار ويعتبر هذا السعر رخيصا مقارنة بالشهادات الأخرى. الموقع الرسمي للشهادة
  24. نعم توجد العديد من الطرق لفعل ذلك في لغة روبي، فيمكنك على سبيل المثال استخدام تابع each_slice مع تابع to_a كما في المثال التالي: a.each_slice(3).to_a أما إذا كنت تستخدم الإصدار 1.8.6 من روبي فيجب عليك استخدام enumerator ومن ثم تقسيم المصفوفة كالتالي: require 'enumerator' a.enum_for(:each_slice, 3).to_a أو إذا كنت تستخدم ريلز 2.3+ فيمكنك استخدام تابع in_groups كالتالي: a.in_groups(3, false)
  25. يوجد العديد من الحلول لمشكلة كتابة كلمات المرور في بايثون، لكن أسهل هذه الطرق وأضمنها هي عن طريق استخدام دالة getpass() من مكتبة getpass() حيث ستحمي هذه الدالة كلمة المرور من السرقة حتى لو اطلع المخترق إلى الشيفرة المصدرية للسكربت الخاص بك أو نظر إلى شاشة حاسوبك بل لا يمكنك أيضا تخمين طول كلمة المرور لأنها ستكون مخفية بالكامل.
×
×
  • أضف...