إصدار كُتيّب رحلة يوم مع لغة البرمجة جافا

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

ملحوظة: تم تغيير اسم الكتاب إلى رحلة استكشافية للغة البرمجة جافا

بفضل الله وحده تمكنت من كتابة ونشر كُتيب رحلة يوم مع لغة البرمجة جافا.

وهو كُتيّب مبسط لتعلم لغة جافا في فترة وجيزة لمن لديه خبرة في لغة برمجة أخرى. ويمكن قراءته في يوم واحد. وقد قمت باستخدام أداة التطوير NetBeans مع أمثلة الكتاب. ويمكن اﻹستفادة منه كمدخل لتعلم برمجة الموبايل حيث تُستخدم لغة جافا لبرمجة منصة أندرويد وبلاك بيري و جافا موبايل.

بعد عام من تعلم لغة البرمجة جافا (كما ذكرت في تدوينة في العام الماضي) شعرت أنه يمكنني أن أكتب كتاب بسيط لمن يريد تعلم هذه اللغة. وفي الشهر الماضي بحثت عن كتاب لأشتريه حتى يكون فهمي أعمق لهذه اللغة قبل كتابة كتاب عنها. لكن للأسف وجدت الكتاب غالي جداً (180 جنيه سوداني) ولم يكن معي ثمنه في حينها. لكن ربما أشتريه لاحقاً ليكون مرجع أقرأ منه كل فترة كما أفعل مع كتاب Lazarus the complete guide

بدأت نهاية اﻹسبوع قبل الماضي بكتابة الكتاب، ثم أحتجت لعمل تجارب في نُسخ مختلفة من أداة التطوير NetBeans في عدد من توزيعات لينكس، وقرأت عنه وعن أداة التطوير Eclipse لكن بالنسبة لأداة التطوير Eclipse لم استطع تشغيل برنامج واحد بواجهة رسومية. وقد استخدمت فقط NetBeans طوال هذا العام.

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

يُمكن تحميل الكتاب مباشرة من هُنا

برمجة جافا موبايل باستخدام Java ME

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

Coverملحوظة:

اسهل طريقة لبرمجة جافا موبايل هو استخدام  NetBeans EE النسخة رقم  7.0 مع جافا ٣٢ بت أي يجب تثبيت ألة جافا الإفتراضية 32 بت (JDK 32 bit) حتى لو كان نظام التشغيل 64 بت.

مثلاً اسم النُسخة لنظام لينكس هي netbeans-7.0-ml-linux.sh ولنظام وندوز netbeans-7.0-ml-windows.exe

أمس اشتريت جهاز Samsung Texto plus، وهو يُعتبر من اﻷجهزة المتوسطة السعر، ويميل إلى الرخيص، حيث كان سعره حوالي 70 دولار. وبالرغم من هذا فهو أغلي موبايل أقوم بشراءه، فلم أكُن أنوي شراء موبايل ذكي (إذا اعتبرنا أنه ذكي، أو أن الذكاء هي أحد ميزات الموبيالات)، كُنت أكتفي باﻷجهزة البسيطة والتي أستطيع من خلالها التحدث وإرسال وإستقبال الرسائل، وسماع القرآن من ملفات MP3، دون أن يقيدني بحمله والحرص عليه طوال الوقت مخافة أن يضيع، فالمبويايل البسيط يُمكن أن تتركه في أي مكان وأنت مطمئن. أما تصفح النت فكنت أفضله، ولا زلت أفضله بإستخدام حاسوب أو لابتوب، وتطوير البرامج بإستخدام لوحة مفاتيح كاملة، وليست لوحة مفاتيح لابتوب، وشاشة خارجية (أكبر من شاشة لابتوب).

في أثناء تفقد ميزات الموبايل وبرامجه- وهو مازال في الشاحن- لفت نظري أن به برامج جافا موبايل، فأسرعت إلى الكمبيوتر لتشغيل Net Beans ووجدت أنه يدعم تطوير Java ME وهي Java Micro Edition، مخصصة للأجهزة المُدمجة والموبايلات. وبخلاف اﻷندويد والـ iOS، فهي غير معتمدة على نوع نظام تشغيل الهاتف، تحتاج لمشغل لها في أنظمة سيمبيان أو أي أنظمة أخرى، ولا أرى ما يمنع أن يتم تطوير هذا المشغل (Virtual machine) في بيئة اﻷندرويد مثلاً.

شعرت بفرح كبير عند تشغيل أول برنامج Hello World، في الموبايل، بعد محاولتين، حيث أن المحاولة اﻷولى فشلت وذللك بسبب عدم معرفتي بنسخة المشغل الموجودة. ويُمكن عمل برامج جافا موبايل في بيئة Net Beans عن طريق:

New Project/Java ME/Mobile Application

ويوجد محاكي موبايل لتشغيل البرنامج. وفي النهاية نقوم بنقل المجلدdist الذي يحتوي على المفات ذات اﻹمتداد jad و jar

بعدها قررت أن أقوم في يوم من اﻷيام بعمل برنامج مواقيت الصلاة لولاية الخرطوم، حيث أنه لدي البيانات اليومية لمواقيت الصلاة كُنت قد كتبتها في عام 1997، وقُمت باستخدامها في أكثر من برنامج. كانت لدي مشاريع أخرى لهذا اليوم، لكن لم استطع أن أقاوم، فهذه أول مرة أقوم بعمل برنامج لموبايل، فجلست باقي اليوم أطور في برنامج مواقيت الصلاة، وقراءة كود الجافا. والحمد لله وجدت دعم كبير في اﻹنترنت لكل مشكلة واجهتي.

وقد قُمت بتجربة البرنامج في موبال آخر صيني، وقد عمل فيه البرنامج أيضاً.

لكن لاحظت أن لغة جافا، وباﻷخص جافا موبايل فيها بعض التعقيد للمهات العادية، كقراءة ملف نصي، أوالتعامل مع التاريخ. فمثلاً هذا كود للقراءة من ملف نصي في لغة Java ME:

class FileRead
{
public static void main(String args[])
{
  try{
    FileInputStream fstream = new FileInputStream("textfile.txt");

    DataInputStream in = new DataInputStream(fstream);
    BufferedReader br = new BufferedReader(new InputStreamReader(in));
    String strLine;

    while ((strLine = br.readLine()) != null)   {

    System.out.println (strLine);
  }

  in.close();
}catch (Exception e){
  System.err.println("Error: " + e.getMessage());
}
}

وهذه مقارنة لقراءة ملف نصي بلغة أوبجكت باسكال:

procedure ReadTextFile;
var
  List: TStringList;
  i: Integer;
begin
  try
    List:= TStringList.Create;
    List.LoadFromFile('/proc/cpuinfo');
    for i:= 0 to List.Count - 1 do
      Writeln(List[i]);

    List.Free;

  except
  on e: exception do
    Writeln(e.Message);
  end;
end;

وهذا لقراءة ملف نصي بإستخدام مونو C#


public static void Main (string[] args)
{
  try
  {

    using (StreamReader sr = new StreamReader("/proc/cpuinfo"))
    {
      String line;
      while ((line = sr.ReadLine()) != null)
      {
        Console.WriteLine(line);
      }
    }
    }
      catch (Exception e)
    {
      Console.WriteLine("The file could not be read:");
      Console.WriteLine(e.Message);
    };
 }

نلاحظ أن لغة جافا إحتاجت لثلاث Classes لقراءة الملف النصي، بينما أوبجكت باسكال وسي شارب إحتاجت لواحد فقط.

وهذه مثال لإضافة ساعتين للوقت الحالي وإظهاره بشكل محدد، في جافا العادية:


  Calendar cal = Calendar.getInstance();
  Format myTimeFormat = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss");
  cal.add(Calendar.HOUR, 2);
  System.out.println(myTimeFormat.format(cal.getTime()));

وهذه نفس العملية بلغة أوجكت باسكال:


  Writeln(FormatDateTime('yyy-mm-dd hh:nn:ss', Now + EncodeTime(2, 0, 0, 0)));

وهذا نفس الشيء بإستخدام مونو C#:


  DateTime dateValue = new DateTime();
  dateValue = DateTime.Now.AddHours(2);
  Console.WriteLine(dateValue.ToString("yyyy-MM-dd hh:mm:ss"));

وفي الختام فإن التجربة كانت ممتعة وتعلمت منها كثيراً. ومع أن برمجة الموبايلات متجهة نحو اﻹندويد وiOS، إلا أنه مايزال عدد كبير من اﻷجهزة الرخصية والمتوسطة السعر تدعم هذه التقنية، حسب إحصائية موقع صن، فإن عدد الموبايلات التي تحتوي على جافا موبايل هي 3 مليارات.