‏إظهار الرسائل ذات التسميات البرمجة. إظهار كافة الرسائل
‏إظهار الرسائل ذات التسميات البرمجة. إظهار كافة الرسائل

الأربعاء، 3 يوليو 2013

المقارنة بين محتويات مجلدين في لينكس

بسم الله الرحمن الرحيم

يتواجد في نظام لينكس الأمر diff الذي يستخدم للمقارنة بين ملفين نصين و طباعة السطور المختلفة بين الملفين كالتالي :
diff 1.txt 2.txt

و في مثالنا لنفترض بأن الملف الأول 1.txt يحتوي على خمس أسطر و كل سطر يحتوي على الأعداد من 1 إلى 5 و الملف الثاني يحتوي على الأعداد من 1 إلى 6 :



و من الممكن أستخدام الأمر diff للمقارنة بين الملفات الموجودة في مجلدين مختلفين و طباعة الأختلاف بينهما بأستخدام الأمر التالي:

diff -rq 1/ 2/

يقوم هذا الأمر بالمقارنة بين المجلدين بواسطة أسماء الملفات الموجودة في كليهما بأستخدام إسم الملف و المحتوى , و هذه مثال عن تنفيذ هذا الأمر :

الثلاثاء، 11 ديسمبر 2012

برمجة الألعاب مباشرة على الأي باد (ipad)

يتطلب تطوير البرامج لجهاز ipad حصولك على جهاز apple ماكنتوش و تسجيل حساب في موقع المطورون الخاص بشركة أبل , ثم رفع البرنامج لمتجر أبل و أنتظر الموافقة على البرنامج . 

هذه الخطوات يمكن أختصارها بالبرمجة مباشرة على ipad بأستخدام برنامج codea ( المعروف سابقاً بأسم codify) .

البرنامج يستخدم لغة lua للبرمجة , و يتميز بالعديد من الخصائص مثل الأكمال التلقائي و العديد من الخصائص الرائعة , و في النهاية هذا فيديو للبرنامج و رابط التنزيل لمتجر أبل


الأحد، 7 أكتوبر 2012

برمجة sniffer بواسطة البايثون (الجزء الثالث )

بسم الله الرحمن الرحيم

هذا رابط الجزء الثاني , و الجزء الأول و سيكون الجزء الثالث من هذه السلسة هو الدرس الأخير في كيفية برمجة sniffer بسيط بواسطة لغة بايثون .

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

 و هذا النص البرمجي الكامل لبرنامج sniffer بسيط :

#!/usr/bin/python

import socket

import struct



def packet_ip(data):

    ip_header=data[:20]

    iph=struct.unpack('!BBHHHBBH4s4s',ip_header)

    version_ihl=iph[0]

    version=version_ihl>>4

    ihl=version_ihl & 0xf0

    tos=iph[1]

    Tlength=iph[2]

    ID=iph[3]

    Flage=iph[4] >> 13

    offset=iph[4] & 0xe

    ttl=iph[5]

    protocol=iph[6]

    s_addr=socket.inet_ntoa(iph[8])

    d_addr=socket.inet_ntoa(iph[9])

    print """

Version : %s

IP Header Length : %s

TOS: %s

Total length : %s

Identification : %s

Flags : %s

Fragment offset : %s

TTL : %s

Protocol : %s

Destintation Address: %s

Soruce Address : %s

"""
% (str(version),str(ihl),str(tos),str(Tlength),str(ID),str(Flage),str(offset),str(ttl),str(protocol),str(s_addr),str(d_addr))



sos=socket.socket(socket.AF_INET,socket.SOCK_RAW,socket.IPPROTO_ICMP)

while 1:

    data=sos.recv(10245)

    packet_ip(data)

طبعاً على النص البرمجي للتوضيح و إيصال الفكرة فقط , و إذا إردت تطوير هذا النص يجب بأن تصمم class يحتوي على وظائف برمجية لأستخلاص كل قيمة في حزمة برتوكول IP .



الأربعاء، 19 سبتمبر 2012

برمجة sniffer بواسطة البايثون (الجزء الثاني )

بسم الله الرحمن الرحيم

في الجزء الأول  شرحت كيفية تأسيس القابس الخام "Raw Socket" , و الأن سنبدأ في التعامل مع البيانات المستقبلة من القابس .

في حالة القابس الخام يترك للمبرمج التعامل مع برتوكولات الشبكة , و التعامل مع بنية الحزم لكل برتوكول , وسنبدأ بالبرتوكول IP .


الأحد، 2 سبتمبر 2012

برمجة sniffer بواسطة البايثون (الجزء الأول )

بسم الله الرحمن الرحيم

مقدمة :

في أغلب البرامج التي تتعامل مع الشبكة يتعامل المبرمج مع طبقة التطبيقات "Application Layer" بواسطة الواجهة SOCK_STREAM للبرامج العاملة بواسطة بروتوكول TCP و الواجهة SOCK_DGRAM للبرامج التي تستخدم بروتوكول UDP .

 

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

الجمعة، 31 أغسطس 2012

تعلم لغة البرمجة Go بالعربي ( الدرس التاسع )

بسم الله الرحمن الرحيم

تحتوي لغة GO على المؤشرات مشابه لغة C , و لكن قام المطورون بمنع العمليات الحسابية على مواقع الذاكرة ,  و لمن ليس لديه فكرة فسوف تتوضح لديك الفكرة عندما تتنفذ المثالين التالين :

package main

import "fmt"

func main() {

    i := 5

    fmt.Println("i is: ", i)

    fmt.Println("address of i is: ", &i)

}

في هذا السطر أستخدمنا الحرف  & لطباعة عنوان المتغير في الذاكرة :

fmt.Println("address of i is: ", &i)

كمبرمج يجب أن تعلم بأن لك متغير في برنامج عنوان في الذاكرة يتم حفظ فيه القيم , و بالنسبة للمبرمجين فالذاكرة من الموارد المهمة جداّ و يجب المحافظة لذا قم المطورون بأستخدام المؤشرات, حيث أنه برمجياً من الأوفر نسخ عنوان الذاكرة الدال على البيانات بدل نسخ البيانات كلما تم التعامل معها في برنامجك , و هذا مثال بسيط على أستخدامها :

الأربعاء، 22 أغسطس 2012

BASH Script: قراءة كلمات السر من المستخدم

بسم الله الرحمن الرحيم

قد يحتاج المبرمج للحصول على بيانات من المستخدم من دون عرضها على الشاشة مثل كلمات السر و لذا تستطيع أستخدام الأمر read كالتالي :
#!/bin/bash

echo "Enter the password:"

read -s password

echo "Password:"$password

فقط قم بأضافة المعامل s- بعد الأمر read ليتم أخفاء القيم عن الشاشة .

BASH SCRIPT: البحث و الأستبدال في النصوص

بسم الله الرحمن الرحيم

يحتوي سكربيت الباش على العديد من الخصائص لتعامل مع النصوص و منها البحث و الأستبدال بواسطة هذه الصيغة :
${Text/old/new}

و هذا السكريبت مثال عملي على  أستخدام هذه الصيغة :

#!/bin/bash

text="Hello,World"

old="World"

new="UAE"

echo "old text:" $text

newtext=${text/$old/$new}

echo "new text:" $newtext


هنالك ملاحظة عند أستخدام هذه الصيغة , تلاحظ اننا لم نستخدم $ قبل المتغير text حيث أن كتابة المتغير بهذه الصورة $text سيؤدي لخطأ عند التنفيذ .

BASH SCRIPT: تنفيذ حلقة تكرارية في الخلفية

بسم الله الرحمن الرحيم

تستطيع تنفيذ حلقة تكرارية في الباش سكريبت في الخلفية , بدل من الأنتظار لمتابعة التنفيذ , و ذلك كهذا المثال :
#!/bin/bash

for i in {1..10}
do
echo -n $i
done&

for i in a b c d f
do
echo -n $i
done

echo


 تلاحظ اننا في الحلقة التكرارية الأولى وضعنا & في النهاية و الذي يستخدم لنقل البرامج للخلفية في لينكس :

for i in {1..10}
do
echo -n $i
done&

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

BASH SCRIPT:طباعة الوقت الذي أستغرقه تنفيذ السكريبت

بسم الله الرحمن الرحيم

يتوافر في سكريبت الباش المتغير الخاص SECONDS الذي يمكننا من معرفة عدد الثواني منذ بدأ التنفيذ إلى حين أستدعاء المتغير و يمكن أستخدامه عن نهاية السكريبت لأعطاءنا الوقت الكلي بالثواني لتنفيذ السكريبت كما في مثالنا التالي :
#!/bin/bash

sleep 10

echo "Total time taken by this script:"$SECONDS

السبت، 28 يوليو 2012

تثبيت مكتبة opencv في البايثون


بسم الله الرحمن الرحيم

تشتهر مكتبة opencv البرمجية بأستخدمها في التعرف على الأنماط و الأشكال في الصور و الفيديو , و ما يميز هذه المكتبة كونها تدعم منصات متعددة ( ويندوز , ماكنتوش , لينكس ) و يمكن أستخدمها في لغة C و C++ و البايثون .
و في هذه السلسة سوف أستخدم واجهة opencv الخاصة باللغة البايثون لسهولة هذه اللغة بالنسبة للمبرمجين الهواة و سرعة كتابة البرامج باللغة البايثون .


التثبيت :

* أن مكتبة opencv تدعم الأصدارتين 2.7 و 2.6 , وإلى الأن لا يوجد دعم رسمي للأصدارة 3.0 .
  • لينكس :

    بالنسبة لمستخدمي نظام لينكس نسخة ubuntu كما ما تحتاجه هو تنفيذ هذا الأمر في موجه الأوامر :
sudo apt-get install python-opencv

الجمعة، 13 يوليو 2012

مكتبة turtle البرمجية في لغة البايثون

بسم الله الرحمن الرحيم

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


  • البرنامج الأول :

import turtle # أستيراد المكتبة البرمجية

wn = turtle.Screen() # أنشاء كائن خاص بالمكتبة 

alex = turtle.Turtle() # أنشاء كائن "turtle"  


alex.forward(50) # تحريك السلحفاة للأمام مسافة 50

alex.left(90) # لكي تستدير السلحفاة بأتجاه اليسار مقدار 90 درجة

alex.forward(30) # لكي تتحرك السلحفاة بأتجاه الأمام مسافة 30 



wn.mainloop(# أنتظر المستخدم لكي ينهي النافذة الخاصة بالبرنامج


الثلاثاء، 29 مايو 2012

تغير رسالة الترحيب في موجه الأوامر ( لينكس)

بسم الله الرحمن الرحيم

عند الأتصال بسيرفر لينكس بأستخدام برتوكول SSH يتم عرض رسالة ترحيب و لتغير هذه الرسالة يمكنك أستخدام  ملف /etc/motd و ذلك بتعديل محتوياته بواسطة أي محرر نصوص كما في هذا المثال :

sudo editor /etc/motd

فقط قم بكتابة الرسالة التي تريد طباعتها عن الأتصال , و أحفظ الملف .

الثلاثاء، 15 مايو 2012

تحدي لمبرمجي البايثون

بسم الله الرحمن الرحيم 

من فترة قريبة أكتشفت موقع (http://www.pythonchallenge.com) القائم على فكرة تقديم تحديات لمبرمجي البايثون لأستخدام ما تعلموه لحل الألغاز .


أنا من تجربتي  أقدر أقول أن الموقع أكثر من رائع و الألغاز تثبت معلوماتك عن لغة البايثون و تخليك تبحث عن طرق و معلومات تهملها عند تعلم اللغة .


ملاحظة : الألغاز تعطيك عناوين صفحة اللغز التالي .

تعلم لغة البرمجة Go بالعربي ( الدرس الثامن )

بسم الله الرحمن الرحيم

في هذا الدرس سوف نتعرف على المصفوفات و الشرائح (slices) و هو نوع من البيانات أكثر مرونة من المصفوفات و أخيرا الخرائط (map) و هي بديلة للهاش (Hash) و المعاجم (Dictionary) .

1. المصفوفات ( Arrays ) :
    المصفوفات هي عبارة عن مجموعة من المتغيرات المتشابه في النوع و المتجاورة في المواقع في الذاكرة , و يتعدد أستخدمها في البرمجة مثل التصنيف ( Sorting ) و السلاسل النصية ( Strings) .
    •  التصريح عن مصفوفة :
    لتصريح عن مصفوفة جديدة في لغة Go يوجد أكثر من طريقة , و هذا مثال على الطرق المستخدمة :

    var list [4]int

    list1 := [4]int{ 12, 43 ,35 ,2}


    في السطر الأول قمنا بالتصريح عن المصفوفة بأسم "list" بأستخدام var ثم أنهينا التصريح بحجم المصفوفة متبوعا بنوع المصفوفة [4] بعد ذلك النوع int .

    أما في السطر الثاني فأستخدمنا الطريقة المختصرة بأستخدام " =: " ثم بعد ذلك حجم المصفوفة ونوعها , الفرق في هذا التصريح بأنه من اللازم تحديد عناصر المصفوفة :


    list1 := [4]int{ 12, 43 ,35 ,2}

    في حالة عدم رغبتك في التصريح عن المصفوفة بهذه الطريقة بدون تحديد القيم يجب كتابة التصريح بهذه الطريقة


    list1 := [4]int{}

    الأحد، 6 مايو 2012

    لأي شخص يريد يتوظف في الفيسبوك

    بسم الله الرحمن الرحيم

    أذا تحب التحدي و تتقن أي من لغات البرمجة التالية (C, C++, Java, Python, Perl, Ruby, C#, PHP ) فعندك فرصة للحصول على وظفية في موقع الفيسبوك .

    كل ما تحتاجه هو حل مجموعة من الألغاز البرمجية في وقت محدد ليتم الأتصال بك و تحديد موعد المقابلة الشخصية , طبعا الألغاز تحتاج تفكير إبداعي , مب للجماعة اللي يلجؤون للمنتديات لحل الواجبات ;-)   .

    لكي تبدأ التحدي أدخل على هذا الرابط  , و سجل الدخول بأستخدام حسابك في الفيسبوك .

    * ملاحظة : يبدأ العداد الخاص بحل الألغاز مع تسجيلك بواسطة حسابك .

    الاثنين، 30 أبريل 2012

    تعلم لغة البرمجة Go بالعربي ( الدرس السابع )

    بسم الله الرحمن الرحيم

    في هذا الدرس " أن شاء الله " سوف تتعلم أستخدام جملة القرار switch بالأمثلة , تستخدم جملة switch في تحديد الأوامر المراد تنفيذها في عدة حالات أو مقارنات لقيمة متغير أو نتائج دالة , و سأستخدم في المثال هذا النص البرمجي من موقع go tour :

    package main

    import (

        "fmt"

        "runtime"
    )

    func main() {

        fmt.Print("Go runs on ")

        switch os := runtime.GOOS; os {

        case "darwin":

            fmt.Println("OS X.")

        case "linux":

            fmt.Println("Linux.")

        default:

            // freebsd, openbsd,

            // plan9, windows...

            fmt.Printf("%s.", os)

        }

    }

    السبت، 21 أبريل 2012

    لينكس : التحكم بالبرامج التي تعمل في الخلفية

    بسم الله الرحمن الرحيم

    يوفر نظام لينكس أمكانية التحكم بالعمليات التي يتم تشغليها بحيث يمكن تشغيل البرنامج في الواجهة أو ما يعرف بـ "foreground" , و في حالة رغبة المستخدم في عدم أشغال الجلسة الحالية لموجه الأوامر "terminal" تستطيع أرسال البرنامج للعمل في الخلفية "Background" .

    • أرسال برنامج للعمل في الخلفية "Background"

    إزالة ^M من الملفات النصية في لينكس

    بسم الله الرحمن الرحيم

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

    و لمسح هذا الحرف تستطيع أستخدام المحرر النصي "sed " كالتالي :

    sed -e '/^M/d' input > output


    أستخدام الأداة curl لقياس سرعة الموقع

    بسم الله الرحمن الرحيم

     يعد برنامج curl البديل المتطور  لبرنامج wget في لينكس , و في هذا السكريبت سأستخدم هذا البرنامج لقياس سرعة الموقع ( الوقت المستغرق لبدأ الأتصال , سرعة بدأ عملية النقل , الوقت الأجمالي ) , و إذا لم يكن برنامج curl قم بتفيذ هذا الأمر في موجه الأوامر لتثبيت :
    sudo apt-get install curl

    و هذا هو النص البرمجي لشيل سكريبت :

    #!/bin/bash

    if [ $# -ne 1 ];then

    echo $0 "<site>"

    exit

    fi

    site=$1

    curl -A "Mozilla" -s -o /dev/null -w "Connect: %{time_connect} Start_Tranf:%{time_starttransfer} Total time: %{time_total}\n\n" $site

    فقط قم بحفظ النص في نظام لينكس و حوله لملف تنفيذي بواسطة الأمر chmod :

    chmod +x speed.sh