Ahmed Aljaberi Profile picture
Programmer & Solution/Software Architect أُعلِّم لأتعلَّم.
Mar 24, 2023 4 tweets 1 min read
لما تحوّل Object الى Json يسمون العملية Serialize و العكس Deserialize. التسمية غير دقيقة لانه الSerialization تكون قبل ارسال الJson عبر الشبكة بشكل Binary. في الثمانينات كان في شي اسمه XDR و هذا كان حقيقي Serialized format و كان يستخدم لنقل البيانات من نظام لآخر عبر الشبكة
يتبع. هذا الXDR كان فورمات من ابتكار شركة Sun ( ام الجافا ) و كان مصمم كستاندر للRPC. الRPC هو مغامرة الFunctions الاولى للخروج من داخل صندوق الكمبيوتر لتصبح متاحة لكمبيوترات اخرى انها تناديها. حقيقة مو هذا موضوعي. لكن شي يتعلق بChatGPT
يتبع.
Mar 7, 2023 6 tweets 2 min read
هذه محتويات دورة لVernon احد رواد الDDD او يعتبر ثاني شخص بعد Eric Evan في هذا المجال. هذه ليست دعاية للدورة لكن شدني تضمينه لCynefin Framework في دورته. الكلمة تنطق كينيفن وعادة اربطها بكلمة "كنف" العربية لأن كلاهما تدلان على الموضع او المكان و كينفين اطار اتخاذ قرارات.
يتبع .. من الفوارق المهمة بين الWaterfall و الAgile هو نظرتها للسوفتوير. الWaterfall تتعامل معه كأنه Simple او Complicated حسب تصنيفات كينيفن. فالأول لا يحتاج لتحليل كما في البرمجيات البسيطة جداً و الثاني يحتاج تحليل لذا هي مرحلة اساسية من مراحل الWaterfall.
يتبع.
Jan 12, 2023 11 tweets 2 min read
كثير شركات بنت انظمتها او نسخها الاولى على انظمة مثل Wordpress او drupal او Joomla اللي في الاصل هي CMS اي Content Management System لكن بنت عليها انظمة تجارة الكترونية و شحن و فواتير او تعليم و ارشفة وغيرها . التعليم و الارشفة هنا اوكي , لكن البقية هناك وجهة نظر اخرى ..
(سلسلة) دروبال او اووردبرس في اصل بنائه يبدأ بنظام بسيط جداً يسمى الKernel او الCore و كون ان النظام في الاصل CMS فعادة يبدأون بشيء مثل Document يكون جداً بسيط Abstract و تكون عليه عمليات اساسية مثل الحفظ و الاسترجاع و التعديل بالاضافة الى الStorage المخصص له .
Dec 25, 2022 11 tweets 2 min read
عادة اصحاب الاعمال يعرفون "ماذا" يريدون فيتجهون لاشخاص محترفين يعرفون "كيف" ينفذونه. انتقال المعلومة يبدأ من لغة طبيعية يخاطب بها صاحب العمل المبرمج , ليحولها الاخير الى تراكيب لغوية برمجية يفهمها الكمبيوتر.
( سلسلة عن الNo/Low Code في ظل الAi) في الشركات العادية , يطلب المدير او مدير المنتج من المبرمج بلغة بسيطة شيء معين. مثلاً : اعمل تقرير لمبيعات المنتج الفلاني خلال الربع الاول هذي السنة و حط جنبه نفس الارقام من السنة الماضية. هذا الجملة طبيعي قد يفهمها مبرمج بشكل صحيح و قد يخطيء في فهمها اخر و يستوضح اكثر.
May 4, 2022 4 tweets 1 min read
هذه مقولة عميقة للدكتور فيمان ابتدأها بقوله ان "الطبيعة ليست كلاسيكية" وانما كوانتمية و لتمثيلها او محاكاتها نحتاج لفيزياء الكوانتم. لتمثيل الطبيعة علينا استبعاد الabstraction تماماً في تمثيل ال objects حيث نحتاج لتمثيلها كماهو بأدق تفاصيله. مثال بسيط على هذا
- يتبع Image تمثيل الObject هنا اقصد به ان يكون لدينا نسخة رقمية مطابقة له تماماً يمكننا استخدامها في المعامل الرقمية و كأننا نستخدم المادة نفسها في المعامل المختبرية. لن نحتاج في المستقبل لمختبرات كيميائية او فيزيائية؟ هذا ما يوعدنا به الكوانتم كمبيوتر.
يتبع -
Apr 8, 2022 10 tweets 2 min read
من المهارات البرمجية الممتعة و التي لا تتعلق بمشروع معين و تفتح آفاق لمستوى اخر لبناء التقنيات : هي مهارة برمجة الشبكات Networking. اغلب لغات البرمجة لديها مكتبات لذلك. الDB الMessages Hub الالعاب و التشات الLoad Balancers الFirewalls كلها تعتمد على برمجة الشبكات.

سلسلة Image اذا كنت تعتقد ان الشبكات هي مجال Hardware اخر بعيد عن البرمجة فهذا اعتقاد خاطيء. اجهزة الشبكات المختلفة مثل الRouters و الSwitches ماهي الا كمبيوترات عادية بانظمة معروفة مثل Linux و الجزء الأهم فيها و الأكبر هو السوفتوير. لكنها كهاردوير هي Optimized لهذا الغرض.
Oct 21, 2021 5 tweets 2 min read
تعليل: هذه ليست بسبب جافاسكريبت و انما بسبب المعيار IEEE 754.
الحالة 1: تعود لطريقة تمثيل العدد الكسري في الذاكرة بما يسمى float64 و شرحته سابقاً حيث ان 0.1 + 0.2 تحسبه Js ثنائياً حسب المعيار السابق كـ 0.30000000000000004 و ليس 0.3. لذا هم لا يتساوون.
ميني ثريد :) اضافة إلى ذلك فجافاسكريبت و لغات مثل Fortran و Basic حتى جافا 1.2 كانت تتبع نفس المعيار و تمثل العدد الصحيح كـfloat64 و لا تستوعب اكثر من العدد 9007199254740991 الذي يسمى في Js بـ MAX_SAFE_INTEGER فأي عددين صحيحين اكثر من ذلك تراهما متساووين. ونفس الشي ينطبق على الاعداد السالبة.
Oct 20, 2021 6 tweets 2 min read
الهدف من البرمجة في الأصل هي حل مشكلة البزنس. و عليه من المفترض أن يكون وقت المبرمج مركّز على ذلك الهدف.
لكن لو نظرنا الآن إلى ما يضيع فيه وقت المبرمج لوجدنا ان الوقت يستهلك تعلم تقنيات او في حل مشاكل تقنية سواء في الربط مععها او في تجهيزها و اعدادها للعمل.
(سلسلة عن Dapr ) العالم التقني في العشر سنوات الماضية حزم حقائبه التقنية نحو الCloud نحو بناء انظمة كبيرة , ثابته , آمنة , موزعة, ذات كفاءة , قابلة للتوسع , سهلة الصيانة استلزمت معماريات غير تقليدية تناسب المرحلة مثل معمارية الEvent Driven و الMicroservcies و ما تحتاجه من خدمات او عناصر سحابية.
Apr 3, 2021 12 tweets 3 min read
كلمة DevOps اصبحت مثل التعويذة السحرية , بس نقولها يستحضر عقلنا Azure DevOps و Jinkins و Travis و اتمتة عملية الBuild و الTest و الRelease. لكن هل هذي هي الDevOps ؟؟
(سلسلة) موضوع اتمتتة الBuild و الTest و الReleases هذي Continuous Deployment اللي بالخطأ بعض الناس تسميها Continuous Delivery. الفرق ان الأولى فيها اتمتة توصل للProduction و الثانية ليست بالضرورة مؤتمتة ولا توصل للProduction فقط تجهزها له و يصير الDeployment يدوي متى ما أرادوا.
Oct 16, 2020 12 tweets 3 min read
الIntegration علم واسع. و ليس مجرد تعامل مع أدارة لإدارة للAPIs. على سبيل المثال إن كان هناك 23 نمط تصميم
للبرمجة فهناك اكثر من 60 نمط تصميم للIntergration. مجرد استخدام ادوات مثل Apigee او Tibco لا يعني بالضرورة ضمان بأنك تقوم بالعمل الصحيح.
هذه سلسلة عن التكامل Integration. سأبدأ بالمرجع الأساسي و هو كتاب اُلف في بداية الالفينيات اسمه Enterprise Integration Patterns احصى مؤلفيه 65 نمط تصميم و قسموها إلى 9 مجموعات. اغلب ادوات الIntegration تكون متضمنة لأغلب تلك الPatterns و تظهرها كأنها Features للمنتج مما يجعلك لا تهتم لها.
Jul 6, 2020 13 tweets 2 min read
كيف نتعلم و تتقن لغة برمجة جديدة بطريقة احترافية ؟
هذا مجرد رأي قد يوافقني او يعارضني البعض و مرحب بآراء الجميع. المشكلة ان البرمجة طريق ننسى معالمه عندما نصل إلى نهايته. ليس الهدف هنا تعلم "البرمجة" بل لغة جديدة بافتراض اننا مبرمجين لكن بلغة أخرى. و ضعت 10 خطوات
( سلسلة ) لغتك القادمة التي سمعت بها او قرأت انها مطلوبة , يمكنك مبدئياً تشوف درس مما يسمى الCrash Course ساعة إلى ساعتين في اقصى حد. لأخذ فكرة عنها فقط. لكن اذا اردت الاحتراف فإليك هذه الطريقة الصعبة او الHard way.
Nov 13, 2019 11 tweets 3 min read
هذه السلسلة عبارة عن 10 نقاط مختصرة من مستند كتبه مهندس برمجيات في اوائل 2017 و كان قد عمل في Google لمدة 10 سنوات و كتبه في 20 ورقة. هناك الكثير من التفاصيل لم اذكرها و لمن اراد الإستزادة عليه الرجوع للورقة المرفقة.
(سلسلة)
arxiv.org/ftp/arxiv/pape… 1. لدى Google مخزن Repository للأكواد يضم اكثر من بليوني سطر. يتم عليه اكثر من 40 الف Commit يومياً. لكل مبرمج في الشركة حق الاطلاع و التعديل على أي كود حتى لو كانت خارج نطاق مشروعه. و يقبل بعد موافقة الCode Owner على التعديل.
Oct 22, 2019 13 tweets 3 min read
مصطلح الSQL و NoSQL هي تصنيفات للتسهيل لكن من وجهة نظر المختص فهي ACID و BASE أو Relational و Non Relational. هذه السلسلة سنتكلم اولاً عن الSQL Database او قواعد البيانات التي تجتمع فيها اربع خواص يرمز لها بالحروف ACID. لكن هنا تختلف قليلاً عن الACID المعروفة ( سلسلة ) الإختلاف هنا يعود إلى ان المقارنة بين قاعدة بيانات SQL مثل MySQL و NoSQL مثل Cassandra مثلاً لا يصح. لأن فكرة الNoSQL الأساسية هي ان تكون موزعة على اكثر من سيرفر, لذا يجب أن تكون المقارنة مع قاعدة بيانات SQL موزعة مثل MemSQL او ClustrixDB و Amazon Aurora و غيرها.
Sep 25, 2019 7 tweets 2 min read
استكمالاً لما سبق , الMVVM اختصار لModel View ViewModel Model و قد بُني على MVC و MVP من قبل مايكروسوفت لتقنية WPF مع انه كان هناك شيء مشابه له اختصاره MVPM كتب عنه Martin Fowlerفي بداية الالفين. لنفهم فائدة الMVVM , مايكروسوفت عندما قدمت Silverlight و WPF او Xaml بشكل عام .هذه الادوات تحتاج لمسة من مصمم جرافكس محترف فبدل ان نعطي المصمم كل المشروع نستطيع ان نعطيه فقط هذه الجزئية و نعمل كمبرمجين على جانب الBackend.
Jul 27, 2019 4 tweets 2 min read
سؤال لأحد المتابعين عن التقنية التي استخدمت في لعبة Pokemon Go و كيفية الدمج بين العالم الحقيقي و الافتراضي . هذه التقنية تسمى Augmented Reality اختصارها AR و ليس Virtual Reality VR. يمكن عمل تطبيقات لها عن طريق محركات الالعاب مثل Unity3D و Unreal . ( سلسلة ) تقنية الVR هي اسهلها و الفرق بينها و بين الAR انها فقط مجرد رسومات 3D بالكمبيوتر و يمكن التفاعل معها عبر الكمبيوتر بالكيبورد او عصا التحكم او الماوس مثل العاب Call of Duty كما يمكن دمج حساسات المكان و زاوية الرؤية الموجودة في الموبايل او نظارات الواقع الافتراضي مثل Oculus Rift .
Apr 20, 2019 7 tweets 2 min read
هناك طرق كثيرة لتعلم البرمجة , القراءة , الدورات في الفصول أو الإلكترونية , مشاهدة دروس على اليوتيوب , قراءة اكواد اشخاص اخرين , الطلب من شخص ان يعلمك وجهاً لوجه او محاولة بناء برنامج و الضغط على نفسك حتى تنجزه . لكن هناك طريقة اخرى ( سلسلة ) هناك خلاف في الآراء حول إن كانت البرمجة عِلم أم فن ؟ . ربما الأثنان , احياناً البرمجة مثل لعبة الشطرنج , هناك استراتجيات لا تتعلمها إلا بالملاحظة المباشرة , لأنها شيء لو اراد الشخص الاخر تعليمك اياها سيعجز لأنها خبرة .
Mar 27, 2019 12 tweets 3 min read
هذا الجزء الثاني عن كيف صممت Twitter منصتها و هو خاص بعمليات القراءة للتايم لاين سواء لك كمستخدم او لمن تتابع , و رؤية تغريداتك , و تغريدات من تتابع و تفضيلاته لمن يتابع . كما ذكرت سابقا قد لا يكون مطابق للواقع و هدف الشرح تثقيفي فقط . ربما لاحظنا في الجزء الاول من السلسلة أن تويتر يفصل الكتابة عن القراءة , يكتب في مكان و يقرأ من مكان آخر . لأنه من الصعب تصميم قاعدة بيانات تخدم العمليتين بكفاءة . Normalized للكتابة و Denormalized للقراءة كما في ال Data warehouses . فهذا ضروري للأداء .
Mar 26, 2019 15 tweets 3 min read
بما أنا ضيوف تويتر , فسأبدأ بشرح مختصر لبعض التقنيات التي يستخدمها و لماذا , احب ان انوه إلى أن تويتر بيئة ديناميكية أي تغير تقنياتها بسرعة و لذا سأكتب باختصار عن ما استطعت رصده من خلال مدونات مهندسي تويتر و متكلميهم في المؤتمرات بالاضافة إلى المقالات العامة . في البداية عندما نكتب twitter.com و قبل ان نصل إلىه كانت تتلقفنا خدمة GeoDNS التي تقوم بمعرفة موقعنا الجغرافي من خلال IP المتصل ثم تحوله لDataCenter الأقرب له , غيرّها تويتر لاحقاً و استخدم BGP Anycast
اشترك Twitter في تلك الخدمتين المزودتين للDNS لأجل السرعة .
Mar 26, 2019 13 tweets 2 min read
هذه السلسلة مقدمة لسلاسل بعدها عن كيف تصمم الأنظمة الكبيرة مثل Twitter و Facebook و LinkedIn و Uber و Whatsapp و غيرها . احتاج إلى تبسيط مفاهيم برمجية شائعة في مثل تلك الأنظمة تدعم تضخمها سواء من ناحية عدد المستخدمين او الخدمات او البنية التحتية من خوادم و غيرها . لنفرض اننا نريد تطوير نظام بسيط مشابه لTwitter عندما نكتب تغريدة في Twitter في صفحة Web نستقبلها من خلال Method في Controller و نقوم بتخزينها في قاعدة بيانات من ثلاث جداول Tweets و Users , Mapping
Mar 25, 2019 9 tweets 2 min read
عندما نطور نظاماً ليستخدمه الآلاف او الملايين , لن يكون كتطوير نظام يدخله بضعة آلاف . إن ظننت ان الانظمة الكبيرة تعتمد على Full Stack معروف فيه Front-End و API و قاعدة بيانات فعليك إعادة التفكير . في هذه السلسلة سنستعرض لمحة عن كيف يمكن أن تبنى مثل هذه الانظمة . يمكن القول بأن أي نظام يعتمد على عمليتين رئيسيتين إما Command او Query . أمر يغير الState للنظام أي يغير قيمه في الذاكرة و استعلام لا يغير اي قيمة. موضوع الإستعلام سهل فالبيانات محفوظة و يهمنا فقط السرعة . اما امر الCommand فهو حساس قليلاً , فلا تريد أن تفقد طلباً قام به مستخدم.
Mar 24, 2019 12 tweets 2 min read
كمبرمجين علينا أن ننظر إلى قواعد البيانات كجزء من الInfrastructure لا من الApplication بمعنى أنها شيء خارجي نستخدمه حسب حاجتنا , الClasses هي من تحدد أي قواعد بيانات نستخدم و كيف نحفظها لا العكس كما في تقنيات ال ORM كـ EF او JPA او SQLAlchemy ان تدفعنا إليه . إذا قمت بتصميم Class ليتم تحويله إلى Table و تحويل الObject إلى Row فهذا يعني ان ما قمت بتصميمه ليس بـObject بل مجرد Data Structure . و ليس Rich Class و انما Anemic Class هزيل . هذه الممارسة ستجعلك خارج إطار الObject Oriented Programming ولا يمكن تطبيق مباديء او انماط التصميم .