المحتوى

29‏/07‏/2013

موقع خاص بنتائج الشهادة الثانوية الإعدادية ليبيا 2013

السلام عليكم ,,,

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





22‏/07‏/2013

برنامج لتشفير الملفات والرسائل

من أرشيف المدونة: 2008

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

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

قم بانشاء ملف باسم source.txt ثم اكتب فيه الرسالة المراد تشفيرها
قم بتشغيل البرنامج , وسيطلب البرنامج password وهي عبارة عن مقدار الازاحة , قم بادخال اي رقم بين 1 و 255
ستلاحظ أنه تم تكوين ملف جديد باسم encode.txt يحتوي على الرسالة المشفرة
بامكانك فك الشفرة باستخدام البرنامج , لذا قم بتشغيل البرنامج ثم أدخل نفس رقم الازاحة السابق ثم اضغط رقم 2 لفك الشفرة
ستلاحظ تكوين ملف جديد باسم decode.txt يحتوي على الرسالة الأصلية


أترككم مع النص المصدري:

//////////////////////////////////////
// SBR_CODING //
// Version 1.0 //
// By AL Bara Ramli //
// opencpp@yahoo.com //
// www.albara.co.cc //
// Copyright (C) 2008 //
// Tripoli Libya //
//////////////////////////////////////
// Last Update in 1/10/2008 //
//////////////////////////////////////

#include stdio.h
#include conio.h
#include string.h
#include ctype.h
//قمت بكتابت الاستدعاء بهذا الشكل لأن المدونة لا تسمح بالأقواس المعكوفة
char s[10000];
///////////////////////////////////////////////////////
char sh(char r,char x,int j)
{
switch(x)
{
case '+': r=r+j; /*while(isalpha(r)==0) {r++;}*/ break;
case '-': r=r-j; /*while(isalpha(r)==0) {r--;}*/ break;
}
return r;
}
///////////////////////////////////////////////////////
void sf(char *nf)
{
FILE *F;
F=fopen(nf, "w");
fwrite(s,10, 1, F);
fclose(F);
}
///////////////////////////////////////////////////////
int rf(char *nf,char *nf2, char x,int j)
{
char c;int i=-1;
FILE *F;
FILE *F2;
F2=fopen(nf2, "w");
F=fopen(nf, "r");
fseek(F, 0, SEEK_SET);
for(;;)
{
c = fgetc(F);
s[++i]=c;
if(c == EOF) {/*s[i]='\0'; fputc(s[i],F2);*/break;}
else fputc(sh(s[i],x,j),F2);
}
fclose(F);
fclose(F2);
return i;
}
///////////////////////////////////////////////////////
void main()
{
int pass;
char *file_1="source.txt";
char *file_2="encode.txt";
char *file_3="decode.txt";
clrscr();
printf("enter password [from 1 to 255]=>");scanf("%d",&pass);
printf("press [1] for encode, or press [2] for decode =>");
switch(getch())
{
case '1':rf(file_1,file_2,'+',pass);//printf("%s",s);
break;
case '2':rf(file_2,file_3,'-', pass);//printf("%s",s);
break;
}
//getch();
}

16‏/07‏/2013

باستخدام jQuery عمل حدث عند الضغط على زر , دون تغيير الصفحة

السلام عليكم

باستخدام "جي كويري" بالإمكان عمل حدث عند الضغط على زر موجود في الصفحة مثل:
 وبكتابة كود الـ "جي كويري" في رأس الصفحة :
$(document).ready(function(){

$("#submit_me").click(function()
    {
    alert("تم الضغط على الزر");
    }
);

});
 المميز في الأمر هو استخدام طريقة POST في ارسال حقول إلى صفحة أخرى دول الحاجة لإعادة تحميل الصفحة وذلك باستخدام دالة post , فمثلا إذا كان لدينا حقلي: اسم الدخول وكلمة المرور كالتالي:

اسم الدخول
كلمة المرور
حيث حقل :اسم الدخول" يحمل id باسم: user_me بينما حقل: "كلمة المرور" يحمل id باسم: pass_me
وباضافة رابط فارغ باسم data كالتالي:

وبوضع كود الـ "جي كويري" في رأس الصفحة , فسيتم ملئ ناتج الصفحة الأخرى abc.php في الرابط الفارغ.

$.post
(
      "abc.php",
      {
      user_me: $("#user_me").val(),
      pass_me: $("#pass_me").val()
      }
)
.done(function(data)
{
 $('#data').html(data);
});

10‏/07‏/2013

طريقة حذف الصفوف المكررة في قاعدة البيانات باستخدام SQL

بسم الله , الحمد لله والصلاة والسلام على رسول الله

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

وبعد , فخلال عملي على بعض المواقع والتطبيقات كان لزاما علي في بعض الأحيان حذف الصفوف المتكررة في قاعدة البيانات , وكان ديدني في ذلك الرجوع إلى لغة البرمجة سواء C# أو VB أو PHP , ولكن اضطرني المطاف أخيرا إلى ضرورة تنفيذ ذلك مباشرة من قاعدة البيانات دون الرجوع إلى لغة البرمجة (مرغم أخاك لابطل).

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

إن تيسر لي الوقت فسأضع هنا كود الاستعلام , وقد استعملت فيه GROUP BY و NOT IN وكانا متوافقين مع SELECT إلا أنني مع استبدالها بـ DELETE كان الأمر أشبه بالمعضلة.

هذه الطريقة التي لم تفي بالغرض كانت وبعجالة تتلخص في تجهيز الجدول بدون تكرار باستخدام GROUP BY ومن ثم تنفيذ الاستعلام SELECT والاشتراط عليه بجلب كل الصفوف عدا ماتم تجهيزه بالـ GROUP BY وذلك باستخدام NOT IN

عموما استطعت عرضها كما أريد إلا أنني لم أفلح في حذفها من قاعدة البيانات.

وبعد ذلك بحث عن حل عبر شبكة الانترنت ووجدت حل للمشكلة باستخدام فكرة قريبة جدا من بعض محاولاتي إن لم أقل إنها تشبهها تماما , ولكنها كانت تحتوى على المفتاح الذي لم يكن لدي !! , وهذه هي نسخة من الاستعلام.
SELECT * FROM `get-result` LEFT OUTER JOIN ( SELECT MIN(`id`) as RowId, `my_num`, `my_desk`, `my_name`,`my_result` FROM `get-result` GROUP BY `my_num` ) as KeepRows ON `get-result`.`id= KeepRows.RowId WHERE KeepRows.RowId IS NULL
فكرته تكمن في تجهيز الجدول بدون تكرار كما بطريقتي السابقة ومن ثم دمجه مع الجدول الأصلي فيتبقى حقول فارغة في الجدول وهي تدل على أنها مكررة لأنها لم تملأ من قبل الجدول المكرر وتلك الصفوف تحذف وبذا تنتهي المشكلة.
وبما أنني أواجه مشكلة في السيرفر الخاص بي حيث امتلأ الهارد دسك الخاص بالسيرفر فكثير من الاستعلامات الخاصة بي تتوج بالتنبيه:
#3 - Error writing file '/tmp/MYLIB2XV' (Errcode: 28)
لذا كان لزاما علي أن أجد حلا آخر , ألا وهو تنفيذ الاستعلام الخاص بفلترة قاعدة البيانات باستخدام Group by ومن ثم تخزين الجدول الناتج الذي يحوي قاعدة البيانات كلها دون أي تكرار وحفظه في ملف خارجي ومن ثم حذف الجدول الحالي وأخيرا استيراد الملف الخارجي إلى داخل قاعدة البيانات.



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

الاستعلام الخاص بفلترة الجدول من الصفوف المكررة وتخزين الملف المفلتر في ملف خارجي على الهارد دسك C:
SELECT `id` , `my_num` , `my_desk` , `my_name` , `my_result` INTO OUTFILE 'data.txt' FROM `get-result` GROUP BY `my_num`
والاستعلام الخاص باستيراد الملف الخارجي وتخزينه داخل قاعدة البيانات:
LOAD DATA INFILE 'data.txt' INTO TABLE db2.my_table;

هذا ماتيسر لي كتابته , مع أن الأكمل كان دعم المقال بصور توضيحية لكن ماكل مايتمنى المرء يدركه , والله ولي التوفيق.

من 1 إلى 7 رمضان 1434هـ
طرابلس / ليبيا

28‏/12‏/2012

ويكند آب طرابلس

السلام عليكم ,,,

ويكند آب طرابلس ,,,,,, هذا هو الاسم الذي تلمحته في رسالة بعث لي بها صاحبي الصادق , وإذا به مسابقة ستستضيفها ليبيا قريبا ,,,,,


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

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

فالمجتمع الليبي الصغير قرابة 6 مليون يعيشون وسط عالم يتعدى الـ7 مليار نسمة , يتميز بخصال قل نظيرها حسب اطلاعي , بعضها ايجابي وبعضها سلبي.

ومن وقف قليلا على سلوكيات المجتمع الليبي سيرى اختلافا ملحوظا خلال الـعقدين الأخيرين عنه في السنين الأخيرة على الأقل هذا ماتسنى لي متابعته بحكم عمري (26 سنة).

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

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

قبل انطلاق الثورة كان يراسلني دكتور من أحد الدول العربية وكان يريد أن يرسل لي طرد ,,,, وحين سألني عن رقم البريد الخاص بي ,,,, صمت قليلا وأنا أتحسر على الارقام البريدية الخاصة بكل منزل , فقد أزال القذافي كل سبل الحضارة.

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

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

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

نعم تلك ليبيا , اسألوا عنها أجدادكم كيف كانت , وإذا بناء اليوم لم نتأخر 40 سنة لأننا قبل 40 سنة كنا نملك مالا نملكه اليوم .....
فاليوم سنبدأ من الصفر لبناء دولة من لاشيء.

تلك هي مقدمتي أيها القراء الكرام لمسابقة ويكند آب طرابلس , هذه هي المسابقة التي أقيمة يوم 20-12-2012 , وقدمت فيها 36 فكرة رشحت 12 فكرة لخوض غمار المسابقة , كانت النتيجة كالتالي:
 التريب الأول من نصيب مشروع: فتش 
الترتيب الثاني: نظملي
الترتيب الثالث: سوق واحد

كنت أحد أعضاء فريق سوق واحد الذي فاز بالترتيب الثالث وهو يتكون من 7 أفراد , رغم كل الصعوبات التي كانت ولازالت , فقد اجتزنا المرحلة الصعبة بنجاح.

ولكن المكسب الأكبر كان التعرف على أصدقاء جدد وبناء شبكة معارف جديدة من أناس تملئهم الحماس والمبادرة.

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

لعل الله أن يعين على اكمالها في وقت لاحق ,,,,
 

06‏/11‏/2011

مشكلة وحل في PHP وهو ظهور رسالة خطأ Warning: Cannot modify header information - headers already sent

بعد استخدامي للملفات بالترميز utf-8 لاحظت ظهور سالة خطأ:
Warning: Cannot modify header information - headers already sent
وبعد الفحص والتمحيص تبين لي أن دالتين هما سبب المشكلة : cookies و header بينما تختفي المشلكة إذا كنت تستخدم ANSI
الحل يكمن في التالي:
أن لا يكون هناك أي مدخلات html قبل هاتين الدالتين ولكننا غالبا مانحتاج ذلك لذا قم بوضع الدالة التالية قبل أب كود في الصفحة:

session_start();
وهذه الدالة في النهاية ,,,,,
session_end_flush();

كما يجب أن لا يكون هناك فراغ قبل علامة البدء


ظهرت بعد ذلك المسكلة مرة أخرى وكان الحل هو استخدام برنامج محرر نصوص آخر مثل EmEditor وتخزين الملف بصيغة:
utf-8 without BOM وهنا مدونة جيدة لتوضيح ذلك

أو هناك حل آخر وهو حذف الكود الخفي المضاف للملف باستخدام محرر هيكسا XVI32 وهي الرموز الأولى في بداية الملف وتستطيع الاستفادة من مقالة جيدة هنا.

عموما: توجهت للصفحات التي فيها الدالتين: cookies و header وحولت ترميزهما للـ utf-8 without BOM
فنجح الأمر ونظرا لكثرة استخدامي للدالة header فقمت باستبدالها بدالة meta الخاص بـ refrech


30‏/10‏/2011

المحاذاة ناحية اليمين , مشكلة وحل رياضي

السلام عليكم

المحاذاة ناحية اليمين واجهتني هذه المشكلة مرتين وكلا المرتين في الرسوميات , حينما أريد أن أقوم بمحاذات صورة ناحية اليمين ولكن احداثي رسم الصورة هو الركن العلوي الأيسر ؟؟؟

المشكلة ليست هنا ولكن المشكلة تكمن عندما يكون عرض الصورة غير محدد أي أنه يتغير باستمرار , مثلا عند عمل برنامج يستعرض صور متنوعة ولكن الصور تختلف في العرض !!!

لذا قمت بعمل دالة تقوم بحساب المسافات ,,,,,

والتطبيق كالتالي: يوجد في لغة الPHP مكتبة باسم GD للكتابة على الصور , وميزة هذه المكتبة هو دعمها للغة العربية , إلا أن المحاذاة فيها من ناحية اليسار لذا قمت بوضع الحل لذلك وسأشرحه بما يسر الله:

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

المسافة المطلوبة للاحداثي السيني=المساحة الفارغة التي تترك Q مضافا إليها المحاذاة اليمنى L1
المساحة الفارغة التي تترك Q = المسافة بين المحاذاة اليمني والمحاذاة اليسرى J مطروحا منه المسافة التي تشغلها الكلمة S
Q=J-S

أولا: المسافة بين المحاذاة اليمني والمحاذاة اليسرى J =المحاذاة اليمنى L2 مطروحا منه المحاذاة اليسرى L1
J=L2-L1
ثانيا: المسافة التي تشغلها الكلمة S=المساحة التي يشغلها الحرف Sa مضروبا في عدد الأحرف في الكلمة Ni
S=Sa*Ni

وحيث أن: المساحة التي يشغلها الحرف Sa=المسافة بين المحاذاة اليمنى والمحاذاة اليسرى J مقسوما على عدد الأحرف الكلية التي يمكنها شغل المسافة بين المحاذتان "إن صح التعبير" Nmax
Sa=J/Nmax

وبالرجوع إلى: المسافة التي تشغلها الكلمة S=المساحة التي يشغلها الحرف Sa مضروبا في عدد الأحرف في الكلمة Ni

S=J/Nmax*Ni

وبالرجوع إلى:المسافة الفارغة التي تترك Q = المسافة بين المحاذاة اليمني والمحاذاة اليسرى مطروحا منه المسافة التي تشغلها الكلمة

Q=J-S

وبذلك تكون المسافة المطلوبة للاحداثي السيني X

X=L1+Q
X=L1+(J-S)
X=L1+(J-(J/Nmax*Ni))
X=L1+J(1-(1/Nmax*Ni))

وهذه هي المعادلة ,,,,,,,, تظهر هنا صعبة في صياغتها , ولكن في العمل أسهل من ذلك ,,,,,,
سأضع إن شاء الله صورة الورقة التي قمت فيها بتحليل الأمر ,,,,,,,, خلاصة القول: بإمكاننا وضعها برمجيا باستخدام PHP كالتالي:
$xx_l1=250;
$xx_l2=590;
$xx_j=($xx_l2-$xx_l1);
$xx_n=(strlen($text)-1)/2;
$xx_nmax=40;
$rt=$xx_l1+$xx_j*(1-($xx_n/$xx_nmax));

على اعتبار L1&L2&nmax ثوابت , والمتغير هو عرض الكلمة text والنتيجة هي الاحداثي السيني rt

أترككم مع المعادلة ,,,,,,,, في أمان الله

29‏/10‏/2011

استخدام الترميز UTF-8 في MYSQL باستخدام PHP

السلام عليكم

في المواقع التي صممتها بلغة PHP بقاعدة البيانات MYSQL , كنت أستخدم الترميز الافتراضي ولا أقوم بتعديل محتويات MYSQL من PhpMyAdmin بل كنت أكتفي بالتعديل من أوامر PHP فقط ,,,,,
ولكن دعتني الحاجة لذلك عندما حاولت تصدير محتوى أحد Tables إلى ملف Excel ولكن الترميز لا يدعم العربي ,,,,
وبذلك احتجت لتوحيد الترميز الذي أعمل عليه إلى UTF-8 , وبما أن كل مواقعي السابقة بغير هذا الترميز , فقد لخصت التعديلات التي قمت بها وأحببت مشاركتها في مدونتي , رغم ترددي عن ذلك في البداية لأنني عادة ما أدون البرامج التي أمضي فيها وقت كافي لتجربتها , ولكني سأغير أسلوبي فلعل أحد يستفيد من ذلك أو يعلق على ذلك ويبين لي طريقة أفضل فأستفيد أنا والزوار من ذلك ,,,,,

التعديلات التي قمت بها لاستخدام الترميز UTF-8 في MYSQL باستخدام PHP


أولا: بعد دالة الاتصال بقاعدة البيانات mysql_connect
$connection = mysql_connect(DB_SERVER,DB_USER,DB_PASS);
mysql_query("set character_set_server='utf8'");
mysql_query("set names 'utf8'");

ثانيا: عند انشاء قاعدة البيانات
$result=mysql_query ("CREATE DATABASE ".DB_NAME." DEFAULT CHARACTER SET utf8 COLLATE utf8_unicode_ci");

ثالثا: عند انشاء جدول
$query = "create table ".DB_TABLE." (".$command_name.")"." ENGINE = MyISAM CHARACTER SET utf8 COLLATE utf8_unicode_ci";

رابعا: في كل صفحة لا تنسى الترميز
meta http-equiv="Content-Type" content="text/html; charset= utf-8"
و
header( 'Content-Type: text/html; charset=UTF-8' );

أخيرا: لا تنسى تخزين كل ملف PHP بالترميز utf-8


27‏/01‏/2011

برنامج منبه النتائج

(خاص بطلبة كلية الهندسة جامعة طرابلس: خريف 2010-2011)

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

لتحميل البرنامج

17‏/01‏/2011