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

هشام رزق الله

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

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

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

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

    31

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

  1. يمكنك استخدام دالة getsizeof من مكتبة sys. الصيغة العامة للدالة: sys.getsizeof(object[, default]) ستقوم هذه الدالة بإرجاع حجم كائن معين بالبايتات، لا يهم نوع الكائن فهذه حيث سيتم حساب أحجام جميع الكائنات. الكائنات المدمجة في بايثون سترجع حجمها الصحيح أما بالنسبة للملحقات من الطرف الثالث فقد لا يتم إرجاع حجمها الصحيح. أما بالنسبة إلى default في الصيغة العامة فهي تسمح لك بتعريف القيمة التي ستُرجع إذا كان نوع الكائن لا يوفر طرق للحصول على حجمه والتي قد تسبب خطأ من نوع TypeError. أمثلة على استخدام هذه الدالة: >>> import sys >>> x = 2 >>> sys.getsizeof(x) 14 >>> sys.getsizeof(sys.getsizeof) 32 >>> sys.getsizeof('this') 38 >>> sys.getsizeof('this also') 48 المصدر
  2. أنصحك بأن تكتب قائمة من أهدافك وبعد ذلك قم بتعليقها في غرفتك (على الجدار، على الباب...) وكلما أحسست بالتعب والضجر قم بمراجعة أهدافك وستحس بتحسن. كما أنصحك بأن تخالط وأن تتعرف على أشخاص لديهم نفس طموحاتك أو أنهم يعملون في نفس مجالك فهذا الأمر سيساعدك على التقدم أكثر وسوف يشعرك بالحماس أكثر خاصة عند تنافسك مع زملائك وأصدقائك. وإذا أحسست بالضجر والتعب كثيرا فأنصحك بأخذ عطلة قصيرة (يوم أو يومان) لتجديد نشاطك.
  3. إذا أردت أن تترجمي من اللغات الأجنبية إلى اللغة العربية فيجب عليك أولا أن تتقني اللغة الأجنبية جيدا ومن ثم يجب أن تتعلمي قواعد اللغة العربية فالكثير من المترجمين لديهم الكثير من الأخطاء الإملائية والنحوية. حاولي أيضا قبل البدء في الترجمة أن تقومي بتجربة ترجمة مقالات ومن ثم اعرضيها على خبير ليصحح الأخطاء الإملائية والنحوية فيها حتى تتمكني من ترجمة المقالات بشكل صحيح. أنصح أيضا أن تختاري مجالا للترجمة مثل مجال البرمجة، التصميم، سياسة … لأن لكل مجال مصطلحاته الخاصة في الترجمة.
  4. إن الشهادة الجامعية هي التي تزيد من احترافيتك في العمل الحر خاصة إذا كان عملك الحر ضمن مجال دراستك، فالكثير من العملاء يثقون بأصحاب الشهادات الجامعية ويفضلونهم عن المستقلين الذي لا يملكون الشهادات خاصة إذا كان المستقل جديدا. يجب عليك أن توازن بين الدراسة والعمل الحرّ - مثلي – فأنا أدرس في نهار وأستيقظ باكرا لأعمل قبل ذهابي للدراسة. كما أنصحك أيضا بالدخول إلى دورات ضمن مجالك لزيادة خبرتك. بعض الأشخاص يترك الدراسة وينجح في العمل الحر وريادة الأعمال والبعض الآخر لا، لذلك من الأفضل أن تدرس حتى تحمي نفسك في حالة الفشل.
  5. سوف تجد في نظام لينكس العديد من الواجهات الرسومية المتنوعة وتبقى أشهرها GNOME و UNITY و KDE حيث تعتبر هذه الواجهات بيئات سطح مكتب متكامل بسبب امتلاكها للكثير من البرامج الإضافية مثل محرر النصوص وبرنامج عرض الصور والفيديو وغيرها. وهنالك أيضا بيئات أخرى صغيرة مثل Openbox والتي تتميز بخفتها وعدم امتلاكها لبرامج إضافية، وينصح بها للمحترفين. كما يمكن لذوي الأجهزة الضعيفة استخدام واجهة رسومية تستهلك الموارد بشكل أقل مثل XFCE وLXDE وغيرها.
  6. كلمات السر الموجودة مشفرة ولا يمكن عرضها عند استعراض ملف /etc/passwd أو غيره من الملفات. أما بالنسبة لسؤالك حول إمكانية تغيير تخزين كلمات السر في ملف مختلف عن ملف /etc/passwd فمن الأفضل أن يبقى الملف كما هو لأنه إذا حاولت تغييره بالقوة (يتطلب تغييره معرفة كبيرة للبرمجة وبنواة لينكس) فقد يتسبب بالعديد من المشاكل في نظام التشغيل.
  7. إذا وجدت أن هذا العمل سينجح في المستقبل فأنصحك بأن تقبل هذه الوظيفة، فحتى لو لم تحصل على مردود مادي لاحقا فستحصل أولا على الخبرة وثانيا على عمل ناجح تضيفه إلى معرض أعمالك والذي سوف يزيد من طلبات الوظائف لك. كما يمكنك أن تطلبي أن تكوني شريكة في المشروع حتى تضمني الحصول على المردود مادي أكبر بالإضافة إلى إمكانية أن يكبر المشروع بعد مدة وبذلك سوف تصبحين شريكة في مشروع ضخم يدر أموال أكبر.
  8. الخيوط (threads) هي عبارة عن مجموعة من التعليمات البرمجية التي تُكوّن مسار معين للعملية، فيبدو البرنامج كأنه يقوم بأكثر من وظيفة في نفس الوقت. في السنوات الأخيرة ظهر مصطلح جديد وهو multithreading متعدد الخيوط حيث أصبح بالإمكان عمل أكثر من خيط في نفس الوقت وسيقوم نظام التشغيل بالتنسيق بين هذه الخيوط أي سيكون بالإمكان تنفيذ عدة تعليمات برمجية في نفس الوقت. أما العملية (process) فأبسط تفسير لها هي أنها مجموعة من الخيوط ضمن برنامج واحدة.
  9. لأسباب عديدة يتوجه الناس إلى ريادة الأعمال والعمل الحر والتي من بينها أنهم غير راضين بوظائفهم الحالية بالإضافة إلى انزعاجهم من الروتين اليومي وقلة الراتب الشهري وغيرها … البعض الآخر يتجه إلى طريق ريادة الأعمال بسبب حبه للمغامرة والمخاطرة بالإضافة إلى فرصة الثراء إذا نجح مشروعه الريادي بعد مدة من إطلاقه. ريادة الأعمال تحتاج إلى صبر ومثابرة واستمرارية لأنه ليس من السهل أن تعمل كريادي أعمال وسوف تفشل عدة مرات قبل أن تبدأ بالنجاح.
  10. حسب رأيي من أكثر الأخطاء التي يقع فيها المدونون المبتدئون هي عدم اختيار مواضيع جيدة للكتابة، فأغلب المدونين الجدد يكررون المواضيع القديمة بدون أية إضافات وفي النهاية تكون النتيجة قلة الزيارات ومن ثم إغلاق المدونة. أضف إلى ذلك الأخطاء الإملائية والتنسيقية فالكثير من المدونين العرب لا يتعلمون السكربت الذي يدونون به سواء كان بلوجر أو ووردبريس لذلك نجد الكثير من الأخطاء في تنسيق تدويناتهم. بالإضافة إلى عدم تفاعل المدونين مع ردود الزوار قد يقلل من فرصة متابعة الزوار للمدونة وبذلك سوف تخسر زوار قد يكون متابعين أوفياء للمدونة في المستقبل.
  11. نعم هنالك العديد من الطرق في بايثون لقلب محتويات قاموس معين، ومن أسهل هذه الطرق استخدام حلقة تكرار for داخل عناصر القاموس وإنشاء قاموس جديد كما في المثال التالي: inv_map = {v: k for k, v in map.items()}كما يمكنك أيضا قلب محتويات القاموس عن طريق الأمر التالي المشابه للأمر السابق: dict((v, k) for k, v in map.iteritems())طريق أخرى للحل لكن أطول قليلا من سابقاتها: inv_map = {} for k, v in map.iteritems(): inv_map[v] = inv_map.get(v, []) inv_map[v].append(k)ملاحظة: الأمثلة السابقة تعمل على الإصدار 2.7 من بايثون فما فوق.
  12. حدثت تغييرات عديدة في الإصدار الثالث من بايثون لتسهيل العمل واختصار الوقت والجهد، ومن بين هذه التغييرات أنه تم دمج وحدة SimpleHTTPServer مع http.server، وستقوم أداة 2to3 بتكييف الاستدعاءات عندما تقوم بتحويل مصدر شيفرتك البرمجية إلى البايثون3. لقد تم تحويل الأمر السابق في بايثون 2 إلى هذا الأمر في الإصدار الجديد من البايثون: python3 -m http.server كما تم استبدال هذا الأمر: python -m CGIHTTPServer بهذا الأمر في الإصدار الجديد: python3 -m http.server –cgiالمصدر
  13. أسهل طريقة لكتابة مصفوفة داخل ملف CSV هي عن طريق استدعاء مكتبة csv وبعد ذلك نفتح الملف المطلوب ومن ثم نكتب المصفوفات بداخله كما في المثال التالي: require 'csv' CSV.open("myfile.csv", "w") do |csv| csv << ["row", "of", "CSV", "data"] csv << ["another", "row"] # ... end لاحظ أننا عندما قمنا بفتح الملف قمنا بتمرير حرف "w” إلى تابع open لأنه إذا لم نقم بتمرير هذا الحرف فسيتم تمرير RB (للقراءة فقط) تلقائيا ومن ثم سوف نحصل على رسالة خطأ عندما نحاول أن نضيف هذه المصفوفة إلى ملف CSV. المصدر
  14. يمكنك القيام بذلك عن طريق استخدام مكتبة locale ومن ثم وضع locale كـ 'en_US' الآن يمكن تغيير شكل الرقم عن طريق تابع format كما في المثال التالي: >>> import locale >>> locale.setlocale(locale.LC_ALL, 'en_US') 'en_US' >>> locale.format("%d", 1255000, grouping=True) '1,255,000' وهنالك حل آخر أسهل لكنه يعمل على الإصدار 2.7 من بايثون وهو استخدام دالة format المدمجة لتغيير شكل العدد إلى عدد بفواصل أو غيرها كما في المثال التالي: "{:,}".format(value) للمزيد من المعلومات حول هذه الدالة: التوثيق الرسمي.
  15. يعتبر استدعاء الدوال سي وسي بلس بلس من البرمجة المتقدمة بسبب تعقيدها، لكن سأحاول تفسير طريقة الاستدعاء قدر الإمكان. في البداية لنفترض أن لديك ملف foo.cpp به شيفرة برمجية بسيطة كالتالي: #include <iostream> class Foo{ public: void bab(){ std::cout << "Hello" << std::endl; } };وبما أن ctypes في البايثون يستطيع فقط التحدث مع دوال السي، فسنقوم بتعريفهم كـ extern "C" كما في المثال التالي: extern "C" { Foo* Foo_new(){ return new Foo(); } void Foo_bab(Foo* foo){ foo->bab(); } } بعد ذلك سنقوم بتجميع (compile) هذه الشيفرة البرمجية إلى مكتبة مشتركة كالتالي: g++ -c -fPIC foo.cpp -o foo.o g++ -shared -Wl,-soname,libfoo.so -o libfoo.so foo.o بعد ذلك سنقوم باستدعاء هذه المكتبة عن طريق البايثون: from ctypes import cdll lib = cdll.LoadLibrary('./libfoo.so') class Foo(object): def __init__(self): self.obj = lib.Foo_new() def bar(self): lib.Foo_bab(self.obj)ويمكنك بعد ذلك استدعاء الدوال الموجودة في المكتبة(المكتوبة بالسي بلس بلس) بسهولة كالتالي: f = Foo() f.bab() #and you will see "Hello" on the screen للمزيد من المعلومات حول مكتبة ctypes: التوثيق الرسمي.
  16. هنالك فرق بسيط بين هذين التابعين فتابع destroy_all يحذف المستخدم وجميع الكائنات المرتبطة به وأما delete_all فإنه يحذف المستخدم دون الكائنات المرتبطة به. إن delete_all تستخدم تعليمة SQL DELETE واحدة فقط أما destroy_all فانه سيقوم باستدعاء destroy() لجميع النتائج المتطابقة لشرط معين. لذلك في حالتك هذه، التي تريد فيها حذف جميع سجلات مستخدم معين في قاعدة البيانات سوف تستخدم destroy_all للحذف. المصدر
  17. هنالك عدة طرق في الروبي للقيام بعملية الاستبدال في السلسلة النصية كما في بايثون ومن أسهل هذه الطرق حقن أجزاء صغيرة من الشيفرة البرمجية المكتوبة بلغة روبي إلى السلسلة النصية عن طريق رموز خاصة مثل #{} التي سيتم استبدالها عند تشغيل البرنامج بالمتغير الموجود داخل المعقفين كما في المثال التالي: name1 = "John" name2 = "Mary" "hello, #{name1}. Where is #{name2}?" كما يمكنك أيضا استخدام الرمز %s الذي سيتم استبداله أثناء عمل البرنامج بالسلسلة النصية أو بالمتغير الذي تريده كما في المثال التالي: "hello, %s. Where is %s?" % ["John", "Mary"]المصدر
  18. هنالك فرق بسيط بين هذين الإثنين. يعمل after_create لمرة واحدة فقط بعد أن يتم إنشاء السجل للمرة الأولى. أماafter_save فهو يعمل في كل مرة تقوم فيها بحفظ السجل ومهما كان وقت الحفظ، فهو سيعمل حتى لو قمت بتحديثه بعد سنوات. فإذا أردت حفظ اسم معين في قاعدة البيانات ولا تريد تحديثه (تعديله) مرة أخرى لاحقا فأنصحك باختيار after_create أما لو أردت أن تقوم بتحديث هذا الاسم في وقت آخر ففي هذه الحالة قم باستخدام after_save. المصدر
  19. أسهل طريقة للتحويل من وإلى نظام العد الثنائي في روبي هي عن طريق استخدام التوابع المدمجة Integer#to_s(base) وstring.to_i(base). فتابع Integer#to_s(base) يقوم بتحويل عدد صحيح إلى سلسلة نصية تحمل قيمة العدد الصحيح في نظام العد المطلوب، وفي حالتنا هذه نظام العد الثنائي لذلك سنقوم بتمرير 2 إلى هذا التابع كما في المثال التالي: 9.to_s(2) #=> "1001" وفي حالة ما أردت عكس هذه العملية، أي تحويل عدد من نظام العد الثنائي إلى عدد صحيح(نظام العد العشري) فيمكنك استخدام تابع String#to_i(base) كما في المثال التالي: "1001".to_i(2) #=> 9المصدر
  20. تحتاج إلى الكثير من الصبر والمثابرة لتعلم أول لغة برمجة لك فمعدل ما تحتاجه للوصول إلى مستويات متقدمة في البرمجة بلغة معينة حوالي 9 أشهر. كثرة قراءة وكتابة الشيفرات البرمجية سيُسرع من عملية تعلمك للبرمجة كما يعلمك طرق جديد للبرمجية لذلك يُنصح ببدء المشاركة في المشاريع البرمجية بعد الانتهاء من البرمجة ولو كانت صغيرة. بعد تعلمك لأول لغة برمجة ستتمكن من تعلم لغة برمجة ثانية بسهولة وفي وقت أقصر بكثير من وقت تعلمك للغة الأولى. أنصحك ببدء تعلم لغة البايثون أو السي بلس بلس أولا قبل الانتقال إلى لغات أخرى لأن هاتين اللغتين تعتبران من أشهر لغات البرمجة في نظام لينكس وويندوز. يمكنك البدء من خلال أكاديمية حسوب بتعلم البرمجة ففيها العديد من الدروس البرمجية السهلة والمفيدة.
  21. Regex هي اختصار لـ Regular expression وتسمى باللغة العربية تعابير عادية أو تعابير نمطية، وهي تسلسل من الحروف التي تُعرف نمط للبحث، وهذه التعابير تستخدم بشكل أساسي في عمليات البحث و المطابقة بين السلاسل النصية مثل العمليات من نوع "أبحث ثم استبدل". ولدى هذه التعابير رموز خاصة بها مثل ^ الذي يرمز لبداية الصفحة و $ الذي يرمز لنهايتها. المصدر
  22. يعتبر خادم Lighttpd أسرع من خادم أباتشي فهو يتحمل الضغط والترافيك أفضل منه، لكن توجد العديد من المميزات في خادم أباتشي ولا تتواجد في الخوادم الأخرى. على الرغم من ذلك فإنه يمكنك تعديل بعض الخيارات في خادم أباتشي لجعله أسرع من العادة لكنه سيبقى أبطأ من خادم Lighttpd الذي يتميز بالدرجة الأولى بالسرعة وتحميل عدد كبير من الزوار في نفس الوقت. وبالنسبة لسؤالك، أجل يمكنك الاستغناء عن اباتشي لصالح Lighttpd فالكثير من الخوادم في العالم تستخدم Lighttpd بدلا من اباتشي.
  23. الفرق بسيط جدا، إن دالة require() شبيهة بدالة include() باستثناء أن كل دالة تقوم بالتعامل مع الأخطاء بشكل مختلفة، فإذا حدث خطأ أثناء الاستدعاء، فستقوم include() بطباعة الخطأ لكن سيبقى السكربت يعمل بشكل طبيعي أما في حالة require() فعند حدوث خطأ فسيتم طباعة رسالة الخطأ ومن ثم يتوقف السكربت عن العمل. أما عن الاستخدام فهذا يعتمد على برنامجك، وعلى حسب احتياجك للاستدعاء فهل يتم إيقاف السكربت إذا لم يتم استدعاء الملف المطلوب أم تريده أن يستمر في العمل. المصدر
  24. ستجد جميع ملفات log داخل مجلد /var/log. بشكل عام يمكنك حذف ملفات السجلات(logs) بدون مشاكل في لينكس، فالشيء السلبي الوحيد في حذف هذه الملفات أنه لن تتمكن من العودة لفحص ملفات السجلات إذا حدثت مشاكل بعد مدة قصيرة من حذف الملفات. بعد حذف ملفات السجلات سيتم إنشاء ملفات جديدة تلقائيا، بل إن أغلب ملفات السجلات يتم حذفها تلقائيا بعد مدة، لكن في حالة ما لو ازداد حجم هذه الملفات كثيرا ولم يتم حذفها فستكون هنالك مشكلة في حاسوبك. المصدر
  25. هنالك حل بسيط لهذه المشكلة وهو حذف الملفات داخل مجلد /var/lib/apt/lists كما في المثال التالي: sudo rm /var/lib/apt/lists/* -vf وبعد ذلك قم بتحديث المستودعات: sudo apt-get updateملاحظة: تحتاج إلى صلاحيات مستخدم الجذر أو sudo حتى تتمكن من تنفيذ الأوامر السابقة. بعد ذلك يمكنك استخدام apt-get لتثبيت وحذف الحزم بدون مشاكل. المصدر
×
×
  • أضف...