orwa

نظرة أكثر تفصيلا في غرضية التوجة : - التغليف - الوراثة - تعددية الأشكال التغليف Encapsulation : تعتمد فكرة غرضية التوجة على إخفاء البيانات . وتستخدم الأصناف لتحقيق ذلك . يتم إخفاء البيانات داخل الأصناف الخاصة بها , أو نقول يتم تغليف البيانات داخل الأصناف . عادة يتم توضيح هذة الفكرة بإستخدام ما يسمى الصناديق السوداء (black boxes) , حيث لا تضطر أن تعرف كيف تتم الأمور بالداخل وما هي المحتويات الداخلية , وكل ما يهمك هو كيف تتعامل مع واجهة الصندوق الأسود وتعطية معطياتك وتأخذ النتائج بغض النظر عن ما يتم في الداخل . إن ما يهمك فعليا من الصندوق هو آلية التعامل معة (مع واجهتة) ولا تعطي إهتماما كبيرا عن تفاصيل داخل الصندوق , مثلا يهمك أن تتفرج على البرامج المفضله على التلفزيون وأن تعرف تغيير المحطات وإطفاءة وتشغيلة , بغض النظر عن فهم الدارات الداخلية المكونة للتلفزيون .. إذن نخزن البيانات داخل الأصناف وعندها يمكننا أن نكتفي بمعرفة كيفية إستخدامها من الخارج . إن كيفية الإستخدام تدعى واجهة الصنف (class interface) وهي التي تسمح للأجزاء الأخرى من البرنامج بإستخدام الأغراض المعرفة من هذا الصنف , وبالتالي عندما تستخدم غرض ما فإن معظم شفرته تكون مخفية , ونادرا ما تعرف ما هي البيانات الداخليه له حتى أنه قد لا توجد طريقة لدخول البيانات الخاصة به بشكل مباشر مالم تستخدم المناهج المتاحة على الواجهة والتي تسمح لك بتغيير وقراءة البيانات , وذلك يعتبر من أهم الفروق بين البرمجة غرضية التوجة و البرمجة الكلاسيكية والتي تكون البيانات فيها عامة لكل الأصناف غير تابعة لصنف محدد كما أنك تستطيع تغيرها مباشرة وبالتالي تقع في مطب عدم صلاحية القيمة لحالة أو لمجموعة حالات ,,... لنوضح هذة النقطة الهامة : في مثال التاريخ السابق , - لو كنا نتبع الطريقة الكلاسيكية بالبرمجة فإن المتحولات (البيانات) ستكون متاحة للدخول والتغيير المباشر , وبالتالي من الممكن إدخال قيم غير صالحة بدون وجود إمكانية للتأكد منها , مثلا لو قمت بإدخال التاريخ February 30 (30 شباط) والذي هو تاريخ خاطيء لإن شباط لايحوي 30 يوم فإن البرنامج سيقبلة لإننا عرفنا متحول اليوم من النوع الصحيح (Integer) الذي يقبل هذة القيمة , وستحصل الأخطاء لاحقا عند العمليات الحسابية , أو تعطي نتائج خاطئة تماما . - أما في حال البرمجة الغرضية , فإن الدخول المباشر للبيانات غير مسموح لإن البيانات مغلفة (مخبأة ) في الصنف والوصول إليها يتم بإستخدام المناهج التي خصصها الصنف لذلك , أي أنك لن تستخدم المتحول مباشرة بل ستتعامل مع إجرائية أو تابع لإدخال القيمة , وبالتالي لن يظهر معنا النوع السابق من الأخطاء لإن هذة المناهج يمكن بسهولة تضمينها شفرات لفحص القيم والتأكد منها , ورفض التعديلات في حال كانت القيمة غير صالحة . لاحظ أننا أستخدمنا المنهج SetValue لضبط القيم ولم نقم بالضبط المباشر وهنا نستطيع إضافة الشفرة الخاصة بالتحقق من صلاحية القيمة , كأن تكون أصغر من حد معين , أو غير سالبة , أو أو ... • كما أن للتغليف ميزة سحرية للمبرمج نفسه هذة المرة .. لإنها تسمح لة بتغيير التركيب الداخلي للصنف في التحديثات المستقبلية , وبالتالي ستطبق التغييرات تلقائيا على بقية الأغراض التي إستخدمت هذا الصنف بإقل عناء ممكن , دون الحاجة لتغير شفرتنا في مناطق مختلفة من البرنامج . ملاحظة : بالإضافة إلى التغليف المعتمد-على–الصنف فإن دلفي تدعم التغليف المعتمد-على-الوحدة , بحيث كل متغير تقوم بتعريفة في قسم الـ Interface للوحدة سيصبح مرئيا لباقي وحدات البرنامج عند إستخدامها في التعريف Uses في حين أن المتغيرات المعرفة في قسم الـ Implementation هي متغيرات محلية لهذة الوحدة فقط . محددات الوصول Private, Protected, Public : دلفي تملك ثلاث محددات وصول من أجل التغليف المعتمد-على-الصنف . وهي Private, Protected, Public , تتحكم محددات الوصول بمجال الرؤيه المسموح به من أجل حقل أو منهج ما • التوجيه Private يدل على حقول الصنف ومناهجه التي تكون غير متاحة خارج الوحدة التي عرف فيها الصنف , ولا يمكن الوصول إليها سوى من داخل هذه الوحدة , وبالتالي هي متغيرات محليه في هذة الوحدة تستخدم لإتمام عمل جزئي ما داخل الصنف ولا داعي لظهورها لبقية العناصر . • التوجيه Protected يستخدم لتحديد مجال رؤيه مقيَّد لحقول الصنف ومناهجه , حيث يستطيع الصنف الحالي والأصناف المورثة منة فقط الوصول إلى البيانات المعرفة ضمنه , وببساطة يستطيع الصنف الأساسي والأصناف المشتقة منه بالإضافة إلى أي شفرة في نفس الوحدة الدخول إلى البيانات المحمية بـ Protected وفقط هؤلاء هم من يملكون سماحية الدخول . هذا التوجيه مثل سابقة من ناحية أنه محلي ضمن الوحدة , ولكن نضيف هنا إمكانية الرؤية من قبل الأصناف الجزئيه المشتقة التي ربما تحتاج هذة البيانات . • التوجيه Public يدل على حقول ومناهج يمكن الدخول إليها بحريّة من أي جزء من البرنامج كما لو أنها معرفة بنفس الوحدة , حيث لا توجد قيود في الدخول إلى البيانات المعرفة بهذا التوجية . تحذير : محددات الوصول السابقة تقوم بتحديد إمكانية دخول شفرات من خارج الوحدة إلى الصنف المعرف فيها , وبالتالي إذا وجد صنفان في نفس الوحدة فلا توجد حماية لدخول إحدهما إلى حقول المعرفة Private من الصنف الآخر .. التغليف بإستخدام الخصائص Properties : الخصائص تعتير من أروع تقنيات البرمجة الغرضية , وتمثل فكرة التغليف بشكلها الأمثل . والخصائص بشكل عام هي أول ما تعلمنا التعامل معه في مرحلة المبتدء , وللتبسيط فإن كل ما تراه في ضابط الكائنات عبارة عن خصائص , والفكرة هي أنك تتعامل مع إسم , والذي يخفي عنك بشكل كامل تفاصيل التنفيذ , وتصبح مهمتك الحالية كمستخدم للصنف هي قراءة القيم منة أوكتابتها إلية , أعجبني تعريف أحد الكتاب عندما قال أن الخصائص هي حقول إفتراضيه (virtual fields) . ربما لاحظت في الفقرة السابقة أننا يجب أن ندخل للبيانات في حالة البرمجة الغرضية عن طريق المناهج بدلا من الدخول المباشر , وهذا يبدو شيئا مربكا قليلا , خاصة أن منهج القراءة سيكون مختلف عن منهج الكتابة , إذا بنينا حقول إفتراضية تستخدم هذة المناهج وتخفيها عنا فإننا سنكسب سهولة الدخول المباشر للبيانات وقوة التغليف . هذة الحقول الإفتراضية هي الخصائص , ونتعامل معها مثلما نتعامل مع الحقول العادية . تأمل الشفرة البسيطة التالية : Edit1.Text := Button1.Caption; لاحظ أنان إستخدمنا الخاصية Text المتعلقة بالغرض Edit1 للكتابة فيها , والخاصية Caption من الغرض Button1 للقراءة منها . وببساطة أصبحنا بهذة الفكرة الرائعة نضيع الوقت بالتفكير بدلا من إضاعة الوقت بكتابة الشفرة , بالتأكيد توجد مناهج خاصة للكتابة إلى الخاصية Text وللقراءة منها , لكن الخاصية Text أخفت هذة الإرباكات عنّا وسمحت لنا بإستخدامها بغض النظر عن معرفتنا بشفرتها المخفية محققة بذلك تغليفا مثالياً . تعريف خاصية جديدة : الفقره السبقة تكلمت عن مستخدم الصنف الذي يستطيع إستخدام الخواص بسهولة , هذة الفقرة ستتكلم عن باني الصنف الذي يؤمن هذة السهولة . عرفنا الآن أن للخاصية إزدواجية بالتعامل .. مرة قراءة , ومرة كتابة وبناء على ذلك لتعريف خاصية ما نحن نحتاج لتعريف قابلية القراءة وقابلية الكتابة أيضا , ويتم ذلك ببساطة عن طريق الكلمتين المفتاحيتين Read , Write كما أننا نستخدم الكلمة المحجوزة property لتعريف خاصية جديدة أمثلة: 1- property Month: Integer read FMonth write FMonth; 2- property Month: Integer read FMonth write SetMonth; 3- property Month: Integer read GetMonth write SetMonth; حيث Fmonth متغير معرف كـ Private , و SetMonth إجرائية و GetMonth تابع معرفان ضمن الصنف . الحالة الأولى : وهي أبسط الحالات , أن نقوم بتعريف متحول ما Fmonth مثلا من أجل القراءة والكتابة , بدون إستخدام أي منهج , القراءة تتم منه والكتابة إلية , وطبعا لا يمكن هنا التأكد من صحة الإدخال , أو إرفاق إدخال أو إخراج القيمة بحدث ما . الحالة الثانية :قمنا بالقراءة من متحول (Fmonth) بشكل طبيعي مثل الحالة الأولى , حيث أنة في كثير من الأحيان لا نحتاج التأكد من صحة الإخراج طالما كنا قد تأكدنا من صحة الإدخال منذ البداية . أما الكتابة فتتم بإستخدام الإجرائية SetMonth , وهنا نستطيع التأكد من صلاحية الأدخال أو إرفاق الإدخال بأحداث ما (إلغاء تعطيل خواص معينة بعد الإدخال مثلا) , وبالطبع هذة الحالة مستخدمة كثيرا على عكس الحالة الأولى . الحالة الثالثة : إستخدمنا التابع GetMonth للإدخال والإجرائية SetMonth للإخراج , وهي الحالة العامة . ملاحظة : قراءة الخاصية ستعيد قيمة واحدة منها , وبالتالي من المثالي هنا إستخدم تابع (Function) للقراءة . الكتابة لن تعيد قيم ولكنها ستدخل قيمة ضمن بارامترات المنهج , لذلك نستخدم إجرائية (Procedure) للكتابة . عادة تكون حقول البيانات ومناهج الدخول السابقة Private (ومن الممكن أن تكون Protected) بينما تكون الخصائص Public . وهذا يعطي درجة مثالية من التغليف, لإنك تستطيع تغيير بيانات الصنف أو مناهج القراءة والكتابة (والتي هي غير مرئية لمستخدم الصنف ) دون أن يتأثر بها مستخدم الصنف ولن يضطر لتغيير شفرتة لإنة يستخدم أسماء الخواص فقط و التي بقيت ثابتة , في حين أن كل التغيرات في طريقة القراءة والكتابة لن تؤثر علية .. تذكر الصندوق الأسود , المستخدم يملك إسم الخاصية ويتعامل معها , طالما بقي إسم الخاصية ثابتا فإن عملة لن يتأثر بأي تغيير .
orwa

تعريف الأصناف في دلفي : لتعريف صنف جديد في دلفي , دعنا نتذكر أن الصنف يحوي شيئين مهمين هما الحقول (بيانات الصنف) والمناهج (عمليات الصنف) . بناء صنف جديد موضوع سهل في دلفي . إذا فكرنا بناءً على ما سبق ماذا نحتاج لنعرف صنف جديد , لوجدنا أننا نريد تعريف الحقول التي يحويها هذا الصنف والعمليات التي يستطيع إنجازها , وبالتأكيد نعرف له إسما فريدا خاص به . الحقول هي عبارة عن متحولات عادية , والعمليات هي عبارة عن مناهج (أي توابع أو إجراءات) . تنسيق هذا التعريف يتم بصورة بسيطة – بإن نذكر في قسم Type إسم الصنف محدداً بالكلمة المفتاحية Class ونتبعه مباشرة بتعريف الحقول الخاصة به , ثم رؤوس المناهج التي يعرفها , وبالتأكيد ننهي ذلك بـ End; : Type TDate = class Month, Day, Year: Integer; procedure SetValue (m, d, y: Integer); function LeapYear: Boolean; // السنة كبيسة يحدد إذا كانت end; ملاحظة : إن البادئة T التي سبقنا بها إسم المتحول هي عبارة عن تقليد (عرف) للمترجم , يتبعة مبرمجو الدلفي منذ ظهورها بإيعاذ من شركة بورلاند نفسها . الحرف T هو إختصار لـType , وهو مجرد حرف ولكن إتباع هذا العرف سيجعل شفرتك مفهومة أكثر من قبل بقية المطورين الذين اعتادو على ذلك . ربما لاحظت من تعريف الصنف أننا قمنا بتعريف أسماء التوابع والإجراءات فقط (رؤوس المناهج) ولم نقم بكتابة أجسامها هناك , حيث نقوم بتعريف أجسام المناهج (توابع+إجراءات) في جسم الوحدة نفسها , أي قسم الـ Implementation الخاص بها . وبما أننا نستطيع تعريف أكثر من صنف في الوحدة (Unit) ولكل صنف مناهج خاصة به لذلك يجب تمييز جسم كل منهج لنعرف لإي صنف يتبع . من أجل ذلك فإن تعريف أجسام المناهج يسبق بإسم الصنف مفصولا بنقطة عن إسم المنهج مثلا TDate.SetValue : Implementation … procedure TDate.SetValue (m, d, y: Integer); begin Month := m; Day := d; Year := y; end; function TDate.LeapYear: Boolean; begin // call IsLeapYear in SysUtils.pas Result := IsLeapYear (Year); end; فكرة : إذا ضغطت Ctrl+Shift+C عندما يكون المؤشر ضمن تعريف الصنف , فإن ميزة تكميل التعريف في دلفي سوف تقوم تلقائيا بمساعدتك وتوليد هيكل التعريف الخاص بالمناهج التي قمت بتعريفها في الصنف . عرفنا الآن كيف نبني صنف جديد , وأننا نستطيع أن ننشيء أغراضاً من هذا الصنف وإستخدامها في شفرتنا . مثال على ذلك : var ADay: TDate; begin // create an object ADay := TDate.Create; try // use the object ADay.SetValue (1, 1, 2000); if ADay.LeapYear then ShowMessage ('Leap year: ' + IntToStr (ADay.Year)); finally // destroy the object ADay.Free; end; end; - لاحظ أن التعبير ADay.LeapYear مشابة تماما للتعبير ADay.Year . مع أن إحداهما هو تابع للتنفيذ , والآخر هو متحول (وصول بيانات مباشر) , أي نصل لبيانات الغرض بنفس طريقة الوصول لمناهجة وذلك بإستخدام النقطة . -بإمكانك إختيارياً أن تضيف قوسان مغلقان بعد إستدعاء تابع ليس لة بارامترات , وبإمكانك تجاهلهما على كل حال مثال : التعريفان التاليان متكافئان : GetCurrentDay(); GetCurrentDay; التحميل الزائد للمناهج method overloading : دلفي تدعم التحميل الزائد للمناهج (التوابع + الإجرائيات) . ولكن ما هو التحميل الزائد ياترى ؟ التحميل الزائد يعني أن يكون لديك منهجان بنفس الإسم , شريطة أن تقوم بإضافة الكلمة المفتاحية overloading اليهما وأن تكون قائمة البارامترات (المتغيرات) الخاصة يكل منهما مختلفة عن الآخر , (إذا إتفقا بالإسم فإن دلفي بحاجة إلى شيء آخر للتمييز بينهما لذلك فإن منهجين متفقين بالإسم والبارامترات لا يمكن أن نحديد أي منهما نريد أن نستخدم ) . بفحص البارامترات يستطيع مترجم اللغة (Compiler) تحديد أي واحد منهما نريد أن نستدعي , ويقوم بالإستدعاء الصحيح للمنهج الصحيح . سنرى تطبيقات هذة الميزة لاحقا يتبع ...
orwa

كلامك جميل عن المرأة في الإسلام . وأنا من أشد الدعاة الذين ينادون بإحترام المرأة , وتحسين النظرة الإسلامية لها ,,,,أصلا أنا من الذين يقبلون موضوع نزع حجاب المرأة .... لكني بصراحة مختلف معك في كمية كبيرة من النقاط الأخرى .... وسأعلق هنا فقط على أول فكرة طرحتها كمثال على إعتراضي البريء على طريقتك بتاول الموضوع ... لقد قلت : 1- عداوة الإسلام مع الآخرين، أو كما يقولون "الحملة على الإسلام". لا أوافقك الرأي . برأيي الشخصي , أن الحملة على الإسلام ليست بسبب عداوة الإسلام مع الآخرين , إنما بسبب عدم فهم أتباع الإسلام للإسلام نفسة , ماذا تريد .... أن تقول لإبن لادن أن هؤلاء الأقباط ليسو كفارا ؟؟؟ لن يفهم عليك لإن من وجه نظرة أن ذبحهم هو تحقيق للعقيدة التي يراها ويؤمن بها . ولكن من وجهة نظري أنا لا . أنا أقول أنني أنا أمثل الإسلام الحقيقي ومن هو أبن لادن ليقول أنني لست مسلما وهو يقول عكس ذلك تماما, لايمكن أن نكون أنا وبن لادن محقان كلينا , برأيي أنني أطبق مفاهيم التسامح الإسلامية التي نص عليها الإسلام , وقال بها الرسول , القائل "لكم دينكم ولي دين" . وبن لادن يظن أنة يطبق الإسلام الذي يراة , إذن المشكلة من الأشخاص وليست من الأديان. أريد أن أقوم بتعديل بسيط على عبارتك السابقة حتى تصبح كالتالي , عداوة أتباع الإسلام مع الآخرين ساهمت في تسبب حملة على الإسلام . نعم هكذ أفضل من وجة نظري ربما أكون علمانيا إلى حد ما , أو أؤمن ببعض مبادىء العلمانية , ولكن إذا لم تكن العلمانية تؤمن ببعض مبادئي , فأنا أريد بناء علمانيتي الخاصة بي التي تتفق معي تماما , وطالما لم يستطع نوع العلمانية التي تتحدث بة أن يستوعب متطلباتي فأنا سأبقى منحازا لتعريفي ولعلمانيتي الخاصة . العلمانية التي أحلم بها لاتسيء إلى الأديان بحد ذاتها , لإنها تعتبر أن النقص يتولد من أتباع الأديان الذين لم يستطيعو فهم دينهم , وراحو يستمتعون بطبيق حروف الدين دون أن ينظرو إلى معاني هذة الحروف . شخص من أهم المتطرفين الدينيين , نعم نعم .. هؤلاء الذين يكفرون حتى أتباع مذهبهم من اللذين لايؤمنون بنفس أفكارهم . قال عبارة جميلة عن هذة الفكرة: إن الإسلام لايتعارض مع العلمانية , وربما يكون الدين الوحيد الذي فصل ذلك , لإن الإسلام ليس دين ودولة , بل هو دين وأمة , والأمة لاترتبط بالحدود الجغرافية , بل ترتبط بالحدود الفكرية , بدليل أن الرسول الكريم نفسة لم ينشيء دولة فعليه في وقته تحددها أركان الدولة المادية المعترف عليها , بل أنشأ أفكار أمة يجمع الناس بها بغض النظر عن الجغرافيا . وبالتالي , وبرأيي الشخصي أن هذا المتطرف اللعين . هزمكم جميعا , أنتم أتباع النوع من العلمانية التي لم تستطع تلبية متطلباتي , لإنة أستطاع أن يستوعب علمانيتكم كلها ويضمنها في عقيدتة , في حين أنكم جميعا لم تستطيعو أن تستوعبو علمانيتة الخاصة , وبقيتم تضيقون الخناق على أنفسكم بالإساءة للأديان , وتقولون أن الدين لا يلتقي مع العلمانية . لماذا عليي أن أختار العلمانية الصغيرة التي لاتتسع لشيء , لماذا لاأختار العلمانية الكبيرة التي أستطيع أن أجد الصغيرة ضمنها لإنها قادره على إستيعابها ... أصلا لماذا لا أبني علمانيتي الخاصة التي تستوعبني تماما . أريد علمانية قادرة على حل مشكلة الدين ..... نعم أنا معك .. فصل الدين عن الدولة .. جميل ,,,, ولكن ليس أن نسيء للدين وندوس علية !!!!. طريقتي مثلا يتحقيق ذلك . هي إفتراض أن الدين ليس سيئا , ولكنه صعب الفهم , وبالتالي علينا أن نفهمه جيدا قبل أن نتحدث بإسمة . ... أقول أن الإسلام لا يعادي الآخرين , ولكن بعض المسلمين يريدون معاداة الآخرين ويتلذذون بها , والأسوأ أنهم يقومون بذلك بإسم الإسلام , إذا إستطعنا بناء نوع من العلمانية يحترم هذة الفكرة , نكون قد قطعنا شوطا كبيرا .. هل نستطيع أن نوجد مباديء العلمانية من ضمن الإسلام نفسة ,هل الإسلام ينص على هذة المباديء .. أنا مؤمن أن كل هذة المباديء ,, مهما بدا كلامي غبيا ,, أن كل هذة المباديء موجودة في الإسلام عند الفهم الصحيح لة . لماذا لا نشجع هذا الفهم ونحصل على حل أكثر عمومية , يجذب إلية حتى المتطرفين الدينيين نفسهم , وستكون ثمارة على الأقل تغيير في سلوكياتهم وفهمهم نحو فهم أفضل للإسلام . خلاصتي من كل هذة الفلسفة .. أنا لا أسيء لأي دين . وعلمانيتي كذلك , إنها تحترم الأديان لإنها لا تريد أن تكون علمانية فاشلة , توئد قبل أن تولد . ولكنها تفصل الأدوار وتحدد بشكل واضح الفرق بين دور الدين ودور المجتمع في بناء إنسانية منظمة . برأيي أحد أهم أسباب إنهيار الإتحاد السوفياتي أنه لم يعطي موضوع الدين إهتماما كافيا , بل ترك الأمور العقائدية تسير بغوغائية واضحة الطريق نحو الإنهيار . علينا أن لا نقع في هذا الخطأ . قدم رأية الخاص , الذي لايعبر سوى عن رأي تافة يدور بالفضاء دون أن يجد أذن صاغية .... بكل حرية .. ومن الطبقات السفلى الملعونة , كان معكم مراسلكم لعلمانية أكثر وضوحا . عروة عيسى
orwa

لو كنت من مازن ..... آآآآآة لو كنت من مازن أنا كطالب جامعة إضررت إلى تخفيض مستوى عملي على الإنترنت إلى الربع , بعد أن لاحظت أن تكاليف الإتصال أصبحت تشرئب شيئا فشيئا لتلتهم كل ما يتبقي معي من مخزون ..سواء إحتياطي أو أساسي وللصراحة لاتزال كلمة والدي ترن في أذني طوال الوقت بعدما وردتة أخبار تسديد الفواتير , حيث قال جملتة المأثورة : "هيك ما بتوفي معنا .." , للصراحة معه حق مابتوفي معنا , سأكتب هذة الكلمة بالخط العريض وأعلقها على باب غرفتي حتى أتذكرها دائما ,حتى أتذكر دائما حدودي , حتى أتذكر دائما أني لست من مازن , ولا يحق لي ما يحق لأبناء مازن .. . سأرفع هذة العبارة وأقدمها لكل مواطن شريف يعاني ما أعاني ,, حتى يصرخ بملىء فمة وملىء إرادتة ...يصرخ ويقول " هيك ما بتوفي معنا " ,.. فليسمع من يسمع وليطنش من يطنش .. مابتوفي معنا يا بنو شيبان مابتوفي معنــا - أعجبتني فكرة BccLine وأفكر بإستبدال مكتبتي بدروج منظمة لجمع فواتير الإتصالات , وأتمتة عملية إسترجاع إحداها بواسطة برنامج معقد , ولكني لا أضمن أن جميع حلول العالم سوف تفيد , عندما يريدونك أن تدفع فاتورة سوف تدفعا .... , أصلا هل لديك ما يثبت أن هذة الفاتورة من الشركة وأنها ليست مزورة ؟؟؟
orwa

هذة بعض مواقع الدلفي التي أخترتها لكم : http://delphi.about.com موقع تعليمي رائع لدلفي , وهو من أهم المواقع التعليمية باللغة الإنكليزية http://delphi.icm.edu.pl/ موقع أدوات دلفي , يحوي كمية كبير من الأدوات والعناصر (جزء كبير منها مجاني) كما أن طريقة تبويبة للبحث عن عنصر ما جميلة ومريحة http://www.torry.net/ موقع مشهور للدلفي , ويعتبر مورد كبير وغني بالمعلومات والأدوات http://www.delphi3000.com/ موقع قديم وغني بالمقالات والمقارنات الرائعة يخص الدلفي http://www.delphiforfun.org/Programs/index.htm موقع صغير ولكني أحبة للمبتدئين , يحوي العديد من البرامج الذكية ويهتم بطرق وآلية التفكير البرمجي من دلفي أكثر من إهتمامة بالإنتاج http://glscene.sourceforge.net/index.php موقع أدوات تطوير التطبيقات ثلاثية الأبعاد (والألعاب ثلاثية الأبعاد) الشهير والذي يقدم أدوات GLDcene المفتوحة المصدر والمجانية أيضا (ويندوز + لينكس قريبا)
orwa

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

أتمنى أن أجد من يهتم بذلك ويساعد في تطوير هذا العنصر .. وكذلك بقية العناصر .. ومن هذا المنتدى أعلن الترحيب التام بإي فكرة لتطوير برمجيات مفتوحة المصدر وبرمجيات مجانية على الأقل بما يخص اللغة دلفي , . وآسف جدا لإني لم أتمم عملي في عنصر البحث هذا الذي لازال يحتاج بعض الإصلاحات الأساسية ولكن ذلك لسببين .. 1- حتى أتيح الفرصة للمبرمجين من غير المحترفين بالإشتراك بالمشروع , لكي يجدو القدرة على فهم العنصر وتطويرة من مرحلة مبكرة بة بدلا من أن يكون قد وصل لمرحلة شفرة معقدة وصعبة 2- ضيق الوقت لدي (خاصة بعد ما بدأت الإمتحانات) , وعدم رغبتي بنشر مكون جاهز بإسمي بقدر رغبتي بنشر مكون مفتوح المصدر للغة العربية وتشجيع هذا النوع من المشاريع الجماعية عن طريق الإنترنت .. فأنا مهتم للفكرة أكثر من المشروع ولا تواخذونا ,, أتمنى التفاعل
orwa

تطبيقات حقيقية .... حسنا برأيي أن قيام بورلاند بدعم لينكس هو شيء رائع , ومن منظوري أكثر من حسنة لهذا الدعم .. أولا بناء تطبيقات النظام الأكثر نموا والأكثر إستقرارية وأمنا (وهذا أهم شيء) وثانيا تطوير دلفي نحو مزيد من المحموليةوالإستقلالية عن نظام التشغيل , لإن بورلاندعند تطويرها كايلكس أرادت أن تجعل شفرة الدلفي تفتح كما هي على كايلكس أو بإقل تعديلات ممكنة , وبالتالي قامت بتعديل دلفي نفسها ,, ((أرى ذلك بوضوح في شفرة مكونات دلفي 7 حيث أصبحت توجيهات المترجم مليئة بعبارات لتحديد التصرف في حال كان النظام لينكس )) . أي وببساطة الإبتعاد قدر المستطاع عن الإعتماد الكلي على توابع نظام التشغيل API والإبتعاد عن عناصر نظام التشغيل , وهنا أورد مثلا صغيرا لذلك . تقوم دلفي بتوليد الأزرار Buttons وإنشائها لوحدها بدلا من إستيرادها من النظام , ويمكن رؤية شفرة الزر في الوحدة Buttons حيث يمكننا تمييز أحداث رسم الزر وإنشاءة و والخ . ويمكن لأي مبتدء أن يعدل في هذة الشفرة ليغير مثلا في شكل الأزرار أو تصرفاتها .. ولذلك نرى أنة إذا أحضرنا تطبيق مبني على دلفي 5 مثلا وعلى النظام Windows ME وشغلناة على النظام Windows XP فإن شكل الأزرار لن يكون جميلا ومشعا مثل أزرار ال XP الإفتراضية بل ستبقى كما كانت علية في ويندوز ME , على عكس لغات ال VB و ال C الخ .. وذلك لإن الدلفي ولدت الزر ولم تستوردة من ال XP , .. وبالتالي لم يتغير شكل الزر حسب النظام , البعض يرى في ذلك عيبا , ولكني في الحقيقة أعرف هذا عن دلفي منذ بدأت العمل عليها , إنها مزايا دلفي التي نختارها على أساسها , وسأورد مثلا جيدا عن ذلك: أنة في أحد المرات إنهار النظام معي تقريبا بشكل كامل , ولم أعد أستطيع التحكم بأي شيء وأصبحت معظم التطبيقات (كل شيء تقريبا لا يعمل ) غير قادرة على الإقلاع ومفعمة برسائل الأخطاء , ورغم كل ذلك أستمريت بالعمل على برنامج قواعد بيانات مبني على دلفي لمدة أكثر من أسبوع على هذة الحالة , ولم يصب البرنامج بأي أذى وأستمر بالعمل الطبيعي , . ما أقصدة من ذلك أن هذة الخاصية من دلفي هي سر من أسرار إستقراريتها ويجب عدم الإستهانة بها , فهي تؤمن محمولية تطبيقات دلفي وبعدها عن مشاكل النظام , لذلك نرى أن تطبيقات دلفي تعمل على إصدارات مختلفة من نظام التشغيل (98 , Me,Xp مثلا) من دون أخطاء أكثر من لغات مايكروسوفت نفسها , (أعرف أن ذلك لن يعجب الكثيرين ولكن الصراحة أن ذلك يحدث دائما ) , وأن المشكلة الأكبر التي يمكن أن تحدث من جراء ذلك هي تأخر دلفي بدعم تقنية جديدة من نظم التشغيل إلى الإصدارة اللاحقة (مع أنها أول منتج دعم أكبر ثورة تقنية لميكروسوفت .. أقصد . NET ) . ********************************* المهم ما قصدتة من كل ذلك أن دعم بورلاند للينكس هو دعم رائع بلا شك ... لكن هل هو دعم كامل ,,, لا واللة ليس كاملا ؟ أولا لم تدعم بورلاند سوى بعض التوزيعات من لينكس دون غيرها ,,, وهذا يعني عدم التوافقية المثلى مع لب لينكس , سألت مرة أحد الأخصائيين في لينكس عن هذة المشكلة أهي عيب من بورلاند أم عيب من لينكس وقال أنها عيب من الإثنين معا !!!! وأضاف أن لينكس يؤمن التوافقية على صعيد الشفرة وليس التوافقية على صعيد الملفات الثنائية , أي ما يهمهم هو عمل نفس الشفرة على كل النظم وليس عمل نفس التطبيق وهذا يبدو قريبا من طريقة تفكير داعمي لينكس التي تولي فتح المصدر إهتمام كبير أكثر من التجارة بالثنائي , . ثانيا , دعم بورلاند لهذة التوزيعات ليس كاملا ,, أو لم يكتمل بعد , أقصد أن شريط أدوات كايلكس3 أصغر بكثير من شريط أدوات دلفي7 . والعديد من الأدوات التي لايمكن الإستغناء عنها غير موجودة بشكل رسمي مع كيلكس وإنما يمكن تحميلها من الإنترنت وليست كلها مجانية , وبالتالي لم نصل بعد إلى مرحلة كيلكس هي نسخة دلفي على لينكس , واللة أعلم إذاكنا سنصل .. المهم لن أضيع الحديث .. بالنسبة لبناء تطبيقات حقيقية على كيلكس , ذلك ممكن مع أن الأمثلة قليلة بعض الشيء والذي لفت نظري أن هذة الإمكانية تختلف حسب نوع التطبيق . مثلا التطبيقات البسيطة . مثل محررات النصوص ومستعرضات الويب و و الخ . لا يوجد مشكلة تذكر هنا تطبيقات الإنترنت والشبكات (مثلا بإستخدام أدوات INDY ) . فعلا يمكن تصميم برامج حقيقة رائعة هنا بلا أي مشكلة ,, للصراحة جربت بعض البرامج التي بنيتها على دلفي وويندوز المتعلقة بالشبكات والإنترنت جربتها على كايلكس ولينكس وكان أداء كايلكس/لينكس أفضل بشكل ملحوظ .. تطبيقات قواعد البيانات , همم يعني , حسنا جيدة بشكل عام من حيث الإستقرارية والأداء , لكني متجفظ عليها من حيث المقدرة إذا ما قارناها بالدلفي , حيث أن كمية كبيرة من أدوات قواعد البيانات مع دلفي غير مرفقة مع لينكس , وبصراحة الأداة DBExpress التي أهتمت بورلاند بإضافتها إلى شريط أدوات كايلكس إما أنها غير مكتملة ولازالت في طور التطوير , أو أنها غير جيدة , .. قرأت في بعض المراجع المهمة مجموعة من العيوب السيئة لل DBExpress , وأن هذة الأداة قد لاتكون مناسبة لكل الحالات , . نزلت من الإنترنت أدوات لبرمجة التطبيقات ثلاثية الأبعاد والألعاب المعتمدة على OpenGL وكان أدائها في كثير من الأحيان أفضل من ويندوز , وتفاجأت أنة في بعض الحالات كان أداء ويندوز أفضل مع العلم أن الأدوات تجريبية وربما المشكلة تكون منها .. إذن أردت أن أتكلم قليلا عن كايلكس بين المستقبل والماضي , وجوابي مع العلم أني لا أعتمد على لينكس كنظام ستطح مكتب إفتراضي (بصفتي مستخدم كمبيوتر عادي) وأن تجربتي مع كايلكس تجربة صغيرة تشوبها نقص المعرفة ونقص الإضطلاع . أنة يمكن بناء تطبيقات حقيقية بإستخدام كايلكس , وتتفاوت مدى حقيقية تلك التطبيقات حسب نوع المشروع وقوة دعم كايلكس لهذا النوع من المشاريع .. وهذة صورة مرفقة عن مثال بسيط لقاعدة بيانات أعدتها من أجل المقالة المسار :http://www.angelfire.com/mac/orwa/Kylix.jpg [ تم تحريره بواسطة orwa on 9/5/2004 ]
orwa

أخي العزيز رايد فلفل .. أهلا ومرحبا بك في منتداك . أوافقك الرأي تماما أنة على المنتديات العربية التركيز على مواضيع اللب البرمجية أكثر من المواضيع الهكرجيـة , ربما تتساءل إذن لماذا أنشر موضوع مثل هذا إن كنت فعلا أعني ما أدعي .... في الحقيقة إن كثرة التحدث عن كسر البرامج في المنتديات ولّدت لدي إستياء كبير من هذا الموضوع , فقررت كتابة موضوع معاكس لها وهو جعل البرامج أصعب للكسر ,. وما دفعني إلى ذلك أنني لم أرى في أي منتدى عربي سابق لدلفي أي مقالة عن حماية البرامج . ولذلك فإن دفاعي عن الموضوع سيكون كالتالي : إن التحدث عن حماية البرامج الخاصة بنا أشرف عشر مرات من التحدث عن كسر حماية برامج الغير , وما قدمتة في هذا المنتدى بخصوص ذلك أفضل بكثير مما قدمتة منتديات عربية أخرى (معظمها) .. كما أن منتدانا هذا هو أول من طرح فكرة حماية برامج دلفي على حد علمي ... وهناك جانب آخر بسيط ومهم : بما أن المنتدى معني بشؤون دلفي المختلفة , فلا أرى ضير من ذكر مثل هذة المواضيع بإعتبارها مادة علمية متخصصة بالدلفي قد تفيد في رفع تفكير المبتدء كما أنة توجد في ثناياها معلومات قيمة عن أمور أخرى (مثال النسب الديناميكي في الفقرة السابقة ) بغض النظر عن رقي الفكرة نفسها , أي إعتبارها مادة علمية بغض النظر عن الفكرة العمومية لها .. ذلك كان ما أحببت أن أدافع بة عن فكرتي في طرح موضوع كهذا ... وأتمنى أن تعذرني بعد ذلك أما عن أننا يبدو علينا الإرهاق من كثر القرصنة ...وكأن الشغل الشاغل هو فك البرامج ...... ياسيدي اللة يسامحك , مع أن عنوان الموضوع هو جعل البرامج أصعب للكسر وليس فك حمايتها كما تقول . على كل حال ملاحظتك بمكانها ... أما عن أن الهكر يفضلون البرامج ذات الإقبال العالي , كلامك صحيح مئة بالمئــة . طريقة بغاية الروعة هي الطريقة التي ذكرتها لحماية البرامج من الكسر , وأنا شخصياً أميل إلى هذا النوع من الطرق .. أما ياسيدي قولك عن الأخلاق الرفيعة والإشارة إلى المصدر ... أللة يسامحك ومقبولة منك ,, على كل حال المصدر هو الإنترنت ومخزون متواضع من المعلومات جمعتة مع مرور الزمن . طريقة تنسيق الكود أجابك عليها أخي الأيهم وأخير .... أشكرك جزيل الشكر أخي رايد فلفل على مساهمتك وتفاعلك , وأنى أنتظر بفارغ الصبر أن أرى مشاركات فاعلة من عضو نشيط وذكي مثلك . وأتمنى منك أن تعذرني وتعذر المنتدى على طرح هكذا مواضيع , ولكني أؤوكد لك أنني لم أكن أريد الجانب السيء منها ... وجل ما أتمناة الآن هو أن تجد الفلفل الذي تريدة في منتدانا هذا (عم أمزح لا تاخد على بالك ....) أخوك .. عروة [ تم تحريره بواسطة orwa on 2/3/2004 ]
orwa

دعنا نتحدث قليلا أولا عن الأجزاء الداخلية من منتج بورلاند هذا ...(طبعـا دلفي ) , ربما هذة المعلومات سوف تساعد في تسريع فهم بعض الآليات المعاكسة للكسر , . VCL وهي إختصار لـ "visual component library" وهي مكتبة تستخدمها لغات بورلاند للبرمجة المرئية Visual Programming مثل Delphi و BC++ Builder . هذة البيئات يتم تنسيقها على شكل مصادر resource format , وهذة المصادر تحتوي الأشكال Forms . في دلفي فإن الأشكال بالتأكيد هي نوافذ البرنامج , وكل المعلومات حول تصميم البرنامج ستكون مخزنة فيها , عندما يتم تشغيل برنامج دلفي قياسي فإن قسم التهيئة initialisation يقوم بخلق (إنشاء) الأشكال , وتحميل المعلومات اللازمة من الموارد (المصادر أو resource) , أحيانا تؤجل هذة العملية لبعض الوقت – , وطبعا الأشكال التي لاتستخدم بشكل كبير يمكن إنشاءها وتحريرها حسب الحاجة , . الجزء المهم من هذة المعلومات هو أن عنوان الروتينات التي يستدعيها المستخدم بتأثيرة على عناصر الفورم (كالأزرارمثلا) , - يتم نسبة في زمن التشغيل RunTime بواسطة الإسم . وبالتالي إذا عرفنا الإسم يمكننا معرفة العنوان المخصص لإحداثة . وربما تكون هذة الطرق من الطرق المهمة المتبعة لكسر البرامج , ... دعنا نخوض قليلا بهــا : الخطوة الأولى ستكون جمع المعلومات عن ملفك التنفيذي بأدوات تجسس على الأشكال أو الموارد form spy tools وهذا سيبدو مشابها لضغط بالزر الأيمن على الشكل وأختيار إظهارة بشكل نصي من بيئة دلفي : ستظهر لنا معلومات مثل : object RegButton: TButton Left = 200 Top = 176 Width = 97 Height = 25 Caption = 'Register' TabOrder = 1 OnClick = RegButtonClick end ماهذا ,, حسنا إنة الزر الذي عنوانة Register حيث بإمكانك أن ترى حجمة وموقعة , وسترى أيضا إسم آخر مع العبارة OnClick ,,, هذا الإسم يخبرنا ما هو إسم الروتين المتولد عند النقر على الزر (الجزء المهم من الطريقة) ,وبالتالي يمكن معرفة عنوان حدث عند النقر لزر تسجيل الدخول Rigister .. وكما أوردنا سابقا سيتم نسب الروتين إلى معالج الحدث عند نقر المستخدم على الزر بواسطة الإسم المرفق مع OnClick وهو RegButtonClick .. وبالتالي الكلمة RegButtonClick ستكون مخزنة بشكل نصي في الملف التنفيذي وسيسهل العثور عليها بأي محرر ست عشري .! وعندما جربت ذلك على محرر ست عشري عثرت عليها بكل بساطة وكان الناتج : 000A4990 ____ ____ ____ BC57 4A00 0E52 6567 4275 ______.WJ..RegBu 000A49A0 7474 6F6E 436C 6963 6B__ ____ ____ ____ ttonClick_______ وإذا نظرنا إلى الأرقام التي قبل الإسم , سنجد البايت (0E) والذي يحدد طول ال" RegButtonClick " (14 محرف) . وقبل ذلك يوجد العنوان 004ABC57 . الخ .. لن نخوض كثيرا في ذلك وسوف ننتقل الآن إلى الجزء المهم , وهو كيف نمنع هذا النوع من الكسر . أي النوع الذي يتم الإعتماد فية على معرفة مكان الإجراء المرتبط بعنصر معين عن طريق الإسم .. وبكل بساطة أقول لك ( ذا كنت مهتما بمنع هذا النوع من الكسر طبعا) : لا تستخدم الطريقة الأوتوماتيكية في تعين معالج الحدث لزر معين وذلك بالنقر المزدوج على الزر , أو من مربع النص الخاص بة في ضابط الكائنات , . ولا تستخدم أسماء قياسية مثل " RegButtonClick , بل قم بكتابة شفرة الزر في مكان ما من البرنامج , (على شكل إجراء مثلا )أو ربما في وحدة أخرى غير البرنامج الرئيسي . ثم قم بنسبة يدويا إلى الزر بإستخدام كود مثل : RegButton.OnClick := RButtonClick; على إفتراض سميتها RbuttonClick , (يفضل إستخدام أسماء لاتدل على عملها) طبعا يجب وضع هذا الكود بعد إنشاء الفورم FormCreate ( ولكن ليس بعد إستدعائة) . بهذة الطريقة لن يسرد إسم الروتين عند إستخدام برامج تجسس الأشكال , وسيصبح العثور على إسم الروتين الخاص أصعب بكثير من الحالة السابقة ... وبالتأكيد طالما لم يستطع الهاكر العثور على مكان الشفرة التي يبحث عنها لن يستطيع فعل شي ذا قيمة ... مثال على نسب الحدث في زمن التشغيل ((النسب الديناميكي)): ننشيء مشروع دلفي جديد , ونضع زر على الفورم . ما نريدة الآن هو تعيين حدث للزر عند النقر علية ولكننا لا نريد إستخدام الطريقة العادية بتحديد OnClick من ضابط الكائنات , أو بالنقر المزدوج على الزر . لذلك سنقوم بنسبة في زمن التشغيل إلى الحدث المناسب . لنقم أولا بإنشاء إجراء بسيط يظهر عبارة Hello world , ((ولكي يقبل النسب إلى TnotifyEvent يجب أن يحوي المتحول الوسيطي Sender )). إذن : procedure TForm1.hi(Sender: TObject) ; begin showmessage('Hello World … '); end; ثم عند إنشاء الفورم نكتب procedure TForm1.FormCreate(Sender: TObject); begin Button1.OnClick:=hi; end; نلاحظ بعد تشغيل البرنامج والضغط على الزر تظهر لنا عبارة Hello World وهكذا نكون حددنا الحدث المطلوب عند النقر على الزر في زمن التشغيل Run Time ,. تستخدم هذة الطريقة في بعض الحالات التي تختلف فيها إستجابة العنصر (زر مثلا) حسب شروط معينة يحددها المستخدم أثناء التشغيل , وبالتالي يمكن تغيير إستجابة عنصر معين حسب الشروط أثناء تشغيل البرنامج . كما أنها مفيدة في حالات أخرى مثل حالتنا هذة . الشفرة الكاملة : unit Unit1; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls; type TForm1 = class(TForm) Button1: TButton; procedure FormCreate(Sender: TObject); private procedure hi(Sender: TObject) ; public { Public declarations } end; var Form1: TForm1; implementation {$R *.dfm} procedure tform1.hi(Sender: TObject) ; begin showmessage('how are you'); end; procedure TForm1.FormCreate(Sender: TObject); begin Button1.OnClick:=hi; end; end. نكمل قريبا ...
orwa

شكرا جزيلا لك أخي الأيهم ... وشكرا على إهتمامك بالموضوع وإبداء رأيك , أنا أيضا أريد أن أُؤكد للجميع أهمية الفكرة التي طرحها أخي الأيهم عن البرامج المفتوحة المصدر , فأنا من أكثر المتعلقين بهذة الفكرة , وهي بلا شك عمل رائع ولها فوائد هائلة للتعلم وللمستخدم نفسة , الذي لن يضطر لتبديل برامجة عن حدوث تعديلات على قوانين الشركة التي يملكها بل يكفي إجراء تعديلات بسيطة على شفرة البرنامج التي يملك نسخة منها . أنا نفسي قمت بفتح شفرة عدة برامج أعدتها وأحب ذلك كثيرا كذلك تراخيص الـ GPL... ولكن أحب أن أذكر الأخ الأيهم أن المقالة السابقة لم تكن عن قواعد كتابة برامج مثالية ,, ؟؟؟؟؟ بل كانت للمهتمين بحماية برامجهم من الكسر . ولن أخوض أخي فيما ذكرتة عن فتح الشفرة ولكنة لا ينطبق إلا على نصف الحالات , وأنا أوجه كلامي للنصف الآخر الذي يعاني مشكلة لا أخلاقية وهي أن ما يتعب علية لشهور وما يبدعة من صميم نفسة بتعبة ومعرفتة لايستطيع الإستفادة منة .. نعم ربما تكون الإستفادة مادية لما لا , أنا أعمل بالبرمجة من أجل الربح المادي أما بالنسبة للتسلية فأنا أفضل العزف على آلة موسيقية أكثر , وبكل بساطة يأتي هاكر بهدف التخريب والإساءة للآخرين فقط ليقوم بكسر برامجنا , بعض الهاكر يهدف إلى نشر البرامج ويخصص أهدافة من منتجات الشركات العالمية .. يعني ربما أنا أحب هذا النوع من الناس إذا أثبت أنة لا يهدف للتخريب فقط , بعض البرامج أخي لها صبغة أمنية , مثل بعض البرامج المتعلقة بسياسات شركات معينة ويمنع في هذا النوع منعا باتا تهريب أي معلومات مفيدة أو غير مفيدة لشركات مضاربة أخرى أو لجهات غير مرغوبة ,... وهنا لابد من حماية البرامج وأستطيع أن أجد لك ألف سبب يجعلنا نحمي برامجنا ربما ليس من الكسر والتوزيع فحسب بل من الإختراق غير المرغوب أيضا ... وأهنا أركز على عمومية وشمولية كلمة حماية البرامج , لإغراض بعضها ضعيف وبعضها مهم وأساسي .. إذن النقطة الأولى التي أشير إليها هي : أن بحث بعض مصممي البرامج عن طرق لحماية برامجهم هو غاية مشروعة مبررة ومهمة ولا يجوز الحكم بعدم جدواها . النقطة الثانية , أن ملاحظات حماية البرامج ( جعل البرامج أصعب للكسر ) لا تتفق بشكل كلي مع قوانين كتابة برامج قياسية , بل بالعكس , تعتمد بشكل كلي على الإبتعاد عن القياسية والإعتيادية . وبما أن الغاية مبررة حسب النقطة الأولى فإن وسيلة تحقيقها لها ضريبتها , وعلى من يريد أن يحمي برامجة لأي سبب أن يدفع بعض هذة الضرائب النقطة الثالثة , أن كل ما أوردتة سابقا هو أفكار يمكن تطبيق أي منها وليس من الضرورة أن يخنق المبرمج نفسة بها ويطبقها جميها بالعكس ,وحتى هذة الأفكار تطبق فقط في الأجزاء المهمة من الشفرة فقط , ولاداعي لتطبيقها في كل البرنامج , مثال :منع رسائل المستخدم تطبق فقط في فورم التسجيل ومع أحداث محددة ,وليس على كل البرنامج. ألقي نظرة على النت عن هذا الموضوع وسترى أن ما أوردتة أنا يعتبر طرق بسيطة للغاية لا تكلفنا سو التفكير بنفس طريقة الكراكر , ويمكن تطبيقها مع أي برنامج دون خسائر تذكر على عكس معظم الطرق الأخرى التي تكلف الكثير من المادة والجهد ولا تتفوق كثيرا على هذة الطرق , عل الأقل الإصدارة النهائية من المشروع حيث يمكن ببساطة قبل إصدار النسخة النهائية من المشروع إجراء بعض التغييرات المذكورة وترجمة المشروع ويمكن بعد ذلك إذا أردنا الرجوع للنسخة الأصلية وعدم حفظ التعديلات . ملاحظة : أعرف أن واقع البلد القائم على أساس عدم إحترام حقوق الملكية الفكرية مثل ملكية الأغاني والألحان .... وبالتأكيد البرامج , لة فوائد هائلة جدا على المواطن العادي , فأنا أشتري بشكل أسبوعي برامج جديدة دون تخصيص ميزانية خاصة بذلك .... يعني يا بلاش وعندي كل البرامج يلي بدي ياها واللي ما بدي ياها .. بس أنا ما كتير مرتاح لهاد الوضع وبتمنى أن ينتهي بسرعة , لأنة وضع غير عادل ولة آثارة السلبية على الإقتصاد وعلى المنتج السوري الذي لامجال أمامة لتسويق منتجة إلا عن طريق الحمايات المختلفة ,, التي كثيرا ما تكون غير مجدية ,,. وأخيرا أتمنى من كل اللذين يهتمون بحماية برامجهم لإي سبب من الأسباب ( لا أظن أن الأخ الأيهم سيكون سعيد عندما يخترق أحد ما موقعة على الإنترنت ويضع مكانة صفحة لعروض فاضحة وشاذة كما حصل مع بعض المواقع , وجدير بة أن لم يكن قد فكر مسبقا بإساليب حماية لبرامجة ومواقعة من قبل أن يفكر الآن, على الأقل حمايتها من الجزء الذي يريد الضرر بة وبالناس ويحاول إلحاق الأذى فقط ) أتمنى من كل هؤلاء أن يقرأو السطور السابقة بتمعن , فهي نصائح جديرة بالقراءة والإهتمام , ومع أنها بسيطة للغاية ولكنها مفيدة جدا ... المقالات القادمة عن دلفي جزء منها جاهز وسأضعها بهالكام يوم ,,,..
orwa

أهلا بك أيها الصديق الرائع KGK , وشكرا لك على هذة المشاركة المفيدة , وعلى مديحك الذي لا أعرف إذا كنت أستحقة ... ما أوردة الأخ KGK صحيح تماما , وبالنسبة للبند الأول (إستيراد عنصر التحكم ) فإن ذلك بسيط للغاية وللذين لا يعرفوة نقول : من قائمة دلفي نختار -> Component ثم ->Import ActiveX Control يظهر لنا مربع بسيط يحوي كل عناصر تحكم Active X الموجودة على الجهاز , ومن هنا نبحث عن العنصرSWFlash.ocx أو نحدد مسارة على القرص لإضافتة . أهلا بك مجددا نتمنى مشاركة فاعلة منك ومن جميع الأصدقاء.... [ تم تحريره بواسطة orwa on 20/12/2003 ] [ تم تحريره بواسطة orwa on 20/12/2003 ]
orwa

عذرا لتأخري بالرد ... في الحقيقة أنا آسف فأنا لا أعرف من هو الكاتب الأصلي لهذة القصة الظريفة والمؤثرة ... وإنما وصلتني بالبريد من أحد أصدقائي ((كمــال )) .. وأحببت أن أضيفها في منتدانا لإنني تأثرت بها , وظننت أنة ربما أحد الأخوة يشاركني ذلك ... على كل حال سوف أتأكد من الكاتب وأرفقة .. ..؟؟ سلام , وشكرا لك
orwa

عذرا منك أخي أيهم .. أنت لست متعصب أبدا . طبعـأ لم أكن أقصد ذلك ,, بل أنت رجل من قلة الرجال الصالحين والعلميين في هذا البلد .. كل ما أريدة منك هو تقبل هذا العضو المشاكس في منتداك , وأعدك بمزيد من المشاكسات (والمتاعب) , وقد أعجبتني جدا عندما قبلتني بالرغم من تعصبي وعدم إحترامي . , فهذا هو مبدأي (إحترام الرأي الآخر ولو على خطـأ ((طبعا أنا لا أنفذة , إنة مبدأ للكلام فقط ..))) أنا لازلت شاب في مقتبل العمر (متل الوردة) , ولا أحب رصانة الكبار وإتزانهم كثيرا , على كل حال موضة التعصب لشيء ما دارجة كثيرا لدى الشباب , الجميع يتعصب من أجل معتقد معين , من أجل فكرة , من أجل لغة برمجة .., في الحقيقة نعم أنا من المتعصبين للغة بورلاند ديلفي , والمتعصبين جدا , ليس لشيء ولكن لإني لا أتقن لغة غيرها , وطبعا بما أني لا أعرف سواها فإذن يجب أن تكون هي أفضل لغة في العالم . (( ملاحظة بدأت مع Visual Basic وأحببتها كثيرا , ثم إنتقلت إلى VC++ ولإنها صعبة أو لإني لم أكن متمكن كفاية وكنت طالبا لم أكمل معها , وطبعا بدأ مشواري مع دلفي هنا , وأنا لست سيء بها كثيرا على كل حال , وفي الجامعة تعلمت C++ لمدة عام وأخذت أعلى علامة بها . وكل شي...)) . في الحقيقة أنا أعرفك جيدا منذ زمن , وسأقول لك أنة يوجد بيننا قرابة وصلة رحم , أعرف أنك لاتعطي هذة الأمور أهمية كبرى على كل حال .. , وكنت أتمنى منذ زمن مقابلتك أو النقاش معك , ولم أحبذ أن أفرض نفسي عليك بلقاء معين في موقع معين ,(( سوى موقعك على الإنترنت)) ... وبداية القصة أنة كان أبوك منذ فترة يزورنا في البيت هو وعمك , وقال أنة لك موقع على الإنترنت وبالطبع أعجبتني الفكرة وسجلت في الموقع .. ... ومن هنا بدأنا . لقد أستمتعت كثيرا بالنقاش معك , .. طبعــا في البداية لم تعجبني ردودك ... في الحقيقة لم أجد ولا رد من الردود الأولى جيدا .. وظهرت أنت وكأنك تحاول إظهار أي إسائة للدلفي ونفي أي ميزة عنها , ومحاولة تفنيد كل ماذكرتة أنا في المقال , مع العلم بإني كنت أذكر 10 أشياء أنا أحبها , وليس من الضروري أن تتفوق بها دلفي على بقية اللغات ... ملاحظة مهمة : لا تظن أن النقاش انتهى , فأنا أعتبر أن ردودك الأولى ظالمة وغير علمية , ولازلت متمسك بمعظم ما أوردتة في الردود (مع أني أوافقك الرأي على موضوع إختيار اللغة حسب العمل, ولكنة بصراحة صعب جدا فإتقان لغة واحدة سيأخذ عمر طويل ..) . شكرا لك على الشرح والتوضيحات مرة أخرى , وأتمنى أن تبقى متألقا كعادتك في هذا المنتدى , وعندما ترى مشاركة لي وتشعر أنني بحاجة لرأي أو نصيحة ’ رد علي وعاملني مثل أخوك , أصلا ما بيحلو الموقع إذا ما كانت فية مناقشات ساخنة , لأنو هيي دليل الحرية , وتعد وجهات النظر برأيي ظاهرة إيجابية . ملاحطــة : أنا أطالب بإنشاء قسم خاص للدلفي . . شكرا مجددا , وسلام ...... سي يو .
orwa

عذرا بعض الإرتباطات السابقة لاتعمل ,, لا بد أنها تحدثت ,أو تغيرت ... على كل حال مقالة لمؤلف كتاب Hardcore Visual Basic يشرح فيها بعض المقارنات مع دلفي موجودة على الرابط التالي : http://brucem.mystarband.net/mckinney1.htm وارتباط بسيط لميكروسوفت عن Anders Hejlsberg المسؤل عن بنية C# موجود على الرابط التالي : http://www.microsoft.com/presspass/press/2001/apr01/04-11AndersPR.asp وهذة مقابلة معة http://www.artima.com/intv/handcuffs.html طبعا هناك آلاف الروابط , ولكن أردت فقط تصحيح الوصلات على الأقل ...
orwa

*- إقتباس : لا أدري من قال هذا؟ وفي جميع الأحوال هذا ليس ميزة بالنسبة لي، لأن ما يهمني هو ما أفعله بدلفي وليس ما فعله مصممو دلفي. إذا كنت لا تدري من قال هذا , فأنا أرفض النقاش معك من الآن .... صديقي راجع موقع بورلاند صدقني ستجد فية بعض المعلومات المفيدة ....... أما إذا كانت هذة ميزة بالنسبة لك أو لا , فهذا رأيك الشخصي . ولكن يا ترى لو كانت vb قوية بما فية الكفاية لماذا لم تبنى بشكل كامل على نفسها ,,, هل يدغدغ هذا عاطفة ما في داخلك , أم أنة كلام فارغ وأنة من الطبيعي لبياع العسل أن يشتري عسلة من جارة ...... ؟؟؟؟؟؟؟ . سلامة فهمك ,, على كل لاتكرر هذة العبارة كثيرا . وأيضا أذكرك بإن ما فعلة مصمموا دلفي هوالذي يحدد ما تستطيع أنت فعلة .. أم تظن أني على خطــأ .. لا بأس مقبولة منك ..... إقتباس : يمكن، ولكن أغلب تطبيقات العالم ليست متعددة المنصات، ماذا أستفيد من هذه الميزة إذا كان كل مستخدمي برامجي يعملون على ويندوز. بصراحة كلامك مثير للضحك أخي الأيهم , ولكن هل تعلم أنة أحزنني ... أنت قلتها بلسانك : أغلب مستخدمي برامجك يعملون على ويندوز .... وماذا عن البقية ؟؟؟؟ , أغلب تطبيقات العالم ليست متعددة المنصات , وماذا عن البقية ؟؟؟؟ ماذا عن البقية يا أيهم ماذا عن البقية .. ألا تشعر بإن المنتج الذي يقدر على تخديم كل المستخدمين وليس فقط أغلبهم , هو منتج جدير بالإهتمام ..... أنا أرى أنها ميزة سحرية وتستحق الذكر في كل مرة يجري بها النقاش عن دلفي . غريب كلامك يا أخي , كل عبارة من عباراتك لا يقولها إلابعض المتسرعين قليلي الخبرة . أرجو مراجعة ردك السابق لتصحيح بعض الأخطاء (أخطاء نحوية طبعـأ ) . إقتباس : مثل أغلب لغات البرمجة الحديثة : ليس صحيح , نموذج مكونات دلفي هو الأفضل .. لماذا لم ترد على فقرة : " مع العلم أننا يجب أن ننصب كل ملفات ActiveX التي نستخدمها في برنامجنا إذا كنا نستخدم اللغة VC++ أو VB , وهذا بالطبع برأيي نقطة تميز دلفي عن هاتين اللغتين " ... أولا توافقني الرأي أن هذة الخاصية هي قمة المرونة , وأين المرونة في اللغات ((الحديثة )) إذا كنا سننصب مكتبات ActiveX كل مرة , وتصبح مشتركة في النظام .. أخي الأيهم تجربتك في الدلفي ممتازة وعلى راسي ولكن ببساطة إذا لم تكن قد رأيت هذة الخصائص من قبل , فأنت لم تدخل في عالم الدلفي بعد (( طبعا وأنا لم أدخل بعد ..)) *- إقتباس : هذه الميزات تهم الطلاب والمبتدئين فقط. ما هذا الكلام أخي ... كل العالم يتجة حاليا نحو ما يسمى RAD (التطوير السريع للتطبيقات ) وأنت ترى أنة للمبتدئين .. ؟؟ وهل برأيك أن اللغة المرمزة بقوة هي لغة طلاب فقط .. أين تعيش ... فلتعلم أن الوضوح والتنظيم والسهولة هي أساس بناء التطبيقات المستقرة . أعرف أنك لم تفهم علي , أضرب لك مثلا الأسمبلي لغة جبارة (تقوم بكل شيء) لو طلبنا من مبرمج أسمبلي أن يقوم ببناء تطبيق Web Application ISAPI مثلا . فهل تعتقد أن تطبيقة الناتج بعد طول عمر سيكون مستقرا . بل سيكون مليء بالأخطاء وليست أخطاء المبتدئين هذة المرة . لإن قانون الطبيعة يقول لك الأمور السهلة والمنظمة تنجز بدقة , والأمور المعقدة وغير المنظمة مليئة بالأخطاء , على الأقل لن تكون مضطر لعناء الوقوع في مشكلة لغة البرمجة بالإضافة إلى مشكلة البرنامج الذي تبنية . أخي الأيهم لا داعي للتعلق بمعتقدات معينة , كن مرنا مثل السنابل وتقبل رأيي هذا وإن كان غير مطابق لرأيك .. وما هي مشكلة الدفاع عن VB معك . ألا تعلم أنة : • * عندما تريد الوصول الوصول الي موقع معين في الذاكرة او تتعامل مع مواقع الذاكرة مباشرة او حتي اذا اردت ان تتعامل مع الهاردوير مباشرة فإنك سوف تحتاج للتعامل مع مواقع المتغيرات وليس المتغيرات نفسها ولذلك سوف تستخدم ال pointers ولكن فيجوال بيزيك لا يوجد فيها امكانية استخدام ال Pointers اما بالنسبة للهاردوير فإنه بإمكانك ان تتعامل مع لغة الاسمبلي من خلال دلفي حتى تجعل اجزاء من برامجك تعمل بشكل اسرع واقوي ولكن فيجوال بيزيك ليس لديها الامكانية ان تتعامل مع لغة الاسمبلي. • * فيجوال بيزيك ليس لديها الامكانية ان تبني مكتبات DLL ولكن بأمكانك ان تبني فيها ActiveX COM DLL اما دلفي فأن لها امكانية اني تبني الاثنين وايضا ActiveX Controls وبإستطاعك بعد ذلك استخدامها في اي لغة برمجة او حتى على الانترنت، يوجد امكانية لبناء ActiveX Controls في فيجوال بيزيك، ولكن المصيبة انها لن تعمل في حال عدم وجود مكتبات الربط الخاصة بفيجوال بيزيك وهي MSVBVM60.DLL في حال استخدامك لفيجوال بيزيك 6 وحجم هذا الملف اكثر من 1MB واعتقد انه ليس من المنطق اني تبني اكتف اكس كونترول وتصحب معه ملف حجمة اكثر من 10 اضعاف حجم الكونترول الذي سوف تبنية . • واود ان اقول لكل من جرب برمجة قواعد البيانات في فيجوال بيزيك انها اصعب بكثير من دلفي • * دلفي يأتي مع العشرات بل المئات من components والتي لا تجعلك تحتاج اي شي وبإستطاعتك ان تطور او تضيف خصائص غير موجودة عليها حيث ان الكود المصدري موجود مع نسخة دلفي enterprise اما بالنسبة لفيجوال بيزيك فكل شي تضيفه يكون على هيئة ActiveX controls مما يجعل برامج تصبح بطيئة وذات مجموعة كبيرة من الملفات اما بالنسبة للكود المصدري فابالتأكيد لا ياتي مع فيجوال بيزيك حيث ان ActiveX Controls طورت بإستخدام فيجوال سي ++ وليس بفيجوال بيزيك. • * بالنسبة لدلفي طورت دلفي بإستخدام دلفي اما فيجوال بيزيك طورت بإستخدام فيجوال ٍسي++. • * بالنسبة للبرمجة تحت بيئة ويندوز تعتبر دلفي اسرع اداة تطوير برامج تحت بيئة الويندوز، بإمكانك ان تري مقارنة عن عدة لغات منها دلفي 4 وفيجوال بيزيك 6 وطبعا اختيار المحريرين كان دلفي 4 فما بالك بدلفي 5 او 6 • http://www.zdnet.co.uk/pcmag/labs/1999/04/visual/015.html أتمنى أن يكون وقع كلامي سهلا ,, وأنا أعتذر منك أخي الكبير أيهم , ولكنك ستسامحني عندما تعلم أنني أقضي معظم يومي أبحث عن خفايا وخصائص هذة اللغة وما ذكرتة هنا ليس كلاما أدبيا أسردة .. أنا مسؤول عن كل كلمة قلتها , وبإنتظار ردك إنشاء اللة , فإن كنت أنت واثق من أني على خطأ لا تبخل علي بالرد عسى الفائدة تلاقي طريقا إلي , وإن كنت قد أقتنعت ببعض ما أوردتة لك , لاتبخل بالرد عسى أن يكون شخص ثالث يهتم للأمر ويستفيد معنــأ .. شكرا لك مجددا ,, سررت لتجاذب أطراف الحديث معك .. عذرا لعدم التفصيل فأنا أيضا وقتي ضيق ....
orwa

أستاذي العزيز الأيهم .... أزيدك من الشعر بيت : " لا تسأل ما الذي تفعله لغه البرمجه تلك, ولكن اسال ما الذي يمكنك ان تفعل بها" دعنا نترك التعصب جانبا ودعنا تنناقش بموضوعية , ((وكم أتمنى أن ترفق الأدلة مع كل فقرة نتحدث عنها)) . أعلم يا أستاذي أن دلفي لغة ممتازة ((مثل كل لغات البرمجة الحديثة)) كما تفضلت , ولكن ليس فقط المهام التي نوكلها إليها هي التي تحدد أفضلية اللغة .. أمور كثيرة أخرى لا تخفى عليك أستاذي .. ولكنك بحاجة إلى بعض الهدوء والموضوعية , وإعادة النظر في الأوراق .. أذكر لك أبسط مثال سرعة تطوير التطبيق , ولا أقبل منك أن تقول بإنها سرعة مشتركة وثابتة بين كل اللغات ,.. أعلم أن لك مشوار بسيط مع دلفي , وألفت كتاب فيها , ولكني سأذكرك في نهاية المقال بإنك على خطـأ , على كل حال كتابك لـDelphi6 لم يكن كتاب ممتاز جدا . على كل حال مرة أخرى دعنا الآن نراجع معلوماتنا قليلا حول بعض الإقتباسات التي أخذتها من كلامي ((عفوا كلام Charlie Calvert)) . • - إقتباس : الوحيد الذي يعرف هذا هو من لم يجرب VB ابدا . وما رأيك أيها الأستاذ أن كبار مبرمجي فيجوال بيزك يقولون ذلك .. ما رأيك مثلا بالمؤلف بروس مكيني Bruce McKinney وهو الف كتاب من اقوي الكتب الخاصة بيفجوال بيزيك على ما أذكر إسمة Hardcore Visual Basic ولكنه انتقل الي دلفي فيما بعد , واريد ان اقتبس عبارة منه وهي " فيجوال بيزيك يجعل الاشياء السهلة اسهل، ولكن دلفي يجعل الامور الصعبة اسهل" "Visual Basic makes the easy things easier; Delphi makes the hard things easier" وانصحك بقراءة المقال في هذه الصفحة http://www.vbzone.com/upload/free/features/vbpj/1999/mckinney/mckinneyt… وبعد قرائة المقال أخي أيهم , أتمنى منك شرب كأس من الشاي . ثم إعادة النظر من جديد بعبارتك المشؤومة ((الوحيد الذي يعرف هذا هو من لم يجرب VB ابدا .)) فإذا كنت قد بدأت منذ فترة بسيطة مع VB فقد أمضى بها غيرك سنين , ولم يقولو مثل هذا الكلام .. *- إقتباس : لدرجة أن بعض مكتبات دلفي 4 لا تعمل على دلفي 5 . ها ها لا أعرف كيف حسبتها , وما هو مقياسك للOOP هل هو أوأوبي متر ... سأضيف لمجموعة المعارف لديك معلومة وأتمنى أن تحسن إستقرائها فأنت لست إنسان عادي من الشارع وأظن أنك تملك رجاحة العقل الكافية لهذا النوع من الإستقرائات: واحد من أكبر المطورين لهذه اللغة (Borland Delphi) قد تم شراءه قبل سنة أو يزيد تقريبا من قبل العملاق microsoft المسيطر على نظم التشغيل الشخصية طبعا لا داعي لأن أذكركم بما يعني هذا , وقد دفع له حوالي 30 مليون دولارا وهو Anders Hejlsberg وقد طور هذا العالم الجيل الجديد من Component OOP في C# بإمكانك إلقاء نظرة على الوصلة http://msdn.microsoft.com/theshow/E...008/default.asp وعلى العديد من الوصلات الأخرى على الإنترنت , ((ملاحظة , كلف نفسك عناء البحث على الإنترنت عن هذا الموضوع وأخبرني بالنتائج , )) صديقي العزيز لاداعي لإن تتمسك بما اعترفت بة ميكروسوفت نفسها . ولا داعي لإن إذكرك بعراقة بورلاند في الـ ooP , أظن أنك تعرف عن الـفرق بين C++ و C ؟ ومن أضاف مفهوم OOP إلى الأخيرة .. *- إقتباس : لا أعتقد ذلك، تدريسها لأن الطلاب يفهمونها بشكل أسرع، ولذلك فهي منتشرة بكثرة بين الطلاب وغير المحترفين بشكل عام. أخي الأيهم , لايهم ما نعتقد وما لا نعتقد لم يغير الإعتقاد حقيقة ما أبدا . وأنا أول شخص أصدق معك , وسأكون شاكرا لك عندما تقدم أدلة علمية مصحوبة بمقارنات وآراء لأخصائيين حول العالم تناقض هذة الفكرة *- إقتباس : صحيح، ولكن هل حاولت تطوير تطبيق معقد جدا بواسطة دلفي؟ هل حاولت فعلا تطوير برنامج متعدد المراحل فعلا بواسطة دلفي؟ : الجواب : نعــم . لا بد أنك حاولت القيام بذلك قبلي ولكنك لم تفلح , فظننت أن العيب من اللغة وأن الجميع لن يستطيعوا تحقيق ما عجزت عنة ... (( عم أمزح ... لا تاخد الكلام على محمل الجد )) : ملاحظة : أحب هذة المصطلحات (تطبيق معقد جدا ) و (برنامج متعدد المراحل ) فهي تعطي عمومية بالكلام ولا يستطيع المرء تحديد ما إذا كان يفهم معناها تماما أو لا , أو حتى إذا كان من كتبها يظن أنة يفهم معناها أو لا ((لا أريد أن أظلمك فأنت إنسان ذو خبرة , وتعجبني نظرتك للأمور : قرأت لك مقالات عن ذلك , وهي جيدة بشكل عام )) .... نعم نعم أخي الأيهم . لماذا أنت مستغرب , إذا كنت أنا الذي لم أؤتى من العلم إلا قليلا قد عملت في تطوير التطبيقات الثلاثية الأبعاد (على OPENGL ) من النوع المعقد جدا جدا إذا أردت , وتطبيقات ويب ديناميكية وتطبيقات مخدم مستفيد متعدد المراحل , الخ .... بصراحة لا أحب الخوض في هذا المجال فهو ببساطة مبني على أساس تجربة شخصية قد لا تكون دقيقة .. *- إقتباس : غير صحيح، دعم دلفي لمكتبات COM يعتمد على ترجمتها أولا إلى بنى دلفي، ودعم دلفي لمكتبات الواجهات غير كامل. لا يعني هذا أن VB أحسن دائما، فدعم VB أيضا قاصر في بعض النواحي. واللة يا أستاذي لم أفهم ما تقصدة بهذا الكلام تماما ((ما ذا تقصد بترجمتها إلى بنى دلفي وما هي مكتبات الواجهات التي لم نسمع بها من قبل ..)) راجع معلوماتك واستخدم عبارات دقيقة , وأبتعد عن العموميات أذكرك بإنك لست مضطر لتأليف مصطلحات جديدة .., أتمنى منك توضيح هذة الفكرة , وأنا بالإنتظار . وحتى ذلك الحين كلامك مرفوض جملة وتفصيلا .. أما بالنسبة " لدعم VB أيضا قاصر في بعض النواحي. " ما هي قصتك مع VB يا أخي , قارن دلفي مع أي لغة تريد . ولكن مع VB أنت بالتأكيد الخاسر ..... *- إقتباس : ولا في أغلب اللغات الحديثة. ربما كنت تقارن دلفي مع اللغات القديمة. ما هي اللغات القديمة يا ترى ... ,, يا أخي أقول لك دلفي مكتوبة بنفسها وعناصرها مفتوحة المصدر ولا تعتمد على أي مكتبة . تقول لي لغات حديثة ولغات قديمة , هل تعرف أنت يا أستاذي أيهم ما هي شفرة المكتبة msvbvm60.dll . التي عليك إرفاقها مع ملفاتك , وهل هي مكتوبة بال vb . هل يسمى هذا صندوق أسود أم لا ,, . أتحداك أن تقدم لي شفرة vb وتقول لي هذة هي شفرة المكتبة السابقة , أنا اسمي هذ صندوق أسود , وإذا كنت لا تسمية كذلك ببساطة يمكنك إختراع مصطلح مناسب معقد (( لا داعي لإن يكون متعدد المراحل )) . إذا أردت رأيي كل مكون غير مفتوح الشفرة يسمى صندوق أسود ...