أهلا بك فى عالم البرمجة بلغة رينج Welcome to Ring programming

مرحبا بكم جميعا !

سنتعلم معا من خلال هذه المدونة العمل على لغة البرمجة رينج Ring

ringlogo

لغة الرينج هى عبارة عن لغة برمجة احترافية جديدة صدر الاصدار الاول منها فى 25 يناير 2016 وهى تعنى (الخاتم) وقد تم تطويرها من قبل المهندس محمود سمير فايد بداية من سبتمبر 2013 وهى لغة برمجة تشبه لغات مثل بايثون Python وروبى Ruby من حيث كونها ديناميكية Dynamic وتدعم عدة انماط للبرمجة إلا أنها تتميز عنهم بالكثير من المزايا فيما يخص ال Declarative Programming وال Natural Programming وهى انماط برمجة تركز على البساطة ووصف مايريده المبرمج مباشرة.

اللغة يمكنك استخدامها لعمل تطبيقات متنوعة كالتالى :

  • تطبيقات تستخدم الواجهة الخطية Console Application
  • تطبيقات تستخدم الواجهة الرسومية GUI Application
  • تطبيقات ويب Web Application
  • تطبيقات موبايل Mobile Application
  • الألعاب  Games

فى البداية عليك بتحميل اخر اصدارات اللغة من الموقع التالى : http://ring-lang.net

بعد التحميل وفك الضغط وليكن فى المسار : c:\ring على سبيل المثال

قم بتشغيل ملف التنفيذ

startring.png

وفيما يلى صورة لمحرر الكود (التعليمات البرمجية) Code Editor الخاص باللغة

وهو محرر تم كتابته بلغة ال Ring ويستخدم المكتبة Qt من اجل الواجهات الرسومية GUI

niceshot

تنقسم نافذة المحرر الى عدة اجزاء وهى:

  • مكان لكتابة الكود Source Code
  • متصفح بسيط Web Browser يستخدم فى البداية لعرض التوثيق الخاص باللغة Ring Documentation
  • مستعرض ملفات المشروع Project Files يستخدم لفتح اى ملف بشكل سريع
  • شرط القوائم Menu Bar وهى File و Edit و View و Program و Browser و Help
  • شريط الادوات للتعامل السريع مع الملفات وتشغيل البرامج Tool Bar
  • شريط الحالة لعرض رقم السطر وعدد الاسطر فى الملف المفتوح Status Bar

والان قد وصلنا لنهاية هذه المقالة وهى مجرد بداية بسيطة تعرفنا من خلالها على

  • ماهى لغة الرينج
  • تحميل الإصدار الأخير
  • تشغيل بيئة العمل

وإلى اللقاء …

للاطلاع علي المقالات الاخري المتعلقة باللغة من هنا

كيف تستخدم ال GITHUB في المشاريع

 

Advertisements

Generating Web Pages using Functions

أهلا بكم جميعا

تحدثنا في اخر مقالة عن عمل صفحة الويب باستخدام ال Objects.واليوم نستخدم  Hash Function لكل عنصر في صفحة الويب كما سنري في هذه المقالة،و نوضح أمثلة لصفحات ويب والتحكم فيها  بلغة الرينج.

ونقوم بشرح الخطوات بداية من التعامل مع قواعد البيانات  SQL الي التعامل مع صفحات ال Front End  وهي صفحة ال User interface  او الواجهة الامامية للمستخدم ثم نعرض صفحات ال Back End  وهي صفحات ال Responses  للتعامل والتحكم في البيانات المدخلة من المستخدمين في الصفحات الامامية.

وسوف نستخدم ال MYSQL وبالتالي يجب تنزيلها وعمل Configuration لها كما هو موضح هنا

اما بالنسبة للسيرفر فيوجد apache جاهز داخل اللغة.

ولنبدأ باسم الله

عند انشاء صفحة ويب بال Hash Function تكون بداية ونهاية أي style ب start,end مع استخدام دوال ال Hash لادخال ال attributes الخاصة بال styles.

مثال:

هذا هو ال style بال HTML:

4.PNG

  • سوف نستبدل أي تاج <>بstart,end  ونضع ال attributes  داخل دالة ال hash، وكما قلنا أن أي نص يأخذ ال text  parameter.

هذا هو ال style بلغة الرينج:

7.PNG

  • ويكون دوال ال Hash  داخل object ال {} New Page

8.PNG

وهذا شكل الخرج علي المتصفح:

9.PNG

10.PNG

الكود

11.PNG

وهذا مثال اخر علي ال Gradient – التدرج في الالوان-  صفحة ويب بال Gradient ك background:

1.PNG

2.jpg

الكود

وبهذا نكون عرفنا كيفية عمل صفحة ويب عن طريق hash functions.

أولا قواعد البيانات:

نقوم بعمل قاعدة بيانات ولك حرية الاختيار في البرنامج الذي تختاره لعمل ذلك، طالما أنك وصلت الي لغة البرمجة المسؤلة عن التحكم في صفحات الويب فمن المفترض أن يكون لك القدرة علي التعامل مع قواعد البيانات وكذلك الصفحات الامامية للويب.

ونقوم بالعمل علي برنامج MYSQL Workbench

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

كما أن هناك قاعدة بيانات جاهزة للمهندس محمود فايد – مبتكر اللغة- خاصة ببيانات العملاء وتسجيل دخولهم ،… كما في الامثلة الموضحة في هذا الموقع نقوم بفتح قاعدة البيانات كالتالي:

نقوم نفتح ال Workbench ثم نتبع الخطوات التالية كما في الصور الموضحة…

1.png

نقوم بعمل الاتصال بالسيرفر…

2.png نقوم بادخال ال username & password

3.png

4.png

نقوم بفتح قاعدة البيانات الجاهزة- Script.

1.png

2.jpg

3.png

نقوم بعمل Run    للتأكد من صحة ال Script

4.PNG

3.jpg

4.jpg

تستطيع فتح ال shell الخاص ب mysql   من   Start   وتطلع علي قواعد البيانات التي لديك كما يمكن أن تنشأ قاعدة بيانات لتوريد البيانات اليها.

أولا يجب عليك انشاء قاعدة بيانات بأي اسم.

;create database if not exists mahdb

ثانيا نقوم باستخدام هذه القاعدة في ال Script لتوريد البيانات اليها.

;use mahdb

2.jpg ثم  نقوم بعمل Save ثم Run والتاكد من صحة ال Script.

3.jpg

نقوم باختبار البيانات داخل قاعدة البيانات الجديدة mahdb.

4.PNG

ومن ثم نكون جاهزين للتحكم في صفحة الويب الخاصة بتسجيل بيانات العملاء من خلال القاعدة mahdb.

ولكن قبل ذلك ينبغي معرفة كيفية تقسيم المشروع قبل البدء فيه والتعرف علي MVC من هنا

وأن تطلع علي مكتبة ال datalib.ring والتي سوف نقوم بعمل صفحات الويب عن طريقها ك framework من هنا 

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

  مثال لقاعدة بيانات تحتوي علي سورة الفاتحة بالترميز العربي من داخل قاعدة البيانات:

نقوم بعمل قاعدة بيانات جديدة كالتالي ثم نستخدمها في ال SQL

1.png

سوف استخدم ال workbench  لعمل قاعدة البيانات :

من file نختار New Query ثم نقوم بكتابة ال Sql  بعد تحديد قاعدة بيانات نعمل عليها ونقوم بالحفظ وليكن باسم Quran  ثم نقوم بعمل Run

3.png

2.jpg

4.png

في هذا المثال سوف أقوم بادخال البيانات باللغة العربية بترميز UTF8 في قاعدة البيانات ولكي تستجيب صفحة الويب لهذا الترميز فينبغي  علي ال Server  وقاعدة البيانات أن يتعرفوا علي هذا الترميز فنقوم بكتابة ال query الخاصة بالترميز بعد عمل اتصال مباشرة في مكتبة ال datalib وكذلك في ال  database

5.png

وسوف اغير عدد ال records   في الصفحة الواحدة  في مكتبة ال  datalib  ولك الحرية في اختيار عدد السجلات:

6.png

أو من الممكن عمل inheritance لل class المراد تغيير ال attributes بداخله في الملف الخاص بالمشروع ثم تغيير هذا ال attribute.

وكذلك سوف أقوم بتغيير اسم قاعدة البيانات والباسورد:

7.png

ثم نقوم بعمل ملف المشروع نستدعي فيه مكتبة ال datalib  لاظهار الصفحة الخاصة بنا:

1.jpg

2.jpg

هو نفس مثال ex24.ring  لل salary  مع تغيير المتغيرات التي لدينا

ويجب ملاحظة أن يتم كتابة اسم ال cLass قبل MODEL & CONTROLLER & View  مباشرة وهو اسم الجدول داخل قاعدة البيانات وهو ما يتم تغييره في الملف بالضغط علي ctrl+f وعمل replaceAll  ل salary الي Quran ، وكذلك يجب التأكد من اسم ال Website في ملف المشروع أن يكون بنفس اسم المشروع.

وهذا الشكل الناتج في صفحة الويب باللغة العربية:

2.png

ومن الممكن اظهار الصفحة بأي لغة

يكون ذلك عن طريق تغيير اسماء ال Attributes  في ال Class الخاص باللغة كالتالي:

3.jpg

pic3.PNG


وفي هذا المثال سأقوم بعمل import  لقاعدة بيانات للقران الكريم كاملا.

من الممكن تحميل المشروع كاملا بال Scripts الخاصة بقواعد البيانات من هنا 

نقوم بفتح  ال Script  الموجودة باسم allquran.sql ،  ثم نقوم بالحفظ وعمل Run ليتم توريد البيانات الي قاعدة البيانات التي أنشأناها باسم allquran.

ونقوم باضافة السطر الخاص بالترميز في قاعدة البيانات المستخدمة اذا لم يتم كتابته في ال Script .

;SET NAMES utf8

وسوف أقوم باضافة عمود في ال grid في صفحة الويب ويكون التعديل كالتالي:

3.jpg

5.jpg

وهذه هي الصفحة الناتجة

pic1.PNG

2.png

يمكنك تحميل المشروع كاملا ومعدلا بكل ما تم شرحة من هذا اللينك علي ال Github.

فقط عليك فتح ال Scripts الموجودة في ملف ال database بال Workbench كما وضحنا ونقوم بعمل Run لتوريد البيانات لقاعدة البيانات لديك ثم تقوم بفتح مسار المشروع الذي تم تحميلة كما في الصورة التوضيحية وتقوم بتغيير الباسورد في ملف ال datalib2,datalib.

2.jpg

وشكرا لكم والي اللقاء

للاطلاع علي المقالات الاخري من هنا

تستطيع الاطلاع علي المشاريع مفتوحة المصدر من الموقع  GitHub
الموقع الرسمي للغة  http://ring-lang.net

كيف تستخدم ال Github في المشاريع

 

Generating Web Pages using Objects

أهلا ومرحبا بكم جميعا

نقدم لكم في هذه المقالة form بسيط بلغة رينج حيث أنها تدخل في التطبيقات المختلفة للويب ونوضح اليوم  عمل تطبيق صفحة ويب لادخال بيانات المستخدمين، ومن ثم صفحة أخري نعرض فيها ال response أو البيانات التي تم ادخالها بكلا طريقتي ال HTTP Get &HTTP Post

ونحتاج الي بعض الاعدادت قبل البدء في الشرح:

1-هنحتاج الي server يدعم CGI وليكن Apache HTTP Server

ومن هنا شرح بالصور طريقة تنزيل ال Apache والاعدادات الاخري قبل البدء.

ملحوظة:

في الاصدار الجديد من لغة الرينج Ring 1.6 تم تركيب Apache  في اللغة دون الحاجة الي تلك الخطوات فقط عليك بالضغط علي زر واحد وهي علامة الويب في أعلي المحرر كما في الشكل التالي:

5.jpg

بعد تحميل الاصدار الجديد من صفحة اللغة http://ring-lang.net   ثم الضغط علي زر الويب تعرض صفحة الويب تلقائيا.

ملحوظة أخري:

  • مجرد أن يتم الضغظ علي زر الويب يتم فتح ال appache ويتم فتح صفحة الويب من أي مكان علي الجهاز لديك ولكن بعد فتح أول صفحة ويب وفتح ال appache  يتم تخزين ذلك المسار ولا يعرض بعدها أي صفحة ويب خارج ال directory الذي يحتوي علي صفحة الويب المعروضة حتي يتم عمل restart لل appache مرة أخري ومحرر اللغة ثم تستطيع تغيير مسار ال directory بأول صفحة يتم فتحها.
  •  يتم عمل  restart لل appache  عن طريق عمل restart لجهاز الكمبيوتر أو من الممكن فتح ال task manager وغلق اي appache   مفتوح – عن طريق عمل كليك يمين من ال task bar أو alt+ctrl+delete ثم نختار task manager ثم نعمل end task لل appache.

2.jpg

2-يجب تعريف السطر التالي في أول سطر في البرنامج قبل البدء في كتابة أي كود:

c:\ring\bin\ring.exe -cgi!#

ويختلف مساره من جهاز لاخر حسب مسار تواجد ملف ال execution

فهذا مسار تواجده علي جهازي c:\ring\bin\ring.exe ثم نضع !# قبل المسار و cgi- بعد المسار وينبغي أن يتم كتابة هذا السطر في أول سطر في البرنامج

3-يجب استدعاء مكتبة ال Web و عمل import.

"Load "weblib.ring
Import System.Web

4-واخيرا يجب معرفة أساسيات ال web design حتي يتسني لنا معرفة كل جزء بسهولة وطريقة الاستخدام.

من الممكن اختبار ال apache عند فتحه  أول مرة بفتح صفحات الويب في ال examples الجاهزة في المسار  ring\ringlibs\weblib\ringapp

ولنبدأ بسم الله:

Generating Pages using Objects

يوجد أكثر من طريقة في لغة الرينج  لبرمجة صفحات الويب، من الممكن استخدام ال Html  مباشرة ،ومن الممكن استخدام ال Functions عن طريق دوال ال Hash، وأيضا استخدام templates ، وكذلك Objects. وكل نوع يختلف عن الاخر في السرعة

فأسرع طريقة هو كتابة كود ال HTML مباشرة ثم استخدام ال Functions ثم ال Templates ثم ال Objects

ونستخدم في هذه المقالة ال Objects  وكما قلنا أنها بطيئة الا أنها سهلة الاستخدام وتعطي style سهل جميل كما سنري في هذه المقالة حيث أننا  نستخدم nested structures  عن طريق الاقواس {}  لكل Object ثم ندخل بداخلها مجموعة ال attributes المستخدمه .وتستطيع أن تطلع علي ال attributes الموجودة في لغة الرينج باستخدام Class ال WebPageمن هنا

  • وسوف نبدأ من بداية شكل الكود بال HTML وادخالة في لغة رينج خطوة بخطوة.

شكل الكود في لغة ال HTML :

<"form name="reg" action="post>
</ "input type="text" name="username>     
<label>Name</label>     
</ "input type="email" name="email>     
<label>Email</label>     
</ "input type="tel" name="tel>     
<label>Telephone</label>     
</ "input type="password" name="password>     
<label>password</label>     
</ "input type="submit" name="submit" value="send>     
<label>Submit</label>     
</form>
  • أي نص يتم وضعة بالشكل التالي:  ( النص “)text
  • وأي تاج <>يكون عبارة عن object ويتم ادخال مجموعة ال attributes عن طريق الاقواس {}
  • ومجموعة ال objects تكون داخل ال ()WebPage

كما هو موضح في هذا الكود

ثم بعد ذلك نقوم بوضع ال styles لتظبيط شكل الصفحة:

ويكون ذلك عن طريق style=  style-name وممكن الدمج بين أكثر من style عن طريق +

ومن هنا تستطيع الاطلاع علي الاستايل الموجودة في لغة الرينج

وهذا شكل ال form بعد وضع النص في div خاص به  وكذلك مربعات النص في div اخر خاص به ليعرضهم علي هيئة blocks ووضعت ال styles الخاص بكل div.

كما هو موضح هنا في هذا الكود 

3.PNG

أما هنا فوضعت ال form علي هيئة جدول كل صف يحتوي علي النص ومربع ادخال النص

كما هو موضح في هذا الكود

2.PNG

Hypertext Transfer Protocol) HTTP):

يستخدم لعمل اتصال بين المستخدم user  والسيرفر server علي هيئة Request &Response،يقوم المستخدم بالاتصال بالسيرفر علي هيئة Request ثم يستجيب السيرفر لهذا الطلب علي هيئة Response.

والان سوف نعمل صفحة response الخاصة بالسيرفر نعرض فيها كل الداتا التي تم وضعها في مربعات الادخال عن طريق ال User.

ويوجد طريقتان لعمل ذلك:

1.   HTTP Get

  • في هذه الطريقة نضع “method=“get داخل تعريف ال form  كما   في هذا الكود
  • وكذلك “action=response.ring وهي الصفحة التي سوف ننشأها لنعرض فيها البيانات المدخلة.

وهذا الطريقة تعرض البيانات التي ادخلها المستخدم في أعلي المتصفح في صفحة ال response، حيث تحصل علي البيانات المدخلة من السيرفر علي هيئة Get request.

  • ولتوضيح ذلك  نقوم بعمل برنامج جديد باسم response.ring
  • ونقوم بنفس الخطوات التي ذكرناها سابقا في انشاء صفحة الويب
  • ثم نقوم بمعالجة القيمة المدخلة من المستخدم عن طريق  [”        “]aPageVars
{(["       "] p{ text ( aPageVars
  • ال aPageVars تمثل قيم المتغيرات التي أدخلها المستخدم في صفحة ال front end
  • و text حتي تقوم بعرض المتغيرات المدخلة
  • و تعمل علي عرض text  علي هيئة سطور
  • وبداخل ال ” “ نضع  قيمة المتغير الذي تم تعريفة داخل مربعات النص {}inputs ليتم التعرف علي البيانات بداخل كل مربع نصي.
  • وليكن المتغير هو ال name فنضع القيم الخاص بكل مربع كما في هذا الكود
  • ونضع ما نحب من باقي مكونات الصفحة وال styles الخاصة بها.

كما هو موضح في هذا الكود

وهذا الشكل الناتج و نلاحظ أن المدخلات موضحة في أعلي الصفحة.

4.png

2.   HTTP Post

هي نفس طريقة ال Get  ولكن الاختلاف فقط  في أننا  نضع “method=”post  داخل تعريف ال form كما في هذا الكود

وهذا الطريقة تخفي البيانات التي ادخلها المستخدم في أعلي المتصفح في صفحة ال response ، حيث يتم حفظ البيانات في ال Body وارسالها للسيرفر مغلقة .

وهذا الشكل الناتج و نلاحظ أن المدخلات لا تظهر في أعلي الصفحة.

3.png

ونكتفي بهذا والي اللقاء والسلام عليكم ورحمة الله وبركاته

للاطلاع علي المقالات الاخري من هنا

تستطيع الاطلاع علي المشاريع مفتوحة المصدر من الموقع  GitHub
الموقع الرسمي للغة  http://ring-lang.net

Stdlib Functions and Classes

بسم الله الرحمن الرحيم
لغة الرينج  هي لغة مجانية مفتوحة المصدر تسمح لك بالتعديل والاضافة وعمل المكتبات،ويوجد فيها مكتبة تسمي ب “stdlib.ring”
وهي المكتبة  القياسية للغة ، تحتوي علي الدوال التي تحدثنا عنها في المقالات الخاصة بأساسيات اللغة مع بعض الدوال الجديدة  وأيضا تحتوي علي   Classes كما سنري معا من خلال هذه المقالة.

وياستخدام تلك المكتبة ومعرفة وظيفة كل دالة وكل class سوف توفر علينا الوقت والجهد والسطور البرمجية باستدعاء الدوال وال Objects مباشرة فهي تعنمد في بنائها علي أساسيات اللغة.


1-Stdlib Functions

الجدول التالي يوضح الدوال الموجودة في المكتبة: 3.png

قبل استخدام أي من تلك الدوال يجب عليك استدعاء مكتبة ال stdlib.ring كالتالي:

"load "stdlib.ring

ثم بعد ذلك يمكنك استخدام اي من تلك الدوال مباشرة كما هو موضح في موقع اللغة

ولمعرفة المزيد عن كيفية عمل الدوال يمكنك الاطلاع علي مكتبة عمل الدوال مباشرة من هنا

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

ثم وضع الدوال الخاصة بذلك في تلك المكتبة ثم استدعاء المكتبة في ملفات أخري واستدعاء اسم الدالة.

كما تعرفنا في مقالة ال Program Structure

أو من الممكن وضعها في مكتبة ال “stdcore.lib”  لتكون ضمن مكتبة ال “StdLib.ring”

مثال توضيحي باستخدام المكتبة بعد وضع دوال جديدة بداخلها.

"load"stdlib.ring
see Startswith2("myfile.txt","hello")+nl
see IsVowel2("Ring")+nl
see IsVowel2("unit")+nl
see capitalAllFirst("hello in ring lan., it is a powerful ")+nl

مثال1:

"load "stdlib.ring
#في هذه الدالة يطبع وينزل مباشرة بسطر جديد
("Puts("now we will print with new line by this func
("print("Hello,How are you?\nI'm fine!\t thanks\n
#في هذه الدالة عملنا شرط بأن يتم أخذ القيمةالمتغير الي بعد الهاش # و }
#وكذلك وعمل مسافات باستخدام t\ ونزول سطر جديد باستخدام n\
}for x=1 to 10
("print("#{x}\n
{

مثال2:

"Load "stdlib.ring
("puts("please put your name
#تستخدم لادخال الداتا من المستخدم عن طريق لوحة المفاتيح
()x=getstring
 ("{print("hello #{x

مثال3:

"Load "stdlib.ring
("puts("please put your name
#تستخدم لادخال الداتا عن طريق لوحة المفاتيح وتطبعها علي انها حرفية
()x=getstring
("print("hello #{x}\n
("puts("what is your age
#تستخدم لادخال الداتا عن طريق لوحة المفاتيح وتطبع الرقمي فقط
()y=getnumber
("{print("#{y

مثال4:

"Load "stdlib.ring
#لمعرفة مسار التطبيق المفتوح
see AppPath()+nl
#يحذف ملف ال exe ويطبع باقي المسار
see justfilePath("s:\newFolder\Test\rnote\x.exe")+nl
("see justfileName("s:\newFolder\Test\rnote\x.exe

مثال5:

"Load "stdlib.ring
aList = 1:10
#ينسخ قيمةالقائمة أو object مهما يحدث تغيير لا يؤثر علي قيمتة الاصلية في كل مرة
(del(value(aList),1
see alist[5]+5

مثال6:

"Load "stdlib.ring
#تستخدم لتكرار عدد معين من نوع الدوال ال Anonymous 
({{Times ( 2 , func { for x=1 to 10 {see x+nl

مثال7:

"Load "stdlib.ring
#في حالة وجود قائمة ودالة حيث ينفذ الدالة علي كل عنصر في القائمة
({See Map( [2,4,5], func x { return x*x

مثال8:

"Load "stdlib.ring
#ينزل سطر جديد بعد كل علامة (تم تحديدها بين "" )
#تم تحديد مسافة خالية للنزول بعد كل كلمة بعدها مسافة
See Split("one two three four five"," ")+nl
#تم وضع علامة الفاصلة للنزول بعد كل كلمة يوجد بعدها ,
See Split("one,two ,three ,four ,five",",")+nl

مثال9:

"Load "stdlib.ring
#تم تحديد "!" و "," و" " للنزول سطر جديد
 (" , ! " ,"See SplitMany("Hello in!Ring Language,it is nice ", "!, " )
"Load "stdlib.ring
/*
if n < 0 return -1 ok
if n = 0 return 0 ok
if n > 0 return 1 ok
*/
see "sign of 12 is = " + sign(12) + nl

مثال11:

"Load "stdlib.ring
#طباعة قيم القائمة داخل ملف
("list2file(1:100,"myfile.txt

مثال12:

"Load "stdlib.ring
#يحولStrings داخل الملف الي List 
("see file2list("myfile.txt

مثال13:

"Load "stdlib.ring
#بيختبر نفس حروف وقراءة الكلمة "بحيث من اليمين نفس اليسار"
("()Puts("Test Palindrome
cString = "AllA"
(see " "+Palindrome(cString

مثال14:

"Load "stdlib.ring
/*
Func MakeDir cDir
(system("mkdir " + cDir )

*/
("makedir("myfolder

مثال15:

"Load "stdlib.ring
 #"^'+-/\*~=@,%|&?!'"
#لاختبار اذا كان من الحروف الخاصة^'+-/\*~=@,%|&?!'
See isSpecial("%") + nl
See isSpecial("@") + nl
#لاختبار اذا كان من الحروف المتحركة"aeiou"
See isVowel("c") + nl

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


2-Stdlib Classes

عبارة عن Classes  بداخل عدة مكتبات ثم تم تجميعهم بداخل مكتبة StdLib وهما مجموعة ال Classes  الموضجين في الجدول التالي:

1.png

وتعرفنا في مقالات احري علي معظم ال Methods الخاصة بتلك  ال Classes االموضحين في الجدول، و نتعرف اليوم علي باقي ال Classes الاخري، وما يهمنا هو معرفة اسم ال Class المستخدم- لعمل Object من هذا ال Class عند استدعاء المكتبة واستخدام ال Methods الخاصة بهم وايضا ينبغي معرفة وظيفة وكيفية استخدام ال Methods.

1-ينبغي استدعاء مكتبة “Stdlib.ring”

2-عمل Object من ال Class المستخدم “الذي يحتوي علي ال Method المراد استخدامها”

لتوضيح عمل ال Methods بالامثلة  يمكنك الاطلاع عليها من الموقع الرسمي للغة من هنا

1-الMethods  الموجودة داخل ال Class ال StdBase

2.PNG

مثال توضيحي:

"Load "stdlib.ring
obase=new Stdbase
}obase
("Init("ring programming language
printLn() see size()+nl
()set ("ok,thanks") printLn
()see size
{

2-الMethods  الموجودة داخل ال Class ال String

2.PNG

مثال توضيحي:

"Load "stdlib.ring
oStr=new String
}oStr
("Init("ring programming language
see copy(2) see nl
()alist= tolist
see type(alist)+nl
()see split
{

3-الMethods  الموجودة داخل ال Class ال List

Capture.PNG

مثال توضيحي:

oList=new List
(["oList.init(["Hello
()olist.println
("olist.add("A") olist.add("B") olist.add("C") olist.add("D") olist.add("E")
()olist.print
()see olist.first#
((olist.Insert(1,olist.item(3
()olist.print

4-الMethods  الموجودة داخل ال Class الخاص بال Stack

3.PNG

ملحوظة: في ال Stack  يكون الاضافة بمبدأ “last in first” أي اخر واحد يتم اضافته يكون هو أول index

وعند عمل pop أو حذف يكون من اخر قيمة التي في أعلي ال Stack  أو اخر قيمة تم اضافتها.

5-الMethods  الموجودة داخل ال Class الخاص بال Queue

11.PNG

ملحوظة: في ال Queue  يكون الاضافة بمبدأ “first in first out” أي عند الاضافة يكون كالتالي: الاول يأخذ أول index والاخر يأخذ أخر ترتيب اخر index

وعند عمل Remove يكون الحذف بالترتيب أيضا أي يكون الحذف من أول index  أو أول عنصر تم اضافته.

مثال توضيحي:

"Load "stdlib.ring
ostk=new Stack
}oStk
()push("A") push("B") push("C") println
()pop() print
{
see copy("=",50) +nl
oq=new Queue
}oq
()add("A") add("B") add("C") println
()remove() print
{

6-الMethods  الموجودة داخل ال Class الخاص بال Hash Table

4.PNG

ال Hash Table عبارة عن جدول تجزئة يتم تطبيقه باستخدام المصفوفه Array  لتخزين البيانات بحيث يمكن الوصول السريع لأي بيانات نريدها مهما كان حجم تلك البيانات ، بالاضافه الى ادخال البيانات والاسترجاع والحذف بسرعه كبيره جدا. يحتوي علي مؤشر أو مفتاح للعنصر ويكون دالة في المحتوي الداخلي وقد يكون هذا ال index قيمة رقمية أو حرفية.

يفضل أن يستخدم في حال كانت البيانات التي تتعامل معها ثابته ولا تتغير ، وتريد الوصول لها في كل مره بشكل سريع ، مثلا البرامج التي تستخدم القاموس Dictionary يمكن أن تقرأ هذه القاموس وتضعه في بنيه Hash Table في الذاكره وقت تشغيل البرنامج.

مثال توضيحي:

5.jpg

الكود المرفق في الصورة

7-الMethods  الموجودة داخل ال Class الخاص بال Tree

1.PNG

ال Tree: هي طريقة لتمثيل البيانات علي هيئة شجرة حيث يتم التمثيل ب nodes أو عقد قد تحتوي علي جذر أو أكثر [children] ويوجدParentلكل مجموعة من ال Children.

وال node الاول الذي يندرج تحته ال Childs ولا يكون فوقه node يكون هو ال root.

اذا هي طريقة سريعة لتمثيل وعرض البيانات واسترجاعها والتعديل عليها بكل سهولةحيث يتم تمثيل البيانات علي هيثة tree تحتوي علي parents و Children.

استخدمنا هنا اثنين من ال attributes:

1-Data: وهي تمثل قيمة ال Nodes

2- Children:وهي عبارة عن قائمة تحتوي علي مجموعة ال Children

ملحوظة:

يتم عرض شجرة البيانات بترتيب حيث القيمة الاصغر تكون ناحية اليسار والقيمة الاكبر تكون ناحية اليمين.

ولهذا عند اضافة قيمة Child جديدة يكون بناء علي هذا الترتيب ان يكون قيم ال childs الي فوقه والي علي يمينه أكبر منه والي تحته والي علي يساره يكون أقل منه  كما سنوضح في الامثلة.

شكل توضيحي:

33.PNG

مثال توضيحي:

5.jpg

الكود المرفق في الصورة


وتعرفنا في مقالات سابقة عن الدوال الخاصة بقواعد البيانات المختلفة من ODBC,MYSQL&SQLite

ونتعرف اليوم عن ال Methods الخاصة بهم باستخدام ال Classes

1- ODBC Class

4.png

2-MySQL CLass

22.png

3-SQLite CLass

11.png

يمكنك الاطلاع علي بعض الامثلة علي استخدام قواعد البيانات باستخدام ال Classes من هنا

للاطلاع علي المقالات الاخري من هنا

تستطيع الاطلاع علي المشاريع مفتوحة المصدر من الموقع  GitHub
الموقع الرسمي للغة  http://ring-lang.net

وشكرا لكم والي اللقاء

Security and Internet Functions

تحياتي للجميع

تعرفنا علي الانواع المختلفة من قواعد البيانات في لغة البرمجة رينج Ring ونظرا لضرورة حماية تلك القواعد والبيانات المختلفة ضد الهاكرز Hackers  فسوف نتعرف سويا من خلال مقالة اليوم علي أنواع مختلفة سواء  Algorithms أو دوال تستخدم في تطبيق الحماية وذلك باستخدام  مكتبة جاهزة خاصة بال SSL في  لغة البرمجة رينج.

Ring programming language for Hashing, Encryption & Decryption

يستخدم ال SSL في لغة Ring في التشفير وكذلك فك التشفير وأيضا في ايجاد قيم ال Digests أو الرسالة الناتجة من دوال ال Hash والتي تستخدم في الحماية أو عمل خصوصية مثل خصوصية للدخول  Login أو تصريح الدخول لل  Roots ولحماية الملفات.

ملحوظة مهمة قبل البدء في موضوع ال Hashing & Encryptions

التشفير يعتبر وسيلة اخفاء المعلومات حتى لا ترى البيانات بشكل صحيح، وهو يحتاج مفتاح key أو باسورد معين أو تحتاج لطريقة معينة سرية  حتى تسترجع البيانات. بينما ال Hashing هو وسيلة لحفظ البيانات بشكل غير قابل للاسترجاع ابداً ، فالتشفير تستطيع استرجاع البيانات باستخدام الطريقة المقابلة لفك التشفير ، بينما الHashing لا يمكنك على الاطلاق.

فبالنسبة لاستخدامات ال Hashing :

  • اختبار تكامل البيانات وهذا يسمى Integrity:

مثال:

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

مثال علي ذلك:

عند فتح موقع لتحميل سيرفر ما مثل هذا الموقع :

https://www.openoffice.org/download/index.html

تلاحظ اسفل التحميل التالي: Signatures and hashes: KEYS , ASC , MD5 , SHA256

نقوم بتحميل أي نوع من أنواع ال SSL  المختلفة ونقوم بفتحها عن طريق ال notepad ونقوم بمقارنة ال Strings المحملة مع الناتجة من دوال ال Hash من نفس النوع المختار من ال SSL للملف الذي قمنا بتحميلة وعند التطابق يتنبين لنا صحة الملف كما سنتعرف معا في مقالة اليوم.

ملحوظة:هناك بعض المواقع المسؤلة عن رفع الملفات واستخراج ال hashes لها وعمل مقارنة بال hashes الموجودة مع الملف قبل تنزيلة ومن أمثلة تلك المواقع الموقع التالي:http://onlinemd5.com

  • تخزين البيانات بشكل غير قابل للاسترجاع

مثال:

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

ويمكن عن طريق مكتبة ال SSL في لغة الرينج تشفير البيانات أو كلمة السر الخاصة بالدخول أو تطبيق الخصوصية علي ملفات.

 

 

كيفية تطبيق دوال ال SSL:

1-أولا يجب عليك استدعاء مكتبة ال ssl وهي “openssllib.ring

2-ثم بعد ذلك نبدأ استخدام دوال ال SSL التالية:

 

  • MD5
  • SHA1
  • SHA256
  • SHA512
  • SHA384
  • SHA224
  • Encrypt
  • Decrypt
  • Randbytes

 

ويمكنك الاطلاع علي المفاهيم الاساسية  لتلك الدوال من هنا

كما يمكنك الاطلاع علي أمثلة توضيحية لاستخدام الدوال من الموقع الرسمي للغة

MD5() Function:

MD5(cString) ---> String contains the MD5 hash of the string cString

SHA1() Function:

SHA1(cString) ---> String contains the SHA1 hash of the string cString

SHA256() Function:

SHA256(cString) ---> String contains the SHA256 hash of the string cString

SHA512() Function:

SHA512(cString) ---> String contains the SHA512 hash of the string cString

SHA384() Function:

SHA384(cString) ---> String contains the SHA384 hash of the string cString

SHA224() Function:

SHA224(cString) ---> String contains the SHA224 hash of the string cString

Encrypt() Function:

يتم التشفير باستخدام ال Blowfish algorithm

Encrypt(cString, cKey, cIV) ---> Encrypted string

Decrypt() Function:

Decrypt(cCipher, cKey, cIV) ---> Decrypted string

Randbytes() Function:

(Randbytes(nSize) ---> String contains random bytes (bytes count = nSize

مثال توضيحي باستخدام مكتبة “OpenSSLLib”

2.jpg

الكود

ملحوظة:

تم تعريف تلك الدوال أيضا في مكتبة “stdlib.ring” عن طريق Class باسم security فمن الممكن عمل Object من Class    ال security  ثم استخدام الدوال داخل ال Object باستخدام مكتبة ال  “stdlib.ring”.

نفس المثال السابق باستخدام مكتبة “stdlib.ring”

3.PNG

الكود

 Decrypt & Encrypt

تعطي security أعلي من دوال ال hash فمثلا عند تخزين الباسورد في قاعدة البيانات يفضل تخزينة بال encrypt & decrypt & Blowfish.

مثال توضيحي:

6.jpg

 

كود1

كود2

وهناك دوال اخري تستخدم مع الانترنت وتحتاج لاستدعاء مكتبة أخري وهي: “internetlib.ring” 

"load "internetlib.ring

ثم نستخدم دوال الانترنت التالية:

  • Download
  • SendEmail

download() Function

عند عمل Download نكون متصلين بالانترنت وعن طريقها يمكن قراءة أي موقع وعمل أي processing.

Download(cURL) ---> String contains the server response

SendEmail() Function

(SendEmail(cSMTPServer,cEmail,cPassword,cSender,cReceiver,cCC,cTitle,cContent

مثال توضيحي:

11.PNG

الكود

 

وأيضايمكن استدعاء مكتبة “stdlib.ring”  واستخدام تلك الدوال داخل Object من Class باسم “internet”. كما في هذا المثال:

33.PNG

الكود

مثال اخر علي استخدام دوال ال ssl بمكتبة ال STDLIB:

capture3.jpg

للاطلاع علي المقالات الاخري من هنا

تستطيع الاطلاع علي المشاريع مفتوحة المصدر من الموقع  GitHub
الموقع الرسمي للغة  http://ring-lang.net

والي اللقاء

SQLite Functions

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

أما بعد فمقالة اليوم استكمالا لشرح قواعد البيانات في  لغة البرمجة رينج Ring.

تحدثنا في اخر مقالتين عن نوعين من قواعد البيانات وهما  ODBC ,MYSQL  والمسؤلين عن الاتصال بقواعد البيانات وتطبيق أوامر ال SQL المختلفة من اضافة،حذف،تعديل،بحث،…الخ.تعرفنا علي الدوال الخاصة بهم . ومقالة اليوم تتحدث عن دوال قاعدة البيانات SQLite.

كيفية التعامل مع قواعد البيانات SQLite في لغة Ring؟

سنقوم بنفس الخطوات التي طبقناها علي MYSQL  ، ODBC وهي كالتالي:

1.نقوم باستدعاء مكتبة SQLite وهي SQLitelib.ring 

"load "sqlitelib.ring

2.ثم نقوم بتهيئة الاتصال بقاعدة البيانات عن طريق الدالة ()SQLite_Init

sqlite_init() ---> SQLite Object

3.بعد ذلك  نفتح الاتصال عن طريق الدالة ()SQLite_Open ونقوم بتعريف ملف ال Database  الذي تم انشاؤه وفي حالة عدم وجوده يتم انشاؤه تلقائيا.

(sqlite_open(SQLite Object,cFileName

4.ثم نقوم بادارة قاعدة البيانات بأوامر ال SQL المختلفة عن طريق الدالة ()SQLite_Execute

(sqlite_exexute(SQLite Object,cSQLStatement

من خلال الموقع الرسمي ل SQLite  تستطيع الاطلاع علي أوامر ال SQL وال Syntax ل SQLite.

5. يمكن معرفة الخطأ في الاتصال أو جمل ال SQL عن طريق الدالة ()SQLite_errmsg

(sqlite_errmsg(SQLite Object

6.وفي النهاية نقوم باغلاق الاتصال بالقاعدة عن طريق الدالة ()SQLite_Close

(sqlite_close(SQLite Object

ملحوظة:

ال SQLite لا يحتاج الي Server وبالتالي يتم التنفيذ تلقائيا من خلال تضمين ملف ال SQLite في التطبيق.

مثال توضيحي:

1.jpg

الكود

وبذلك نكون قد انتهينا من شرح ال Database في لغة البرمجة رينج والي اللقاء.

للاطلاع علي المقالات الاخري من هنا

تستطيع الاطلاع علي المشاريع مفتوحة المصدر من الموقع  GitHub
الموقع الرسمي للغة  http://ring-lang.net

 

 

 

 

MySQL Functions

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

أما بعد فحديثنا اليوم هو استكمالا لشرح قواعد البيانات في لغة البرمجة رينج Ring ، تحدثنا في المقالة السابقة عن ال odbc واليوم نتحدث  علي دوال MySQL في لغة ال RING.

ويمكنك الاطلاع علي أهم أوامر ال SQL وكيفية تنفيذها علي MySQL من هنا

دوال ال MYSQL داخل لغة Ring

()MySQL_Info

لمعرفة ال version  لبرنامج ال MYSQL

()MySQL_Init

لعمل handle أو تهيئة الاتصال بالسيرفر MYSQL

(MySQL_Error(mysql handle

لمعرفة الخطأ الناتج من ال MYSQL أو جمل ال SQL

MySQL_Connect(MySQL Handle, cServer,  cUserName, cPassword

لعمل اتصال بقاعدة البيانات MYSQL

()MySQL_Close

لاغلاق الاتصال بقاعدة البيانات MYSQL

(MySQL_Query(MySQL Handle, cSQLQuery

لتنفيذ أوامر ال SQL

()MySQL_Insert_ID

للحصول علي عدد الصفوف التي تم عمل insert  لها

()MySQL_Result

للحصول علي ناتج ال query بدون اسماء الاعمدة   ويستخدم مع الامر select “يعرض القيمة فقط”

()MySQL_Next_Result

للانتقال الي الجملة التالية في ال query ” تستخدم في حالة وجود أكثر من جملة في ال query الواحدة”

()MySQL_Columns

للحصول علي اسماء الاعمدة ويستخدم مع الامر select

()MySQL_Result2

للحصول علي ناتج ال query مع اسماء الاعمدة  ويستخدم مع الامر select “يعرض أولا جميع أسماء الاعمدة ثم جميع القيم”

(MySQL_Escape_String(mysql handle,cString

تعمل علي معالجة البيانات ال Binary قبل حفظها في DB

(MySQL_AutoCommit(mysql handle,Status

تعمل علي  فتح واغلاق خاصية ال autocommit

(MySQL_Commit(mysql handle

لعمل Commit وحفظ التعديلات علي ال DB

(MySQL_Rollback(mysql handle

لعمل استعادة  Restoreلل DB

 

ينبغي قبل استخدام أي دالة تحميل مكتبة ال mysqllib.ring التي تحمل دوال ال MYSQL: 

"Load "mysqllib.ring

كيفية التعامل مع قواعد البيانات  MYSQLفي لغة Ring؟

1-نقوم باستدعاء مكتبة MYSQL  وهي mysqllib.ring.

2-نقوم بتهيئة الاتصال بقاعدة البيانات عن طريق الدالة ()MySQL_Init.

3-ثم نقوم بعمل الاتصال عن طريق الدالة MySQL_Connect ونقوم بتعريف التالي:

  • ال server أو ip الخاص بالاتصال بال Server.
  • واسم المستخدم الذي تم ادخاله عند تسطيب MYSQL.
  • والباسورد الذي تم ادخاله عند تسطيب MYSQL.
  • نقوم بانشاء قاعدة بيانات عن طريق الامر Create database db_name.
  • نقوم باستخدام قاعدة البيانات التي نعمل عليها عن طريق الامر use  db_name.

4–ثم نقوم بانشاء الجداول والتعامل معها بأوامر ال SQL المختلفة.

مثال توضيحي  علي كيفية الاتصال بقاعدة البيانات:

3.jpg

الكود

 

مثال توضيحي علي انشاء جدول داخل قاعدة البيانات:3.PNG

الكود

4.png

مثال أخر:

4.jpg

الكود

مثال توضيحي علي كيفية تنفيذ أكثر من جملة في نفس ال Query باستخدام الدالتين:

(mysql_result(con
(mysql_next_result(con

 

show result of sql_statements without columns#
"load "mysqllib.ring
()con= MySQL_Init
see mysql_connect(con,'localhost','root','root')+nl
('mysql_query(con,'use ringmysql
 ;  we separate the statements by #
('mysql_query(con,'select name from characters where id=3;'+'select name from characters where id=2
show the result of first statement#
(See mysql_result(con
move to the next statement#
(mysql_next_result(con
show the result of second statement#
(see mysql_result(con
see mysql_close(con)+nl

الكود

 مثال اخر:

show result of sql_statements with columns names in first, before values#
"load "mysqllib.ring
()con= MySQL_Init
mysql_connect(con,'localhost','root','root')+nl
('mysql_query(con,'use ringmysql
('mysql_query(con,'select * from plan
result2 show the columns elements  with values#
(see mysql_result2(con
(mysql_close(con

الكود

مثال توضيحي علي ال Commit , RollBack:

8.jpg

الكود

ملحوظة:

خاصية ال commit  تعمل عمل ال Save عند تنفيذ أوامر ال SQL بنجاح.

MySQL_Escape_String() Function

تعمل علي المعالجة أولا ثم التخزين في صورة حرفية. مثل معالجة الحروف الخاصة والصور.

MySQL_Escape_String(MySQL Handle, cString) ---> String after processing

Save Image inside the database

11.jpg

الكود

Restore Image From The Database

2.jpg

الكود

للاطلاع علي المقالات الاخري من هنا

تستطيع الاطلاع علي المشاريع مفتوحة المصدر من الموقع  GitHub
الموقع الرسمي للغة  http://ring-lang.net

وشكرا لكم والي اللقاء

 

ODBC Functions

مرحبا بكم جميعا

لغة رينج هي اللغة التي قام بابتكارها مبرمج عربي ووصلت الي الترتيب ال 45 بين لغات البرمجة الاخري، وقمنا بعمل مقالات في شرح اللغة و تحدثنا عن أساسيات لغة البرمجة رينج وسوف ننطلق الي شرح قواعد البيانات في اللغة حيث لغة البرمجة Ring تدخل في برمجة قواعد البيانات ولا يخفي علينا اهمية قواعد البيانات ونظرا لان اللغة وصلت لدرجة عالية من المميزات فلا شك أنها تدخل في برمجة قواعد البيانات وبرمجة الالعاب وبرمجة تطبيقات الويب…الخ.

فلا يمكن الاستغناء عن قواعد البيانات حيث تدخل في المشاريع الكبيرة لتطبيقات الويب التي تحتفظ بالبيانات وتديرها بطريقة مستمرة مثل تطبيق ال Facebook,Twitter,LinkedIn,Youtube، وكذلك المشاريع الخاصة بحياتنا اليومية مثل مشروع ادارة مدرسة يدير جدول المدرسين والطلبة وحضورهم وعددهم،ومشروع الصيدلية لادارة الادوية، ومشروع الطائرات والتحكم في ساعات الهبوط والنزول،ومشروع ادارة المبيعات والتحكم في البضائع وحركات البيع والشراء،ومشروع البنك لحفظ بيانات الشخص ومستحقاته، ….الخ.

ونتحدث في مقالتنا اليوم عن مكتبة خاصة بقواعد البيانات في لغة البرمجة Ring وهي مكتبة دوال ال  ODBC ،وهي المسؤولة عن فتح ومعالجة قواعد البيانات المختلفة.

وفيما يلي دوال ال ODBCفي لغة Ring:

odbc_init() —> ODBC Handle

 لتهيئة الاتصال بقاعدة البيانات

odbc_drivers(ODBC Handle) —> Drivers

للحصول على ال drivers

odbc_datasources(ODBC Handle) —> Data sources

للحصول على ال drivers من  ال datasource

(odbc_close(ODBC Handle

لااغلاق ال resources بعد استدعاء الدوال

(odbc_connect(ODBC Handle, cConnectionString

لعمل اتصال بقاعدة البيانات

(odbc_disconnect(ODBC Handle

لقطع الاتصال بقاعدة البيانات

(odbc_execute(ODBC Handle, cSQLStatement

لتنفيذ جمل ال SQL على قاعدة البيانات

odbc_colcount(ODBCHandle)—>ColumnsCount

للحصول على عدد الاعمدة في ال query او جدول الاستعلام.

(odbc_fetch(ODBC Handle

للتطبيق على الصفوف في ال query

(odbc_getdata(ODBCHandle,nColumnNumber

للحصول على ال data في الاعمدة

(odbc_tables(ODBC Handle

للحصول على الجداول في قاعدة البيانات

(odbc_columns(ODBC Handle, cTableName

للحصول على أعمدة داخل جدول أو DB

(odbc_autocommit(ODBC Handle, lStatus 

لفتح أو اغلاق خاصية ال autocommit

(odbc_commit(ODBC Handle

لعمل Commit لل Updates في DB

(odbc_rollback(ODBC Handle

لعمل restore  لل Updatedفي DB

ملحوظة:

ال Transaction عبارة عن مجموعة من ال actions لمعالجة ونقل قواعد البيانات من مكان لأخر بنجاح وأثناء ذلك قد يحدث فشل أثناء النقل.

حالات ال Transactions:

  • Active: المرحلة الاولي أثناء التنفيذ.
  • Partially Committed: يكون بعد اخر جملة SQL تم تنفيذها.
  • Committed: عند نجاح التنفيذ.
  • Failed: عند عدم نجاح التنفيذ.
  • Aborted/rolledback: في هذه المرحلة تستعيد قاعدة البيانات حالتها مرة أخري بدلا من بدء ال transaction من جديد.

أي أن ال Commition هي المرحلة النهائية بعد وصول قاعدة البيانات بنجاح وبالتالي عند عمل Commit يعني تسجيل الناتج بعد أخر Commit أي تعمل عمل ال “Save“، وعند عمل rollback يعني استعادة الحالة من جديد بعد اخر Commit أي يتم تنفيذ وتسجيل الناتج لخطوات التنفيذ بعد ال rollback

  • في حالة أن Autocommit =0  يتم تجاهل  المراحل التي لم يتم تسجيل ال Commit فيها وتنفيذ مراحل ال Rollback.
  • وفي حالة أن Autocommit =1 يتم تنفيذ جميع المراحل قبل وبعد ال Commit لان خاصية ال commit مفعلة تلقائيا وان لم يتم تسجيلها وكذلك يتم فيها تنفيذ مراحل ال Rollback.

    وقبل استخدام أي دالة ينبغي تعريف مكتبة ال ODBC كالتالي:

    "Load "odbclib.ring
     Use ODBC functions#

مثال توضيحي على استدعاء دوال مكتبة ال ODBC ثم طباعة ال Drivers:

4.jpgالكود

ويمكن رؤيتها في الويندوز عن طريق اتباع الخطوات التالية:

Control panal-Administrative Tools-ODBC data sources

5.jpg

كيفية الاتصال بقاعدة البيانات:

1-أولا يجب عليك عمل قاعدة بيانات وأبسط قاعدة بيانات تكون ب Microsoft Access

ويوجد شروحات كثيرة علي ال Web لشرح الجداول علي  Microsoft Access وقواعد البيانات وال SQL.

2-بعد عمل الجدول نضعه مع ملف ال Source.

3-نقوم باستدعاء مكتبة ال ODBC وهي “odbclib.ring”.

4-نقوم بتهيئة الاتصال بقاعدة البيانات عن طريق الدالة ()odbc_init.

5-ثم نقوم بالاتصال بقاعدة البيانات التي أنشأناها بال microsoft access عن طريق الدالة ()odbc_connect ونقوم بتعريف اسم قاعدة البيانات وال driver المسؤل عن فتحة.

6-ثم بعد ذلك يمكن لنا ادارة قاعدة البيانات بأوامر ال SQL المختلفة من اضافة وتعديل وحذف و…الخ. وذلك عن طريق الدالة ()odbc_execute ونستطيع كذلك بعد ذلك استخدام باقي دوال ال ODBC التي ذكرناها في الجدول حسب ما يريد المستخدم.

7-في النهاية نقوم بغلق الاتصال بقاعدة البيانات عن طريق الدالة ()odbc_disconnect.

مثال توضيحي:

connection#
"load "odbclib.ring
()oOdbc=odbc_init
("{(see odbc_connect(oOdbc,"DBQ=data.mdb;Driver={Microsoft Access Driver (*.mdb  
(odbc_disconnect(oOdbc
(odbc_close(oOdbc

الكود

في المثال التالي يوجد جدول باسم data.mdb.

6.jpg

مثال توضيحي علي كيفية الحصول على البيانات داخل الاعمدة:

صورة توضيحية للداتا بيز أو الجدول داخل برنامج Microsoft Access:

1.jpg

2.jpg الكود

مثال 2:

fetch query and get the tables#
 at this moment I have 2 tables,customer and clients in the data DB#
"load "odbclib.ring
()oOdbc=odbc_init
("{(odbc_connect(oOdbc,"DBQ=data.mdb;Driver={Microsoft Access Driver (*.mdb
see odbc_tables(oOdbc) + nl
(while odbc_fetch(oOdbc
see odbc_getdata(oODBC,3)+nl  
end
(odbc_disconnect(oOdbc
(odbc_close(oOdbc

الكود

مثال3:

fetch query and get the columns of table#
"load "odbclib.ring
()oOdbc=odbc_init
("{(odbc_connect(oOdbc,"DBQ=data.mdb;Driver={Microsoft Access Driver (*.mdb
odbc_columns(oOdbc,"clients")+nl
(while odbc_fetch(oOdbc
get the data in the fourth columns from clients table#
see odbc_getdata(oODBC,4)+nl   
end
(odbc_disconnect(oOdbc
(odbc_close(oOdbc

الكود

مثال توضيحي على ال Commition and rolledback:

في هذا المثال سوف نتعامل مع جدول ال Clients وهو  فارغ كما في الشكل التالي:

2.jpg

وجمل ال SQL في البرنامج كما هو موضح بالشكل:

4.jpg الكود

وهنا الناتج في ال  DBبعد عمل Run للبرنامج:

Capture.PNG

Save and Restore images

كما يمكن تخزين الصور داخل قاعدة البيانات ولكن يشغل حيز كبير في ال DB

ويتم ذلك عن طريق تحويل الصور الي ال Hexadecimal

  • يتم تخزين الصورة في قاعدة البيانات عن طريق الامر Read
  • ويتم نسخ نفس الصورة بالقيمة ال Hexadecimal المخزنة في قاعدة البيانات ثم تحويلها مرة أخري الي String عن طريق الامر Write

 

9.jpg

الكود

وهذا ما تم تخزينة في قاعدة البيانات:

11.PNG

 

ثم بعد ذلك يمكننا استرجاع الصورة من DB عن طريق التحويل مرة أخري ل String

restore image#
odbc_execute(pODBC,"select value from tel where id = 2 ") + nl
(odbc_fetch(pODBC
( ( (write("great.jpg",hex2str( odbc_getdata(pODBC,1

55.jpg

الكود

ملحوظة:

  • ينبغي تخزين اسم  الصورة في عمود باسم name وقيمة ال hexadecimal في عمود باسم value
  • ينبغي اختيار نوع العمود الذي يتم فيه تخزين الصورة من النوع long text نظرا لكبر حجم الصور.

ومن هنا صور توضيحية لذلك

وهنا قد انتهينا من مقالة اليوم والي لقاء اخر.

للاطلاع علي المقالات الاخري من هنا

تستطيع الاطلاع علي المشاريع مفتوحة المصدر من الموقع  GitHub
الموقع الرسمي للغة  http://ring-lang.net