عمر خاشقجي @عمر خ

حساب هذا المستخدم محظور.

نقاط السمعة 131
تاريخ التسجيل 21/03/2014

مر علي كتاب Genetic Algorithms with Python من كتابة Clinton Sheppard.

اطلعت على عدة فصول وأعجبني الأسلوب.

(رابط الكتاب في الوصف)

أغلب المصادر التي وجدتها تشير لاستخدام decimal للأغراض المالية.

المفروض أن Double يقبل هذا الرقم. ربما لو تضع الجزء الضروري من الكود المتعلق بالمشكلة يتضح الأمر.

أيضا Double ليس مناسبا لتخزين القيم المالية. أقترح فتح موضوع آخر حتى يفيدك الأعضاء بتوضيح المشكلة والبدائل في C#.

انظر للوحدات.

عندك ج جنيه تريد تحويله إلى د دولار.

الحالة الأولى: عندك معامل تحويل م وحدته جنيه/دولار (يعني المعامل يخبرك كم جنيه في الدولار الواحد).

إذًا المعادلة د=ج/م لأن قسمة ج على م تنتج وحدة دولار (جنيه ÷ [جنيه/دولار] = دولار).

الحالة الثانية: عندك معامل تحويل م وحدته دولار/جنيه (يعني المعامل يخبرك كم دولار في الجنيه الواحد).

إذًا المعادلة د=ج×م لأن ضرب ج في م ينتج وحدة دولار (جنيه × [دولار/جنيه] = دولار).

سأفترض أنه مشروع تطوير برنامج. أولا، أنصحك باختيار فكرة المشروع قبل منصة التطوير. بعد اختيار الفكرة ستتضح المتطلبات وبالتالي يتضح أي منصة مناسبة أكثر. قد تكون الأندرويد أو غيره. ثانيا، كما أنت تفضل الأندرويد، غيرك يفضل شيء آخر. اجعل الأمر نقاش موضوعي وليس محاولة إقناع مستميتة.

بعد ذلك، أعتقد أن الحل في الجواب على ثلاثة أسئلة.

لماذا تفضل الأندرويد؟

قد تفضل الأندرويد لأي سبب. فكر هل هذا السبب يؤثر على المنتج النهائي أو عملية التطوير؟ إن كان الجواب لا، فهذا معيار ثانوي. إن تساوت خيارات متعددة في المعايير الأولية، يمكنك تفضيل أحد الخيارات بمعيار ثانوي.

هل ترى أن بيئة تطوير أندرويد تجعل حياتك كمطور أسهل/أمتع/أكثر إنتاجية؟ أو تقودك لتطوير تطبيقات أكثر جودة؟ أو تعطي حرية أكبر للمطور؟ الخ..

أحضر حجج تستدل بها على كلامك.

...

ما هدف المشروع؟

لو كان الهدف انتشار التطبيق عند شريحة معينة، ابحث عن احصائيات مدى انتشار الاندرويد وبدائله عند هذه الشريحة، ومدى مناسبته لمتطلبات الشريحة (كبار السن مثلا).

لو كان الهدف تعلم مهارات لسوق العمل، ابحث عن احصائيات فرص العمل لمطوري الأندرويد وغيرهم.

لو كان للمشروع متطلبات معينة تناسب الهواتف المحمولة (مثلا إمكانية استخدام البرنامج أثناء التنقل) والأندرويد بالتحديد، اذكر لهم مزايا الأندرويد التي تناسب متطلبات المشروع بعكس بدائله.

لو كان الهدف تجاري، ابحث عن سبل الكسب في تطبيقات الأندرويد مقارنة ببقية المنصات.

...

ما أسباب تحفظهم؟

لو كان الخوف من قلة مصادر التعليم، اذكر المصادر الموجودة وجودة التوثيق الرسمي واحصائيات انتشار الدعم على مواقع مثل Stack Overflow.

...

  1. ثم تأكد من مناسبتها لغرضك. قد يكفيك توليد رمز عشوائي بطريقة آمنة (كما تفعل المكتبة التي ذكرها mr_student). يوجد من ينصح بعدم استخدام JWT.

  2. هذا مشابه لفكرة الـOne Time Password.

2.1. النصيحة الجارية هي أن لا تستخدم خوارزمية كتبتها بنفسك في مجال الأمان. الخوارزميات المعتمدة والمختبرة من قبل خبراء أضمن. ابحث عن OTP والمكتبات التي توفرها.

2.2. لا أعرف هل OTP مناسبة لأن تستخدم كـAPI Key أو لا، وإن كانت مناسبة هل تضيف أي حماية أو لا. إن استخدمتها ستحتاج لمفتاح يعرفه السيرفر والتطبيق لتمرره للخوارزمية. هذا المفتاح يعادل الـAPI Key لأنه أ) معروف للسيرفر والتطبيق، ب) يستطيع سارقه تنفيذ طلبات إلا لو تغير (بإضافة الـAPI Key أو توليد OTP). الفرق أنك سترسل OTP مختلف كل فترة.

هذا من مساوئ عدم وجود زر إظهار كلمة السر (مثل الصورة). لأن ذلك يجعل المستخدم يعتقد بوجود حماية زائفة.

حتى لو لم تحفظ كلمة المرور في المتصفح، ستكتبها أنت وستظهر في value. هذا ضروري حتى ترسلها للخادم طالما أنك تستخدم كلمة المرور للتحقق. لذلك يجب استخدام برامج وإضافات تثق بها فقط.

إذا، أنت تواجه هذا الخطر سواء حفظت كلمة المرور في المتصفح أو لم تحفظها.

طالما فتحت الموضوع، سأتوسع قليلا:

هل حفظ كلمة المرور في المتصفح يعرضك لمخاطر إضافية؟

أولا، هل يخزن المتصفح كلمات المرور بطريقة آمنة؟ بحثت قليلا، ويبدو أن هذا يعتمد على المتصفح والإعدادات التي اخترتها.

ثانيا، لنفترض أن الإجابة نعم (وهذا غير صحيح). المتصفحات تتحقق منك في بداية الجلسة، ثم تستمر في ملء حقل كلمة المرور تلقائيا طول الجلسة. إذا أنت معرض للخطر لو وصل شخص آخر لجهازك خلال الجلسة.

إذا، حفظ كلمات المرور في المتصفح يعرضك لخطر إضافي.

الحل الأمثل أن تحفظ كلمات المرور بنفسك. لكن ذلك سيؤدي لاستخدام كلمات مرور سهلة ولإعادة استخدامها في أكثر من موقع لتسهيل الحفظ.

الخيار الأفضل أن تستخدم مدير كلمات مرور (Password Manager). مع الإنتباه لأن فقدانك له يعني فقدان كل كلمات المرور.

أيضا لتقلل أثر سرقة أحدهم لكلمة المرور، استخدم ميزة التحقق بخطوتين (2FA) أينما وجدت.

أنا أضطريت لاستخدام php سادة في مشروع لوجود كود سابق :)

كتابة php سادة تسد النفس. المكتبات تسهل عليك وهي أضمن من ناحية الأمان مقارنة بالمطور العادي. مع ذلك أحيانا تضطر لعدم استخدام مكتبة، ومعرفة أساليب الهجمات وطرق تفاديها ميزة للمطور.

ليس الوحيد

العفو :)

خطر لي أن كل كلامي يخص الـfront end.

إن كنت ستكتب كود السيرفر أيضا. فعليك تصميمه ليرسل البيانات بهيئة مناسبة. سابقا كانت XML. الآن JSON منتشرة.

بما أنك ستوفر ترجمة ومتابعة سماعا وقراءة، هل سيعرف الموقع توقيت بداية كل آية؟ إن كان كذلك، ربما يمكن إضافة خاصية تغيير القارئ وإكمال السماع من نفس الآية.

الصراحة لا أعلم إن كان مصطلح "أجاكس" يحدك بمكونات معينة. لكن الفكرة الأساسية والتي تتحقق بتغير المكونات هي طلب بيانات من السيرفر وعرضها دون الحاجة لتحديث الصفحة.

ما دخل fetch وpromises؟

  • طلب البيانات من السيرفر يتم باستخدام fetch (وسابقا XMLHttpRequest).

  • البيانات المطلوبة لن تصل مباشرة. في الوضع العادي، هذا يعني أن البرنامج سينتظر حتى تنتهي العملية فيتجمد الموقع طول فترة الطلب. الأفضل (وهذا الحاصل) أن تكون عملية الطلب غير متزامنة (asynchronous، عكس synchronous)، فيستمر البرنامج بالعمل ثم نتعامل مع نتيجة الطلب (فشل أو نجح) حال انتهائه دون أن يتوقف برنامجنا انتظارا للنتيجة. fetch يستخدم promises للتعامل مع العمليات غير المتزامنة (توجد طرق أخرى بينها: events وcallbacks). التعود على البرمجة مع عمليات غير متزامنة قد يأخذ بعض الوقت.

بالنسبة للمصادر: إن كنت تقرأ بالانجليزية، أنا عادة أرجع إلى توثيق موزيلا MDN ونادرا لإرشادات جوجل للمطورين. وإذا كنت أستخدم إطار عمل أرجع إلى توثيقه.

لا أعرف مصادر أخرى. وربما يفيدك شخص آخر أكثر إطلاعا.

استخدام fetch وpromises بسيط نسبيا. المعضلة في التنسيق بين كود الطلب وبقية الكود (مثل كود الواجهة، خاصة إذا تعقد الموقع) والتعامل بأناقة مع الفترة بين الطلب والرد ومع حالة فشل الطلب. هذه مشكلة تصميم تعتمد على تنظيم الكود. إن لم تستخدم إطار عمل (مثل Vue.js, React) عليك إيجاد حل بنفسك. إن استخدمت إطار عمل، فالحل يعتمد على النمط الذي يتبناه إطار العمل وسيغنيك عن بعض العبء (مع ذلك أنصح ببرمجة موقع بدون إطار عمل حتى تفهم المشكلة وما يقدمه لك إطار العمل).

بالنسبة ل XML، الموضوع يعتمد على شكل البيانات التي يرد بها السيرفر عند الطلب. قد تكون XML أو JSON أو غير ذلك.

صحيح. ويبدو أن التشويش تم بهذه الأداة:

وتفكه هذه:

كذلك أعتقد أن الجزء الذي يبدأ ب ('g e=" ضروري فهو يتبع الدالة function(p, a, c, k, e, r) ويتم تمريره إليها.

اللنكس أفضل لأنه مفتوح المصدر وكلمة مفتوح أكثر إيجابية من مغلق.

(ربما مجتمع برمجة ليس الأفضل لهذا الموضوع)

لغة البرمجة للأغراض العامة ليست مصممة لتغطية حاجات غرض معين ويمكنك أن تكتب بها برنامجا في أي مجال. عمليا، قد تفضل لغة عامة على أخرى حسب احتياجاتك وهواك واللغات تتفاوت في مناسبتها لغرض أو لآخر.

توجد لغات أخرى مصممة لتغطية حاجات مجال معين. مثلا SQL مصممة للتعامل مع قواعد البيانات. بعض اللغات المتخصصة يمكن إثبات أنها Turing complete، فيمكن أن تنفذ أي خوارزمية باستخدامها، لكن هذا لا يعني أنها مناسبة عمليا لأي غرض.

يبدو الكود وكأنه مشفر بطريقة تفكها الأداة المذكورة في الروابط التالية:

لكن المتغير c35 غير معرف (أو أنه خطأ مطبعي أو خطأ في نقل الكود)، لذلك الأداة لا تعمل.

جوجل وجد كود مشابه به اختلافات بسيطة (ربما أخطاء النسخ):

إن كان هذا الكود المقصود، يمكن فكه بالأدة. بعد فكه، يجب استبدال مواضع عدة بقيم من مصفوفة ليتضح الكود (يمكن استخدام regex وtemplate literals لتسهيل الاستبدال). بعدها قد تحتاج لتصليح بعض السطور يدويا.

بعد هذا كله لا أدري ما فائدة الكود.

ليس من العدل بحق الأطفال اليتامى أن تستغل حاجتهم لتحقيق الأهداف.

ماذا ستعلمهم عن بقية العالم خارج المدينة؟ ماذا ستفعل مع الطفل إن بدأ بالشك بما تعلمه وتحداه؟

الإنجليزية خاصة في المواضيع التقنية والعلمية. لا أمانع قراءة/مشاهدة المحتوى العربي إن وجدته وكان ممتازا لكن في الغالب سيبدأ بحثي بالإنجليزية.

أفضل التطبيق/المحتوى التفاعلي النصي إن وجد. لكنه لا يناسب كل المواضيع. لذلك:

المكتوب في المواضيع العملية (لسهولة التنقل بين النص) والتي تتطلب الممارسة أو حين أود التعمق في الموضوع أو استخدام المحتوى كمرجع. قراءة المواقع أسهل. أحمل الكتب إذا تعمقت في الموضوع أو إذا كان للكتاب أو الكاتب سمعة حسنة.

المرئي لشرح المفاهيم. أعتقد لأن أسلوب تحدث وشخصية الملقي تساعد على الفهم.

  • SQL

يجب أن اتعامل مع منتج ما يتبنى لغة SQL مثل MySQL

بنفس الطريقة لو فتحت ملف نصي ووضعت به كود python أو C يجب تمريره بimplementation للغة (مثلا CPython أو JPython لبايثون وGCC أو MSVC لسي) يفسر أو يحول الكود الذي وضعته. مع ذلك يمكن القول انك تعلمت لغة C أو python أو SQL واستخدمتها. طبعا توجد فروقات بين لغات كC وSQL وضحت بقية التعليقات بعضها.

كما قال واثق عبارات SQL يمكن تمريرها مباشرة إلى برامج إدارة قواعد البيانات لتنفيذها أو عبر كود بلغة عامة (كبايثون) يتصل بقاعدة البيانات.

  • SQL

هي لغة. اللغة قد يكون لها تعريف قياسي على الورق بغض النظر عن التطبيقات implementations التي تسمح للمبرمج باستخدامها.

حسب ويكيبيديا آخر نسخة من تعريف SQL هو SQL:2016.

تطبيقات اللغة (ما تستخدمه فعليا في PostegreSQL أو MySQL) قد لا تتوافق مع بعضها أو مع التعريف فقد لا تطبق التعريف بحذافيره أو قد يكون نص التعريف غير دقيق أو قد يود التطبيق إضافة مزايا للغة لا توجد في التعريف.

amming_language_specification

:2016

ربما يمكن تنفيذ الفكرة كإضافة plugin لمشغلات الفيديو المشهورة. فلا حاجة لتطوير ودعم مشغل على عدة منصات مصيره غالبا أن يندثر.

القصيدة الأصلية:

The Raven لـEdger Allen Poe