Skip to content

Instantly share code, notes, and snippets.

View mabras's full-sized avatar
🏠
Working from home

Mohamad Abras mabras

🏠
Working from home
View GitHub Profile
@mabras
mabras / 113-gorails-performance.md
Last active October 26, 2016 12:02
gorails-performance

#تحسين أداء الموقع مع Ruby On Rails

سنتحدّث في هذه الحلقة عن أداء موقع GoRails. فقد طُرح الموضوع في المنتدى مؤخرًا. وبالتحديد ما هي الأساليب التي استخدمها في تحسين أداء الموقع بهدف الحصول على تحميل أسرع للصفحة. بالنسبة لي لا أظن أن الموقع بشكله الحالي هو فائق السرعة بل إن الأداء جيد ومقبول نسبيًا.

لنتحدّث أوّلًا عن الخادم. الموقع يستخدم خدمة الاستضافة المقدمة من DigitalOcean بالخطة الشهرية ذات السعر 20 دولارًا مع ذاكرة عشوائية بحجم 2 جيغا.

التحسين سيكون منقسمًا إلى جزئين: الجزء الخاص بالخادم والجزء الخاص بالواجهة. فبعد أي طلب من طلبات المتصفح سيكون لدينا وقت استجابة الخادم بالإضافة إلى الجزء الخاص بتحميل ملفات CSS و جافاسكربت ورسم وطباعة الصفحة على المتصفّح، وتحميل الصور، الخ.

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

@mabras
mabras / 117-sentiment-analysis-with-the-sentimental-gem.ar.md
Last active August 29, 2016 08:17
Sentiment Analysis with the sentimental Gem (Arabic)

#التحليل العاطفي الحاسوبي

سنتحدّث في الدرس عن التحليل العاطفي الحاسوبي، حيث أننا سنقوم بتحميل جملة من التغريدات إلى تطبيق "ريلز" وبالتحديد نص التغريدة لنحدد مدى إيجابية وسلبية هذه التغريدات بناء على محتواها وكلماتها.

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

فعلى السبيل المثال عند البحث عن كلمة Microsoft سيكون هناك معايرة بين فحوى التغريدات بين من يقول "أحب ميكروسوفت" وبين من يقول "أكره شركة ميكروسوفت" وعليه سيتمّ الحكم على كل تغريدة إما أنها إيجابية أو سلبية.

تأتي مكتبة sentimental بقائمة من الكلمات، وتحمل كل

@mabras
mabras / 122-message-templates.ar.md
Last active August 14, 2016 07:53
Message Templates (Arabic)

#كيف تنشئ رسائل محفوظة باستخدام Rails

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

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

سنبدأ بإنشاء model ربما بالاسم "الردود المحفوظة" أو يمكننا تسميته "الرسائل المحفوظة" (saved_messages) وله عنوان title و body، أما العنوان فسيكون لغرض عرضه في القائمة المنسدلة بدلًا من عرض كامل نص الرسالة المحفوظة والذي قد يكون طويل وبعدّة فقرات.

@mabras
mabras / 119 -Improving Query Performance with Database Indexes.ar.md
Created July 13, 2016 08:28
119 -Improving Query Performance with Database Indexes

##تحسين أداء الاستعلامات باستخدام Database Indexes غَردت البارحة على تويتر منبهًا على ضرورة استخدام Database Indexes. حيث أني قمت بتجربة على أحد قواعد البيانات، حجمها حوالي 500 ميغا، فإن استعلامًا لعمودين استغرق قرابة الثلاث ثواني، وهذا وقت طويل بلا شك. ولكن وبعد إضافة خاصيّة الجدولة indexes انخفض الرقم إلى 2.3 إلى 3.0 ميلي ثانية، وهذا تحسّن بنسبة ألف مرّة. وهذا بالفعل تحسّن ملفت للنظر ولا يمكن تجاهله. والجدير بالذكر أن أداء قاعدة البيانات لا يحصل على القدر الكافي من الاهتمام في معظم دروس "ريلز" المنتشرة وذلك على افتراض هذا شأن دروس قوعد البيانات وليس من اختصاص "ريلز" بالتحديد. ويجب الانتباه إلى أن مشاكل الأداء هذه لا تظهر مع قواعد البيانات الصغيرة، ولكن مع قواعد البيانات الكبيرة الحجم فالمشكلة موجودة ولها من أثر كبير على أداء التطبيقات.

إذا في هذه الحلقة سنعمل على مشروع Ruby on Rails صغير وفيه ملف الـ schema.rb يحتوي على جدول المستخدمين users ذو الحقلين email و sign_in_count فقط لا غير:

db/schema.rb

ActiveRecord::Schema.define(version: 20160517152044) do
  create_table “users”, force: cas

##لعبة FizzBuzz بلغة البرمجة روبي

سنتحدث في هذه الحلقة عن أمرٍ مختلفٍ عن الحلقات السابقة. حيث سينصب الحديث على مشكلة برمجية، وسنتكلّم عن العقلية والفلسفة المستخدمة لحل مشكلة ما وكيف لذلك أن يؤثّر على كتابة الشيفرة البرمجية في حل مشكلة ما.

لا بد وأن سمعت من قبل عن لعبة FizzBuzz. الفكرة ببساطة ما هي إلا سلسلة من الأرقام، فمثلا من الرقم واحد وحتى مئة أو ألف. ولكن مع استبدال الأرقام التي تقبل القسمة على ثلاثة ومن دون باقي بالكلمة Fizz. واستبدال الأرقام التي تقبل القسمة على خمسة بالكلمة Buzz. أما الأرقام التي تقبل القسمة على الرقم ثلاثة وخمسة معًا فتسُتبدّل بـِ FizzBuzz

ما دفعني إلى اختيار هذه اللعبة كمثال هو أنها مثال واضح يظهر من خلاله كيف أن طريقة التفكير ومعالجة مشكلةٍ ما لها من الأثر الكبير على طريقة كتابة الشيفرة البرمجية.

من الحلول الشائعة لحل هذه المشكلة (الحل الأول):

@mabras
mabras / rnb.erb
Created May 21, 2016 12:06 — forked from romainl/_rnb.md
RNB, a Vim colorscheme template
<%
# RNB, A VIM COLORSCHEME TEMPLATE
# Author: Romain Lafourcade (https://github.com/romainl)
# Canonical URL: https://gist.github.com/romainl/5cd2f4ec222805f49eca
# This template is designed to help vimmers create their own colorschemes
# without much effort.
#
# You will need Ruby to generate your colorscheme but Ruby knowledge is
# not needed at all.
@mabras
mabras / devise.ar.yml
Last active August 16, 2018 09:54 — forked from TamerShlash/devise.ar.yml
Arabic translations for Devise v3 and v4
# Additional translations at https://github.com/plataformatec/devise/wiki/I18n
ar:
devise:
confirmations:
confirmed: "تمّ تأكيد حسابك بنجاح."
send_instructions: "ستصلك خلال دقائق رسالة على بريدك الإلكترونيّ تتضمّن الخطوات اللّازمة لتأكيد حسابك."
send_paranoid_instructions: "إذا كان بريدك الإلكترونيّ موجود بالفعل فستصل إليه خلال دقائق رسالة تتضمّن الخطوات اللّازمة لتأكيد حسابك."
failure:
already_authenticated: "تمّ تسجيل دخولك مُسبقاً."