Code Cave

Code Cave Welcome to Code Cave! Dive into the world of software development with us.

مكملين كلامنا عن Docker! ده Part 2 ده Part 2 من البوست اللي فات. حصلت معانا مشكلة لما بنفتح على الـport 5000 ومش بنلاقي ...
28/10/2024

مكملين كلامنا عن Docker! ده Part 2
ده Part 2 من البوست اللي فات. حصلت معانا مشكلة لما بنفتح على الـport 5000 ومش بنلاقي حاجة. فالأول، محتاجين نعرف سبب المشكلة، وبعدها نشرح الحل! 💡

🔸 الفرق بين الـContainer و الـImage
في بوست سابق من السلسلة، وضحنا الفرق بين الـContainer و الـImage، وقلنا إن الـContainer هو Environment منفصلة بذاته. لو مشوفتش البوست ده، ارجع شوفه الأول 👀!

المشكلة
المشكلة اللي حصلت إن المشروع بيكون Deployed على Port 5000 جوا الـContainer.

الحل
الحل ببساطة هو إنك لما تعمل Run للـContainer، تضيف Flag للـPort زي كده: -p 5000:5000 🔌. ده بيخلي أي Request ييجي على 5000 عندك يتوجه على 5000 جوه الـContainer، وكده نبقى حلينا المشكلة! 💪

📌 ممكن تسألني شوية أسئلة زي:

إيه الفرق بين RUN و CMD؟
الاتنين بينفذوا Commands، لكن RUN بيتنفذ أثناء الـBuild قبل ما الـContainer يقوم. أما CMD فبيشغل الـCommand أول ما الـContainer يبدأ ✅.

ليه عملت Copy للـpackage.json لوحده والباقي لوحده؟
دي حركة مهمة للـDocker Optimization! 🚀 Docker بيعمل Cache للCommands اللي اتنفذت قبل كده، فلو عملنا Copy للـpackage.json لوحده، وخليناه في خطوة مستقلة، مش هيعيد تثبيت الـnpm لو الـpackage.json ما اتغيرش. أما لو حطيناه مع الـSource Code، هيعمل npm install في كل مرة، وده مش Efficient.

🎉 ده كان الجزء الثاني من البوست
فيه حلول للمشكلة اللي واجهتنا، وكمان شرح ليه عملنا الحاجات بالطريقة دي. لو عندك أي سؤال، سيب كومنت وهرد عليك. البوست الجاي إن شاء الله هنبدأ نتكلم عن الـVolumes، أنواعها، وازاي نستخدمها 🔥

مكملين كلمنا عن ال Reflection وهنتكلم النهارده عن بعض الاستخدامات الاخري لل Reflection + ازاي نعمل Implement لل Reflecti...
23/10/2024

مكملين كلمنا عن ال Reflection وهنتكلم النهارده عن بعض الاستخدامات الاخري لل Reflection + ازاي نعمل Implement لل Reflection
ممكن نستخدم ال Reflection فاي تاني ؟
Model Validation with Custom Attributes
Automated Unit Testing
ولو مش عارف ايه هي ال Attributes او ازاي نعمل Custom Attributes استنانا الحلقه الجايه ان شاء الله هنتكلم عنه بالتفصيل
ازاي بقي اعمل implement لل Reflection يعني ازاي اقدر اجيب اسم ال Assembly اللي ال Type بتاع ال Object بتاعنا ده منه وايه هي ال Members اللي جوا ال Type ده وحاجات تانيه كتير تابع معانا علشان تعرف كل حاجة ☺
اعتبر ان احنا عملنا Console Application وعملنا جواه كلاس اسمه TryAssemblyExamples زي ما واضح في الصوره كده وجينا بقي في كلاس ال Program عملنا object عادي من ال Class ده :
TryAssemblyExamples tryAssemblyExamples = new TryAssemblyExamples();
ازاي بقي الوقتي اعرف اجيب اسم ال Assembly اللي الكلاس ده جواه ؟؟
var AssemblyName = tryAssemblyExamples.GetType().Assembly.GetName();
طب لو عاوز اجيب ال BaseClass بتاع الكلاس الجميل بتاعنا ده ؟؟
var BaseClass = tryAssemblyExamples.GetType().BaseType;
وممكن بقي تجيب ال Interfaces اللي الكلاس ده عملها Implement بنفس الطريقه طب لو عاوز اجيب كل ال Memebers اللي جوا الكلاس ده ؟؟
var AllMembers = tryAssemblyExamples.GetType().GetMembers();
بس خلينا نقف هنا شويه تعرف السطر ده هيطبعلك ايه ؟؟
get_Y
set_Y
get_Z
set_Z
CompareTo
Equals
GetType
ToString
Equals
GetHashCodector
Y
Z
طب هو انا عندي الحاجات دي كلها هقولك اه وتعال نمسكهم حاجة حاجة احنا مش قولنا ال Reflection ده بيشتغل اثناء ال Runtime فانت اثناء ال Runtime ال automatic property هتكون اتحولت ل 3 حاجات :
مثلا لو خدنا مثال ال
public int Y { get; set; }
هتتحول ل
get { return _y; } // getter method
set { _y = value; } // setter method
private int _y; // backing field
وكده كده انت وارث من كلاس ال Object "اللي اي Reference Type بيورث منه" 4 فانكشنز :
GetType
ToString
Equals
GetHashCode
وكمان احنا عارفين ان ال Class بيبقي عنده Constructor معمول تلقائي "في حالة انك معملتش Constructor بأيدك".
قبل ما تستخدم ال Reflection فكر كويس وشوف الحلول البديلة لانه بيأثر علي ال performance + لو استخدمته غلط هتبقي بوطت ال OOP لانك هتبقي قدرت تأكسس Private Fields وكده هتبقي بوظت ال Encapsulation ففكر كويس قبل ما تستخدمه
فيكده نكون اثبتنا فعلا ان ال Reflection بيقدر يوصل لل metadata وفيه بقي حاجات كتير تانيه تقدر تعملها بال Reflection بس علشان منطولشي عليكم كفايه كده النهارده والسلام عليكم ورحمته الله وبركاته 🤗.
لا تنسونا من صالح دعائكم.

هنبدأ نعمل Dockerize لأول app عندنا🚀 في البوست اللي فات، اتكلمنا عن الفرق بين Docker Images و Containers، والنهاردة هنبد...
22/10/2024

هنبدأ نعمل Dockerize لأول app عندنا🚀

في البوست اللي فات، اتكلمنا عن الفرق بين Docker Images و Containers، والنهاردة هنبدأ نعمل Dockerize لأول تطبيق لينا! قبل أي حاجة، لازم تكون منزّل Docker عندك على الجهاز وعامل تشغيل لـ Docker Engine.

هنعمل Node.js Application بسيط عشان نعمله Dockerize سوا. التطبيق ده هيعمل تشغيل على Port 5000 وهيبقى فيه Endpoint واحدة بترجع لنا Hello from Dockerized App .

إزاي نعمل Dockerize للتطبيق بتاعنا؟ 🐳

علشان نعمل Dockerize للتطبيق، لازم يكون عندنا ملف اسمه Dockerfile. الملف ده بيساعد Docker يبني الـ Image بتاعتنا اللي هنشغّل من خلالها الـ Containers. الـ Image في Docker عبارة عن Layers، وكل Command في الـ Dockerfile بيبني Layer جديدة. تعالوا نشوف كل Command بيعمل إيه:

Dockerfile Breakdown 📜

1. FROM node:20
ده أول Command، بنحدد فيه الـ Base Image اللي هنستخدمها كأساس للتطبيق. هنا اخترت Node بإصدار 20.

2. WORKDIR /app
بعمل Folder جوا الـ Container اسمه app، هحط فيه كل ملفات التطبيق.

3. COPY package.json /app
بنسخ الـ package.json لجوا الـ app Folder. الملف ده بيحتوي على الـ Packages اللي بستخدمها في المشروع.

4. RUN npm install
بشغّل Command ينزّل كل الـ Dependencies المطلوبة للتطبيق.

5. COPY . /app
بنسخ باقي الملفات من المشروع لجوا الـ Container.

6. EXPOSE 5000
ده Command للـ Documentation، عشان اللي بيشوف الـ Dockerfile يعرف إن التطبيق هيشتغل على Port 5000.

7. CMD ["npm", "start"]
بشغّل التطبيق باستخدام npm start بعد ما جهّزنا كل حاجة في الـ Container.

بناء الـ Image وتشغيل الـ Container 🏗

بعد ما خلصنا كتابة الـ Dockerfile، هنبدأ نبني الـ Image بتاعتنا:

docker build -t node-app-image .

بـ Command ده، بنعمل Build للـ Dockerfile الموجود في الـ Directory الحالي (.)، وبنحدد اسم للـ Image باستخدام الـ Flag -t. ممكن تعملها بدون اسم، لكن الاسم بيسهّل التعامل.

بعد كده، هنعمل Run للـ Container:

docker run --name my-container -d node-app-image

الـ Container هيتشغّل وكل حاجة هتبقى تمام. بس في مشكلة! لما تفتح Port 5000 مش هتلاقي حاجة، رغم إنك لو عملت docker ps هتلاقي إن الـ Container شغّال.

الحل في الجزء التاني! 🔧

هنكمل في الجزء التاني وهنحل المشكلة دي إن شاء الله، عشان البوست ما يبقاش طويل أوي

ايه هو Reflection؟ 🤔Reflection هو ميزة في C # بتساعدنا نAccess الMetadata والCompiled Code بتاع Assembly معين أثناء الRu...
22/10/2024

ايه هو Reflection؟ 🤔

Reflection
هو ميزة في C # بتساعدنا نAccess الMetadata والCompiled Code بتاع Assembly معين أثناء الRuntime.

طب ايه هي الMetadata دي أصلاً، ويعني ايه Assembly؟ 🤔
باختصار، الAssembly هو عبارة عن مجموعة من الملفات اللي اتعملها Compile + شوية Resources زي الصور...الخ + الMetadata. يعني كأننا بنتكلم عن مشروع زي "Class Library" أو "Console App".

الMetadata هي المعلومات الخاصة بالAssembly، زي:

اسم الAssembly

References
اللي الAssembly واخدها من Assemblies تانية

معلومات تانية كتير

لكن... أنا لسه مش فاهم Reflection بيعمل ايه بالظبط! 😩

بص يا صاحبي، الReflection بيخليك تعرف:

ايه هي الTypes الموجودة في Assembly معين

الMembers اللي موجودة في Type معين (Methods, Properties, Fields,...)

الInterfaces اللي الType ده بيعملها Implement

الType اللي الType بتاعنا ده بيورث منه

ايه الاستخدامات اليومية للReflection اللي مش واخدين بالنا منها؟ 🤔
لو مثلاً عرفنا نوع int، إزاي Visual Studio بيقدر يقترح علينا الفانكشنز الخاصة بالint مش الخاصة بالstring؟ لأنه عمل Reflection على الObject ده وعرف يجيب ايه هي الMethods اللي جواه.

تمام، كده عرفنا إن الReflection له استخدامات كتير! 😏
لكن... إزاي نعمله Implement؟

استنونا في الحلقة القادمة إن شاء الله 😊
هنتكلم أكتر عن الReflection وإزاي نقدر نعمله Implement.
لا تنسونا من صالح دعائكم 🥰

🔥مكملين ف كلامنا عن الDocker و المرادي هنتناقش الفرق بين الـ Docker Image والـ Container:الـ Image عندي هي الـ Blueprint...
21/10/2024

🔥مكملين ف كلامنا عن الDocker و المرادي هنتناقش الفرق بين الـ Docker Image والـ Container:

الـ Image عندي هي الـ Blueprint أو الـ template اللي ع أساسه ببني الـ Container بتاعي، زي الـ class اللي بعمل منه objects. والـ Image ليها شوية خصائص مهمة:

🛠️ Immutable:
يعني بعد ما تعملها build مش هتقدر تغير فيها، لازم تعمل واحدة جديدة لو عايز تعدل.

🍰 Layers:
الـ Image عبارة عن طبقات، وكل طبقة بتمثل خطوة معينة زي تثبيت باكدج. وعلشان الـ Docker ذكي، بيستخدم caching techniques، يعني لو عملت حاجة قبل كدا، هو بيحتفظ بيها ومش بيكررها.

🚀 Lightweight:
علشان بتستخدم caching، فالـ Image بتكون خفيفة.

🌍 Docker Hub:
هو المكان اللي تقدر ترفع عليه الـ Images بتاعتك وتخليها متاحة على الإنترنت لأي حد.

---

بالنسبة للـ Container، هو عبارة عن running instance من الـ Image. وده يعني إنه ممكن تعمل أكتر من Container من نفس الـ Image.

🛠️ Mutable:
عكس الـ Image، الـ Container ممكن تعدل فيه وهو شغال.

⚡ Lightweight:
بيستخدم نفس الـ kernel بتاع الـ host لكنه معزول عنه، ومش بيتأثر بأي حاجة من ناحية الـ CPU أو الـ memory بتاعت الـ host.

⏳ Ephemeral:
يعني لما تقفل الـ Container، كل الداتا اللي عليه بتروح.

---

وبكده أكون اتكلمت عن الـ Image والـ Container، وهما من أهم الحاجات في Docker. في البوست الجاي إن شاء الله، هنبدأ نتعلم إزاي نعمل dockerize لأول تطبيق عندنا! 🎉

في مشكلة شائعة بتواجهنا كـ developers، خصوصًا لما ندخل شركة جديدة، سواء كانت الشركة دي product-based وعندها منتج معين شغ...
20/10/2024

في مشكلة شائعة بتواجهنا كـ developers، خصوصًا لما ندخل شركة جديدة، سواء كانت الشركة دي product-based وعندها منتج معين شغالين عليه أو كانت software house بتعمل حلول لمختلف العملاء. كـ developer جديد، ممكن تكون هتشتغل على مشروع معين في الشركة وتبدأ تسأل عن الـ stack أو الـ dev kit اللي شغالين بيها. فمثلاً، ممكن يقولك إنهم شغالين بـ ASP.NET و SQL Server للـ database، وبيستخدموا Redis كـ provider للـ caching، وهكذا. 🚀

عشان تبدأ تشتغل على المشروع ده، هتحتاج تنزل كل الـ dependencies اللي شغال بيها المشروع علشان يشتغل عندك. وهنا غالبًا هيبدأ يظهرلك installation errors، وده السيناريو الطبيعي، وهتضطر تسأل عشان تحلها. 😅 وحتى لو عدَّيت المرحلة دي واشتغل كل حاجة تمام، ممكن لما تعمل run للـ app تلاقي إن النسخة اللي عندك مش متوافقة مع نسخة dependency معينة، فهتضطر تعمل downgrade. 🔄

والمشكلة مش هتقف هنا؛ حتى لما تيجي تعمل deploy للـ application، سواء على QC server عشان فريق الـ QC يبدأ يعمل testing، أو لو هترفعه للـ production، هتعدي بنفس الخطوات دي تاني على السيرفر. 🖥️

هنا بيظهر الحل السحري، وهو Docker. ✨

الـ Docker حل المشكلة دي تمامًا من خلال إنه بيقسم الـ application بتاعك لعدة containers، وكل container بيبقى جواه dependencies معينة. بتقدر تنقل الـ containers دي ما بين الـ environments المختلفة، من غير ما تضطر تعيد نفس الخطوات في كل مرة. وده بيسمحلك تركز أكتر على الـ business logic بدل ما تضيع وقتك في مشاكل التوافق بين الـ dependencies. 💪

بالتالي، الـ Docker هو أداة بتستخدمها عشان تنقل الـ dependencies أو أي حاجة محتاجها من environment للتانية بسهولة. 🌟

Address

Cairo
19111

Website

Alerts

Be the first to know and let us send you an email when Code Cave posts news and promotions. Your email address will not be used for any other purpose, and you can unsubscribe at any time.

Share