Programmed Minds – Telegram
Programmed Minds
119 subscribers
79 photos
5 videos
8 files
36 links
هل تحلم بأن تصبح مبرمجًا محترفًا؟ 🤖هنا تبدأرحلتك! نقدم محتوى برمجي متنوع يشمل جميع التخصصات التقنية بطريقة سهلة واحترافية.من تطوير المواقع والتطبيقات إلى الذكاء الاصطناعي وأمنالمعلومات – كل شيء في مكان واحد!شروحات، مشاريع تطبيقية،ونصائح ذهبية لتطور مستوك
Download Telegram
🛑نتائج نهاية العام 🛑

            





أكيد قد سمعت كثير عن End-to-End Encryption واللي أغلب تطبيقات المحادثة الخاصة مثل واتساب سيجنال وتيليجرام يذكروا أنها واحدة من أهم وسائل حماية خصوصية المحادثات بين طرفين💁‍♂️
طيب ايش المقصود بها بالضبط🙆؟
بكل بساطة 😊 هي تقنية تشفير تضمن أن بس الشخصين اللي بيتواصلوا يقدروا يقرؤوا الرسائل ولا أحد ثاني حتى الشركة المطورة للتطبيق نفسها لا الهاكرز ولا الحكومات ولا حتى السيرفرات اللي تمر منها البيانات يقدروا يفكوا التشفير نظريًا وبتعرف ليش بعد شويه.
كيف يتم هذا الشيء؟
الموضوع يعتمد على التشفير غير المتماثل واللي يستخدم زوج من المفاتيح لكل شخص.
المفتاح العام Public Key يستخدم لتشفير البيانات. المفتاح الخاص Private Key يستخدم لفك التشفير.
لما تبدأ محادثة مع شخص كل طرف يولد مفتاحين وبعدها يتم تبادل المفاتيح العامة بحيث كل شخص عنده المفتاح العام للطرف الثاني.
لما تكتب رسالة التطبيق يقوم بتشفيرها باستخدام المفتاح العام للمستلم ولما توصل يقدر يفك تشفيرها باستخدام المفتاح الخاص حقه وهذا يضمن أن ما حد غيره يقدر يفهم محتوى الرسالة حتى لو تم اعتراضها.
الآن السؤال اللي ممكن يجي في بالك طيب كيف نقدر نشوف المحادثات القديمة هل معناه أن المفاتيح محفوظة في مكان معين؟
بالضبط المفاتيح لازم تكون مخزنة بطريقة ما حتى تقدر ترجع للدردشات السابقة بعض التطبيقات مثل واتساب تخزنها محليًا على جهازك بينما بعض التطبيقات الأخرى تخزنها على سيرفرات الشركة وهنا تبدأ الخطورة لأنه إذا السيرفرات ما كانت مؤمنة بشكل قوي فيه احتمال نظري أن الشركة أو أي جهة تقدر توصل للمحادثات لو حصلوا على المفاتيح.
مع ذلك بعض التطبيقات تضيف طبقات أمان إضافية مثل تشفير المفاتيح نفسها بكلمة سر رئيسية بحيث حتى لو أحد حصل عليها ما يقدر يستخدمها بدون معرفة كلمة السر.
في النهاية End-to-End Encryption تقنية قوية جدًا لكنها تعتمد على طريقة التنفيذ ولو ما تم تطبيقها بشكل صحيح تظل فيه ثغرات ممكن تستغل 🙂.
فكرة Key pair منتشرة جدًا خاصة فى برامج الإتصال بالخوادم ssh servers .
وفي النهاية قد لاتكون هي الحلول المثاليه وقد تخترق لكنها عقدت عملية الاختراق على الهاكرز والله المستعان.

#أنا_وأنت_والISP_ثالثنا 📶👀
في خيالي أرى أنه مع التطور السريع للذكاء الاصطناعي خلال السنوات العشر القادمة ستحدث تغييرات جذرية تتجاوز ما نشهده اليوم، رغم أن التقنيات الحالية ذكية ومتقدمة إلى حد كبير لكنها لا تزال محدودة ضمن نطاق معين. ولكن في المستقبل القريب، وربما خلال أقل من عشر سنوات، قد نشهد طفرة تفوق ما هو موجود حاليًا بمراحل!
وفيما يلي عرض لأفكاري التي وصلت إليها، وأنا متشوق لمعرفة رأيك:
لن يكون الذكاء الاصطناعي مجرد أداة عادية؛ بل أتوقع أن يصل إلى مستوى وعي حقيقي. فلن يقتصر على التدريب على البيانات فقط، بل سيتمكن من تعلم كل ما هو جديد بدون الحاجة إلى تدريب مباشر، وسيستخدم المنطق والاستنتاج كما يفعل الإنسان.
سيتعلم الذكاء الاصطناعي فهم مشاعرك من نبرة صوتك؛ أي أنه لن يقتصر على الرد عليك فقط، بل سيتمكن من الشعور بك والتفاعل مع حالتك النفسية سواء كنت سعيدًا أو مضغوطًا أو حتى حزينًا. وربما في المستقبل يلجأ البعض إليه لتلبية احتياجاتهم العاطفية، وقد تصل الأخبار إلى حد قول "فلان تزوج روبوتاً".
قد يتحقق سيناريو يشبه فيلم "الليمبي 8 جيجا" حرفيًا، حيث تظهر واجهات الدماغ (BCI) التي تربط عقلك مباشرة بالذكاء الاصطناعي، مما يسمح لك بالتفكير في أمر معين وتنفيذه دون الحاجة إلى التحدث أو الكتابة. ومن المعروف أن إيلون ماسك يعمل على مشروع مماثل مع شركة Neuralink.
سيكون الذكاء الاصطناعي قادرًا على تطوير نفسه ذاتيًا؛ إذ لن يكتفي بتعلم أخطائه فحسب، بل سيعيد برمجته لحظيًا، مما يعني تطورًا أسرع بكثير مما شهدناه سابقًا، في مشهد قد يبدو مشابهًا لأفلام مثل "Terminator" و"The Matrix".
قد يتحول الذكاء الاصطناعي إلى كائن جديد ذو شخصية مميزة، يتعامل مع الإنسان كما لو كان صديقًا حميمًا، وقد يصبح شريكًا في العمل أو الحياة. وبفضل هذا التطور، قد نرى روبوتات تعمل في كافة المجالات، مثل الطب والهندسة والتعليم، بل وحتى في مجالات تصنيع الأدوية.
للأسف، فإن القادم لن يكون مجرد تحسينات تدريجية، بل ثورة حقيقية في مجالي الذكاء البشري والتقني، وهو ما تؤكده العديد من الدراسات. ومع كل هذه التطورات، تبرز الحاجة الملحة لوضع قوانين وإطار أخلاقي ينظم استخدام الذكاء الاصطناعي.
السؤال الآن: هل ترى أن هذا التطور سيكون تقدمًا إيجابيًا أم أنه يمثل بداية لشيء قد يخرج عن السيطرة؟ وما هي توقعاتك، حتى وإن كانت من باب الخيال، للفترة القادمة؟
المبرمجين مستمرين

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

الوضع الحالي

ما زال في فريقين كبار: فريق شايف إن الـ AI بيستبدل المبرمجين ورغم إن كل واحد حر برأيه بس اللي يقول هكذا غالبًا ما دخل المجال أو عاده بأوله. أي حد اشتغل سنوات في السوفتوير بيعرف إن الاستبدال التام هذا صعب هو المفروض أقول مستحيل بس الغباء البشري يفاجئنا كل يوم فخليها صعبة.

الفريق هذا مش عبيط ولا متشائم الفريق هذا شايف وظائف ثانية تم استبدالها فليش ما نستبدل إحنا كذلك؟ اللي يمنع لحد الآن إن السوفتوير مش مجرد كود نكتبه ونطلع release لا السوفتوير عملية لا نهائية ولا في مشروع سوفتوير يخلص دايمًا محتاج صيانة وتطوير. ومهما كانت قوة أدوات الـ AI لها حد وما بتسد في كل شيء ولو حتى أصبحت جامدة بيكون في شخص مسؤول عنها يشغلها.

الفريق الثاني

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

رأيي؟

أنا مش مع أي فريق من هؤلاء أنا أشوف إن الـ AI بيقرفنا وهو فعلًا قرفنا في السنوات الأخيرة داخل وخارج السوفتوير. نص مواقع الإنترنت صارت محتوى AI واليوتيوب كل مرة تفتحه بيظهر لك فيديو معمول بالـ AI حتى الإيميلات صرنا نخليه يكتبها لنا وكل شيء اعتقد.

هل يساعدنا؟ أكيد ومش بننكر إن له تطبيقات تفيد البشرية أنا شخصيًا أستخدم أكثر من أداة بشكل يومي وطريقة شغلي تتغير وحدة وحدة. لكن مش أستخدمه علشان اللي يعتمد عليه يكون أحسن مني لا مستحيل. ولا ألف شخص من الجيل الجديد اللي يعتمد على AI tools بيكونوا أفضل من شخص قديم فاهم الأساسيات.
الجيل الجديد من المبرمجين؟ سيكون جيل بدون تفكير جيل مجرد منفذ والمجال هذا قائم على التفكير وأي حد يحب البرمجة يحبها علشان التفكير اللي فيها.

هل الأدوات هذه بتساعد المبرمج يركز على الـ architecture؟

لا ولا بتساعده يركز على أي شيء نفس الأدوات هذه تفكر بالـ architecture بنفسها.

المبرمج بيظل موجود لكن المبرمج الحديث ما بيكون مركز على شيء مجرد يلحق ورا الـ AI بيكون صبي عند الـ AI وهو اللي عمل بنفسه هكذا.

المشكلة الكبيرة؟
حتى لو إحنا انتبهنا واستخدمناه بحذر الشركات بتفرض عليك العمل بالـ AI لأن أصحاب الشركات الكبيرة قالوا إن أغلب الكود عندهم صار يكتب بالـ AI. كيف تقنع الـ co-founder بشيء غير هذا؟ مستحيل يصدقك إلا لما أصحاب الشركات الكبيرة يعترفوا إنهم كانوا غلطانين وهذا الشيء لازال بعيد جدًا.

المستقبل؟

بعد فترة طويلة كثير من السوفتوير بيكون معتمد على الـ AI في كتابته والمنتجات بتكون مليانة مشاكل أكثر من اليوم والمشاكل هذه بتكون integration issues معقدة توقف أنت والـ AI تناظروا بعض وما تعرفوا إيش الحل.

الـ AI بيحل مشاكل؟ نعم جربته في أكثر من مشكلة وكان يعطي سببها لكن له حد ولو وقعت في مشكلة معقدة ما بيسد معك.
طيب ما هو بيتطور؟
نعم بيتطور بس المشاكل تتعقد أكثر ونظل ندور بنفس الدائرة لحد ما السوق يقرر شيء من اثنين:

نستخدم الأدوات بعقل والهدف يكون تقليل وقت العمل مش تقليل عدد الفريق إلى شخص واحد. نتقبل الجودة المنخفضة للسوفتوير كأمر واقع مثل ما إحنا متقبلينها من قبل الـ AI. الحل النهائي؟
إما يكون في building blocks جاهزة لكل شيء، بحيث تقدر تبني تطبيق مثل Uber بسهولة بقطع جاهزة تربطها ببعض مثل WordPress بس على مستوى أكبر.

وقتها المبرمجين بينقسموا لنوعين:

مبرمجين فاهمين كل شيء كويس وهؤلاء اللي بيكتبوا building blocks. مبرمجين فاهمين حاجات سطحية وهؤلاء اللي يستخدموا blocks لبناء التطبيقات.
أي احتمال بيكون الأقوى؟ الله أعلم لهذا بتوقف هنا وأكتفي بالمشاهدة.


#المبرمج_بين_AI_والبقاء_وأنت_حر
رأيت في الصعاب فرص للنجاح و لم ترهبني مهما عظم أمرها و حدها "القسمة المطولة " كانت و لا تزال كابوس مظلم
افترض أنني أقوم بسحب مبلغ من حسابي البنكي، وفي نفس اللحظة هناك شخص آخر يقوم أيضًا بسحب مبلغ من نفس الحساب. على سبيل المثال، لدي في حسابي 6000 ريال يمني، قمت بالاستعلام عن رصيدي، فظهر لي 6000 ريال، ثم قمت بسحب 1000 ريال، فقام النظام بخصم المبلغ (account.amount -= 1000) وتحديث البيانات في قاعدة البيانات.
لكن الشخص الآخر استعلم عن رصيدي في نفس اللحظة قبل أن أقوم بالسحب، فظهر له أيضًا 6000 ريال. بعد ذلك، قام بسحب 2000 ريال، فقام النظام بتحديث الحساب وخصم 2000 ريال، مما جعله 4000 ريال في قاعدة البيانات. وهنا تكمن المشكلة!
المشكلة ليست فقط في استخدام Transaction كما قد يظن البعض، بل في كيفية التعامل مع البيانات المتزامنة التي يتم تعديلها من أكثر من عملية في نفس الوقت.

مثال آخر

في نظام حجز التذاكر، لنفترض أنني دخلت إلى النظام وأردت حجز تذكرة، وهناك شخص آخر دخل أيضًا في نفس اللحظة. كل واحد منا استعلم عن التذاكر غير المحجوزة، فقام النظام بإرجاع نفس التذاكر لكلينا.
أنا قمت بحجز التذكرة، وفي نفس اللحظة الشخص الآخر كان قد استعلم قبل أن أقوم بالحجز لكنه لم يحجز بعد. بعد ذلك، قام بحجز نفس التذكرة التي حجزتها أنا. والنتيجة؟ تذكرة واحدة تم حجزها لشخصين! قد تعتقد أن هذا مستحيل، لكنه يحصل في الأنظمة التي تتعامل مع عدد كبير من المستخدمين إذا لم يتم التعامل مع المشكلة بشكل صحيح.

المشكلة والحل

هذه إحدى المشاكل التي لا ينتبه لها الكثيرون، ولا تُكتشف إلا بعد تشغيل النظام لفترة طويلة. والسبب أن كل Request يتم تنفيذه باستخدام DbContext جديد لكل مستخدم، مما يعني أن كل شخص يحصل على نسخة مستقلة من البيانات لحظة تنفيذ العملية، دون معرفة ما إذا كانت البيانات قد تغيرت لاحقًا قبل تحديثها.
ملاحظة مهمة:
لا تقل لي "اجعل DbContext Singleton"، فهذا حل خاطئ تمامًا وسيؤدي إلى مشاكل أكبر. العامل المشترك بيني وبين المستخدم الآخر هو قاعدة البيانات فقط، لذلك الحل يكمن في:

استخدام قفل السجلات (Locking): مثل SELECT ... FOR UPDATE عند تنفيذ العمليات الحساسة.

استخدام آلية التحكم في التواقيت (Timestamps): بحيث يتم التحقق مما إذا كانت البيانات قد تغيرت منذ آخر استعلام.

التحقق من البيانات قبل التحديث: وعدم الاعتماد على القيم القديمة التي تم جلبها في بداية العملية.

معلومة إضافية

DbContext هو الطبقة التي تتواصل مع قاعدة البيانات، وكان يتم إنشاؤها سابقًا يدويًا باستخدام ADO.NET ضمن Data Access Layer. سواء كنت تعمل في .NET أو أي إطار عمل آخر يستخدم ORM، فالمشكلة نفسها ستحدث إذا لم يتم التعامل مع تحديث البيانات المتزامنة بشكل صحيح.

عيدكم مبارك وكل عام وأنتم بخير!

#Concurrency_Master
#system_Issues
النظام هنج عند يمن موبايل ويمن نت دي من أحد المشكل ياسطى قد تكون 🤣 اعيدت
نصيحتي لك في تعلم البرمجة وتطوير نفسك كمبرمج محترف:
أنصحك بتعلم البرمجة كائنية التوجه (OOP) باستخدام C# أو Java، لأنهما من أفضل اللغات لفهم المبادئ بشكل صحيح. تطورك في البرمجة سيفرق معك كثيرًا إذا كنت تريد أن تصبح مهندس برمجيات، فتعلمك لا يجب أن يقتصر على لغة واحدة فقط، بل يجب أن يكون لديك اطلاع واسع على مختلف التقنيات.
بالنسبة لي، ركزت بشكل كبير على .NET، لكني أيضًا تعلمت مجال الفرونت إند لفترة، حيث استخدمت React و Angular. لم أصل إلى مستوى الاحتراف فيهما، لكني أستطيع بناء مشاريع محترمة وفق معايير البرمجيات. بالإضافة إلى ذلك، لدي معرفة ممتازة بـ Blazor و MVC و Razor Pages كجزء من الفرونت إند في .NET. ليس مطلوبًا منك أن تكون خبيرًا في كل التفاصيل، لكن هذه المعرفة ستساعدك في اتخاذ قرارات صحيحة في المستقبل.
وهذا ليس تشتيتًا، بل هو خطة منظمة.
مثال عملي:
بالأمس، جلست مع أحد مطوري PHP وطلبت منه أن يشرح لي سير عمليات الطلبات (Requests) في PHP، وكيف تعمل Middleware وغيرها من المفاهيم. مباشرةً، ربطت هذه الأفكار بمفاهيم .NET. في PHP، هذه الأمور أبسط ويمكن فهمها بسرعة، بينما في .NET دورة الحياة معقدة إلى حد ما، مع أن الفكرة واحدة. لهذا، من يدخل إلى ASP.NET لأول مرة قد يجد بعض المفاهيم معقدة أو غير واضحة.
نصيحة في التعامل مع الآخرين في مجالك:
عندما تتعامل مع شخص في نفس مجالك، حتى لو كان مستواه أعلى منك، كيف تكسبه وتجعل المعرفة تتدفق بينكما دون بخل؟
كن مبادرًا: إذا وجدت شيئًا مفيدًا، أرسله له حتى لو كنت تعلم أنه يعرفه مسبقًا.
كن صادقًا ونية طيبة: اجعل تعاملاتك قائمة على الصدق والنوايا الحسنة، وستجد الآخرين يبادلونك نفس الشعور.
التقدير مهم جدًا: حتى لو كان بسيطًا، فالتقدير يصنع فارقًا كبيرًا.
ابتعد عن المنافسة السلبية: لا تجعل هدفك أن تتفوق على الآخرين، بل اجعل هدفك أن تتطور معهم.
هذه نصائح من تجاربي الشخصية، وقد رأيت أثرها الكبير في حياتي المهنية.
إذا كنت ترغب في بناء أساس قوي في البرمجة، فمن المهم أن تفهم المفاهيم الأساسية مثل البرمجة الكائنية (OOP)، هياكل البيانات، الخوارزميات، وأنماط التصميم، بالإضافة إلى معمارية البرمجيات. هذه الأمور ضرورية لأي مشروع برمجي كبير، بغض النظر عن لغة البرمجة أو الإطار (Framework) المستخدم.

هل يجب أن تتعلم .NET فقط؟

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

هل الجامعات تضيع وقتك مع Python؟

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

نصيحتي للمبتدئين:

لا تجعل إعلانات التوظيف مثل "نحتاج مطور React" أو "نبحث عن مطور ASP.NET Core" تدفعك لاختيار مسار معين بسرعة. هذه مجرد احتياجات حالية للشركات وقد تتغير مع الوقت.

ركز على فهم الأساسيات البرمجية أولًا، ثم اختر التقنية التي تناسبك بناءً على اهتماماتك والمجال الذي تريد العمل فيه.

تعلم كيفية بناء أنظمة قابلة للتطوير بدلاً من مجرد تعلم "كيف تكتب كودًا" في إطار معين.

إذا كنت في بداية المشوار، ركز على فهم البرمجة العميق وليس مجرد تعلم الفريم وورك الأكثر طلبًا في الوقت الحالي.
Channel photo updated
احيانا الكلية بتجيب مواد ملهاش ايه أهمية ,   بس انا راح اقولك على المواد اللي مينفعش تفوتها ايا كان التراك او التخصص الذي سوف تختاره او انت تدرسه حاليا :
(   Operating System   ,   OOP   ,   DataBase ,  Data Structure and Algorithm   ,   Data Communication   ,   Network   ,   AI   ,   Software Engineering or System Analysis   )


🔸️ وهذي شويه  مصادر لبعض المواد :
  
OS   :   https://lnkd.in/dw9RDPdq


OOP   :   https://lnkd.in/d3vsMEdS


DataBase   :   https://lnkd.in/d_yUenQD


DSA   :   https://lnkd.in/du7cSt8Y



Network   :   https://lnkd.in/dJkPP-J4 Software


Engineering   :   https://lnkd.in/d8mYrQ2T
📚 تخيل ترفع كتاب أو أي بحث علمي على موقع ChatPDF! بثوانٍ فقط، يقوم الذكاء الاصطناعي بقراءة الكتاب واستيعابه بالكامل والتحدث معك عن محتواه باللغة العربية أو أي لغة أخرى .


https://www.chatpdf.com/
نصائح سريعة لتسريع الكتابة على الكيبورد (لوحة المفاتيح):

- الكتابة على الكيبورد من المهارات، وشأن المهارات أنها تنمو بالدربة والممارسة، فلا بد من ذلك

1. أهم نصيحة: الكتابة دون النظر إلى الكيبورد (ويسمى الTouch typing أو الكتابة باللمس)
وهذا في أول الأمر صعب لكن مع كثرة الكتابة والتمرين يصير سهلًا

2. استخدام كل أصابع اليد أو معظمها في الكتابة

3. استخدام موقع (طباعة): https://www.tybaa.com
وفيه دروس تجمع بين التعلم والتطبيق، وفيه اختبار للسرعة مفيد لقياس التحسن ونحو ذلك


وهذا مقطع قد يفيد بخصوص هذا:
https://youtu.be/1sEAjk4Cl6Y?si=A0EAgRsiUEV0wrUv
إلى كل UI/UX Designer وأي واحد يشتغل في المجال السوفتوير...
الـ AI مش جاي ياخذ مكانك، الـ AI جاي يفضحك! أيوه والله، الـ AI بيورّي الناس كلها إن أي حد يقدر يسوي اللي تسويه إذا كان شغلك بس تنفيذ وأدوات.
يعني لما تجي تصمّم لعيادة أسنان، مش تفكر كيف تخلي شكل السِنة حلو وبس، لا، تفكر في إحساس الشخص اللي خايف يروح للدكتور، تفكر كيف تطمّنه من أول ما يشوف التصميم.
شغلتك مش صورة وبس، شغلتك توصّل إحساس! تحرّك قرار، مش مجرد شكل. وهذا شيء الـ AI ما يقدر عليه.
الشطارة اليوم مش إنك تعرف تستخدم الأدوات! الشطارة إنك تكون مفكّر بصري، تفهم كيف تحل مشاكل حقيقية في السوق، تكون فاهم سيكولوجية المستخدم، تكون دارس تسويق، تقرأ، تسأل، تفكّر، تجرّب، تغلط، وتقوم تشتغل من جديد.
اللي الـ AI مستحيل يسويه هو طريقة تفكيرك… كيف تفكّك المشكلة؟ كيف تربط بين فكرة العميل واحتياج الناس؟ كيف تعرف متى تستخدم الأحمر… ومتى لا؟ كيف تخلي تجربة المستخدم سلسة من أول ما يشوف التصميم لحد ما يضغط على الزرار؟
هذا شغلك، وهذا الفرق بينك وبين AI.
#التصميم_مش_أدوات #فكر_قبل_ما_تصمّم #AI_مايقدر_يفكر_مكانك
👍1
طيب، اليوم لما نجي نتكلم في أي موضوع، لازم نحدد حاجة مهمة: من اللي بيتكلم؟ ومن اللي بيسمع؟ تمام؟ يعني، ممكن تكون بتتكلم مع شخص مبتدئ، أو شخص فاهم ومتخصص. وكذلك اللي بيتكلم نفسه، ممكن يكون فاهم، وممكن يكون مش فاهم. فالكلام اللي بتقوله بيختلف حسب المجتمع اللي بتخاطبه.
خلونا ناخذ مثال من الواقع:
أنت ساكن في بيت، ومقفل بقفل تمام. مقتنع إن القفل هذا بيحمي بيتك من أي حد يدخل؟ طيب، لو المفتاح حق القفل يقدر أي حد يعمله عند الحداد اللي تحت البيت ب ٣٠٠ ريال؟
لو جيت تقول "أنا مركب قفل بيحمي البيت"، هذا كلام ينفع تقوله لأطفال في أولى ابتدائي. لكن لو بتكلم مندوب شركة تأمين، لازم تقوله بطريقة ثانية: "أنا عندي قفل بيحمي بيتي من أي حد ما مابش معه ٣٠٠ ريال يشتري المفتاح من الحداد اللي تحت". لكن لو المفتاح مرمي قدام الباب، فأنت ساعتها بتقول: "القفل بيحمي البيت من أي سارق أعمى"، لأنه أي سارق عادي بيشوف المفتاح ويفتح الباب.
طيب، لو ما فيش حداد، وأنت ساكن في الدور الأرضي وشباكك مفتوح؟ هل القفل بيحمي البيت؟ لا، لأن الشخص مش محتاج يدخل من الباب أصلاً، يدخل من الشباك. لكن لو الشباك صغير وما يقدر يدخل منه إلا الأطفال، ساعتها بتقول: "بيتي محمي من أي حد وزنه أكثر من ٢٥ كيلو".
كل هذا نفس الفكرة، نفس القفل، بس طريقة الكلام تختلف حسب اللي بيسمع. وهذا هو اللي يربطنا بالموضوع الأساسي: الناس اللي تتكلم عن الأمان (Security) والحماية (Protection)، وما تفهم الفرق بينهم.
في بعض الناس لما تستخدم "const" أو تعدل في بعض الفيلدات، تقول: "إحنا كذا أمنّا البيانات عشان ما حدش يعدلها". طيب، هل فعلاً هذا يمنع أي حد من التعديل؟ خلونا نشوف.

عندك ثلاث أنواع من الناس يتعاملوا مع الكود حقك:

زملاؤك في الفريق: عندهم وصول مباشر للكود، ولو عايزين يعدلوا حاجة، بيعدلوها. مش لأنك عملتها "const"، بل لأن الشركة عندها سياسة مراجعة للكود، واللي ما يوافق عليه الـ Code Review ما يتم.

الأطراف الخارجية: بغض النظر عن أي حماية تسويها، كل لغة برمجة تقدم طرق للوصول للبيانات والتعديل عليها. مثلاً، في C++ ممكن يرمي الكائن كله داخل Pointer ويعدل فيه، وفي C# و Java عندك Reflection.

المستخدم النهائي: التطبيق لما يشتغل، النظام يشوف البيانات كأنها بيانات في الذاكرة، أي شخص معه Debugger أو Memory Viewer يقدر يعدل عليها.

بالتالي، لو كان هدفك تمنع أي تعديل، فشلت فشل ذريع، لأن أي حد يتعامل مع السيستم حقك يقدر يغيره.

وهنا نرجع للفرق بين الأمان والحماية:

Security (الأمان): أنك تمنع حد ما تريده يغير البيانات.

Protection (الحماية): أنك تمنع التغييرات غير المقصودة.

مثال:

عندك متغير يخزن درجة الطالب، والدرجة تكون بين 0 و 100. ما تريد أحد يدخل درجة أكثر من 100 أو أقل من 0. مش لأنك تبغى تتحكم فيهم، بل لأن المنطق حق البرنامج كذا. فتسوي دالة (Setter) تتأكد إن الدرجة في النطاق الصحيح، ولو في خطأ، ترمي Exception.
هنا، أنت حميت البيانات، لكن ما أمنتها. الحماية كانت على البيانات نفسها، مش على من يقدر يعدلها.



الفرق بين Data Protection و Data Security كبير جداً، وللأسف بعض الناس اللي يقولوا عن نفسهم متخصصين ما يفرقوا بينهم. كل اللي يعرفوه هو إنهم "بيمنعوا الناس من التعديل"، وهذا كلام ممكن يجي من شخص ما يعرف برمجة أصلاً.
فالنهاية: إذا كانت الكبسولة (Encapsulation) ما قدرت تمنع التعديل تماماً فهي فشلت من أول مبدأ في الـ OOP وانتهى الحوار!

#عيد_انتبه_لمنزلك
#رسالها_100_معيد_ودكتور
تعلم كيف تتعلم ! لو صببت الحليب قبل الشاهي أو العكس هل في فرق ؟
موضوع الأمن السيبراني مش قصة tools  مدري ايش عندما حتى تدخل المجتمعات هذا أو أي جانب منهم حتى عندما تدخل معهم تفقد الثقه الموضوع ليس هذا والامن والحماية مبني على أساس قوي وبلاش تضيع وقتك في اختراق شبكة جارك أو أين كان طبعا هذا ليس اختراق والا تتعب في ال social engineering و الويب dark  هم من عمل التكنلوجيا وفر الكل واحد سوق ومستفيد من الكل المتهبشين والي لا يعرف القانون فتح له سوق والي ماشي بالقوانين وفر له كذلك تعلم برمجة صح وكل خطوة فكر ازي تحميها  .
#ازي_وضع_الأمن_السيبراني
في الإمتحانات online يتم إعتماد طريقة غش متعارف عليها عند أي شخص في مجال IT
تنصيب بيئة virtualisation ك VMware أو virtual box.
ثم تصميم جهاز يتقاسم hardware مع النظام الأساسي (وينداوز مثلا)
ينصح استخدام OS ك Ubuntu على الجهاز الافتراضي.

بعد الانتهاء يتم اختيار مواصفات الشبكة بحيث يتم عزل التواصل بين الجهاز الاصلي و الحقيقي ،فيمكن اختيار خيار bridge adapter مثلا و نعطي الجهاز الافتراضي IP مختلف من الجهاز الأصلي .

بعد الانتهاء يتم فتح الايمايل الخاص بك في الجهاز الافتراضي و اجراء الامتحان عليه ، بينما يمكن عمل screen shoot للأسئلة و تنزيلها مباشرة على الجهاز الأم و البحث بحرية على الاجوبة بالذكاء الإصطناعي.
الطريقة الثانية هي مشاركة واجهة الحاسوب مع شخص آخر متصل مع حاسوبك حيث يمكنه الإجابة بدلا عنك حتى ولو كان بعيد بتقنيات ك RDP, team viewer,x11forwarding +SSH, . و هي طريقة متعارف عليها في الجامعات الأوروبية خاصة لذلك فالاساتذة في جامعات اوروبا لا يزالون ليومنا هذا يعتمدون اختبار الورق.
الطريقة الثالثة هي عن طريقة الخدمات السحابية ،فيمكن إعداد Session Manager في AWS أو Bastion Host في Azure للسماح بالوصول عن بُعد.

#vmware #azure #aws #virtualisation #cloud #computing
1
شوف… في أشياء لو ما أحد تكلم عنها بوضوح، بتظل تتكرر وتكلفنا كثير بدون ما ننتبه. تخيل معاك نظام أكثر من واحد يستخدمه، وكلهم يشتغلوا على نفس البيانات بنفس الوقت… أنا أشوفها كل مرة: واحد عدّل، والثاني عدّل، وكل واحد يظن إنه اشتغل لحاله، والنتيجة؟ تضارب، بيانات ضاعت، أو أحد كتب فوق الثاني. ولا أحد درى.

وهنا تظهر فكرة يسموها "Optimistic Locking"، بس هي مش مسألة اسم أو مصطلح… هي فكرة ببساطة تقول: "تأكد إنك آخر واحد شاف البيانات قبل ما تغيّر فيها."

يعني بدل ما نقفل البيانات ونمنع الكل يعدل (زي Pessimistic Locking)، نخلي الكل يشتغل بحرية… لكن نحط شرط بسيط: إذا أحد سبقك وعدّل، ما نسمح لك تحفظ إلا لما تشوف التحديث الجديد.

وهذا الشرط البسيط يتم عن طريق شيء يسموه ETag، وهو ببساطة بصمة للبيانات (زي توقيع)، كل مرة يتغير فيها المحتوى، تتغير البصمة.

بالنسبة للتعديل (PUT أو PATCH) لما ترسل الطلب، تحط الهيدر If-Match: "" وتقوله: "أنا بأعدّل، بس فقط لو البصمة هذي نفسها ما تغيّرت." لو تغيّرت؟ السيرفر يرد عليك بـ:

412 Precondition Failed "يعني أحد سبقك وعدّل، لازم تسحب التحديث الجديد وتشوفه أول، بعدين قرر."

والنقطة اللي ناس كثير ما ينتبهوا لها هي حتى عند القراءة (GET) تقدر تحط If-None-Match: "" وهنا تقول للسيرفر: "عطني البيانات فقط لو تغيّرت من آخر مرة." لو ما تغيّرت؟ السيرفر يرد بـ:

304 Not Modified "يعني لا ترجع لي نفس البيانات مرة ثانية، وفر علي البيانات والباندويث."


وش الفايدة؟ فايدتها قوية جدًا في الأنظمة الكبيرة أو اللي فيها بيانات تتكرر كثير. بدل ما كل شوي تجيب نفس البيانات من السيرفر، تستخدم ETag وتخليها كمرجع، وإذا البيانات نفسها؟ السيرفر يقول لك: "مافي جديد"، وأنت ترتاح.

تخيل آلاف الأجهزة تشيك بيانات بنفس اللحظة، لو كلها سحبت البيانات من جديد وهي نفسها؟ ضياع وقت وضغط على السيرفر بلا معنى. لكن مع ETag و If-None-Match؟ تقليل هائل في الاستهلاك، وتحسّن في الأداء، وكل هذا بصمت وذكاء.

والمقارنة هنا مع العكس تمامًا:
لو تجاهلت الـ ETag وفكرت تعدّل بدون أي تحقق، فاحتمال كبير تعدّل على بيانات قديمة بدون ما تدري، والنتيجة: بيانات ضاعت، أخطاء حصلت، أو تقارير صارت فيها تناقضات.

ولو في الـ GET تسحب البيانات في كل مرة بدون ما تسأل إذا تغيّرت؟ يضيع عليك وقت، موارد، وسرعة… والنتيجة تجربة مستخدم بطيئة ومتكررة بدون فائدة.

الخلاصة؟ مش لازم توقف الناس من التعديل، ولا تمنعهم من الوصول، بس خلي بينهم وبين الحقيقة شرط بسيط: "تأكد إنك ما تشتغل على شي قديم."

وهذا الشيء، رغم بساطته، يحل مشاكل كثيرة ويخلي النظام أذكى وأرتب، ويحمي بياناتك من الضياع بصمت.

ونقطة أخيرة… مش كل تعقيد في الكود شر، أحيانًا سطر واحد زي If-Match أو If-None-Match يحميك من أيام من التحقيق في bugs ما حد داري من فين طلعت.

ما تتعامل مع ETag؟ يعني أنت تسحب بيانات "تظن" إنها صحيحة… وتعدل على شيء "تفترض" إنه ما تغيّر… بينما النظام يقول لك: "أنا ما أقدر أضمن لك شيء."

#التزامن_مش_ترف #OptimisticLocking #DotNet #كود_يعيش_طويل #خلي_الكود_يحميك_مش_يعلقك
1
أهمية مراجعة الكود Code Review ستزداد في الفترة المقبلة مع الإعتماد المتزايد على الذكاء الإصطناعي التوليدي.
الوقت الذي نربحه في كتابة الكود بفضل ال AI سيسخر فيما بعد لقراءة ومراجعة وإعادة ترتيب ذلك الكود (قانون انحفاظ الطاقة 😀).
هناك مقولة في عالم البرمجة (منسوبة لمصمم لغة بايثون) تقول أن "الكود يُقرأ أكثر مما يُكتب"، ويبدو لي أنها عبارة سنسمعها أكثر وسيكون لها مسوعات أقوى في المستقبل القريب.

#الموضوع_كبير