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

لماذا لا يوجد في نظام لينكس برنامج إلغاء التجزئة ؟

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

أذا كنت من مستخدمي نظام ويندوز المخضرمين فلا بد أنك تعاملت مع برنامج إلغاء التجزئة لزيادة سرعة و إنتاجية القرص الصلب :




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

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

أما بالنسبة لنظام  الملفات في لينكس فسوف أشبه بموظف أكثر تنظيماُ يقوم بالبحث عن أفضل سلسلة من اﻷدراج و الأكثر تقارباً مما يسرع عملية الوصول للملف .

السبت، 22 يونيو 2013

مشكلة العام 2038

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


  • ما هي مشكلة العام 2038 ؟

التاريخ الذي يتم عرضه في أنظمة التشغيل التي هو عبارة عن عدد الثواني منذ التاريخ 1 يناير 1970 , و يتم أستخدام رقم ثنائي بطول 32 بت يمثل عدد عشري مع الأشارة (singed number ) , و المشكلة بأن قدرة هذه العدد الثنائي على تمثيل الأعداد العشرية محدودة و سوف يصل إلى القيمة القصوى له بتاريخ 19 يناير 2038 .


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

  • الحل 
عرض المبرمجون العديد من الحلول المختلفة للمشكلة مثل :

  1. استخدام عدد بدون الأشارة (unsigned number) مما يسمح للرقم بتمثل الأعداد الموجبة فقط , كما سيسمح بمثل مدى أقصى للأعداد .
  2. أستخدام عدد ثنائي بطول 64 بت بدل العدد الثنائي المستخدم في الأنظمة الحالية .

الثلاثاء، 9 أبريل 2013

مقدمة في لغة awk

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




كتيب من تأليفي عن لغة awk يحتوي معلومات مبسطة عن هذه اللغة و استخدمتها بالأمثلة العملية .


الاثنين، 1 أبريل 2013

كذبة إبريل : Google nose

أعلن محرك البحث Google على خدمة جديدة و هي Google nose و هذه الخدمة متخصص في البحث عن الروائح



بكل بساطة أدخل الرابط و أختر الرائحة لكي يتم عرضها لك بواسطة موجات الصوت الصادرة عن جهازك التي ستكون أيونات الرائحة .


أذا صدقت هذا الخبر فأعلم بأنك وقعت لمقلب من قبل مبرمجي قوقل فالتقليد المعروف لدى الأجانب بكذبة أبريل (April fools).

* للذين يقومون بتقليد الأجانب في هذه العادة تذكر حديث الرسول صلى الله عليه وسلم: "ويل للذي يحدث، فيكذب ليضحك به القوم، ويل له، ثم ويل له"

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

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

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

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

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


السبت، 13 أكتوبر 2012

حل مشكلة الملفات المخفية في الفلاش المصابة بفيروس

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

تقوم معظم فيروسات التي تصيب الفلاش (Flash drive) بأخفاء الملفات و وضع أختصارات لتشغيل الفيروس عند عرض الملف .

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

الأحد، 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)

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