DevGuide
محتوى تقني عربي عن هندسة البرمجيات ⚡️ Stay connected with me: linktr.ee/AliSamir 📍 To advertise on the channel: https://telega.io/c/the_developer_guide
Show more📈 Analytical overview of Telegram channel DevGuide
Channel DevGuide (@the_developer_guide) is an active participant. Currently, the community unites 10 987 subscribers, ranking 10 905 in the Technologies & Applications category and 10 703 in the Iraq region.
📊 Audience metrics and dynamics
Since its creation on невідомо, the project has demonstrated rapid growth, gathering an audience of 10 987 subscribers.
According to the latest data from 29 August, 2026, the channel demonstrates stable activity. Although there has been a change in the number of participants by -33 over the last 30 days and by 1 over the last 24 hours, overall reach remains high.
- Verification status: Not verified
- Engagement rate (ER): The average audience engagement rate is 8.78%. Within the first 24 hours after publication, content typically collects 2.04% reactions from the total number of subscribers.
- Post reach: On average, each post receives 964 views. Within the first day, a publication typically gains 224 views.
- Reactions and interaction: The audience actively supports content: the average number of reactions per post is 3.
- Thematic interests: Content is focused on key topics such as مَشرُوع, حَاجَة, بَيَان, جِدّ, طَلَب.
📝 Description and content policy
The author describes the resource as a platform for expressing subjective opinions:
“محتوى تقني عربي عن هندسة البرمجيات
⚡️ Stay connected with me: linktr.ee/AliSamir
📍 To advertise on the channel: https://telega.io/c/the_developer_guide”
Thanks to the high frequency of updates (latest data received on 30 August, 2026), the channel maintains relevance and a high level of publication reach. Analytics show that the audience actively interacts with content, making it an important point of influence in the Technologies & Applications category.
Microservices Made Simple: A Beginner’s Guide with a Real Example 💯Imagine you’re building a house. You could construct it as one giant, unchangeable block with everything fused or use a modular approach, with separate rooms you can tweak, replace, or upgrade without tearing the whole thing down. https://differ.blog/p/microservices-made-simple-a-beginner-s-guide-with-a-real-example-47c171
Let’s go beyond “it renders” and explore how to write robust, maintainable tests with React Testing Library
Let’s break it down, what they do, when to use them, and how to choose the right one for your app.
✅ أولًا: الـ Hashing:تخيل إنك بتعمل بصمة لأي معلومة… مش علشان ترجع لها بعدين، لكن علشان تتأكد إنها متغيرتش. الـ Hashing بياخد قيمة (زي password مثلًا)، ويطلع منها سلسلة ثابتة الطول شكلها عشوائي – اسمها Hash – واللي بتستخدمها عشان تطابق أو تتحقق من البيانات من غير ما تحتاج تخزن الأصل. 🎯 المهم هنا: - العملية دي One Way (مفيش رجوع). - لو غيرت حرف واحد، الـ Hash كله بيتغير. - وده اللي بنستخدمه مثلًا لما نخزن الـ Passwords في قواعد البيانات. ⚠️ لو حد عرف الـ Hash، مش هيعرف يطلع منه الباسورد الأصلي (بس ممكن يعمل Brute Force ويحاول يخمنه). ———
✅ ثانيًا: الـ Encoding:ده ملوش أي علاقة بالسرية... الـ Encoding هو طريقة بنحول بها البيانات لشكل تاني علشان يسهل تخزينها أو نقلها. زي Base64، اللي بتحول مثلًا صورة أو نص يحتوي رموز غريبة لشكل مفهوم لأي نظام. 🎯 المهم هنا: - العملية دي Two Way (تقدر ترجّع البيانات الأصلية). - مفيش أي حماية أو تشفير، أي حد يعرف نوع الـ encoding يقدر يفكه بسهولة. - الهدف منه بس إنك تنقل الداتا بدون ما تضيع أو تبوظ. مثال بسيط: لو عندك some text ممكن يتحول بـ Base64 إلى: c29tZSB0ZXh0 ———
✅ ثالثًا: الـ Encryption:أنت عايز تبعت داتا سرية لحد، ومش عايز أي حد في النص يفهمها. فبتعمل لها تشفير باستخدام مفتاح (Key)، والمستلم اللي معاه المفتاح يقدر يفكها. 🎯 المهم هنا: - العملية دي Two Way، بس لازم المفتاح. - لو المفتاح اتسرّب أو ضاع، أي حد يقدر يفك البيانات. - بتستخدمها في إرسال معلومات حساسة زي بطاقات الدفع أو بيانات المستخدمين. فيه نوعين من الـ Encryption: - الـ Symmetric: نفس المفتاح بيشفّر ويفك (زي AES). - الـ Asymmetric: مفتاحين، واحد بيشفّر (public) والتاني بيفك (private) – زي اللي بيستخدم في HTTPS. ——— 💡 إمتى تستخدم مين؟ - بتخزن passwords؟ يبقى Hashing - بتبعت صورة أو داتا عبر API؟ يبقى Encoding - بتبعت معلومات حساسة زي tokens أو بيانات مستخدم؟ يبقى Encryption ——— وفقكم الله لكل خير 🌿
BEGIN TRANSACTION;
UPDATE accounts SET balance = balance - 100 WHERE id = 1;
UPDATE accounts SET balance = balance + 100 WHERE id = 2;
COMMIT;
لو أي واحدة من الـ 2 updates فشلت، الـ transaction كلها هتتفك، والداتا ترجع زي ما كانت كأن مفيش حاجة حصلت.
———
⚠️ إيه اللي ممكن يبوّظ الـ Atomicity؟
- قطع الكهرباء أو أي Crash في النص.
- الـ Exceptions أو الـ Errors في جزء من الـ transaction.
- إنك تنفذ queries من غير transaction أصلًا
ولو السيستم مش بيطبق الـ Atomicity صح، الداتا ممكن تبقى corrupted، وساعتها ربنا يستر.
———
📌 إيه الفرق بين الـ Atomicity وبين الـ Consistency؟
الـ Atomicity بتتكلم عن هل العملية كلها تمت أو لا؟
الـ Consistency بتسأل هل الداتا بعد العملية في حالة صحيحة؟
يعني:
- الـ Atomicity = حصل commit كامل ولا لا؟
- الـ Consistency = لو حصل، الداتا بقت consistent ولا لا؟
الاتنين مكملين بعض، بس مش نفس الحاجة.
———
وفقكم الله لكل خير 🌿BEGIN TRANSACTION;
UPDATE accounts SET balance = balance - 100 WHERE id = 1;
UPDATE accounts SET balance = balance + 100 WHERE id = 2;
COMMIT;
لو أي واحدة من الـ 2 updates فشلت، الـ transaction كلها هتتفك، والداتا ترجع زي ما كانت كأن مفيش حاجة حصلت.
———
⚠️ إيه اللي ممكن يبوّظ الـ Atomicity؟
- قطع الكهرباء أو أي Crash في النص.
- الـ Exceptions أو الـ Errors في جزء من الـ transaction.
- إنك تنفذ queries من غير transaction أصلًا
ولو السيستم مش بيطبق الـ Atomicity صح، الداتا ممكن تبقى corrupted، وساعتها ربنا يستر.
———
📌 إيه الفرق بين الـ Atomicity وبين الـ Consistency؟
الـ Atomicity بتتكلم عن هل العملية كلها تمت أو لا؟
الـ Consistency بتسأل هل الداتا بعد العملية في حالة صحيحة؟
يعني:
- الـ Atomicity = حصل commit كامل ولا لا؟
- الـ Consistency = لو حصل، الداتا بقت consistent ولا لا؟
الاتنين مكملين بعض، بس مش نفس الحاجة.
———
وفقكم الله لكل خير 🌿📦 مثال بسيط:[ كل الأكواد في التعليقات 👇 ]
class EmailService {
sendEmail(to: string, body: string) {
// logic to send email
}
}
class OrderService {
private emailService = new EmailService();
placeOrder(orderData: any) {
// logic to place order
this.emailService.sendEmail(orderData.customerEmail, "Order placed!");
}
}
كده الـ OrderService معتمد بشكل مباشر على الـ EmailService.
لو حبيت تغير وسيلة إرسال الإيميل أو تبعتها عبر SMS أو push notification، هتضطر تغيّر في الكود بتاع OrderService نفسه… وده ضد مبدأ open/closed principle كمان.
———
✅ الحل؟
interface Notifier {
notify(to: string, message: string): void;
}
class EmailService implements Notifier {
notify(to: string, message: string) {
// send email
}
}
class SMSService implements Notifier {
notify(to: string, message: string) {
// send sms
}
}
class OrderService {
constructor(private notifier: Notifier) {}
placeOrder(orderData: any) {
// logic to place order
this.notifier.notify(orderData.customerContact, "Order placed!");
}
}
كده الـ OrderService ميعرفش أي حاجة عن الـ implementation بتاع الـ notifier، سواء كان email أو sms.
هو بس بيتعامل مع abstraction (interface اسمها Notifier).
وبالتالي تقدر تغير الـ implementation في أي وقت من غير ما تلمس الـ OrderService.
———
💡 إزاي ده هيفرق معاك؟- الكود بتاعك بقى loosely coupled. - بقى modular وأسهل في التعديل والصيانة. - الـ testing بقى أبسط لأنك تقدر تعمل mock لـ Notifier بسهولة. - بقيت تقدر تبدّل الـ implementation من غير ما تعمل refactor تقيل. ——— الـ Dependency Inversion بيخليك دايمًا تفكر في dependencies على إنها شيء ممكن يتغير… فبدل ما تبني عليها بشكل مباشر، استخدم abstraction تفصل به بين high-level logic و low-level details. ——— وفقكم الله لكل خير 🌿
