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

هشام رزق الله

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

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

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

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

    31

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

  1. هذا الرمز هو الفاصل بين المفاتيح والقيم عند عرض الهاش (hash) بطريقة حرفية، فالهاش لديها الصياغة التالية: {key1 => value1, key2 => value2, …} لكن عند استخدامها كمعامل أخير لدالةـ فيمكنك التخلص من المعقفين ليصبح كالتالي: f(:a => 1, :b => 2) حيث أن f دالة تأخذ معامل واحد والذي هو في هذه الحالة هاش يملك المفاتيح :a و :b والتي لديها القيم 1 و2.
  2. يوجد العديد من الطرق لفعل ذلك في لغة بايثون، فيمكنك على سبيل المثال استخدام طريقة تشريع السلسلة النصية بعد استخدام دالة join كما في مثالك لإنشاء قائمة جديدة كما في المثال التالي: >>> x = "abcdefghijklm" >>> x[0::2] #0. 2. 4... 'acegikm' >>> x[1::2] #1. 3. 5 .. 'bdfhjl' >>> [i+j for i,j in zip(x[::2], x[1::2])] # zip makes (0,1),(2,3) ... ['ab', 'cd', 'ef', 'gh', 'ij', 'kl'] أعتقد أن هذه هي أفضل إجابة لسؤالك. ومن الطرق الأخرى أيضا استخدام دالة izip من وحدة itertools للدمج بالتساوي كما في المثال التالي: >>> import itertools >>> s = 'abcdefgh' >>> si = iter(s) >>> [''.join(each) for each in itertools.izip(si, si)] ['ab', 'cd', 'ef', 'gh'] أو عن طريق السطور التالي: >>> import itertools >>> s = 'abcdefgh' >>> si = iter(s) >>> map(''.join, itertools.izip(si, si)) ['ab', 'cd', 'ef', 'gh']
  3. نعم، هنالك مكتبات عديدة في بايثون والتي تُمكنك من تحليل وقراءة ملفات XLS فعلى الرغم من عدم وجود -حسب علمي- مكتبات مدمجة لفعل ذلك إلا أنه هنالك العشرات من المكتبات الخارجية مثل مكتبة xlrd التي أُنشئت خصيصا لملفات xls. أما بالنسبة لملفات xlsx والتي يتم إنشائها من قبل Excel 2007+ فأنصحك باستخدام مكتبة OpenPyXL. للمزيد من المكتبات أنصحك بالإطلاع على هذا الموقع.
  4. يوجد العديد من الطرق لفعل ذلك في بايثون، لكن الخطأ في المثال الذي وضعته هو أنه لا يمكنك الخلط بين عملية التكرار وreadline، بل يجب استخدام كل واحدة منهما بطريقة منفصلة واستبدال for بحلقة تكرار while كما في هذا المثال: while True: line1 = f.readline() line2 = f.readline() if not line2: break # EOF ... أو يمكنك استخدام دوال مكتبة itertools مع حلقة تكرار for كما في المثال التالي: import itertools with open('a') as f: for line1,line2 in itertools.izip_longest(*[f]*2): print(line1,line2) إذا كان هنالك عدد فردي من الأسطر في الملف فستحصل في السطر الثاني على None في الدورة الأخيرة لعملية التكرار.
  5. نعم توجد العديد من طرق لفعل ذلك في لغة روبي، فيمكنك على سبيل المثال استخدام دوال مكتبة URI لإنشاء دالة خاصة بك للتأكد من محتويات السلسلة النصية حيث سترجع رسالة خطأ إذا لم تكن رابط كما في المثال التالي: def uri?(string) uri = URI.parse(string) %w( http https ).include?(uri.scheme) rescue URI::BadURIError false rescue URI::InvalidURIError false end هذا المثال بسيط للغاية، ومن فوائد استخدام URI أيضا أنه يمكنك استخدام التعابير النمطية لإجراء عمليات تحقق أكثر تعقيدا.
  6. نعم هنالك دالة path.isdir() من مكتبة os للتحقق من الملف ما إذا كان مجلدا أو path.isfile() من نفس المكتبة للتحقق ما إذا كان الملف. على الرغم من ذلك، تذكر أن هنالك أنواع أخرى من البيانات الموجودة على شكل ملفات، مثل ملفات روابط الاختصارات والتي يمكنك التأكد منها عن طريق دالة path.islink() من مكتبة os وبالإضافة إلى ذلك فإن كل الدوال السابقة سترجع False إذا كان الملف غير موجود لذلك من المستحسن أن تتأكد من وجود الملفات عن طريق استخدام دالة path.exists() من نفس المكتبة.
  7. هنالك العديد من الطرق لفعل ذلك في بايثون، والطريقة التي وضعتها ليس خاطئة تماما بل يمكنك تعديلها لتعمل لك بدون مشاكل، فمثلا غيّرها إلى التالي: if (datetime.now() - self.timestamp) > timedelta(seconds = 100) أو إلى السطر التالي: if (datetime.now() - self.timestamp) > timedelta(minutes = 100) و يمكنك أيضا استخدام طرق أخرى فيمثلا يمكنك استخدام دوال timedelta من مكتبة datetime ومن ثم تحويل عناصر المقارنة حسب الأيام أو الساعات أو أية مدة أخرى كما في الأمثلة التالية: >>> from datetime import datetime, timedelta >>> then = datetime.now() - timedelta(hours = 2) >>> now = datetime.now() >>> (now - then) > timedelta(days = 1) False >>> (now - then) > timedelta(hours = 1) True
  8. يوجد العديد من الطرق لفعل ذلك في لغة بايثون، فإذا كنت تستخدم الإصدار الثاني منه، يمكنك استخدام حلقة التكرار for مع الجملة الشرطية بدلا من filter كما في المثال التالي: >>> L = [0, 23, 234, 89, None, 0, 35, 9] >>> [x for x in L if x is not None] [0, 23, 234, 89, 0, 35, 9] وهنالك طريقة أخرى باستخدام filter لكنني لا أنصح باستخدامها وهي كالتالي: >>> from operator import is_not >>> from functools import partial >>> L = [0, 23, 234, 89, None, 0, 35, 9] >>> filter(partial(is_not, None), L) [0, 23, 234, 89, 0, 35, 9] أما لو كنت تستخدم الإصدار الثالث من بايثون، فيمكنك في هذه الحالة استخدام دوال list وfilter لحذف None كما في المثال التالي: >>> L = [0, 23, 234, 89, None, 0, 35, 9] >>> list(filter(None.__ne__, L)) [0, 23, 234, 89, 0, 35, 9]
  9. نعم تعتبر هذه الشهادة من أفضل شهادات لينكس لكنها ليست الأفضل، فإذا كنت تبحث عن شهادات احتراف التعامل مع لينكس فأنصحك بشهادات ردهات. لا تتطلب هذه الشهادات أية متطلبات سابقة من شهادات لكن يجب أن تكون لديك خبرة لا تقل عن سنة في لينكس وتتكون هذه الشهادة من اختبارين بكلفة 188$ لكل اختبار ويحتوي كل واحد منها على 60 سؤال في 90 دقيقة فقط. مواضيع الاختبار ستكون حول أوامر لينكس الأساسية وتثبيت التوزيعات والتعامل مع الملفات والمستخدمين والشبكات بالإضافة إلى إدارة النظام بشكل عام.
  10. يوجد العديد من الطرق في روبي لفعل ذلك، بل إن هنالك تابع لعكس محتوى السلسلة النصية وهو تابع reverse! والذي يمكنك استخدامه بسهولة كما في المثال التالي: $ a = "abc" $ a.reverse! $ puts a cba وإذا أردت فعل ذلك بشكل يدوي عن طريق استخدام حلقة التكرار فيمكنك فعل ذلك كالتالي على الرغم من أنني أنصحك بعدم فعل ذلك لأن هذه الطريقة أطول وأبطئ من الطريقة الأولى: class String def reverse_inplace! half_length = self.length / 2 half_length.times {|i| self[i], self[-i-1] = self[-i-1], self[i] } self end end
  11. نعم، يوجد في بايثون الكثير من الطرق لفعل ذلك، وحسب علمي فإن أفضل هذه الطرق هي عن طريق استخدام وحدة PIL (Python Image Library). ولفعل ما تريده ستحتاج إلى استخدام تابع load على كائن الصورة والذي سيرجع لك كائن وصول للبيكسل (pixel access object) والذي يمكنك التعامل مع كأنه مصفوفة كما في الأمثلة التالية: from PIL import Image im = Image.open("dead_parrot.jpg") #Can be many different formats. pix = im.load() print im.size #Get the width and hight of the image for iterating over print pix[x,y] #Get the RGBA Value of the a pixel of an image pix[x,y] = value # Set the RGBA Value of the image (tuple) وإذا لم تعجبك هذه الوحدة يمكنك استخدام مكتبة ImageDraw والتي تملك الكثير من API لإنشاء الصور.
  12. حدثت لي هذه المشكلة منذ مدة وقمت بحلها عن طريق تثبيت مكتبة psycopg2 كالتالي: نزّل أولا حزمة البرنامج من هذا الرابط ومن ثم فك ضغطه وثبته عن طريق السطر التالي: python setup.py install أو يمكنك تثبيته بكل سهولة باستخدام easy_install أو pip عن طريق كتابة الأسطر التالية: easy_install psycopg2 pip install psycopg2 وبعد ذلك لن تنقصك سوى الإعدادات التي يمكنك تعديها عن طريق الملف settings.py لتصبح كالتالي: DATABASES = { 'default': { 'ENGINE': 'django.db.backends.postgresql_psycopg2', 'NAME': 'db_name', 'USER': 'db_user', 'PASSWORD': 'db_user_password', 'HOST': '', 'PORT': 'db_port_number', } }
  13. يوجد العديد من الطرق في لغة بايثون لفعل ذلك، فيمكنك على سبيل المثال إنشاء حلقة تكرار والتأكد من كل حرف على حدة فإذا كان رقم نتجاوزه إلى الحرف الموالي وفي حالة العكس نخرج من هذه الحلقة ومن ثم نغير حالة هذا الحرف إلى حرف كبير كما في المثال التالي: >>> s = '123sa' >>> for i, c in enumerate(s): ... if not c.isdigit(): ... break ... >>> s[:i] + s[i:].capitalize() '123Sa' أو يمكنك استخدام دالة title() لفعل ذلك بكل بساطة حيث ستحول جميع الحروف السلسلة النصية إلى حالة الحروف الصغيرة ما عدا الحرف الأول كما في المثال التالي: >>> '1sandy'.title() '1Sandy' >>> '1bob sandy'.title() '1Bob Sandy' >>> '1JoeBob'.title() '1Joebob'
  14. نعم هنالك شهادات عالمية متخصصة في المجال التحقيق الجنائي الإلكتروني، فعلى الرغم من أن وظائف هذه الشهادات متوفرة في الغالب في الخارج أكثر من الوطن العربي إلا أن عدد متحصلي هذه الشهادات من العرب في ازدياد. وأشهر هذه الشهادات EnCase Certified Examiner (EnCE) والتي تتطلب الكثير من الدراسة وتبلغ كلفة إجراء اختبارها 200$، بالإضافة إلى شهادة AccessData Certified Examiner (ACE) وتتطلب هذه الشهادة إلى خبرة سنتين في المجال الجنائي كما أن الشهادة يجب أن يتم تجديدها كل سنتين. وفي النهاية، هنالك شهادة Certified Computer Examiner (CCE) والتي تجاوز عدد المتحصلي عليها منذ سنة 2003 1700 شخص بقليل وذلك لصعوبتها.
  15. يوجد الكثير من الدروس والمواضيع، وأنصحك أيضا بأن لا تكتفي بقراءة هذه المواضيع في الكورس الرسمي للشهادة بل حاول قراءة الكتب متنوعة الموجودة على الإنترنت لأن ذلك سيساعد أكثر وسيحسن من مستواك. أهم المواضيع هي أساسيات التعامل مع نظام لينكس بالإضافة إلى أساليب جميع المعلومات والخدمات الموجودة عند الضحية كما يجب أن تكون لديك معرفة بأهم ثغرات الأمنية مثل Buffer Overflow وغيرها وكيفية استغلالها سواء كانت على النظام أو على تطبيقات الويب بالإضافة إلى أساسيات التعامل مع المنافذ وnmap وكيفية كسر وتخمين كلمات المرور...
  16. يوجد العديد من الطرق لفعل ذلك في بايثون لكن أشهرها هي عن طريق استخدام الدالة المدمجة zip حيث سنمرر لحلقة التكرار القائمتين lat وlong (مثلا) كالتالي: for lat, long in zip(Latitudes, Longitudes): print lat, long والطريقة الشهيرة الثانية لفعل ذلك هي عن طريق استخدام حلقة تكرار map كما في المثال التالي: >>> a [1, 2, 3] >>> b [4, 5, 6] >>> for i,j in map(None,a,b): ... print i,j ... 1 4 2 5 3 6 الفرق بين الطريقتين أنه في zip يجب أن يكون طول القائمتين متساويين على عكس map، لتفهم أكثر أنظر إلى المثالين التاليين: >>> a [1, 2, 3, 9] >>> b [4, 5, 6] >>> for i,j in zip(a,b): ... print i,j ... 1 4 2 5 3 6 وهذا المثال: >>> for i,j in map(None,a,b): ... print i,j ... 1 4 2 5 3 6 9 None
  17. على الرغم من وجود الكثير من مكتبات الصوتية في لغة بايثون إلا أن أغلبها لا يدعم ملفات mp3 دون مكتبات خارجية أخرى، لذلك أنصحك إما بتحويل صيغة ملفات mp3 إلى صيغة أخرى يدعمها البايثون مثل ogg أو wav، أو باستخدام مكتبات أخرى تدعم mp3 مثل PyMedia. من الحلول الأخرى يمكنك استخدام مكتبات pygame/SDL بسبب دعمها لجميع الأنظمة ولجميع صيغ ملفات الصوتية. للمزيد من المعلومات حول مكتبات الصوت في بايثون أنصحك بالإطلاع على هذه الصفحة.
  18. يوجد العديد من الطرق في لغة بايثون لفعل ذلك، لكن من أشهر هذه الطرق وأسهلها هي عن طريق استخدام دالة path.commonprefix() من وحدة os والتي ستمرر لها المسارين في قائمة وسترجع لك سلسلة نصية تحتوي على المسار المشترك كما في المثال التالي: >>> print os.path.commonprefix(['/usr/var/log', '/usr/var/security']) '/usr/var' >>> print os.path.commonprefix(['/tmp', '/usr/var']) # No common prefix: the root is the common prefix '/' أو يمكنك استخدام دالة path.relpath من مكتبة os والتي سترجع لك مسار ملف نسبي إما من المجلد الحالي أو من مجلد آخر اختياري كما في المثال التالي: >>> from os.path import relpath >>> relpath('/usr/var/log/', '/usr/var') 'log' >>> relpath('/usr/var/log/', '/usr/var/sad/') '../log'
  19. تعتبر هذه الشهادة من أشهر الشهادات التطبيقية في مجال الهكر الأخلاقي، وستتعلم من خلال الكورسات والدورات عند التحضير لهذه الشهادة العديد من الطرق الاختراق والمعرفة الأمنية وتركز هذه الشهادة على التطبيق بدلا من الكتابة والاختيارات لدى الشهادات الأخرى. معلومات عن الامتحان: الامتحان تطبيقي عملي.زمن الامتحان 24 ساعة فقط.درجة النجاح في الامتحان هي 70.الامتحان يتكون من 5 أجهزة يجب اختراقها.أسئلة الامتحان وباقي معلوماته سيتم إرسالها عبر البريد الإلكتروني.سعر الشهادة وحدها 60 دولار ويمكنك أيضا الحصول على الدورة الكاملة بالإضافة إلى معمل للتجارب بأسعار ما بين 800 دولار إلى 1150 دولار. الموقع الرسمي للشهادة
  20. يوجد العديد من الطرق في لغة روبي لفعل ذلك، فيمكنك على سبيل المثال استخدام عامل باقي القسمة "%” كما في المثال التالي: modulus = 208 % 11 #=> 10 أو يمكنك استخدام تابع modulo كما في المثال التالي: modulus = 208.0.modulo 11 #=> 10.0 كما يمكنك استخدام تابع divmod والتي ستُرجع لك قائمة تحتوي على ناتج القسمة وباقيها كما في المثال التالي: quotient, modulus = 208.divmod(11) #=> [18, 10] وهذه الطريقة تعمل أيضا في حالة كان القاسم أو المقسوم عدد حقيقي كهذا المثال: 208.0.divmod(11) #=> [18, 10.0] 208.divmod(11.0) #=> [18, 10.0]
  21. يوجد مثل هذا العامل في لغة بايثون على الرغم من اختلافه حسب إصدار بايثون، ففي الإصدارات القديمة كان يمكن فعل ذلك عن طريق هذه الخدعة: condition and something or something_else أما في الإصدارات الحديثة للبايثون فلقد تم إضافة صياغة ... if ... else … لتنفيذ أمر معين في حالة استيفاء الشرط وتنفيذ آخر في حالة عدم الاستيفاء كما في المثال التالي: something if condition else something_else
  22. يوجد العديد من الطرق لفعل ذلك في بايثون وأسرع هذه الطرق عن طريق استخدام دوال np.empty لإنشاء المصفوفة وfill لتعبئتها كما في المثال التالي: a=np.empty(n); a.fill(5)في الإصدار 1.8 من Numpy تمت إضافة دالة np.full() والتي أصبحت أفضل الطرق لإنشاء وتعبئة المصفوفات كما تظهر في المثال التالي: >>> np.full((3, 5), 7) array([[ 7., 7., 7., 7., 7.], [ 7., 7., 7., 7., 7.], [ 7., 7., 7., 7., 7.]]) >>> np.full((3, 5), 7, dtype=int) array([[7, 7, 7, 7, 7], [7, 7, 7, 7, 7], [7, 7, 7, 7, 7]])ملاحظة: أنصحك بالابتعاد عن استخدام حلقات التكرار لأنها بطيئة.
  23. يوجد العديد من الطرق لفعل ذلك في بايثون، فيمكنك على سبيل المثال استخدام طريقة تشريح القائمة وتعتبر هذه الطريقة الأكثر وضوحا لكنها لا تعمل على جميع أنواع القوائم وهي ليست مناسبة للقوائم الكبيرة: source_list[0::10] أو يمكنك استخدام دالة islice من وحدة itertools وتعمل هذه الطريقة على جميع أنواع القوائم وهي لا تستهلك الكثير من الذاكرة لكن عيبها الوحيد أنها غير مناسبة للقوائم الضخم والخطوات الكبيرة: itertools.islice(source_sequence, 0, None, 10) ومن الطرق الأخرى أيضا استخدام حلقة التكرار for كما في المثال التالي: (source_list[i] for i in xrange(0, len(source_list), 10))
  24. تعتبر شهادة CEH من أشهر الشهادات في مجال الحماية الإلكترونية، ويجب أن يملك المتقدم لهذه الشهادة خبرة في العديد من مجالات الحماية مثل حماية الشبكات والأنظمة والخوادم وأنواع الهجمات الإلكترونية المختلفة مثل DDOS وثغرات XSS وSQL Injection بالإضافة إلى معرفة بعلم التشفير والفيروسات والتروجنات وغيرها... تبلغ تكلفة إجراء اختبار هذه الشهادة 500$ وتحتوي على 125 سؤال متعدد الاختيارات يجب إنهاؤها في ظرف 4 ساعات فقط وتتطلب الشهادة درجة 70% للنجاح. الصفحة الرسمية للشهادة
  25. هنالك العديد من الطرق لفعل ذلك في روبي، فإذا كنت تستخدم الإصدار 1.8.7 أو إصدار أحدث منه فيمكنك في هذه الحالة استخدام تابع each_with_index مع max كما في المثال التالي: a.each_with_index.max[1] أو يمكنك استخدام توابع rindex وmax إذا كنت تستخدم الإصدار 1.9.2 من روبي كما يظهر في المثال التالي: arr = [4, 23, 56, 7] arr.rindex(arr.max) #=> 2 ويمكنك استخدام هذه الطريقة أيضا لكنها أبطئ من الأخريات: a = (1..12).to_a.shuffle # => [8, 11, 9, 4, 10, 7, 3, 6, 5, 12, 1, 2] a.each_index.max_by { |i| a[i] } # => 9
×
×
  • أضف...