Monday, December 21, 2015

برمجة بالعربى - مش مهم أختارت مين، مهم اختارت ليه ؟ 2


المرة اللى فاتت اتكلمنا بصورة شاملة عن التلاتة Database engines ، دخلناهم فى مقارنة وشوفنا العوامل اللى ممكن اختار على اساسها الـ Database Engine .

بس لحد هنا مش كفاية ان احنا نعرف نختار صح ، خلينا نشوف حاجات تانية تقدر توضح لينا اهمية كل حد لوحدة ، يكسب امتى ويخسر امتى ، ولازم نبقى موافقين ان اجابة سؤال مين احسن ؟ بتقى دايماً على حسب.


الغرض من المقارنة فى المرة اللى فاتت مكنش الوصول لنتيجة نهائية بس كان مجرد عرض خصائص كل Database Engine بشكل أوضح،بس فى الحقيقة ماينفعش أقول الأكل اطعم بالليمون ولا الملح ؟! بس أقدر أقول بـ ليمون ولا خل احلى ؟

فلما احب اتكلم عن الـ SQLite ودة شبة ملح الطعام فى المثال بتاعى لا يقارن بالليمون (MySQL) أو الخل (MSSQL).

فعلاً SQLite حالة فريدة وحل عبقرى ! زمان فى بدايتنا (مش من زمان اوى يعنى) كنا تقريبا محتاجين نوصل ابليكشن بداتا بيس ، فى transactions هتحصل و sessions هتتفتح ، كنا بنختار By Luck، كان فى حل غريب شوية مابين الحلول اللى وصللنها وهى ان فى ناس قررت هتكتب على files بدلاً من RDMS،كان مفروض ساعتها مناقشة الحل بس طبعاَ اترفض و تم استنكارة ! بس كان ممكن يكون حل كويس ومش ممكن دة يتعرف من غير ما نحط business requirements فى خانة و الـ solution specifications فى خانة تانية ونشوف ايه ينفع وايه ماينفعش.

ليه بقول كدة لأن فى حقيقة بتقول :
!SQLite does not compete with client/server databases,SQLite competes with fopen

فعلاً دة كلام منطقى ، يعنى لو كنا اعتمادنا على الحل الغريب بتاع الـ files كان بعد شوية تقويم للحل هنوصل لـ SQLite كأختيار امثل لتنفيذ حل الـ files ، وعلى فكرة دة كان هيبقى ساعتها افضل حل فعلاَ.

خلينا نقرب العدسة على SQLite و نطلعة من المنافسة دى بكل شرف.

1# SQLite قاعدة بيانات معتمدة على الـ files بمعنى انها file-based database ودة معناه ان اى عمليات بتحصل فى نفس الوقت وبتكتب into file system مش عارفة حاجه عن بعض ، ودة هيعمل مشكلة فى التزامن،ودة بسبب ان عمليات كتير هتشتغل على الداتا بيس files بدون ما يكون فى تنسيق او استراتيجة عمل بينهم، على عكس database server environment

2# من النقطة اللى فاتت هنفهم ان database server environment زى MySQL مشكلة التزامن مش هتبقى موجودة،ودة هيخليها اقل سرعة من  file-based databases

طيب كدة ممكن تعرف يخسر امتى :
فى تزامن فى العمليات اللى بتحصل بغرض الكتابة = يخسر
لو بنتكلم على Client/Server Applications = يخسر
فلو كان ويب سايت محتاج حجم مهول من البيانات = يخسر
بس لو مكنش حاجه من اللى فوق دى صح يبقى هيكسب زى الحالات دى كدة
-جهاز محتاج داتا بيس محلية internal storage
-التزامن فى العمليات بسيط و حجم البيانات مش هيوصل لـ a terabyte of content
-فى حالات File archives apps
-الـ Embedded devices and the internet of things
-الـ websites اللى بيكون الـ traffic مش عالى،يعنى اقل من 100 الف hit فى اليوم.

Sunday, December 20, 2015

برمجة بالعربى - مش مهم أختارت مين، مهم اختارت ليه ؟

جربت توصل الأبليكشن بتاعك بـ داتا بيس ؟ لو جربت يبقى الكلام اللى هنا دة يهمك ، ولو مجربتش يبقى لما تجرب الكلام دة هـ يهمك !
فى كام سؤال عايزين نتناقش فيهم،مبدأياً كدة أختارت الـ Database Engine بنائاَ على ايه ؟ طيب تعرف انت اختارت صح ولا غلط ؟ وعشان تعرف انت اختارت صح ولا غلط لازم اسألك انت تعرف خصائص الـDatabase Engine اللى انت أختارتة ايه ، وايه اللى  يفرق من  Database Engineلـ  التانية ؟
مش لازم تكون إجابتك على اللى فات ايوة و تمام و فعلاً ، عشان انا مكنتش اعرف لحد فترة قريبة ، بس لما جتلى فرصة اشتغل على اكتر من Database Engine ساعتها بدأت اقارن و اعمل search  وفى النهاية فكرت انى اشارك زملائى فى المعلومات اللى وصلتلها.

طيب عشان نبقى عارفين النطاق اللى بنتكلم فية ، لازم نحدد الـ Database Engines  اللى هناخدها فى عين  الأعتبار ونقارن بينها،انا أخترت Microsoft SQL Server  وMySQL  وSQLite ودة مش بيقلل ابداَ من حاجات تانية اثبتت مكانتها  وليها مستخدميها والـ Community بتاعها زى Oracle و MongoDB و PostgreSQL،بس يمكن عشان الكاتب يكون صادق وهو بيحكى تجربتة مع المحركات التلاتة ، أو عشان ان احتماليه اعتمادك على Engine هتكون بنسبة اكتر على واحد من التلاتة دول.

فى الجدول التالى انا هسرد مقارنة بتوضح بعض نقاط التشابة والأختلاف تعالوا نشوف ..  


الخصائص
Microsoft SQL Server
MySQL  
SQLite  
مجتمع المطورين شايفة ازاى ؟
Microsoft’s RDBMS
Open source RDBMS
Open source in-process RDBMS
المطور أو صاحب الفكرة
Microsoft
Oracle
Dwayne Richard Hipp
الأصدار الأول
سنة 1989
سنة 1995
سنة 2000
الرخصة او الـLicense
تجارى
مفتوح المصدر
مفتوح المصدر
اللغة البرمجية اللى اتعمل بيها
سى بلس بلس
سى بلس بلس و سى
سى بس
يشتغل انهى نظام تشغيل ؟
Windows
FreeBSD
Linux
OS X
Solaris
Windows
يتشغل على اى نظام تشغيل ودة بسبب انه server less أو غير معتمد على انظمة التشغيل.
XML support ؟
يدعم
يدعم
لا يدعم
ممكن نشتغل عليه من خلال
OLE DB
Tabular Data Stream
ADO.NET
JDBC
ODBC
ADO.NET
JDBC
ODBC
ADO.NET
JDBC
ODBC
لغات البرمجة اللى تقدر تتكلم معاه
Dot Net
Java
PHP
Python
Ruby
Visual Basic
Ada
C
C Sharp
C pls pls
D
Eiffel
Erlang
Haskell
Java
Objective-C
OCaml
Perl
PHP
Python
Ruby
Scheme
Tcl
Actionscript
Ada
Basic
C
C Sharp
C pls pls
D
Delphi
Forth
Fortran
Haskell
Java
JavaScript
Lisp
Lua
MatLab
Objective-C
OCaml
Perl
PHP
PL/SQL
Python
R
Ruby
Scala
Scheme
Smalltalk
Tcl
طرق التقسيم أو Partitioning  methods
تقسيم افقى بمعنى ان الجداول يتم تقسيمها مابين files مختلفة، أو federation
تقسيم افقى بمعنى ان الجداول يتم تقسيمها مابين files مختلفة،MySQL Cluster أوMySQL Fabric
لا يوجد.
طرق النسخ Replication methods
موجودة بس دة بيعتمد على الversion
Master-master replication
Master-slave replication
غير مدعومة.








خلينا ندخل فى النقطة اللى بعد كدة وهى ايه العوامل اللى ممكن اختار على اساسها الـ Database Engine ؟

#1  Reliability أو الأعتمادية ..
ودة معناه القدرة على حماية البيانات بحيث ان كل العمليات الحرجة يمكن تنفيذها بقدر عالى من الأمان.

2# Adaptability أو الملائمة ..
وهى قدرة الـ RDBMs على التكيف مع التغيرات السريعة وذلك بدون فرض تغيرات فى الـ hardware  المستخدم وبدون الحاجة الى شراء وحدات أضافية.

3# Scalability أو القابلية للتوسع ..
يوصف الـ RDBMS القادر على التوسع بأنه قادر على دعم وتحمل أى زيادة فى عدد المستخدمين ، كمية البيانات ، أو العمليات بدون الحاجة الى اى تكاليف جديدة.

4# Predictability أو القدرة على التنبؤ
يجب على الـ RDBMS ان يكون قادر على توصيل predictable service levels.
5# Manageability أو القدرة على التحكم فية

Wednesday, May 13, 2015

برمجة بالعربى - الورقة 3 - مقارنة بين انواع البرامج الثلاثة


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


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

وينحصر أختيار هذة الطريقة فى الأجابة على سؤالين :

1-ما هو نوع البرنامج الذى سيتم إنشائة؟
2-ما هى لغة البرمجة المناسبة فى هذة الحالة؟

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


يمكن النظر الى الجدول التالى على أنه عرض موجز لتلك الخصائص :

وجهة المقارنة
أمكانية الوصول
Accessibility
القابلية للتغير
maintenance
السرعة
execution time
التفاعلية
Interactive
برامج الويب
-يمكن الوصول من خلال كل أحجام الشاشات
-من خلال الشبكة المحلية + الأنترنت.
-أسرع ومتزامن Synchronous من خلال التعديل أو التطوير على نسخة مركزية.
-سريع جدا ، لأنة ينفذ فى السيرفر وترسل النتائج للعرض على المتصفح.
-تفاعلية عالية مع المستخدمين لأتساع نطاق عدد المستخدمين.
برامج لأجهزة الثاابتة
-من خلال شاشات كبيرة نسبياً.
-من خلال الشبكات المحلية فقط.
-بطئ لا توجد مزامنة.
-ملتزم بإمكانيات الجهاز المركزى.
-أحتمال التفاعلية ضعيف لضيق نطاق عدد المستخدمين.
برامج الأجهزة المحمولة
-يمكن الوصول من خلال كل أحجام الشاشات
-من خلال الشبكة المحلية + الأنترنت.
-أسرع ومتزامن ، من خلال التعديل أو التطوير على نسخة مركزية ولكن يتطلب  إعادة التنزيل re installation.
-يحتمل الأحتمالين السابقين معاً.
-يحتمل الأحتمالين السابقين معاً.