النتائج 1 إلى 8 من 8

الموضوع: تجربة مطور ويب: من تصميم لغة برمجة وحتى Ruby وRails

  1. #1
    عضو جديد
    تاريخ التسجيل
    Apr 2011
    المشاركات
    9

    تجربة مطور ويب: من تصميم لغة برمجة وحتى Ruby وRails



    تجربة مطور ويب: من تصميم لغة برمجة وحتى Ruby وRails


    السلام عليكم ورحمة الله تعالى وبركاته..

    أهلًا ومرحبًا بأعضاء سوالف سوفت، أهنئكم بالشهر الكريم، ثم أتحدث في موضوعي هذا عن تجربتي البسيطة والمتواضعة كمطور للويب (مبرمج ومصمم مواقع وتطبيقات ويب) من PHP، إلى تطوير لغتي الخاصة، ثم التعرف على لغة Ruby، ثم تطوير إطار عمل خاص بي، وحتى إستعمال إطار عمل Ruby on Rails بإذن الله..

    ------------------
    ملاحظة هامة: هذا الموضوع من كتابتي - نسخة معدلة تعديلات بسيطة جدًا، كتبته باسم sitesmaker في الفريق العربي للبرمجة (رابط الموضوع). التوثيق: في نهاية الموضوع في الفريق العربي للبرمجة ذكرت أني سأنقله إلى سوالف سوفت وترايدنت. لذا رجاءً عند نقل الموضوع الإشارة للموضوع الأصلي في الفريق العربي للبرمجة. وجزاكم الله خيرًا.
    ------------------

    مقدمة:

    كنت ولازلت – والحمد لله – مطورًا متواضع الحال للويب، بدأت مشواري بلغة PHP، واستعملتها لمدة من الزمن حتى لاحظت عدم إرتياحي. كان أمامي إما التعود على PHP، وإما أن أجد بديلًا! من المعلوم لدى أي مطور ويب الانتشارية الكبيرة للغة PHP، فتجدها في غالبية خوادم الويب، مما كان يعني بالنسبة لي أن البديل لا يمكن أن يكون لغة أخرى لصعوبة استعمال أي لغة أخرى على الويب – مقارنة بلغة PHP. وهنا ههمت مباشرة بتطوير لغتي الخاصة – نعم تطوير لغة بـPHP نفسها! كانت تجربة ممتعة حقًا وفاشلة أيضًا في محاولة تطوير لغة برمجة، ورغم ذلك تعلمت منها كثيرًا بفضل الله.

    أثناء تطوير للغة، توقفت عن المعاندة، وتعرفت أكثر وأكثر على OOP (البرمجة كائنية التوجه)، وعلى Functional Programming (البرمجة الوظيفية)، وأضفت منهما إلى لغتي. كان ذلك بتعرفي على لغات أخرى مثل Python وRuby ولغات أخرى – في ظل التطوير للغتي كذلك. مع مرور الوقت، ومع تأكدي من فشل لغتي بسبب البطء الشديد، كنت قد أعجبني النظام في Python، وظهرت لي لغة Ruby. كانت بالنسبة لي Python ولكن بخصائص عجيبة! في المراحل الأخيرة من تطوير اللغة، بدأت أنقل الكثير من خصائص Ruby بتغييرات بسيطة إلى لغتي، مما سهل علي عند تأكدي من فشل اللغة التحويل إلى Ruby سريعًا بعد ذلك – عازمًا على تطوير إطار عمل بها إذن!

    تعريف بلغة Ruby:

    ماتت لغتي، وانتقلت لتعلم Ruby بشكل منظم بدلًا من القراءات المتفرقة السابقة، اختلف تصوري عنها إلى حد ما، خصائصها العجيبة اتضح بأن لها فوائد عجيبة أيضًا! لغة Ruby باختصار عبارة عن مزيج ممتع من التوجه الكائني، والتوجه الوظيفي. قمت بتلخيص أفضل خصائص اللغة في الآتي:

    1- كل شيء عبارة عن كائن: في Ruby كل شيء – تقريبًا – يعتبر كائنًا، الفئة (class) كائن يرث من الفئة Class، وأنواع البيانات (الأرقام والنصوص والمصفوفات...) عبارة عن كائنات. هكذا تستمتع بسلاسة وتوحد ونظام في كل شيء. بل وضمن هذا يمكنني ذكر أن كل شيء تقريبًا تتعامل فيه مع كائن هو عبارة عن نداء لدالة (method)، حتى الجمع والطرح وغير ذلك، إلا تقريبًا نداء الدوال لا يمكن أن يكون كذلك في حد ذاته.

    2- كل شيء مفتوح للتعديلات: في Ruby يمكنك على سبيل المثال أن تضيف دالة للفئة Object، وبالتالي تجد تلك الدالة في كل الكائنات (بشكل أدق كل الكائنات التي ترث من Object)، أو أن تضيف لفئة Fixnum الخاصة ببعض الأرقام دالة خاصة بضرب الرقم في اثنين ثم جمعه بواحد مثلًا، ثم تجد تلك الدالة موجودة عندك في أي رقم ينتمي لتلك الفئة. هذه التعديلات يمكن أن تحدث "بعد" إنشاء الفئة أصلًا!

    3- Ruby Blocks: توظيف واستعمال أنيق وسلس للبرمجة الوظيفية، تخيل تمرير دالة إلى دالة الدوران على أعضاء مصفوفة، لتقوم بتحديد ما تفعله دالة الدوران كل مرة. أو أن تمرر إعدادات خادم الويب، أو تبحث في مصفوفة، أو تمرر محتوى إلى دالة تقوم بطباعة كودHTML بهذه الطريقة.

    4- Ruby Gems: تنصيب أي إمكانية أو خاصية أو برمجية في لحظات بسهولة، واستعماله ضمن مشروعك. مثلًا أحتاج إطار العمل الفلاني، أنصب "الجوهرة" الخاصة به، كذلك مع تقريبًا كل شيء من نظام قواعد بيانات إلى محرك قوالب! Ruby Gems تشبه إلى حد ما على ما أذكر PEAR في PHP، لكن الفرق شاسع في سهولة الاستعمال وعدد المشاريع وأنواعها – لم أنصب مشروع أو برمجية واحدة من قبل من PEAR، لكن نصبت الكثير – ربما عشرات – الجواهر من Ruby Gems.

    5- الخصائص النحوية للكود: الكود حقيقة شكله جذاب إلى حد كبير، وكأنه أيضًا يشرح نفسه، ويقوم على تبسيط أشياء كثيرة، فلا تجد تلك الأقواس الكثيرة المعهودة في لغات أخرى، وتجد مثلًا أن الدالة عندما ينتهي إسمها بعلامة إستفهام (مثل "nil?”) فهي تعيد إما true و إما false، والدالة آخرها علامة تعجب تختلف عن نفس الدالة بغير علامة تعجب أنها تقوم بالأمر بشكل أخطر، مثال: ترفع exception لو حدث خطأ، أو تعدل مباشرة على الكائن بدلًا من إعادة القيمة.

    6- إطار عمل Ruby on Rails.

    7- التكامل (بينما الكمال لله وحده) بين المشاريع المتعددة بسهولة كبيرة جدًا، على سبيل المثال تكامل بين إطار عمل من اختيارك، ونظام قوالب من اختيارك، وقاعدة بيانات من اختيارك، وإطار عمل JavaScript من اختيارك، و إطار عمل CSS من اختيارك.. ولجواهر Ruby Gems دور كبير هنا أيضًا!

    وفيما يلي تفصيل آخر نقطتين..

    إطار العمل Rails وفكرة التكامل في Ruby:

    إذن تعلمت Ruby بفضل الله، و أثناء ذلك أو بعده كنت قد حولت إلى Ubuntu بدلًا من الويندوز، وبدأت عازمًا على أمر واحد فقط، وهو تطوير إطار عمل بها يعوض إمكانيات اللغة. فلغتي – تمامًا مثل PHP – كانت عبارة عن لغة + إمكانيات إطار عمل، أو نصف إطار عمل. بدأت بالعمل جاهدًا، وتعلمت أكثر أثناء البناء، وبعد أسابيع راجعت نفسي، واصلًا لأنه لا داع لتطوير إطار عمل الآن، PHP لم تكن تكفني، لكن ربما أحد أطر العمل الموجودة فعلًا في Ruby تكفيني، وعلى الرغم من أني لم أكن من المعجبين بفلسفة الـMVC، إلا أني "أجبرت" نفسي على تعلم إطار عمل Ruby on Rails (يختصر Rails). وهكذا مرارًا وتكرارًا مصارعًا ما كان يعجبني وما كان لا يعجبني مسبقًا – إلا PHP لا أظن يمكنني العودة، هههه!

    لكن.. صبرًا! أنت قلت أنك حولت إلى Ubuntu بدلًا من الويندوز أعلاه، أليس كذلك؟ بلى! لماذا تحول في وسط تعلمك لأمور جديدة وإنشغالك تحويلًا كبيرًا كهذا؟! الواقع أني في Windows كنت أواجه مشاكلًا كبيرة منها بطء حاسبي، أو كون الإصدار هو Windows Vista، ومشاكل متكررة مع Rails وبعض "الجواهر" من Ruby Gems. بالإضافة إلى أني تكاملت بشكل أفضل مع Ubuntu ووجدته أكثر أناقة وسرعة ويشعرك بسيطرة أكبر على الجهاز، وتتعامل فيه مع Terminal كثيرًا (يسميه أهل ويندوز Command Line – سطر الأوامر). قد تسأل وما علاقتي أنا هنا كقارئ باستعمالك لسطر الأوامر من عدمه؟! فأجيبك بأنك تحتاجه كثيرًا من أجل Ruby وRails (الواقع وربما أيضًا مع Ubuntu إن كنت تستعمله). لا تقلق إن كنت "تخاف منه"، ستعتاد سريعًا إن شاء الله.

    نعود لموضوعنا، إذن الآن ها قد تعلمت مبادئ وفلسفيات Rails، لكن كيف أبدأ مشروعًا جديدًا؟ كنت أحب أن أكتب مشروعي بنفسي من البداية للنهاية، لكن الواقع، بعد أن جربت طريقة Rails - وهي إستخدام سطر الأوامر لتوليد المشروع (التطبيق) وملفاته - لأقل من أسبوع، أيضًا أعجبتني (ههههه، في البداية لم يكن يعجبني أي شيء إلا Ruby فقط – حتى ربما Ruby Gems لا!). الآن عندما تبحث عن شيء في التطبيق تعرف بفضل الله أين تذهب، ولو كان مشروع غيرك. كيف؟ لأن تقريبًا كل تطبيقات Rails لها نفس النظام، بسبب التوليد الآلي!

    من ضمن ما قد يعجبك في Rails أن أغلب الأشياء لها دوال وسهلة الاستعمال على سبيل المثال تضيف عدد بسيط من الحروف إلى نموذج HTML تجعله يعمل بـAJAX. أيضًا تلاحظ سهولة كبيرة في التعامل مع فلسفة MVC (باختصار فصل التصميم عن مصدر البيانات (مثل قاعدة بيانات) و الربط بينهما) مع Rails أو أي إطار عمل استعمل نفس طرق Rails! كذلك تدير لك Rails الجلسات (sessions)، والاتصال بقاعدة البيانات، و تقدم لك ما يسمى بالـActive Record، و الذي هو عبارة عن فئة، تقدم لك وسيلة بسيطة للتعامل مع جدول في قاعدة البيانات، على شكل فئة، يخرج منها عدد من الكائنات، كل كائن منهم يمثل صف في الجدول مع إمكانيات كبيرة بديلة عن جزء غير صغير من SQL.

    يمكنك أيضًا أن تبحث عن "جوهرة" في Ruby Gems، توفر لك التعامل مع Twitter Bootstrap مثلًا (ما يشبه إطار عمل لـCSS) حتى تستطيع في دقائق التعامل معه ضمن تطبيقك. تريد إستعمال Backbone.js أو jQuery أو Prototype أو محرك القوالب المفضل عندك أو غير ذلك؟ بسيطة ابحث عن الجوهرة المناسبة لدمج ما تريد بـRails وادمج كل ما تريد بـRails بيسر إن شاء الله. تريد أن تتابع آداء تطبيقك؟ تضيف سطرًا واحدًا لملف يسمى Gemfile، وتنفذ أمر واحد فقط في سطر الأوامر، وتشغل خادم الويب الذي يأتي مع Rails على جهازك بأمر واحد فقط في سطر الأوامر، ثم تفتح التطبيق في المتصفح، وتجد أمامك التطبيق ومعه حساب للآداء كما أردت!

    كذلك تفرق Rails بين خادم التطوير، وخادم التشغيل الحقيقي في الإعدادات وغيرها .وأيضًا باستعمال سطر الأوامر يمكنك توليد التطبيق آليًا، ثم توليد أجزاء جاهزة منه أيضًا بعدد بسيط من الأوامر! باختصار، تحاول Rails القيام بما لا وقت لك أنت للقيام به، مع إمكانية التخصيص بنفسك إن شئت، بإذن الله.

    أمثلة وأكواد بلغة Ruby:

    أعلم أني أطلت جدًا جدًا جدًا، فتقبلوا اعتذاري، فيما يلي مثال بلغة Ruby سأشرحه بتعليقات بسيطة بإذن الله (تبدأ بـ#).

    كود:
    module Html
      def self.insertParagraph
        returned = '<p>' # A variable named returned.
        content = yield # yield is a method (same as yield()) that executes the block given (code between do...end).
        returned << content # Add content to the end of the variable returned.
        returned << '</p>' # Now returned = '<p>' + yield + '</p>
        puts returned # Print the value of returned.
      end
    end
    
    Html.insertParagraph do
      'ABCDEFGHIJK..'
    end
    
    # Prints: '<p>ABCDEFGHIJK..</p>'
    
    puts 5 + 2 # Prints 7.
    
    class Fixnum # The class of numbers (some numbers!).
      alias_method :add, :+
      def +(x) # Redefine the adding method (ex. '2+3' => '2.+(3)')
          if (1..10).include? x # If x is between 1 and 10:
            self - x # Subtract! What? The addition will subtract!
          else
            self.add x # This uses the 'alias_method :add, :+' line to use the old +.
          end
      end
    end
    
    
    puts 5 + 2 # Prints only 3 (not 7!). See the method '+' above.
    puts 15 + 2 # Prints only 17 (adds, so not 13!). See the else in the method '+' above.

    حقًا أعتذر عن كتابة التعليقات بالانجليزية – هل يمكن بالعربية؟! ستكون غربية حقًا لأن العربية كما تعلمون من اليمين إلى اليسار....الخ. إذا كان الكود غير واضحًا أرجو الاستفسار..

    لمزيد من الأمثلة، وللتعرف على الفرق بين Ruby واللغات الأخرى: يمكنكم زيارة هذه الصفحة من موقع Ruby الرسمي.

    أمثلة وأكواد باستعمال إطار عمل Rails:

    بالطبع الكود في Rails مقسم بشكل كبير بين ملفات ومجلدات، وسأحاول تبسيط ذلك في المثال التالي:

    محتوى ملف posts_controller.rb:
    كود:
    class PostsController
      def index
        @posts = Post.all # Make @posts instance variable = An array of all posts.
      end
    end


    محتوى ملف posts.rb:
    كود:
    class Post < ActiveRecord::Base
      attr_accessible :id, :cotent, :title # Allow access to mypost.id, mypost.content and mypost.title.
    end


    محتوى ملف index.html.erb:
    كود:
    <% @posts.each do |post| %>
    Post <% post.id %>: <% post.title %>
    <% end %>


    هذه الأسطر كافية بإذن الله (مع باقي الملفات الجاهزة) لكتابة الآتي في الصفحة – في حال وجود تلك البيانات في قاعدة البيانات أساسًا بكل تأكيد، كمثال فقط:
    كود:
    Post 1: My post title
    Post 2: Ruby programming language
    Post 3: AJAX on Rails
    Post ….......


    *ملاحظة: يمكن بكل تأكيد إستعمال مولدات Rails الآلية للكود لتوليد كود أفضل كثيرًا من هذا وبشكل آلي ثم التعديل عليه بإذن الله.

    ملاحظة مرة أخرى: هذا الموضوع من كتابتي - نسخة معدلة تعديلات بسيطة جدًا، كتبته باسم sitesmaker في الفريق العربي للبرمجة (رابط الموضوع). التوثيق: في نهاية الموضوع في الفريق العربي للبرمجة ذكرت أني سأنقله إلى سوالف سوفت وترايدنت. لذا رجاءً عند نقل الموضوع الإشارة للموضوع الأصلي في الفريق العربي للبرمجة. وجزاكم الله خيرًا.

    أعتذر مرة أخرى على الإطالة.. وجزاكم الله خيرًا، و السلام عليكم ورحمة الله تعالى وبركاته.






    التعديل الأخير تم بواسطة عمر خطاب ; 30-07-2012 الساعة 07:01 PM


  2. #2


    جميل بارك الله فيك
    ارغب في تعلم ال Ruby واستخدامها في تطبيقاتي بدل من ASP.NET
    تبدو ومنظمة بشكل كبير وما يشجعني على الامر هو دعمها للـ MVC

    ولكن كما قال اخي خليل , اين الوقت لكل هذا !؟





    __________________
    www.JemooO.com
    Windows & Web Application Programmer

  3. #3
    عضو نشيط
    تاريخ التسجيل
    May 2007
    المشاركات
    172


    و عليكم السلام و رحمة الله و بركاته،

    قبل ما تقرا الرد، أساسا من فترة و أنا مقرر أتعلم RoR. السبب مو بقوتها، السبب إني أبغى أوحد لغة لبرمجة مواقع و system administration باستخدام روبي.

    ردي بسبب إني ما قدرت أقتنع بمقالتك أبدا، حتى و أنا أبغى أحول لروبي.

    نجي للمهم:
    بدأت مشواري بلغة PHP، واستعملتها لمدة من الزمن حتى لاحظت عدم إرتياحي
    تفضيل شخصي، بس أهم شئ لا تلقي اللوم على PHP
    بس ممكن تذكر سبب عجم ارتياحك؟


    وهنا ههمت مباشرة بتطوير لغتي الخاصة – نعم تطوير لغة بـPHP نفسها!
    اللي ذكرته اسمه تطوير بيئة عمل و ليس لغة برمجة. لم تقم ببرمجة compiler و لا interpreter. جملتك السابقة ما كان لها أي وقع في دماغي

    1- كل شيء عبارة عن كائن: في Ruby كل شيء – تقريبًا – يعتبر كائنًا، الفئة (class) كائن يرث من الفئة Class، وأنواع البيانات (الأرقام والنصوص والمصفوفات...) عبارة عن كائنات. هكذا تستمتع بسلاسة وتوحد ونظام في كل شيء. بل وضمن هذا يمكنني ذكر أن كل شيء تقريبًا تتعامل فيه مع كائن هو عبارة عن نداء لدالة (method)، حتى الجمع والطرح وغير ذلك، إلا تقريبًا نداء الدوال لا يمكن أن يكون كذلك في حد ذاته.
    تستطيع استعمال نفس المبدأ في PHP و لكن بطريقة ثانية:
    كود PHP:
    <?php

    class Int
    {
        private 
    $m_szText;
        
        public function 
    __construct($szText)
        {
            
    $this->m_szText $szText;
        }
        
        public function 
    next()
        {
            return 
    $this->m_szText 1;
        }
        
        public function 
    sqrt() {
            return 
    gmp_strval(gmp_sqrt((string)$this->m_szText));
        }
        
        public function 
    __toString()
        {
            return (string)
    $this->m_szText;
        }
        
        public static function 
    __toObject()
        {
            foreach (
    $GLOBALS as &$pNode)
            {
                if (!
    is_int($pNode))
                {
                    continue;
                }
                
                
    $pNode = new self($pNode);
            }
        }
    }

    register_tick_function(array('Int''__toObject'));
    declare (
    ticks 1);

    $val 9;
    echo 
    $val->next() . '<br>';
    echo 
    $val->sqrt();
    الكود ملطوش بتصرف من http://www.talkphp.com/tips-tricks/4...avascript.html

    2- كل شيء مفتوح للتعديلات: في Ruby يمكنك على سبيل المثال أن تضيف دالة للفئة Object، وبالتالي تجد تلك الدالة في كل الكائنات (بشكل أدق كل الكائنات التي ترث من Object)، أو أن تضيف لفئة Fixnum الخاصة ببعض الأرقام دالة خاصة بضرب الرقم في اثنين ثم جمعه بواحد مثلًا، ثم تجد تلك الدالة موجودة عندك في أي رقم ينتمي لتلك الفئة. هذه التعديلات يمكن أن تحدث "بعد" إنشاء الفئة أصلًا!
    بنفس الأسلوب اللي ذكرته في النقطة السابقة، استعملت مكتبة gmp عشان أضيف دوال من عندي.
    Ruby Blocks: توظيف واستعمال أنيق وسلس للبرمجة الوظيفية، تخيل تمرير دالة إلى دالة الدوران على أعضاء مصفوفة، لتقوم بتحديد ما تفعله دالة الدوران كل مرة. أو أن تمرر إعدادات خادم الويب، أو تبحث في مصفوفة، أو تمرر محتوى إلى دالة تقوم بطباعة كودHTML بهذه الطريقة.
    ما عندي فكرة عنها. لكن شوف: http://stackoverflow.com/a/3329516

    4- Ruby Gems: تنصيب أي إمكانية أو خاصية أو برمجية في لحظات بسهولة، واستعماله ضمن مشروعك. مثلًا أحتاج إطار العمل الفلاني، أنصب "الجوهرة" الخاصة به، كذلك مع تقريبًا كل شيء من نظام قواعد بيانات إلى محرك قوالب! Ruby Gems تشبه إلى حد ما على ما أذكر PEAR في PHP، لكن الفرق شاسع في سهولة الاستعمال وعدد المشاريع وأنواعها – لم أنصب مشروع أو برمجية واحدة من قبل من PEAR، لكن نصبت الكثير – ربما عشرات – الجواهر من Ruby Gems.
    بحثت في بعض الـجواهر. تعرف ايش الفرق بينها و بين اللي في PHP؟ انه كمية منها موجودة و مدمجة في PHP. و بعض الباقي تلاقيه في github. صح إنه فيه جواهر مو موجودة في الـ PHP لكن تقدر تبرمج زيها.

    5- الخصائص النحوية للكود: الكود حقيقة شكله جذاب إلى حد كبير، وكأنه أيضًا يشرح نفسه، ويقوم على تبسيط أشياء كثيرة، فلا تجد تلك الأقواس الكثيرة المعهودة في لغات أخرى، وتجد مثلًا أن الدالة عندما ينتهي إسمها بعلامة إستفهام (مثل "nil?”) فهي تعيد إما true و إما false، والدالة آخرها علامة تعجب تختلف عن نفس الدالة بغير علامة تعجب أنها تقوم بالأمر بشكل أخطر، مثال: ترفع exception لو حدث خطأ، أو تعدل مباشرة على الكائن بدلًا من إعادة القيمة.
    اللي عجبني فيها شكلها في الـ editor

    اطار عمل Ruby on Rails
    هل فكرت تلقي نظرة على Symfony؟ http://symfony.com/

    من ضمن ما قد يعجبك في Rails أن أغلب الأشياء لها دوال وسهلة الاستعمال على سبيل المثال تضيف عدد بسيط من الحروف إلى نموذج HTML تجعله يعمل بـAJAX. أيضًا تلاحظ سهولة كبيرة في التعامل مع فلسفة MVC
    لكن مع الوقت و تعقيد الموقع (بسبب طلبات العملاء) ستحتاج تشطح و تكتب كل شئ لحالك. شوف الفيديو اللي تحت
    http://www.youtube.com/watch?v=lPiM4...e=results_main

    كذلك تدير لك Rails الجلسات (sessions)، والاتصال بقاعدة البيانات
    كل أطر العمل في PHP تدعم هذه الأشياء

    و تقدم لك ما يسمى بالـActive Record، و الذي هو عبارة عن فئة، تقدم لك وسيلة بسيطة للتعامل مع جدول في قاعدة البيانات، على شكل فئة، يخرج منها عدد من الكائنات، كل كائن منهم يمثل صف في الجدول مع إمكانيات كبيرة بديلة عن جزء غير صغير من SQL.
    جربت Doctrine ؟ الاصدار الأول مبني على Active record و الثاني على data mapper، برضه موجود في rails3.
    طيب؟ يعني موجود نفس المبدأ في PHP. و مبدأ الـ Doctrine اساس بيئة عمل Symfony

    يمكنك أيضًا أن تبحث عن "جوهرة" في Ruby Gems، توفر لك التعامل مع Twitter Bootstrap مثلًا (ما يشبه إطار عمل لـCSS) حتى تستطيع في دقائق التعامل معه ضمن تطبيقك. تريد إستعمال Backbone.js أو jQuery أو Prototype أو محرك القوالب المفضل عندك أو غير ذلك؟ بسيطة ابحث عن الجوهرة المناسبة لدمج ما تريد بـRails وادمج كل ما تريد بـRails بيسر إن شاء الله
    ما تتوقع إنه بإمكاني أروح لمواقعهم و أحملهم؟ و برضه لا تنسى لازم أكون حافظ اسم الـ gem عشان أحمله.
    هذا غير الغير متمرس بيلعب لحد ما يلاقي شئ مناسبه. المتمرس بيعرف ايش يحتاج

    كذلك تفرق Rails بين خادم التطوير، وخادم التشغيل الحقيقي في الإعدادات وغيرها .وأيضًا باستعمال سطر الأوامر يمكنك توليد التطبيق آليًا، ثم توليد أجزاء جاهزة منه أيضًا بعدد بسيط من الأوامر! باختصار، تحاول Rails القيام بما لا وقت لك أنت للقيام به، مع إمكانية التخصيص بنفسك إن شئت، بإذن الله.
    في Symfony، تقدر تخلق مليون بيئة و عادي.
    في اطار عمل Laravel تقدر تحدد متى تستعمل كل بيئة بالاعتماد على رابط الموقع. يعني لو موقعك شغال على localhost بيكون تطوري و لو على example.com بيكون حقيقي.

    ذكرت في ترايدنت
    أيضًا، ها أنا أحتاج لوسيلة للتعامل مع الأعضاء في موقعي ماذا أفعل؟ هناك "جوهرة" في RubyGems تسمى Devise (ولها بدائل عدة!)
    في كلا من Symfony و Laravel و برضه Codeingiter مبدأ الـ bundles و الحركة هذه موجود.

    رغم كل السابق، ليس الفارق فيه، الفارق الحقيقي في Ruby، لست مندهشًأ جدًا بـRails، أكرر الفارق الحقيقي في Ruby والله أعلى وأعلم. الآن أريد أن أضيف - ضمن Rails - نموذج للتسجيل، ما يقدمه الكثير من أطر العمل، هو إمكانية لتسهيل ربط النموذج بجدول في قاعدة البيانات، الفرق أنه في Ruby يمكنني كتابة الكود كالتالي - لتسهيل قراءته على الزوار، كتبته بـHTML بتضمين Ruby عبر شيء يسمى ERB، بينما لتسهيل HTML، أستعمل بدائل أخرى:
    هذا من الـ Rendering Engine. و صدف إنه في Symfony شئ شبيه:
    http://symfony.com/doc/current/book/forms.html

    للتوضيح، أكاد أرى أن المشكلة ليست في PHP، بقدر ما الفرق موجود في Ruby، بمعنى المختلف هو Ruby أكثر منها PHP.
    يعجبني استخدامك لـ اختلاف و ليس أفضل.

    أنصحك من جد تلقي نظرة على Symfony. (حتى لو ما تبغى ترجع للـ PHP، لأنه فيه فرصة حاليا إنك تسرق أفكار منها).. مثلا Symfony:
    * تدعم Varnish بدون أي اضافة.
    * نظام الـ routing فيها جبار
    * غيرها كثير.

    و بالنسبة لخفة الـ Rails. أساسا الRails مصمم عشان يكون بيئة تطويرية سريعة. عشان كذه اوامرها قليلة.

    و صحيح إني أفكر أروح للـ Ruby on Rails، لكن قاعد أطور بيئة عمل مبنية على مبدأ http://www.sinatrarb.com/ و باستعمال كم شئ من Symfony و مبدأ سهولة laravel. لكن مشغول بالجامعة

    أتمنى تسامحني على قساوتي، بس موضوعك لا تنشره في منتديات أجنبية و إلا بتتلسع بالكلام الأقسى من اللي كتبته.
    و برضه يمكن مقالتك تكون صحيحة وقت ما قلبت من PHP لـ Rails. بس حاليا مقالتك مهي مدعومة بشكل قوي بحقائق.

    أخوك رائد





    __________________
    "اقْــرَأ "
    اللهم ارزقنا حسن الختام

  4. #4
    عضو جديد
    تاريخ التسجيل
    Apr 2011
    المشاركات
    9


    السلام عليكم ورحمة الله تعالى وبركاته..

    أولًا أتوجه بالشكر الجزيل لكل من أخي محمد جمال، وأخي Cenrak على مشاركاتهما.

    أخي محمد جمال، من هو خليل الذي تقصده؟!

    وأما أستاذي Cenrak: فبارك الله فيك على ردك الطويل المفصل، ولا تنسى تحاب المؤمنين خصوصًا في هذه العشر الكريمة من هذا الشهر الكريم، وأن الاختلاف لا يفسد للود قضية، ولعلك أعلم مني بهذا، فقط أذكر نفسي وإياك قبل الدخول في النقاش..

    لا إشكال لدي في عدم إقتناعك بشيء من مقالي - أهلًا وسهلًا ومرحبًا! بل وأذكر أني لم أكتب المقال لسوالف أو بناءً على ما أعلمه عن أعضاء سوالف الكرام المشهود لهم بالخير الكثير، لسبب بسيط أن علمي بهذا المنتدى الكريم وأعضائه قليل بسيط.. أما الفريق العربي للبرمجة حيث كتبت موضوعي، فلي فيه بعض الصولات والجولات، أعرفهم ويعرفونني، ويعرفون أكثر وأكثر عني وعن لغتي، وبناء على هذا كتبت المقال بغير توضيح شديد لقصتي أنا! فلم أوضح إشكالاتي مع PHP ولم أتحدث أكثر عن أمور لغتي وما إلى ذلك، فكثير من إخوتي هنالك اطلعوا على كثير مما كتبت لهم مرارًا في هذه الأمور..

    أخاف أن أخرج عن نطاق الموضوع، وآمل ألا أفعل، فهذا ضمن الموضوع الذي تحدث عن لغتي ولعلي أخطأت حين لم أوضح أكثر عنها في المشاركة الرئيسية، لكن بسبب استفسارك سأوضح مختصرًا إن شاء الله ماهية لغتي. أخي الكريم، آمل ألا أكون ممن يتحدث بالكلمات غير مدرك لمَ يقول، فهذا مما لا يقبله ذو عقل على نفسه. فأنا حقًا لست عالمًا فذًا أو مبرمجًا مجربًا، ولكني عندما أقول لغة، فلست ألقي بكلمات لا أعبء بمعناها. بما يظهر عليك من كلامك من علم، فلعلك تعلم ما معنى لغة برمجة، لغة البرمجة (النصية لا الصورية) هي أداة من أدوات المطور، ومجموعة من القواعد النحوية القادرة - نظريًا على الأقل - على تنفيذ أي خوارزمية ممكنة، أي قواعد نحوية تعتبر Turing Complete. وآمل أن أكون من العالمين بأن لغة البرمجة (السابق ذكرها)، تختلف عن إطار العمل الذي لا يزيد على تضييق إطار اللغة في مقابل خصائص ومميزات خاصة بنوع معين من التطبييقات يقدمها للمبرمج على شكل مجموعة من الدوال والمكتبات والفئات (classes) عادةً.

    أما وقد بينت السابق، فلغتي التي عملت عليها، كان لها Interpreter! فكانت لغتي ذات خصائص نحوية مخالفة بشكل كبير لـPHP، بل وفي إصدارها الأخير، أصبح الكود يكاد يكون لا يمت لـPHP بأي صلة قوية مقارنة بصلته بـRuby. لاحظ أني أقارنه بـRuby وليس بـRails! بل إن JavaScript قادرة على حمل لغة برمجة! ألا تعرف CoffeeScript (بدأت مطورة بـJavascript ثم أصبحت مطورة بنفسها)، ألا تعرف Less (وإن كانت ليست Turing Complete)... بمناسبة ذكرك لـSinatra في آخر كلامك، هل تعرف أن Sinatra التي هي "إطار عمل" تعتبر DSL (لغة محددة النطاق - Domain Specific Language) وهي أصلًا ليس لها مفسر أو مترجم (Interpreter أو Compiler)، بل إن Rails تعتبر DSL إلى حد ما كذلك، ابحث واقرأ. أما أنا فقد جئت بالمفسر، ولي حوارات طويلة مع من ينكرون بعد كل هذا كونها لغة، ولعلهم لن يمانعوا أن تكون Sinatra البسيطة DSL!

    بالنسبة للنشر في منتديات أجنبية، أخي.. أنا كتبت عن لغتي نفسها في منتديات أجنبية، ولم أجد ردًا واحدًا ينكر كونها لغة!
    أيضًا، بفضل الله ربح هذا المقال المتواضع المركز الأول بنسبة تفوق 85% في مسابقة قسم المقالات العلمية في الفريق العربي للبرمجة، والحمد لله، ولعل هذا بسبب قلة عدد المشاركين. ليس ما أقصده أن مقالي قوي لا يمكن الرد عليه، لأنه ليس كذلك، بل أن هناك بفضل الله من لاقاه ولو بالقليل القليل من القبول!

    هل يستقيم لي أن أطلب من أحد الخروج إلى المنتديات الأجنبية وتحديثهم فيها أنه يمكن محاكاة Ruby في PHP، بكائناتها والـBlocks فيها! كيف نقارن وجود الأرقام على أنها كائنات لها مالها من قوة، بأن أنشئ فئة في أي لغة برمجة وأقول لغتي هذه فيها كذا وكذا!! إذن لا داع لأن تعتبر روبي لها أي مميزات فيمكنك التغطية على اللغة تمامًا بإضافة 100 فئة، وطرق غير مباشرة ليصبح لديك Ruby في PHP! أخي، ليس ما يعجبني في الأمر أنه كائن، مالي ومال الكائنات، الأمر أن تستطيع أن تتعامل معه بأناقة وقوة شديدتين. هل أضيف إمكانيات PHP إلى C، وأستعمل C على أنها PHP؟ هذه لغة وهذه أخرى - رغم أن الفرق بين Ruby وPHP أكبر بكثير!

    انظر في الرابط الذي وضعت (أي وضعته أنت أخي) في Stackoverflow، يقول السائل بنفسه ردًا على الإجابة الثانية أنه على حق، الـClosures والـ Blocks مختلفين بشكل كبير، لا يمكنك المقارنة بين الاثنين، لا يمكنك المقارنة!

    لا ثأر لي مع PHP حتى أعدد مشاكلها التي عددت مرارًا من قبل دفاعًا عن لغتي، أشعر بأن تكرار ذلك ممل! إذا أردت رابطًا عن آرائي هذه فأخبرني. ولا شراكة لي في Ruby، حتى أجادل عنها، كل لغة لها ما لها وعليها ما عليها، ومطورو كلًا من اللغتين لا تربطني بهما أي علاقة! لم ألم لحظة من يستخدم PHP، ولا أريد.

    بالنسبة لإضافة الدوال، ما هذا؟ أخي عندما أقول إضافة الدوال، أقصد أن تضيف دالة لفئة موجودة فعلًا من قبل، أي تأتي هنا وتعمل الفئة "عضو" مثلًا، تأتي في ملف آخر وتعدل على الفئة "عضو" هذه، ما علاقة هذا بـGMP هذه؟

    بالنسبة للجواهر، تحمل ماذا؟ هل مشكلتي في تحميل Twitter Bootstrap؟ كلا! مشكلتي في أن يعتمد موقعي عليه دون أن أغير إلا بضعة أسطر - أو ما شابه - في الكود كله! مشكلتي في الراحة! اطلعت مرارًا على أطر العمل في PHP، الأمر واضح، وذكرت وجهة نظري في المقالة بشكل واضح، ليس إندهاشي بإمكانيات Rails، إندهاشي بإمكانيات Ruby، الفرق الرئيسي في Ruby، كذلك Rails الكثير من خصائصها أصلية، وتتكامل مع Ruby، بشكل لا يمكن لأفضل إطار عمل موجود حاليًا أن يقدمه مع PHP، مرة أخرى الفرق الأكبر في Ruby وخصائصها.. أما Rails، استعملتها في الأساس توفيرًا للوقت!

    لا أريد أن أتحدث عن أن ثورة أطر العمل بدأت بـRails، فليس هذا أهم شيء. بارك الله فيك، قارن بين الكود هنا:
    http://symfony.com/doc/current/book/forms.html
    و الكود هنا: http://guides.rubyonrails.org/action..._overview.html


    على افتراض أن إطار العمل نفسه موجود بكل الخصائص في Ruby وPHP، بل أفضل في PHP، أفضل الأقل في Ruby..
    جرب في PHP بناء DSL! في Ruby يمكنني أن أكتب جوهرة (gem) إذا نصبتها تكون قادرًا على التالي:

    كود:
    x = (1..100)
    my_if x.include? 50 do
      puts "The range x contains the number 50!"
    end
    هههه، ها أنا قد أنشأت my_if بدلًا من if، تنفذ الكود فقط إذا تحقق الشرط! أيضًا هل رأيت السطر الأول؟ هذا يعني أن x يحتوي على كائن "نطاق" الأرقام من 1 إلى 100، ثم هل رأيت استعمال الدالة
    كود:
    include?
    مع النطاق؟

    مرة أخرى، ليس لأي مطور من مطوري اللغتين منزلة كبيرة عندي، هي أداة صنعها غير المسلمين مثل غيرها، قد أجادل عنها، ليس حبًا في من صنعها، إنما هادفًا أن ينتفع بما فيها من الخير غيري وننفع أمتنا ونستغني عن هؤلاء (مطوري هذه الأشياء) مستقبلًا بإذن الله، لذا أرجو من الله ألا يجرنا هذا النقاش إلى سوء لا يستحقه هذا الأمر. فادع معي، واصفح عني إن أخطأت وكان فهمي ناقصًا، أو أسأت لك عن غير قصد في الرد أثناء حماستي للدفاع عن مقالي، يا رحمك الله..

    والسلام عليكم ورحمة الله تعالى وبركاته.





    التعديل الأخير تم بواسطة عمر خطاب ; 14-08-2012 الساعة 05:22 PM

  5. #5


    حياك الله اخي الغالي
    اخي خليل سليم هو من اقصدة مشرف منتدى ASP.NET

    واشكر كل منكما على هذا النقاش فتابعاه وانا فعلا من المستمتعين بقرائته

    وان دل هذا على شيئ ف انه يدل على انه عقولكما تنضح بعلم غزير بارك الله لكما به





    __________________
    www.JemooO.com
    Windows & Web Application Programmer

  6. #6
    عضو جديد
    تاريخ التسجيل
    Apr 2011
    المشاركات
    9


    السلام عليكم..

    أشكرك على التوضيح أخي الكريم محمد جمال. بالنسبة للنقاش، أنا متحمس له ولكن آمل ألا يزيد ويبتعد عن مرحلة النقاش.
    وأما عن العلم، فلست - بارك الله فيك - بعد صاحب علم غزير كما تقول، وخبرتي قصيرة محدودة، قد تكون خبرتك أخي أطول منها بكثير..

    والسلام عليكم ورحمة الله تعالى وبركاته.






  7. #7
    عضو نشيط
    تاريخ التسجيل
    May 2007
    المشاركات
    172


    السلام عليكم..

    أشكرك على التوضيح أخي الكريم محمد جمال. بالنسبة للنقاش، أنا متحمس له ولكن آمل ألا يزيد ويبتعد عن مرحلة النقاش.
    وأما عن العلم، فلست - بارك الله فيك - بعد صاحب علم غزير كما تقول، وخبرتي قصيرة محدودة، قد تكون خبرتك أخي أطول منها بكثير..

    والسلام عليكم ورحمة الله تعالى وبركاته.
    قريت الرد على السريع و شفت موضوعك في المنتدى الأجنبي "sitepoint" و مواضيعك في الفريق العربي و ليا رجعة إن شاء الله. ما أقدر أرد حاليا لأني مشغول بتجهيزات العيد . كل عام و انت بخير قبل الزحمة

    و النقاش ما بيقلب شئ إلا إذا بتكون فيه مضاربة





    __________________
    "اقْــرَأ "
    اللهم ارزقنا حسن الختام

  8. #8
    عضو جديد
    تاريخ التسجيل
    Apr 2011
    المشاركات
    9


    السلام عليكم..

    أخي الكريم، موضوع sitepoint حدثت بعده أمور كثيرة جدًا، حيث أني أعدت تطوير اللغة من الصفر وجعلتها OOP قريبة جدًا من Ruby، بينما موضوع sitepoint كانت اللغة لا تزال إجرائية وتشبه PHP إلى حد كبير.

    هذا مثال للغة بعد التحديث - ولم أكن قد أنهيتها بعد:
    كود:
    show App.main({'title' => 'Hello World!', 'content' => buffer:
    	show App.paragraph({'textColor' => 'Red', 'textSize' => 20, 'content' => buffer:
    		
    		if User.post()['name'] == 'Omar':
    			
    		end
    		
    	end})
    end})
    ولكني توقفت عن تطوير اللغة لأنها كانت بطييييئة جدًا، ولأني وجدت في Ruby أغلب ما أردته في لغتي، ومميزات إضافية لم تكن في لغتي، وكان استعمال Ruby أسهل علي من تطوير لغة وكتابة مراجع لها، الخ..

    أشكرك لبحثك واطلاعك على اللغة، ولكني أخاف من تحويل الموضوع إلى الحديث عن إصدار قديم من لغة برمجة ماتت - كما قلت في المقال! بما أنك أردت ما لم يعجبني في PHP، فلعلك وجدت هناك بعضًا منها والبعض الآخر تجده في موضوع عن لغتي في ترايدنت يحتوي على ردود لي فيها عدد من المشاكل. وإن كنت مصرًا أني لست هنا لألوم PHP ومستخدميها!

    والسلام عليكم.










ضوابط المشاركة

  • لا تستطيع إضافة مواضيع جديدة
  • لا تستطيع الرد على المواضيع
  • لا تستطيع إرفاق ملفات
  • لا تستطيع تعديل مشاركاتك
  •  

أضف موقعك هنا| اخبار السيارات | حراج | شقق للايجار في الكويت | بيوت للبيع في الكويت | دليل الكويت العقاري | مقروء | شركة كشف تسربات المياه | شركة عزل اسطح بالرياض | عزل فوم بالرياض| عزل اسطح بالرياض | كشف تسربات المياة بالرياض | شركة عزل اسطح بالرياض