المحتوى

26‏/09‏/2013

إطلاق موقع أنا موفد ليبي

السلام عليكم

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

رابط الموقع: http://imofad.net


تاريخ الإطلاق:الاثنين 

19‏/08‏/2013

معالجة مشكلة ظهور خطأ عند محاولة تنصيب Crystal Reports على Windows 7

السلام عليكم


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

لمعالجة مشكلة ظهور الخطأ التالي عند محاولة تنصيب Crystal Reports على Windows 7:
Error 2753. The File "agent.exe.6ED28686_7B19_420C_B255_5B6C1BD2C705" is not marked for installation.
قم بعمل الخطوات التالية:
1- قم بإلغاء تثبيت Crystal Reports من جهازك عن طريق Control panel -->Programs and Features
2- قم بتثبيت البرنامج التالي:
3- قم بحذف المجلدين الآتيين:
   C:\Documents and Settings\All Users\Application Data\Macrovision\FLEXnet Connect
   C:\Documents and Settings\All Users\Application Data\FLEXnet
4- قم بتنصيب Crystal Reports من جديد

 وبذلك تنتهي المشكلة إن شاء الله ,,,,

09‏/08‏/2013

لا أهتم بالتفاصيل

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

أما وقد فُتح الباب على مصراعيه في نقاش قد يطول ويطول والخطب فيه أقوال وأقوال , فأقول والله المستعان:

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





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

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

وبذلك أقع في إسهاب كنت في غنًى عنه ,,,,,,,

فمتى وأين نقف حين ذاك , هذا السؤال الذي يصعب على من أراد أن لا يُملَّ حديثه من أن يجد له جوابا !!!

لذا فإن الأمر إذ ذاك يدور بين ثلاثة أمور: فإما أن لاتتكلم مطلقا وهذا محال , وإما أن تتكلم ثم لاتُلقي بالا للمعارضين , وهذا مما يصعب تلافيه في كثير من الأحيان , والثالث: أن تُفصّل في الأمر وهذا شر لابد منه , وها نحن الآن نسهب في الأمر لوجود المعارضين.

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

أمّا الآن وقد كان ماكان , فإن السبب الرئيسي في عدم اهتمامي بالتفاصيل بادئ ذي بدء: أنّني أرى أن التفاصيل والاستغراق فيها إنما يكون بحسب حال المرء مع غرضه , فكثير من الناس مثلا يُسهبون في أمور , معرفتهم بها قليلة ولكنهم يستغرقون في التدقيق والإمعان فيها حتى تقول أنهم ذو خبره عميقة فيها , إلا أن الأمر في الواقع على خلاف ذلك , فبعضهم لا يعرف عما يتكلم به إلا فتات أو حبّات يصنع منها القصور والأسوار على غير شيء ,,,,, وقد كان يَحسن بمن لا يعرف الكثير أن لا يتكلم إلا بحسب معرفته , لأن لا يَظُنّ من لا يعرفه أنه على شيء وهو على خلافه !!

هذا من ناحية ومن أخرى أن الناس تَمَلُّ وأنا أمَلُّ أيضًا, فكفاني من فلسفات لا أول لها ولا آخر , ولا يكاد من يخوض فيها إلا أن يغرق في مستنقعات وجزئيات تنسيه الكليات والمُهمّات.

هذا غيضٌ من فيض , وإلا لو تُرك المقام لذلك لَدُوّنت فيه الدَواوين , كما قد قيل: إنّ هذا الأمر مما تَفنى الأعمَار قبل تمامه , وياليته ممّا ينفع الإنسان , ولكن هيهات , خواطر في بال , ذُكرت هنا وكُتبت هناك.

البراء الرملي ,,,,
 2 شوال 1434هـ 
الموافق 10-08-2013 
طرابلس/ليبيا

29‏/07‏/2013

تغيير الـPort رقم (80) الذي يعمل منه Apache server إلى رقم آخر

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

عند تنزيل بعض البرامج في نظام تشغيل ويندوز تقوم هذه البرامج باستخدام Port يتعارض وApache server لذا احتجت لتغيير رقم الـPort وإليكم الطريقة:

أولا: مكان الملف

لمستخدمي: XAMPP
  قم بفتح الملف: C:\xampp\apache\conf\httpd.conf






لمستخدميWAMP

قم بفتح الملف: C:\wamp\bin\apache\apache2.2.22\conf\httpd.conf




ثانيا: التعديل

قم بتعديل رقم الـPort وهو (80) إلى رقم آخر وليكن (9980) , السطور الأصلية:
#Listen 12.34.56.78:80
Listen 80
ثم
ServerName localhost:80

ويكون التعديل كالتالي:
#Listen 12.34.56.78:9980
Listen 9980

ثم
ServerName localhost:9980
 ثم قم بعمل Restart للـ Server وقم بطلب صفحة الـ localhost مرفقة برقم الـPort كالتالي:
http://localhost:9980

موقع خاص بنتائج الشهادة الثانوية الإعدادية ليبيا 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هـ
طرابلس / ليبيا