Kzalek

21/10/2009 بواسطة mostafa farghaly

السلام عليكم و رحمه الله تعالى و بركاته

ss2

منذ يومين أعطيت تطبيقى الجديد Kzalek للبيتا تسترز حتى يختبروا التطبيق و اسمع كل اقتراحاتهم و ارائهم ، Kzalek عباره عن تطبيق AIR بالطبع يعمل على ويندوز و ماك و لينوكس وظيفته تسهيل التعامل مع موقع تويتر على سبيل المثال بدلا من فتح المتصفح لعده ساعات و عمل ريفرش لمعرفه كل جديد ، يمكنك وضع التطبيق فى ال TaskBar او ال Dock و سوف ينبهك بكل جديد بتنبيهات شبيهه ب Mac Growl ، يحتوى التطبيق على المميزات الاساسيه لموقع تويتر مصل استقبال و ارسال التويتات و الردود و الرسائل المباشره و وضع التويتات فى المفضله … الخ و يزيد على موقع تويتر ببعض المميزات الغير موجوده فيه مثل دعم اللغه العربيه و ترجمه التويتات من اى لغه إلى العربيه و إطاله و تقصير الروابط و إرسال الصور إلى تويتر و رؤيتها داخل التويت inline و الكثير من المميزات الاخرى .

kzalek notifications

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

تحديث :

من مدونه عالم التقنيه : تقرير تجربتنا الخاصه حول برنامج kzalek
من مدونه lollwa :  تطبيق kzalek

محاضرتين من لقاء مجموعه BayJax الاخير

20/09/2009 بواسطة mostafa farghaly

السلام عليكم و رحمه الله تعالى و بركاته

Nicholas Zackas  at BayJax 9-2009 meeting talking about Scalable JavaScript Architecture

فى هذا الشهر سبتمبر 2009 القيت عده محاضرات من اعضاء مجموعه BayJax بياهو ، منها محاضره the JSON Saga التى وضعتها هنا فى المدونه من قبل ، نشرت مدونه YUI منذ يومين محاضرتين من فعاليات لقاء المجموعه فى اخر الموضوع بالمدونه ستجد محاضرات لم اذكرها هنا اذا مهتم ، المحاضره الاول بعنوان Scalable JavaScript architecture عن كيفيه برمجه تطبيقات جافاسكربت عاليه الكفاءه و scalable اعطاها Nicholas Zakas مؤلف كتاب WROX: JavaScript for web developers – الكتاب لابد ان يقرأه اى شخص يكتب جافاسكربت فى المتصفح – و يعمل مهندس بياهو  و يعمل على مكتبه YUI ، يمكنك تحميل المحاضره من هنا . أما المحاضره التانيه اعطاها كلا من Isaac Schlueter و Matt Hackett تحدثوا عن برمجه السيرفر بجافاسكربت يمكنك تحميلها من هنااتمنى لكم و لنفسى مشاهده ممتعه .

خارج النص : أقوم حاليا بكتابه مجموعه عن المواضيع ضمن سلسله جديده ان شاء الله عن جافاسكربت و البرمجه الوظيفيه ، فإذا كنت مدمن Haskel او Erlang او اى لغه وظيفيه اخرى فإنك ستتعجب من كيفيه برمجه الجافاسكربت وظيفيا و كيف ان مرونتها تجعلك تستخدمها بأى طريقه تشاء .

كتاب O’Reilly even faster web sites

15/09/2009 بواسطة mostafa farghaly

السلام عليكم و رحمه الله تعالى و بركاته

oreilly even faster web sites

انتهيت من فتره من قراءه كتاب O’Reilly Even Faster Web Sites ، الكتاب ليس إصدار ثانى لكتاب O’Reilly high performance web sites من تأليف نفس الكاتب Steve Souders و لكنه يبدأ من حيث انتهى high performance web sites حيث يحتوى على الكثير من الابحاث و التكنيكات الجديده فى مجال كفاءه ال front-end ، ساعد فى تأليف الكتاب مع Steve Souders الكثير من الاسماء المعروفه فى مجال ال front-end ، مثل Douglas Crockford مكتشف لغه تبادل البيانات JSON الذى كتب الفصل الاول يتحدث فيه عن كفائه تطبيقات الاجاكس ، و الفصل الثانى كتبه Dion Almaer و Ben Galbraith اصحاب مدونه Ajaxian و تحدثوا فيه عن الإستجابه responsiveness و ال threading ، و الفصل الثالث كتبه Steve Souders يتحدث فيه عن كيفيه تأجيل تحميل وظائف الجافاسكربت عند استخدامها و إستخدام المطلوب منها فقط عند بدايه الوثيقه ، و الفصل الرابع تناول فيه Steve Souders كيفيه تحميل ملفات الجافاسكربت بالتوازى parallel download حيث ان طبيعه تحميل ملفات الجافاسكربت انها تمنع اى مورد من التحميل معها block download حتى تنتهى و تأثير ذلك على ترتيب تنفيذ كود الجافاسكربت Execution order و ال user experience ، و الفصل الخامس يتناول فيه Steve كيفيه ربط الكود ال inline ليتم تنفيذه فقط بعد تحميل الملفات الذى يعتمد عليها من الشبكه بالتوازى بدون عمل blocking و مثال على ذلك من مكتبه DoJo و مكتبه YUI ، و الفصل السادس يتناول فيه Steve تأثيركود الجافاسكربت ال inline على رسم الصفحه rendering و على ظهور تأثيرات ال CSS و الترتيب المناسب لملفات الجافاسكربت و ال CSS ، و الفصل السابع يتناول كيفيه كتابه كود جافاسكربت أسرع فى التنفيذ يكتبه Nicholas Zackas كاتب Wrox: JavaScript for Web developers ، و الفصل الثامن يتناول كفاءه تطبيقات ال comet او ماتعرف بالاجاكس العكسى حيث يبدأ السيرفر الطلب و ليس ال client و يستخدم فى التطبيقات التفاعليه و الreal time كتبه Dylan Schiemann الذى يرأس SitePen و مؤسس Dojo ، و الفصل التاسع يتناول به Tony Gentilcore مهندس بجوجل كيفيه تحسين الكفاءه للمستخدمين الذين لا يستطيعون الحصول على مميزات ال gzipping ، و الفصل العاشر يتناول تأثير الصور على كفاءه التطبيق و كيفيه تحسينها و تقليل حجمها و إستخدام ال CSS sprites و إستخدام command line لمعالجه الصور على السيرفر ديناميكا للحصول على اعلى جود و أصغر حجم يكتبه Nichole Sullivan صاحبه فكره ال CSS الموجه بالكائنات و Stoyan Stefanov مؤلف كتاب Object oriented JavaScript و الاثنين يعملان بياهو ، و الفصل الحادى عشر يتناول كيفيه إستخدام اكثر من دومين للحصول على اكثر من إتصال HTTP بالتوازى يكتبه Steve ، و الفصل التانى عشر يتحدث فيه Steve عن Chunked encoding و كيفيه استخدام ال buffer لزياده كفاءه تطبيقات الويب التى تعتمد على حجم بيانات كبير ، و الفصل التالت عشر يتحدث عن تأثير إستخدام ال iframes كتبه Steve ، و الفصل الرابع عشر يتحدث عن تأثير ال CSS selectors على كفاءه و سرعه اظهار العناصر renderning فى التطبيق و سبل كتابه CSS selectors اسرع و افضل و ال selectors التى يجب عليك تجنبها ، و فى نهايه الكتاب مرجع صغير عن الادوات التى تستخدم فى قياس الكفاءه .

أنص بشده قراءه هذا الكتاب ، فهو غنى جدا بالمعلومات و سيجعلك متقدما اكثر فى مجال ال front-end و ، و ان لم تقرأ كتاب O’Reilly High performance web sites فأنا انصحك ايضا بقرائته بشده ، لأن الكتاب الجديد يعتمد عليه فى بعض المناطق و به ابحاث و بعد التكنيكات الرائعه لترقيه كفاءه تطبيقات الانترنت .

المحاضره العاشره من مؤتمر JSConf2009

24/08/2009 بواسطة mostafa farghaly

السلام عليكم و رحمه الله تعالى و بركاته

Axiom Stack Server Side JavaScrip video lecture at JSConf2009

وضع منظموا مؤتمر JavaScript Conference 2009 المحاضره العاشره ، اعطاها Nick Campell بعنوان Axiom stack: Serverside JavaScript عرض من خلالها منصه Axiom stack لإستخدام JavaScript لبرمجه السيرفر يمكنك مشاهده المحاضره من هنا ، المحاضرات السابقه كلها ستجدها هنا .

Nick presents the adventures of Timmy through the (stick) world of web programming in order to illustrate the need, beauty, and reality of Server Side JavaScript programming using Axiom Stack. Nick presents the variety of issues that happen when writing templates, multi-language development, and database schema handling. The Axiom Stack provides you with the ability to leverage one language, the web language of JavaScript, to create powerful and wide reaching web applications

تاريخ استطيع قرائته

24/08/2009 بواسطة mostafa farghaly

السلام عليكم و رحمه الله تعالى و بركاته

اقوم حاليا ببرمجه تطبيق شبيه بقارىء rss ، و كنت بحاجه لتحويل التاريخ الذى كتب فيه الموضوع إلى صيغه يسهل قرائتها بحيث يحول تاريخ قديم مثل Mon Aug 24 2:30:00 2009 إلى منذ ساعه و 30 دقيقه ، بعد بحث بسيط وجدت وظيفه بإسم prettyDate كتبها john resig مطور ال jQuery ، لكنها لن تعمل معى لأنها تعطى الفرق بالدقيقه و الساعه و اليوم و الاسبوع و انا ااريدها ان تعمل من الثانيه حتى السنه ، ثم ان prettyDate مقتصره على تحويل الوحدات إلى اللغه الانجليزيه فقط مثل days و weeks … الخ ، و انا اريد وظيفه تتعامل بالعربيه مع العلم ان العربيه اكثر تعقيدا حيث هناك مفرد و مثنى و جمع و قواعدهم مختلفه مثل يوم ، يومين ، 3 ايام ، 11 يوم ، لاحظ ان يوم تكررت فى المفرد و الجمع ههههههه :D .

قمت بكتابه وظيفه بإسم dateICanRead تقبل تاريخ فى الماضى كنص او كائن من نوع Date و ترجع لك الفرق بصيغه مقروءه كما توضح الامثله التاليه :

alert("منذ " + dateICanRead("Mon Aug 24 14:50:00 2009"));
/*منذ دقيقتين و 30 ثانيه*/
alert("منذ " + dateICanRead("Sun Aug 23 06:10:00 2009"));
/*منذ يوم و 8 ساعات و 47 دقيقه و 17 ثانيه*/
alert("منذ " + dateICanRead("Aug 11 00:00:00 2008"));
/*منذ سنه و اسبوع و 6 ايام و 14 ساعه و 58 دقيقه و 30 ثانيه*/
alert("منذ " + dateICanRead("Aug 12 00:00:00 2009"));
/*منذ اسبوع و 5 ايام و 15 ساعه 8 دقائق و 38 ثانيه*/

الوظيفه dateICanRead تقبل عباره تانيه و هى عدد الوحدات التى تريدها كما توضح الامثله التاليه :

alert("منذ " + dateICanRead("Aug 11 00:00:00 2008", 1));
/*منذ سنه*/
alert("منذ " + dateICanRead("Aug 11 00:00:00 2008", 2));
 /*منذ سنه و اسبوع*/

يمكنك رؤيه الكود و تحيميل ملف dateICanRead.js من هنا .

فيديوهات و شرائح مؤتمر Velocity 2009

22/08/2009 بواسطة mostafa farghaly

السلام عليكم و رحمه الله تعالى و بركاته

Ben Galbraith and Dion Almaer

اقيمت فعاليات مؤتمر Velocity 2009 يوم 22/6 بسان جوز بولايه كاليفورينا و استمر لمده يومين حتى 24/6 ، المؤتمر الوحيد من نوعه المتخصص فى كفائه تطبيقات الانترنت بدايه من ال client حتى ال server و يتحدث بها افضل المهندسين مثل douglas crockford مخترع ال JSON و ben galbraith و dion almaer مدونين مدونه Ajaxian اللى بالصوره اللى فوق و stoyan stefanov كاتب كتاب OO JavaScript من دار نشر packet و مهندس الكفاءه بياهو و غيرهم فى اشهر الشركات بالعالم كجوجل و مايكروسوفت و تويتر و ياهو و فيسبوك و امازون و غيرهم عن كيفيه ترقيه كفائه تطبيقات الانترنت على كل من المتصفح و الخادم  و ادوات اختبار الكفائه و اخر الابحاث التى تم نشرها فى مجال الكفاءه و بعضها من كتاب even faster web sites الذى سأتحدث عنه عندما اكمل قرائته ان شاء الله  ، هذه هى السنه التانيه للمؤتمر ، اقيم المؤتمر السنه الماضيه بعد النجاح الباهر الذى حققه كتاب High performance web sites من شركه اوريلى وكاتبه steve souders الذى يعمل مهندس بجوجل ، حيث انتبهت شركه اوريلى ان حدث مثل هذا مفقود بالرغم من اهميه الموضوع البالغه ، و بعد النجاح الساحق للمؤتمر فى سنته الاولى 2008 ، ها هى فيديوهات و شرائح المؤتمر مؤتمر 2009 ، اتمنى لكم و لنفسى الإستفاده وزياده الخبره .

HTML5 storage الجزء الثانى

14/08/2009 بواسطة mostafa farghaly

السلام عليكم و رحمه الله تعالى و بركاته

فى هذا الجزء أتناول كيفيه تخزين البيانات فى قاعده بيانات SQLite من خلال local JavaScript Database api

مقدمه
إنشاء و فتح قاعده البيانات
إنشاء جدول جديد
إضافه بيانات للجدول
إستخدام العبارات الجاهزه
إختيار بيانات من الجدول
التعامل مع اخطاء تنفيذ ال SQL
أرقام الأخطاء و مدلولاتها
التعامل مع اخطاء ال transaction
التعامل مع اصدارات قاعده البيانات
الدعم من المتصفحات
للمزيد

مقدمه

تحتوى مواصفات HTML5 على وصف ل Local JavaScript Database قاعده بيانات محليه تمكنك من تخزين البيانات داخل متصفح المستخدم فى قاعده بيانات SQlite بدلا من الكوكيز التى تقتصر مساحتها التخزينيه على 4 كيلو فقط ، قاعده البيانات SQLite على ملايين اجهزه المحمول و الاجهزه الكفيه و السيرفر و الكثير من تطبيقات سطح المكتب لصغر حجمها و مرونتها و تدعيمها شبه الكامل ل SQL ANSI ، للمزيد عن SQL و SQLite داخل المتصفح من هنا ، العمليات التى تتم على قاعده البيانات تكون غير تزامنيه asynchronous اى تتطلب كل عمليه تسجيل وظيفه تستمع لحدث نجاح العمليه او حدوث خطأ ، كما ان العمليات كلها تتم بنظام transaction لأن بيئه المتصفح غير مستقره ، يمكن لأى عمليه ان يقطعها refresh او اغلاق نافذه المتصفح ، اى انه إذا حدث خطأ فى عمليه مكونه من عده خطوات فإن قاعده البيانات لن تتأثر بأى من هذه الخطوات ، مثلا اذا كنت تغير بعض البيانات من جدول A ثم تضيف بيانات فى جدول B و تحذف بيانات من جدول C و قمت بإغلاق المتصفح فى منتصف خطوه اضافه البيانات للجدول B ، فإن خطوه تغيير البيانات من الجدول A سيتم التراجع عنها و لن يحدث اى تأثير ، إلا اذا تمت جميع عمليات ال transaction بنجاح .

إنشاء و فتح قاعده بيانات

قبل ان تتمكن من إستخدام قاعده البيانات عليك اولا فتح اتصال بها ، عندما تقوم بفتح اتصال سيتم انشاء قاعده بيانات جديده فارغه اذا لم يتم انشائها من قبل ، لذلك فإن عمليه فتح و انشاء قاعده البيانات متماثله ، يتم فتح الاتصال بقاعده البيناات عن طريق عن طريق الوظيفه openDatabase التى تقبل اربع عبارات : العباره الاولى هى إسم قاعده البيانات ، العباره التانيه هى إصدار قاعده البيانات للمزيد انظر الجزء الخاص بالتعامل مع اصدارات قاعد البيانات ، العباره الثالثه هى الإسم الذى يستخدمه المتصفح للتفاعل مع المستخدم مثلا عند طلب إذن بزياده الحجم المتاح لقاعده البيانات ، العباره الرابعه هى الحجم الذى تتوقع ان تشغله قاعده البيانات التى تقوم بالعمل عليها و اذا تعدت هذا الحجم المتفق عليه سيتم أخذ إذن المستخدم بأعطاء المزيد من الحجم لقاعده البيانات ، المثال التالى يوضح إنشاء قاعده بيانات بإسم keepondev إصدار 1.0 و حجمها 64 كيلوبايت و لها الإسم keepondev database لإستخدامه عند التفاعل مع المستخدم :

var db = openDatabase("keepondev", "1.0", "Keepondev database", 65536);

إنشاء جدول جديد

بقيه امثله هذا الموضوع تعتمد على جدول بإسم goals يحتوى على عمودين id و name :

CREATE TABLE IF NOT EXISTS goals (
    id INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT,
    name TEXT NOT NULL
);

يمكنك انشاء هذا الجدول من خلال تنفيذ جمله ال SQL السابقه على قاعده البيانات keepondev عن طريق الوظيفه executeSql التابعه للكائن SQLtransaction – فى المثال بإسم tx – الذى يتم تمريره للوظيفه التى تمرر للوظيفه transaction 8O التابعه للكائن الناتج من openDatabase كما يوضح الكود التالى :

var db = openDatabase("keepondev", "1.0", "Keepondev database", 65536);

function resultHandler(){
    alert("success");
};
function errorHandler(){
    alert("fail");
};
db.transaction(function(tx){
    var sql = "CREATE TABLE IF NOT EXISTS goals(";
    sql += "id INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT,"
    sql += "name TEXT NOT NULL DEFAULT 'secret goal');";
    tx.executeSql(sql, [], resultHandler, errorHandler);
});

الوظيفه transaction تقبل وظيفه يمرر لها كائن من نوع SQLTransaction بإسم tx فى المثال السابق ، الكائن tx يحتوى الوظيفه executeSql التى تقبل اربع عبارات ، العباره الاولى هى جمله ال SQL التى قمت بوضعها فى المتغير sql و كتبتها على اكثر من سطر حتى لا تخرج عن عرض المدونه ، العباره التانيه مصفوفه تقبل قيم العبارت الجاهزه للمزيد انظر الجزء الخاص بإستخدام العبارات الجاهزه prepared statements ، العباره الثالثه وظيفه يتم إستدعائها اذا تم تنفيذ جمله ال SQL بنجاح ، و العباره الرابعه وظيفه يتم إستدعائها اذا حدث خطأ اثناء تنفيذ جمله ال SQL ، تلك الوظيفتين ستقوم بإظهار نافذه منبثقه ب success او fail فقط ، للمزيد انظر الجزء الخاص بأخطاء تنفيذ ال SQL و الجزء الخاص بأخطاء ال transaction ، يمكنك التأكد من انشاء الجدول و قاعده البيانات بنجاح داخل المتصفح Safari 4 من خلال فتح ال tab الخاص ب database الذى يمكن الحصول عليه من Sesstings > preferences > advanced > show develop menu in menu bar ، ستجد قائمه جديده بإسم develop دخلت فى القائمه file ، قم بقتح tab ال database كما توضح الصوره التاليه :

Safari Database tab

داخل tab ال database ستجد قاعده بيانات بإسم keepondev تحتوى على جدول فارغ بإسم goals ، يالا بينا نملاه .

إضافه بيانات للجدول

إضافه بيانات للجدول ماهى إلا تنفيذ جمله SQL من نوع INSERT بعد فتح قاعده البيانات و عمل transaction بنفس ترتيب الخطوات السابقه ، كما يوضح المثال البسيط التالى :

var db = openDatabase("keepondev", "1.0", "Keepondev database", 65536);
db.transaction(function(tx){
    var sql = "INSERT INTO goals (name) VALUES ('world domination')";
    tx.executeSql(sql, [], resultHandler, errorHandler);
});

الشىء الوحيد المختلف فى المثال السابق هى جمله ال INSERT التى تقوم بإضافه صف جديد فى الجدول goals و تظبط قيمه العمود name الى world domination اما العمود id فيأخذ رقم تلقائى ، هناك مأخذ على طريقه الاضافه السابقه : لو احتوت القيمه على ‘ سيحدث error و يمكن ايضا حقن جمله SQL و عمل هجمه من نوع SQL injection ، الطريقه الافضل لإضافه البيانات هى إستخدام العبارت الجاهزه .

إستخدام العبارات الجاهزه

إستخدام العباره الجاهزه يمكنك من إستخدام ال ‘ و ال ” داخل القيم بدون الخوف على كسر جمله ال SQL ، ثم انه يستحيل حقن SQL داخل العبارت الجاهزه و عليه لا يمكن حدوث هجمات SQL injection ، و تزيد كفائه تنفيذ عمليه اضافه اكثر من صف فى الجدول .

قم بوضع علامه استفهام ؟ بدلا من وضع قيمه العمود فى جمله ال SQL ، و بداخل المصفوفه [] التى هى العباره التانيه للوظيفه executeSql قم بإضافه القيمه ، او ضيفها من ناتج مدخل المستخدم كما يوضح الكود البسيط التالى :

var db = openDatabase("keepondev", "1.0", "Keepondev database", 65536);
db.transaction(function(tx){
    var sql = "INSERT INTO goals (name) VALUES (?)";
    tx.executeSql(sql, ["Conference speaker"], resultHandler, errorHandler);
    tx.executeSql(sql, ["technology innovator"], resultHandler, errorHandler);
    tx.executeSql(sql, ["JavaScript evangelist"], resultHandler, errorHandler);
    tx.executeSql(sql, ["most infeluence person of all time"], resultHandler
    , errorhandler);
    tx.executeSql(sql, ["space trip"], resultHandler, errorhandler);
});

يمكنك منع التكرار فى الكود بإستخدام partial function و النتيجه كما تظهر فى الصوره التاليه :

database tab showing keepondev goals table

إختيار بيانات من الجدول

اختيار بيانات من الجدول عباره عن استخدام جمله SQL من نوع SELECT بالإضافه إلى إستقبال البيانات من خلال الوظيفه resultHandler التى كانت وظيفتها فى الامثله السابقه عمل alert بالنص Success فقط ، عند نجاح تنفيذ جمله ال SQL على قاعده البيانات ، يتم تمرير عبارتين للوظيفه resultHandler ، العباره الاولى هى كائن من نوع SQLtTansaction و العباره التانيه كائن من نوع SQLResultSet يحتوى على الصفوف الناتجه من تنفيذ جمله ال SQL ، حيث يحتوى على الخاصيه rows التى هى بمثابه مصقوفه تمثل صفوف الجدول التى رجعت ، يمكننا استخلاص البيانات منها كما يوضح المثال البسيط التالى :

function resultHandler(tx, result){
    var rows = result.rows;
    var rowsLen = rows.length;
    for(var i = 0; i < rowsLen; i += 1){
        var row = rows.item(i);
        var id = row["id"];
        var name = row["name"];
        alert(id + " : " + name);
    }
};

var db = openDatabase("keepondev", "1.0", "Keepondev database", 65536);
db.transaction(function(tx){
    var sql = "SELECT * FROM goals";
    tx.executeSql(sql, [], resultHandler, errorHandler);
});

فى المثال السابق قمت بإستخلاص جميع البيانات من الجدول goals و استقبلت الناتج داخل الوظيفه resultHandler و قمت بعمل alert للصف لكن يمكنك حقنه فى ال DOM و عمل pagination و عمل LIMIT داخل جمله ال SQL حتى لا تتأثر كفائه التطبيق .

إذا كانت الجمله السابقه INSERT يمكنك معرفه ال id الجديد للصف من خلال result.insertId و عدد الصفوف التى تأثرت من result.rowsModified من داخل resultHandler .

التعامل مع اخطاء تنفيذ ال SQL

يتم إستدعاء الوظيفه errorHandler عند حدوث خطأ فى تنفيذ جمله ال SQL مع تمرير عبارتين لها ، العباره الاولى هى كائن من نوع SQLTransaction ، و العباره التانيه كائن من نوع SQLError يحتوى على معلومات عن الخطأ الذى حدث ، الوظيفه errorHandler اذا قامت بإرجاع true سيتم الغاء جميع العمليات فى ال transaction الحالى ، و اذا قامت ب return false سيتم التغاضى عن الخطأ و لن يتم الغاء ال transaction ، الكائن SQLError يحتوى على خاصيتين ، الخاصيه الاولى message و هى رساله توضح الخطأ الذى حدث يمكنك استخدامها فى ال debugging ، اما الخاصيه التانيه هى code فهى رقم يدل على الخطأ الذى حدث ، انظر الجزء الخاص بأرقام الاخطاء .

function errorHandler(tx, error){
    alert(error.message); // unrecognized token: 3awzo
    alert(error.code); // 1
};
db.transaction(function(tx){
    var sql = "SELECT elly ana 3awzo yabni";
    tx.executeSql(sql, [], resultHandler, errorHandler);
});

أرقام الاخطاء و مدلولاتها

داخل الوظيفه errorHandler ناتج error.code رقم يوضح طبيعه الخطأ ، ال 0 يوضح ان الخطأ غير متعلق بقاعده البيانات ، و 1 يوضح ان الخطأ له علاقه بقاعده البيانات ، 2 يوضح ان الخطأ اصدار قاعده البيانات ليس اصدار القاعده التى طلبتها للمزيد انظر الجزء الخاص بإصدارات قاعده البيانات ، و 3 يوضح ان نتيجه جمله ال SQL كبيره جدا و فى هذه الحاله عليك إستخدام LIMIT و OFFSET حتى تحدد عد الصفوف الناتجه من جمله ال SQL ، و 4 توضح ان الحجم المتاح لقاعده البيانات قد تعدى و ان المستخدم رفض اعطاء المزيد من الحجم عند سؤال المتصفح له ، و 5 يدل على ان الخطأ من نوع lock contention error و عليك اعاده تنفيذ ال transaction ، و 6 يل على constraint error مثلا عند تكرار قيمه فى صفين لعمود معلم ك UNIQUE او عدم اعطاء قيمه لعمود NOT NULL .

التعامل مع اخطاء ال transaction

كما تمكننا من التعامل مع اخطاء تنفيذ جمله ال SQL ، يمكنك ايضا اتخاذ اجراءات عند وقوع خطأ فى تنفيذ ال transaction الذى قد يحتوى على تنفيذ عده جمل SQL ، الوظيفه transaction تقبل ثلاث عبارات ، فى الامثله السابقه كلها رأينا العباره الاولى فقط و هى عباره عن وظيفه يمرر لها الكائن SQLTransaction ، اما العباره الثانيه التى تمرر للوظيفه transaction هى وظيفه يتم استدعائها عند حدوث خطأ فى ال transaction و العباره الثالثه يتم استدعائها عند نجاح ال transaction كما يوضح المثال البسيط التالى :

function txError(error){
    alert(error.message);
    alert(error.code);
};
function txSuccess(){
    alert("transaction succeed");
};

db.transaction(function(tx){ 
    // execute some sql queries here
}, txError, txSuccess);

فى المثال السابق سيتم استدعاء txSuccess اذا نجح ال transaction بدوت اى اخطاء ، و سيتم استدعاء الوظيفه txError مع تمرير كائن SQLError لها ، يمكن استخلاص بيانات منها من خلال error.message او error.code للمزيد انظر أرقام الاخطاء و مدلولاتها .

التعامل مع اصدارات قاعده البيانات

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

var db = openDatabase("keepondev", "", "Keepondev database", 65536);

يمكنك معرفه اصدار قاعده البيانات بعد ذلك من خلال الخاصيه verison كما يلى

alert(db.version); // 1.0

الكود السابق نتج عنه 1.0 لأنه لا يوجد إصدارات من قاعده بيانات بإسم keepondev إلا الاصدار 1.0 الذى قمنا بإنشاءه و اضافه فيه بيانات من قبل .

يمكنك ترقيه قاعده البيانات إلى اصدار احدث مع الحفاظ على البيانات بداخها كما هى او تغيرها من خلال الوظيفه changeVersion التى تقبل اربع عبارات ، العباره الاولى هى اصدار قاعده البيانات التى تريد تغيرها ، العباره التانيه هى الاصدار الجديد ، العباره التالته هى الوظيفه التى تقوم بتغير الجداول او تغير ال schema و تقبل كائن من نوع SQLTransaction ، العباره الرابعه هى الوظيفه التى يتم استدعائها اذا حدث خطأ اثناء الترقيه مع تمرير الكائن SQLError لها ، اما العباره الخامسه و الاخيره هى الوظيفه التى يتم استدعائها اذا نجحت عمليه الترقيه ، كما يوضح المثال البسيط التالى :

function upgrade(tx){
    var sql = "ALTER TABLE goals RENAME TO targets";
    tx.executeSql(sql, [], resultHandler, errorHandler);
};
function upgradeError(error){
    alert("upgrade error :" + error.message);
};
function upgradeSuccess(){
    alert("upgrade completed");
}
db.changeVersion("1.0", "2.0", upgrade, upgradeError, upgradeSuccess);

فى المثال السابق تم ترقيه قاعده البيانات إلى الاصدار 2.0 مع تغيير إسم الجدول goals إلى targets مع الاحتفاظ بالبيانات كما هى كما توضح الصوره التاليه :

keepondev database version 2.0 and goals table converted to targets

الدعم من المتصفحات

وقت كتابه التدوينه ال local javascript database api مدعم فى safari 3.1+ و iphone os 2.0+ و المتصفحات الاخرى قريبا ان شاء الله .

للمزيد

ADC > using JavaScript Databases

محاضره The JSON saga من مكتشف ال JSON

13/08/2009 بواسطة mostafa farghaly

السلام عليكم و رحمه الله تعالى و بركاته

The JSON Saga video lecture by Douglas Crockford at yahoo

أعطى Douglas Crockford يوم 27/7 محاضره بعنوان The JSON saga فى اجتماع مجموعه BayJax و تم رفعها اليوم ، تكلم Douglas عن اكتشاف JSON و الحاجه اليها فى الوقت الحاضر و إستخداماتها و معايرتها و تقبلها ممن اعتادوا على XML و مستقبل JSON ، هذا الرجل انا انتظر محاضراته بفارغ الصبر ، هناك محاضرات كثيره قبل و بعد هذه المحاضره فى YUI theater و YDN theater اللتان وضعت لهما رابط فى العمود الجانبى للمدونه لكن هذه المحاضره لها مذاق خاص ، يمكنك تحميل الفيديو من هنا ، او مشاهده المحاضره اونلاين من هنا و تحميل الشرائح من هنا .

ثلاث محاضرات جديده من مؤتمر JSConf2009

11/08/2009 بواسطة mostafa farghaly

السلام عليكم و رحمه الله تعالى و بركاته

رفع منظموا مؤتمر JavaScript conference ثلاث محاضرات جديده

sproutCore at jsconf2009

المحاضره الاولى بعنوان Introduction to SproutCore اعطاها Mike Subelsky يمكنك مشاهدتها من هنا ، وصف المحاضره :

Apple made a huge splash with their rich MobileMe release which provides a fluid and feature-rich interface through the web browser. Ignite Baltimore Superstar, Mike Subelsky, shows you the inner workings of SproutCore, the JavaScript library that is used to create MobileMe. Mike has used SproutCore as part of the company he co-founded, OtherInbox.com. Mike presents this rich interaction environment with passion, depth, and deep nerd tech you have come to expect from JSConf presenters and he does it all with class and style

stoyan stefanov high performance web apps at jsconf 2009

المحاضره الثانيه بعنوان High performance kick ass web apps اعطاها Stoyan stefanoc يمكنك مشاهدتها من هنا ، وصف المحاضره :

Got a slow web application? Dr. Stefanov is writing a prescription for you on how to put your application on a web diet using a wide array of techniques, tricks, and magic. Stoyan takes a deep dive into web technology and how to optimize it at levels that rarely get touched upon, even at tech conferences. His experience in pipelining, cacheing, image inlining, and smushing at Yahoo! Developer Network is shared with you to take advantage of every possible performance improvement ever known. He demonstrates how to use smush.it, minifiers, and other ninja techniques to make the web faster than ever before. This is a must see for any and every web developer

couchdb at javascript conference

المحاضره الثالثه بعنوان CouchDB to the edge اعطاها Chris Anderson و Jan Lehnardt يمكنك مشاهدتها من هنا ، وصف المحاضره :

Using CouchDB to create “edgy” web applications that are stored in the database. CouchApps allows you to store not only data in a database like CouchDB, but also full applications, which lends to some rather interesting use cases. Not only do applications then scale up and out, but their ability to revision control themselves comes for free. The CouchApps are pure JavaScript applications that sit on top of the power of CouchDB, and then allow the applications and data to become instantly portable and shareable through replication. This tag team presentation will give you some powerful insight into the concepts of CouchDB and CouchApps

خارج النص : طلع عين امى على ماكتبت و رفعت صور البوست ده ، النت كل شويه يقطع و السرعه 0.1 كيلو بايت فى الثانيه خخخخخخخخخخ

المحاضره السادسه من مؤتمر JSConf2009

26/07/2009 بواسطة mostafa farghaly

السلام عليكم و رحمه الله تعالى و بركاته

James Duncan - the smart platform a JavaScript

وضع منظموا مؤتمر JavaScript conference 2009 أمس المحاضره السادسه يمكنك مشاهدتها من هنا ، اعطى المحاضره James Duncan تناول خلالها مشروعه Smart JavaScript platform لبرمجه السيرفر بالجافاسكربت الذى اشترته شركه Joyent يمكنك معرفه المزيد عن ال Smart platform من هنا ، اتمنى لكم و لنفسى مشاهده ممتعه :) .