السلام عليكم
أنا عضو جديد في هذه المنصة، مشرف سابق في منتديات الفريق العربي للبرمجة و rédacteur أيضاً في Club des développeurs et IT Pro.
أعجبتني فكرة الموقع و أحببت أن أناقش معكم كيفية حماية ملف الـ jar إذا كان المشروع غير مفتوح المصدر.
تحياتي.
توجد بعض الطرق لحماية السورس الكود (إلى حدٍ ما) من الهندسة العكسية (عن طريق الـ decompilation):
1. الـ obfuscation: وهي طريقة تقوم بتغيير أسماء الكلاسات والدوال والمتغيرات، لكي يصعب على "الهاكر" فهم السورس كود. ومن أشهر الـ obfuscator هو ProGuard.
2. التحويل من byte-code إلى native-code: أي تقوم مثلاً بتحويل برنامج الجافا إلى exe، وبهذه الطريقة لن يمكن استرجاع كود الجافا الأصلي. لكن يعيب هذه الطريقة هو أنك لن تتمكن من تشغيل البرنامج على الأنظمة الأخرى، بعكس ما يميز برامج الجافا. ومن أشهر الأدوات لعمل ذلك هو Excelsior JET.
3. تشفير ملف الكلاس، وأثناء الـ runtime، يقوم برنامج الجافا بفك التشفير وإضافته إلى الـ ClassLoader. على أية حال، يستطيع "الهاكر" عمل هندسة عكسية للكود الذي يقوم بفك تشفير ملف الكلاس.
4. جعل الكود يعمل على server، وجعل الـ client يتخاطب معه عبر الإنترنت (عبر البروتوكول HTTP مثلاً). وهذه تعتبر أفضل طريقة لحماية الكود من الهاكرز.
أخي لا تتعب نفسك
ما دام يملك نسخة من البرنامج
يستطيع إعادة بنائه من جديد
-
القانون هو الحامي الوحيد
أخي الكريم، هذا قسم البرمجة بالجافا و ليس "قسم القانون" إن لم تكن على دراية بتفاصيل الموضوع، أنصحك بعدم التعليق حفاظا على موضوعية النقاش.
هذا قسم البرمجة بالجافا و ليس "قسم القانون"
أنا لم أناقش القانون بل قلت أنه الطريقة الوحيد للحماية فعلا
كود البرنامج مثل الكتاب تحمي بقانون الملكية الفكرية
إن لم تكن على دراية بتفاصيل الموضوع، أنصحك بعدم التعليق حفاظا على موضوعية النقاش
بعض علمي أخذته من دروسك في منتديات الفريق العربي للبرمجة
ولك بذلك فضل عليّ فجزاك الله خيرا على دروسك
لاحاجة إلى الهندسة العكسية، يكفي استخدام أداة بسيطة لعمل décompilation و الحصول على الكود سورس الأصلي.
الـ Java Decompiler مثلا يُمكنه تحويل ملف الجار إلى كلاسات جافا في لحظات ! :)
اين أجد الجافا Decompiler?
هذه فضيحة كبيرة للجافا!
قمت بفتح عدد كبير من المكتبات والـ JAR والـ CLASS بهذا البرنامج، وقد أظهر كل الكود المكتوب، لم يتبقى إلا التعليقات comments هي التي لم تظهر
أعتقد أن هذا يُثبت أن لغة جافا لا ترقى لأن تكون compiled language لأن من صفات الـ compiled language أن تقوم بإصدار برامج تنفيذية ثُنائية. لكن هذا البرنامج يُثبت أنها ليست برامج ثُنائية حقيقية
سؤال آخر، هل برامج اﻷندرويد المكتوبة بالجافا ايضاً يحدث لها Decompilation? الـ APK
فضيحة كبيرة للجافا؟ جميع اللغات يوجد فيها decompilation. على أية حال، توجد أدوات وبرامج تقوم بتحويل برامج الجافا من byte-code إلى native-code، وبالتالي لن تستطيع إعادة كود الجافا الأصلي، ولكن يمكن الإعادة لكود السي/سي بلص بلص، وأيضاً لن تستطيع تشغيل البرنامج على الأنظمة الأخرى.
هل توجد للغات مثل سي ودلفي إمكانية عمل decomplication دلني على تلك اﻷداة إذا امكن. وماهي البرامج التي تقوم بتحويل كود الجافا إلى native code?
هل توجد للغات مثل سي ودلفي إمكانية عمل decomplication دلني على تلك اﻷداة إذا امكن
بالنسبة لـ C فيوجد[1] لكن المشكلة المترجمات Compilers لا تنتج نفس الكود حتى بدون تحسين الكود(أحد خيارات GCC)
هذا الكود مثالا
-
مترجم MinGW مع Codeblocks ينتج
بداية البرنامج
-
الدالة Main
-
مترجم OpenWatcom مع IDE (يأتي معه في نفس الحزمة)
بداية البرنامج
-
الدالة Main
نرى الاختلاف كبير مع أنه نفس الكود !
-
[1]
الكود الأصلي ترجمته بـ MinGW مع CodeBlocks
-
int main()
{
FILE *fp;
fp = fopen("out.txt","w+");
fprintf(fp,"Hello World!");
fclose(fp);
return 0;
}
-
int __fastcall sub_401010(int a1, char a2)
{
char v2; // ST08_1@1
int v3; // eax@1
int v4; // ecx@1
int v5; // edx@1
v2 = a2;
v3 = sub_4012A0("out.txt", (int)&unk_409004, a1);
sub_4013A0(v4, v3, v3, (int)"Hello World!", v2);
sub_401490(v5);
return 0;
}
ملاحظة:
تجاهلت دوال المكتبة القياسية التي تم توليدها
هذا كود Assembly الذي تم توليد كود C منه
-
sub_401010 proc near
push edx
mov edx, offset unk_409004
mov eax, offset aOut_txt ; "out.txt"
call sub_4012A0
push offset aHelloWorld ; "Hello World!"
push eax
mov edx, eax
call sub_4013A0
add esp, 8
mov eax, edx
call sub_401490
xor eax, eax
pop edx
retn
sub_401010 endp
شكراً لك.
طلب أخير، قمت بعمل برنامج للكتابة في ملف نصي ثم عرضه بواسطة فري باسكال/لازاراس
هل يُمكنك إعادة المصدر ثم عرضه هنا.
البرنامج في هذا الرابط:
هناك أمورا نسيت أن أذكرها
عند توليد كود البرنامج مكتوب بـ C ستحصل على :
كود إبتدئي يحصل على المعلومات التي تحتاجها المكتبات ( ... ,Argc, Argv, stdin, stdout, stderr)
كود المكتبات المدمج مع البرنامج Static Library مثل (printf,fopen, ...)
كود معالج الإستثنائات
كود الذي يكتبه المبرمج
حتى تجد كود المبرمج عليك أن تعرف متى يبدأ كود المكتبة ومتى ينتهي
وهذا يختلف مع كل مترجم لغة(ما يولده MinGW غير الذي يولده ++MVC)
أما في حالة Free Pascal فأنا لا أعرف كيف يولد البرامج وما هي بنية مكتباته
حتى أستطيع الفصل بينه وما كتبت
لكن على كل حالة رفعة لك الكود المولد عن المثال الذي طلبته
والكود المولد عن FileSample
-
صورة توضيحية على ما ذكرتُ
الكود الإبتدائي ما قبل Main
شكراً لك أخ طالب علم
هذا مطمئن بأن البرامج الطبيعية Native لا يمكن إرجاعها إلى مصدرها الأصلي بسهولة. حتى لو تم إرجاعها فلا يمكن تعديلها وإعادة ترجمتها.
ونستخلص من الملف الذي أرسلته اﻵتي:
لم يتم التعرف على لغة البرمجة اﻷصلية التي أنتجت الملف الثُنائي، حيث استخدمت مترجم فري باسكال أما برنامج الـ Decompiler فقط افترض أنها Visual C++, هذا جزء من ترويسة الملف الناتج:
/* This file has been generated by the Hex-Rays decompiler.
Copyright (c) 2007-2011 Hex-Rays <info@hex-rays.com >
Detected compiler: Visual C++
*/
#include <windows.h>
#include <math.h>
#include <defs.h>
أسماء المتغيرات والدوال غير موجودة في البرنامج الناتج.
ليس هُناك علاقة بين حجم البرنامج اﻷصلي والناتج. حيث أن البرنامج اﻷصلي حوالي 50 سطر، أما الناتج فهو 198 ألف سطر!
هذا البرنامج تمت كتابته في حوالي 5 دقائق، لم يستطع الـ Decompiler بإرجاعه بصورة مفهومة، فكيف البرامج التي تحتاج لسنوات للتطوير.
هذا نص البرنامج اﻷصلي:
unit main;
{$mode objfpc}{$H+}
interface
uses
Classes, SysUtils, FileUtil, Forms, Controls, Graphics, Dialogs, StdCtrls,
LCLIntf;
type
{ TForm1 }
TForm1 = class(TForm)
Button1: TButton;
procedure Button1Click(Sender: TObject);
private
{ private declarations }
public
{ public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.lfm}
{ TForm1 }
procedure TForm1.Button1Click(Sender: TObject);
var
F: TFileStream;
begin
F:= TFileStream.Create('file.txt', fmCreate);
F.WriteAnsiString('Hello there' + #13#10);
F.WriteAnsiString('Today is: ' + DateTimeToStr(Now));
F.Free;
OpenDocument('file.txt');
end;
end.
هل توافق على هذه الاستنتاجات؟ لأني أريد البناء عليها في المستقبل
1)
برنامج Hex-Rays IDA لا يفرق بين المترجمات،
هناك برنامج يسمى Exeinfo PE يستطيع معرفة مترجم الذي ترجم البرنامج
الأخيرة MinGW لم يتعرف عليه بالتفصيل لكنه يبقى GCC
-
2)
صحيح ولن يستطيعوا إيجادها
-
3) السبب هو المكتبة القياسية المدمجة في البرنامج
فالكود المولد هو
كود المبرمج + كود المكتبة القياسية
-
4) IDA هو Disassembly ليس متخصص في Free Pascal أو MinGW أو غيرهما
هناك برامج متخصص مثل Java Decompiler الفرق أن الجافا أسهل من غيرها
-
هل توافق على هذه الاستنتاجات؟ لأني أريد البناء عليها في المستقبل
فيما يتعلق بأسماء المتغيرات والدوال من غير المكتبة القياسية، نعم
أريد أن أضيف كلما زاد تعقيد البرنامج كلما اعتمد على مكتبات إضافية أكثر، بهذه الطريقة يصعب إرجاعه إلى اﻷصل
وايضاً أن لغات البرمجة الـ Native تعتمد على نداء مكتبات موجودة في نظام التشغيل بشكل أساسي
والباسكال لديه مكتبة قياسية ذات حجم كبير، لذلك البرامج التنفيذية المكتوبة بلغة اوبجكت باسكال كبيرة جداً مقارنة بالسي
هذا مثال يرسم شكل معين على الطرفية
أخترته لأنه يحمل خوارزمية أعقد من المقترح
الكود الأصلي
int main()
{
int n, c, k, space = 1;
printf("Enter number of rows\n");
scanf("%d", &n);
space = n - 1;
for (k = 1; k <= n; k++)
{
for (c = 1; c <= space; c++)
printf(" ");
space--;
for (c = 1; c <= 2*k-1; c++)
printf("*");
printf("\n");
}
space = 1;
for (k = 1; k <= n - 1; k++)
{
for (c = 1; c <= space; c++)
printf(" ");
space++;
for (c = 1 ; c <= 2*(n-k)-1; c++)
printf("*");
printf("\n");
}
return 0;
}
int __fastcall sub_401010(int a1, int a2)
{
int v2; // edx@1
int v3; // ecx@1
signed int v4; // edi@1
int v5; // ecx@1
signed int v6; // esi@2
int i; // edx@3
int v8; // edx@4
int v9; // edx@5
int j; // ecx@5
int v11; // edx@6
signed int v12; // ebx@8
int k; // ecx@8
int l; // edx@10
int v15; // edx@11
int v16; // edx@12
int v17; // edx@14
int v18; // ecx@15
int v20; // [sp+0h] [bp-1Ch]@1
sub_401110(a1, a2, (int)"Enter number of rows\n", v20);
sub_4011B0(v3, v2, (int)"%d", (unsigned int)&v20);
v4 = 1;
v5 = v20 - 1;
if ( v20 >= 1 )
{
v6 = 1;
do
{
for ( i = 1; i <= v5; i = v8 + 1 )
sub_401110(v5, i, (int)" ", v20);
v9 = 1;
for ( j = v5 - 1; v9 <= v6; v9 = v11 + 1 )
sub_401110(j, v9, (int)"*", v20);
sub_401110(v5, v9, (int)"\n", v20);
++v4;
v6 += 2;
}
while ( v4 <= v20 );
}
v12 = 1;
for ( k = 1; k <= v20 - 1; k = v18 + 1 )
{
for ( l = 1; l <= v12; l = v15 + 1 )
sub_401110(k, l, (int)" ", v20);
v16 = 1;
++v12;
while ( v16 <= 2 * (v20 - k) - 1 )
{
sub_401110(k, v16, (int)"*", v20);
v16 = v17 + 1;
}
sub_401110(k, v16, (int)"\n", v20);
}
return 0;
}
ملاحظة:
تجاهلت دول المكتبة القياسية التي تم توليدها
لدي برنامج مكتوب بلغة Free Pascal وهي native compiled هل يمكنك إرجاع ولو سطر واحد من البرنامج؟
يمكنك تحميله من هذا الرابط:
أعتقد أن هذا يُثبت أن لغة جافا لا ترقى لأن تكون compiled language
لأن من صفات الـ compiled language أن تقوم بإصدار برامج تنفيذية ثُنائية.
لكن هذا البرنامج يُثبت أنها ليست برامج ثُنائية حقيقية
جربتها على لعبة Minecraft وظهر الكود واضح وصريح لكن لم تكن الاسماء مفهومة كانت على شاكلة a aa ab ac
ربما يكون في المترجم Compiler خيار لتشفير الأسماء
سؤال آخر، هل برامج اﻷندرويد المكتوبة بالجافا ايضاً يحدث لها Decompilation? الـ APK
ربما، لم أجرب فعل ذلك
قد يفيدك هذا الرابط
بنسبة للموضوع الأندريود هناك برامج قامت بDecompilation وأضف إلي ذلك إني تمكنت إضافة سطر إلي لغة جافا أقصد لغة الألة خاصة بجافا إلي لعبة Subway وعمل :) لا أعرف هل لغة جافا ضعيفة إلي هذه الدرجة أو لا وللعلم أنا لأعرف شي عن جافا إلا قليل
ممكن توضيح لهذه النقطة :
أضف إلي ذلك إني تمكنت إضافة سطر إلي لغة جافا أقصد لغة الألة خاصة بجافا إلي لعبة Subway وعمل
أنا أقصد أن أعدل علي ملفات smali,سأعطيك مثال
smali code
const/4 v1, 0x1
if-ne v0, v1, :cond_0
const/4 v2, 0x2
move v0,v2
goto :goto_0
:cond_0
const/4 v2, 0x3
move v0,v2
:goto_0
أوكي اتضحت الفكرة.
لا أعرف هل لغة جافا ضعيفة إلي هذه الدرجة أو لا وللعلم أنا لأعرف شي عن جافا إلا قليل
ماذا كنت تريدها أن تفعل ؟ :)
وماهو الشيء الذي لا أعرفه ؟
في الحقيقة كُنت استخدم جافا لأكثر من ثلاث أعوام. وقد سمعت أنه يمكن إعادة مصدر الكود من البرنامج التنفيذي، لكن لم اكن أتوقع أن يكون الموضوع بهذه السهولة، وحتى أسماء المتغيرات والكلاسات واﻹجراءات و الدوال تظهر بكل سهولة. والمشكلة أن من قام بعمل decomplication هم جهة أخرى أي third party. والمشكلة اﻷكبر أنه لا يمكن الحيلولة دون الـ decomplication على حسب هذه الصفحة:
هذه عبارة عابرة لأني عرفت أنه من موريتانيا
ولي عدد من اﻷصدقاء هُناك، وهم يمتازون باللباقة في الحديث والتواضع
أخي الكريم أنا لا أقلل من علمك و لكن للأسف أنت لا زلت تزيد قناعتي بأنك تتحدث عن موضوع لا تتقنه مع احترامي الشديد لك :)
أعتقد أن هذا يُثبت أن لغة جافا لا ترقى لأن تكون compiled language
من قال بأن جافا compiled language ؟ لو قرأت عن الجافا قليلا لعلمتَ أنها semi-compiled و شتان ما بين الأمرين.
وقد سمعت أنه يمكن إعادة مصدر الكود من البرنامج التنفيذي، لكن لم اكن أتوقع أن يكون الموضوع بهذه السهولة
في الجافا لا يوجد إطلاقا شيء اسمه "ملف تنفيذي" إن كنت تقصد ملف exe لأن بنية ملف الـ jar تختلف تماما عن بنية exe.
أخي الكريم أنا لا أقلل من علمك و لكن للأسف أنت لا زلت تزيد قناعتي بأنك تتحدث عن موضوع لا تتقنه مع احترامي الشديد لك :)
أنت أيضاً تزيد قناعتي أنك لا تعرف الكثير عن الجافا، وانك لم تكتب بها برامج حقيقية مع كامل احترامي لك :)
من قال بأن جافا compiled language ؟ لو قرأت عن الجافا قليلا لعلمتَ أنها semi-compiled و شتان ما بين الأمرين.
التحويل من source code إلى byte code ليتم تنفيذه بواسطة الـ virtual machine هي عملية complition
في الجافا لا يوجد إطلاقا شيء اسمه "ملف تنفيذي" إن كنت تقصد ملف exe لأن بنية ملف الـ jar تختلف تماما عن بنية exe.
ملفات الـ JAR هي ملفات تنفيذية، في نظام لينكس تقوم بإعطاها صلاحية execute حتى يتم تنفيذها مباشرة من الـ file explorer
التحويل من source code إلى byte code ليتم تنفيذه بواسطة الـ virtual machine هي عملية complition
غير صحيح، javac يقوم بتحويل .java إلى .class (هذه العملية تُسمى compilation) بعد ذلك تقوم الـ JVM بتحميل الـ byte code و عمل interpretation له كما يُمكنها أيضاً أن تقوم بعمل JIT.
لهذا قُلت لك أن الجافا ليست compiled language بل هي semi-compiled لأن عملية الترجمة أو التفسير تتم على مرحلتين.
ملفات الـ JAR هي ملفات تنفيذية، في نظام لينكس تقوم بإعطاها صلاحية execute حتى يتم تنفيذها مباشرة من الـ file explorer
أنا كنت أتحدث عن الويندوز و ملفات exe، الـ jar اختصار لـ Java ARchive و هو ليس ملفا تنفيذياً من حيث البنية (كلامي واضح جداً) لأن ملف الـ Jar عبارة عن ملف ZIP و يُمكنك رؤية محتواه باستخدام WinRar مثلا.
هذا قد ينفعك
الـ obfuscation تأثيرها محدود جداً، جربتها سابقاً مع ProGuard و هو الأفضل في هذا المجال، لكن كل ما يقوم به هو تغيير أسماء الكلاسات و الدوال و المتغيرات و الكود سورس يظل مرئياً عند عمل decompilation.
يُمكنك عمل obfuscation باستخدام ProGuard مثلا و فتح الجار بـ Java Decompiler، ستلاحظ أن الكود سورس يتم التقاطه بالكامل !
كيف تكون اللغة الثانية على مستوى العالم في البرمجة حالياً و غير قابلة للتشفير و الحماية ، أنا مبتدأ و مع ذلك غير مقتنع بمعظم الكلام إنها فضيحة بالنسبة Java في تشفير ال Source code ، هل هذا يعني أن معظم البرامج المكتوبة بالجافا سهلة الكسر ؟!
هل هذا يعني أن معظم البرامج المكتوبة بالجافا سهلة الكسر
نعم هذا صحيح، لكن لا توجد برامج كثيرة مكتوبة بالجافا موجهة لسطح المكتب، معظم برامج الجافا مستخدمة بكثرة في مجال الأعمال الكبيرة enterprise business مثل شركات اﻹتصالات. وهي تكون إما برامج ويب أو خدمات ويب، أو برامج خدمية services تعمل في المخدمات، أي لا يستطيع المستخدم العادي الوصول لها حتى يقوم بكسرها. وقليل منها ماهو موجه لسطح المكتب ليعمل في تلك المؤسسات.
لكن لا توجد برامج كثيرة مكتوبة بالجافا موجهة لسطح المكتب
غير صحيح إطلاقاً، JavaSE كُتبت بها مئات البرامج و سأعطيك بعض الأمثلة :
Eclipse : لا داعي لتعريفه، و هو مكتوب بـ SWT.
IntelliJ IDEA وهو برنامج تجاري عبارة عن بيئة تطوير متكاملة تمت كتابته من طرف شركة JetBrains و قد تمت برمجته باستخدام Swing.
jEdit : محرر نصوص مُوجه للمبرمجين، تمت كتابته بالكامل بالجافا و يعمل تحت الويندوز، لنكس و Mac OS.
EditiX : من أشهر الـ XML editors و يدعم DTD, XSLT, XSL-FO, XSD, RelaxNG.
GenealogyJ : برنامج متخصص في علم الأنساب و متوافق مع GEDCOM، يعمل في كافة أنظمة التشغيل.
Oracle SQL Developer : الكل يعرفه، و قد تمت كتابته بالجافا أيضاً.
أغلب البرامج الـ Modelisation بـ UML كُتبت بالجافا مثل : ArgoUML, AmaterasUML, Eclipse UML2 Tools, Topcased, UML Designer, Papyrus, Violet, Visual Paradigm for UML.
أيضاً، الكثير من الـ IDE كُتب الجافا مثل : NetBeans, Codenvy, JBuilder, JCreator, JDeveloper, Xcode, Geany و القائمة تطول ..
FreeMind : من أفضل البرامج التي تقوم برسم الخرائط الذهنية، تمت كتابته بالجافا بشكل كامل.
muCommander : من أفضل البرامج التي تقوم بتسيير الملفات، برنامج راقي جداً.
Vuze : عميل BitTorrent يمتاز بسهولة التعامل معه و الفعالية.
JDiskReport : برنامج متخصص في صيانة الكمبيتور و استخدامه سهل جداً.
VisualVM : أداة تسمح بقياس سرعة أداء و كفائة البرامج المكتوبة بالجافا قيد التشغيل.
Sweet Home 3D : يسمح بتخطيط عمارات ثلاثية البعد و قد كُتب بالجافا !
و القائمة طويلة جداً، لاحظ أنني لم أتحدث عن البرامج التي شاركت الجافا في كتابتها مع لغات أخرى مثل السي++ و البايثون و السي شارب، إلخ.
مثلا OpenOffice كُتب بالسي++ و الجافا و الـ NASA World Wind كُتبت بالجافا و السي شارب و ThinkFree Office كُتب بالأجاكس و الجافا و القائمة طويلة جداً ..
لم أتحدث أيضا عن برامج تسيير قواعد بيانات NoSQL و التي أغلبها كُتب بالحافا مثل Cassandra الذي كانت تستخدمه شركة الـ Facebook قبل أن تتخلى عنه صالح شركة Apache و هناك أيضاً Voldemort و Habse و Neo4j و OrientDB و InfiniteGraph.
لهذا قلتُ لك يا أخي الفاضل أنك تتحدث للأسف عن أشياء لا تعرفها مع احترامي الشديد لك :)
هذه ليست قائمة طويلة. البرامج المكتوبة بلغات طبيعية مثل سي وسي ++ أكثر منها.
برامج جافا سيئة جداً في استغلال الموارد مقارنة بمثيلاتها المكتوبة بلغات أخرى. مثلاً قارن برنامج Vunze و Transmission torrent اﻷول برنامج بطيء جداً ويستهلك ذاكرة ومعالج. قمت بإنزاله ثم لم اعد استخدمه بعد ما جربته أكثر من مرة، رجعت لبرنامج Transmission . ايضاً استخدم NetBeans وهي أداة رائعة، لكنها مستهلكة جداً للموارد، مقارنة بأدوات تطوير أخرى مثل دلفي. JBuilder مكتوبة بالدلفي وليس جافا، والدليل أنها لا تعمل في نظام لينكس.
Swing هي مكتبة سيئة جداً مقارنة بالمكتبات الطبيعية لأنظمة التشغيل مثل QT, GTK, Win32/64
لهذا قلتُ لك يا أخي الفاضل أنك تتحدث للأسف عن أشياء لا تعرفها مع احترامي الشديد لك :)
أنت لا تعرف التكلم مع الناس، ولا تعرف الاحترام. مكانك المنتديات هي مليئة بأمثالك، وليس هنا. انا مستغرب أنك من موريتانيا، هل أنت متأكد أنك من ذلك.
لماذا تردد عبارات ليس لها معني ومتناقضة مع ما تقول. مثل أخي الفاضل، ومع احترامي لك. أن لا تتكلم معي بأي احترام
هذه ليست قائمة طويلة. البرامج المكتوبة بلغات طبيعية مثل سي وسي ++ أكثر منها.
هذا غيض من فيض و لو أدرتُ الاستفاضة لفعلت.
برامج جافا سيئة جداً في استغلال الموارد مقارنة بمثيلاتها المكتوبة بلغات أخرى. مثلاً قارن برنامج Vunze و Transmission torrent اﻷول برنامج بطيء جداً ويستهلك ذاكرة ومعالج.
وجود برنامج أو اثنين بهذا المستوى لا يعني التعميم، إن كنا نتحدث عن استغلال الموارد و تسيير الذاكرة فالسي و السي++ هما الأفضل و بدون منازع لكن هذا لا يعني أن الجافا لا ترقى لمستوى المنافسة لأن عشرات البرامج المكتوبة بالجافا لا زالت تُنافس و بقوة مثيلاتها في السوق.
JBuilder مكتوبة بالدلفي وليس جافا
تأكد من ذلك، جزء كبير من JBuilder تمت كتابته بالجافا.
Swing هي مكتبة سيئة جداً مقارنة بالمكتبات الطبيعية لأنظمة التشغيل مثل QT, GTK, Win32/64.
لا أوافقك الرأي مُطلقاً.
انا مستغرب أنك من موريتانيا، هل أنت متأكد أنك من ذلك.
نعم !
لماذا تردد عبارات ليس لها معني ومتناقضة مع ما تقول. مثل أخي الفاضل، ومع احترامي لك. أن لا تتكلم معي بأي احترام
أعتذر لك إن كنت قد أسأت إليك.
مادام اعتذرت فلا مشكلة.
في الماضي كُنت استخدم دلفي (لغة أوبجكت باسكال) لمدة قاربت العشرين سنة. لكن بسبب المقاطعة الأمريكية للسودان توقفت عن استخدام دلفي وتحولت إلى جافا، وهي لغة رائعة، كلغة برمجة غنية، لكن مشكلتها الكبيرة هي في اﻷداء واستهلاك الموارد مقارنة بدلفي وبما تعودته من كتابة برامج لشركات اﻹتصالات تحتاج لتكون سريعة وتعمل لوقت طويل دون توقف، أيضاً تعودنا أن يكون هُناك عدد كبير من البرامج في نفس الجهاز. وقد نافسنا شركة أوروبية كانت قد كتبت برنامج بلغة جافا في عام كامل، فقمنا بإعادة كتابته بواسطة دلفي في ثلاث أشهر فقط ولم تكن فيه عيوب البرنامج اﻷول. فما كان من شركة اﻹتصالات إلا أن أوقفت التعامل مع الشركة اﻷوروبية وإيقاف برنامجها.
لكن اﻵن أصبحت استخدم جافا فقط في معظم برامج الاتصالات، مثل خدمات الويب وبرامج الويب، وقد طورنا برنامج بقيمة 30 ألف دولار، معظمه كان مكتوب بالجافا. لكن بين الحين واﻵخر ما زلت أجد مشكلة استهلاك الموارد. وتعدد نُسخ المنصات Java 1.6, 1.7 كذلك لم اعتبرها حل لتطوير برامج سطح المكتب. أحياناً نقوم بكتابة برنامج بواسطة فري باسكال وتكون خلفيته خدمة ويب مكتوبة بالجافا تعمل في Tomcat. لغة فري باسكال ما تزال في طور الشباب، بعض بروتوكولات اﻹتصالات غير موجودة فيها، نقوم بسد تلك الثغرة بواسطة برنامج جافا، ونفص جافا نقوم بإتمامه بلغة فري باسكال. هذا بالنسبة لنا، أما باقي الشركات ربما يكون لهم طريقة اخرى لتغطية كل نفص في لغات البرمجة. احياناً نقوم بإستخدام لغة PHP مع الجافا.
المشكلة تكمن في الشخص الذي يعتقد أن هناك لغة سحرية تستطيع عمل كل أنواع البرامج. وأنا شخصياً كنت اعتقد ذلك عندما كنت استخدم دلفي، كنت متعصب لها واعتبرها هي اللغة اﻷولى في العالم وماعداها لا يرقى لمستواها. أما اﻵن فأختلف هذا التفكير. وإلا لما سمعنا عن صدور لغة برمجة جديدة بين الفينة واﻷخرى.
Swing هي مكتبة سيئة جداً مقارنة بالمكتبات الطبيعية لأنظمة التشغيل مثل QT, GTK, Win32/64.
لا أوافقك الرأي مُطلقاً.
مكتبة Swing القياسية شكلها بدائي جداً مقارنة بالمكتبات اﻷخرى. مثلاً File dialog قارن بينه وبين الـ File Dialog الموجود في الوندوز وفي لينكس QT أو GTK تجده بدائي جداً مشابه لـ FIle dialog الذي كان يأتي مع وندوز 3 في التسعينيات
مكتبة Swing القياسية شكلها بدائي جداً مقارنة بالمكتبات اﻷخرى. مثلاً File dialog قارن بينه وبين الـ File Dialog الموجود في الوندوز وفي لينكس QT أو GTK تجده بدائي جداً مشابه لـ FIle dialog الذي كان يأتي مع وندوز 3 في التسعينيات
أنت تتحدث عن الشكل الافتراضي لـ File dialog لكن عموماً شكل مُكونات Swing يتغير حسب الـ Look and Feel.
إن أردت الحصول على File dialog تبع السيستم فقم بتغيير الـ Look and Feel إلى SystemLookAndFeel ! :)
هذه ثلاث صور للـ File dialog
Default swing
look and feel
Free Pascal GTK2
كلها في نظام أوبونتو لينكس
وهذه هو كود جافا
public static void main(String[] args) {
try {
UIManager.setLookAndFeel( UIManager.getSystemLookAndFeelClassName());
JFileChooser chooser = new JFileChooser();
FileNameExtensionFilter filter = new FileNameExtensionFilter(
"JPG & GIF Images", "jpg", "gif");
chooser.setFileFilter(filter);
int returnVal = chooser.showOpenDialog(null);
if(returnVal == JFileChooser.APPROVE_OPTION) {
System.out.println("You chose to open this file: " +
chooser.getSelectedFile().getName());
}
} catch (ClassNotFoundException | InstantiationException | IllegalAccessException | UnsupportedLookAndFeelException | HeadlessException ex) {
System.err.println("Error in look and feel: " + ex.toString());
}
}
}
وهذا كود أوبجكت باسكال لفتح الـ Open dialog
OpenDialog1.Execute;
توجد أدوات كثيرة جداً لتغيير الـ LookAndFeel.
من ناحية الـ design أفضل jtattoo :)
هذه صورة لـ password manager كتبته سابقاً بالحافا :
مكانك المنتديات هي مليئة بأمثالك، وليس هنا
فقط للتوضيح أخي الكريم، أنا قادم من منتدى الفريق العربي للبرمجة و كنت أحد المشرفين على قسم السي و السي++ و أؤكد لك أن ما يحويه arabteam من العلم و الفائدة لا يوجد ثلثه هنا، ليس هذا من باب المفاخرة و لكن من باب الحقيقة، الفريق العربي تم إطلاقه قبل 14 سنة من الآن و كان يجمع كبار المبرمجين في العالم العربي قبل أن تُصبح المنتديات démodés و تنتقل الناس إلى المدونات و ما شابه.
قولك بأن المنتديات تليق بي و بأمثالي يعني أنك لم تزر الفريق العربي سابقاً، لذا أدعوك لزيارته و التعرف عل كم المعلومات الهائل الذي يحتويه المنتدى و هو الآن أكبر و أقدم مرجع عربي للمبرمجين.
أما بالنسبة لي فأقترح عليك زيارة المواضيع و الدورات التي كتبتها في arabteam لتحكم علي بدقة أكثر.
بالنسبة لأسلوبي في الحديث
On s'est mal compris, je reconnaissais mes erreurs et je t'ai demandé pardon, donc nous devons dorénavant oublié ce qui s'est passé
لك مودتي.
ليس هُناك مشكلة، فقد تعلمت كثيراً في هذا اليوم :)
الساعة تقارب التاسعة مساءً وأنا فاتح أدوات البرمجة NetBeans و Free Pascal Lazarus وهذا من النادر ما يحدث.
شكراً لك
زوجتي ظنت أني أكتب مقالة عن الضرائب، من شدة انهماكي في هذا الوقت المتأخر مع الكمبيوتر. فقد كُنت في زيارتهم اليوم، وفرضوا علي مبلغ كبير. ولم استطع العمل اليوم بسبب ذلك، لكن الحمد لله اليوم لم يضع، طلعت منه ببعض المعلومات المهمة حول لغات البرمجة.
لا تنسى أيضاً أن الـ JVM مكتوبة بلغة سي أو سي++، أي أن لغة جافا معتمدة على لغة أخرى في بنيتها الأساسية، ولا تستطيع الاستغناء عن اللغات الـ native أما باقي اللغات فلا تحتاج للجافا في شيء، يمكن أن يكون لديك جهاز حاسوب خالي تماماً من كل برامج الجافا، كلها برامج طبيعية سريعة الاستجابة واقل استهلاكاً للموارد.
لا تنسى أيضاً أن الـ JVM مكتوبة بلغة سي أو سي++
لا أنكر ذلك :)
مقارنة الجافا مع السي أو السي++ من حيث تسيير الذاكرة مقارنة خاطئة لأن الـ garbage collector مكتوب بالسي و بالتالي الجافا لا تُسير الذاكرة من تلقاء نفسها.
يمكن أن يكون لديك جهاز حاسوب خالي تماماً من كل برامج الجافا
لا أتفق معك، الجافا الآن موجودة و بقوة في كافة الميادين على عكس السي و السي++، الجافا موجودة في : تطبيقات سطح المكتب، تطبيقات الويب ، تطبيقات الهاتف و حتى الثلاجات و الساعات و حفائظ الأطفال باستخدام Android Wear.
الجافا غير موجودة في منصات أهم، وهي: Android و I-phone
أو على اﻷقل شعارهم write once and run anywhere غير صحيح، لا يمكنك كتابة برنامج جافا لوندوز ثم تشغيله في أندرويد أو I-phone. وبرنامج أندرويد المكتوب بالجافا الخاصة بقوقل لا يمكن تشغيله في موبايل آخر ذو نظام تشغيل مختلف حتى لو كان يدعم جافا مثل Blackberry
السلام عليكم
ماهو رأيك في هذا الخبر، أن Cassandra تمت إعادة كتابتها بلغة C++ فأصبحت أسرع 10 مرات من النُسخة المكتوبة بجافا
أخي الفاضل، اقرأ و تعلم قبل أن تحكم على شيء ما.
اسمحولي إخوتي الكرام أن أنسحب من هذا النقاش و سُعدت جداً بهذا الحوار :)
تذكر ، كنتَ أنت مثلهم أو أقل يوماً ما :)
-
إن كنت ترى أرابيا يملأها الغير متعلمين :) فلما أنتَ هنا ؟ عليك بذهاب والجلوس مع لاري أو بيل جيتس ، فالمبرمجون هنا ليسوا من المستوى :)
-
اسمحلي ولكن تعليقاتك كلها تستنقص بالأخرين ، نعم لديك علم بالأمر ، ولكن هذا لا يبيح لك مثل هكذا أسلوب في ردود ، فهو لا يدل على ذو ثقافة أبداً :)
طالب العلم في رحلة مٌستمرة للبحث عن ما ينقصه لأن العلم في تطور و الحكمة ضالة المؤمن أينما وجدها فهو أحق بها.
إن كنت ترى أرابيا يملأها الغير متعلمين
لم أقل هذا أبداً !
اسمحلي ولكن تعليقاتك كلها تستنقص بالأخرين
لم أستنقص من الآخرين و لكن أرى أنه من غير الجدية و الموضوعية أن يتكلم أحد في شيء لا يتقنه، هل هذا خطأ ؟
لم أستنقص من الآخرين و لكن أرى أنه من غير الجدية و الموضوعية أن يتكلم أحد في شيء لا يتقنه، هل هذا خطأ ؟
قل لي اسم شخص واحد يتقن لغة برمجة ما. حتى لو كان هو من طورها.
في إحدى المرات وجدت احد مطوري مترجم فري باسكال أو أداة التطوير لازاراس، فسألته عن أشياء فيها. فقال لا يعرفها، فاستغربت من ذلك، لكنه أقنعني أنه مشروع كبير وكل شخص متخصص في مجال معين فيه.
طالب العلم في رحلة مٌستمرة للبحث عن ما ينقصه لأن العلم في تطور و الحكمة ضالة المؤمن أينما وجدها فهو أحق بها.
أقتبس لك رد الأخ الذي رددت على رده :
هو أعتقد أن تعليقي للسخرية منه أو من اللغة ولم يفهم بأني أردت فهم طرق التشفيير
وأقتبس لك من رده الأول :
هل هذا يعني أن معظم البرامج المكتوبة بالجافا سهلة الكسر ؟!
المنطقي عندما يطرح سؤال شخص في أي مكان في العالم ، سيكون الرد " جواب " على السؤال ، وليس طلب منه أن يذهب ويتعلم ، فهو سأله بالأصل للتعلم ، ويمكنك قرآءة الرد التالي :
، وتركيز على نقطة تالية :
على الأرجح أنك لن تحتاج أن تبحث عن دورة ROR كما يفعل المبتدئ في عالم البرمجة. بل سوف تكون اسألتك ماهي طرق الاتصال بقاعدة البيانات ...
أي أنه في عامل البرمجة السؤال يدل على علم مسبق في المعطيات ويريد جواب، ولا يجهلها البتة !
-
-
لم أقل هذا أبداً !
عزيزي إنظر لكل ردودك هنا ، بصراحة لم استفد إلا قليل منها ، لأن أغلبها ليس منطوي تحت أي فائدة أو نقاش ضمن الموضوع :)
-
-
لم أستنقص من الآخرين و لكن أرى أنه من غير الجدية و الموضوعية أن يتكلم أحد في شيء لا يتقنه، هل هذا خطأ ؟
هل أنتَ جاد ؟ لماذا وجدَ مجتمعات للنقاش ؟ أليس ليناقش ذو الخبرة بعضهم وقليل الخبرة يتعلم من نقاشه ؟ أصلاً ما فائدة النقاش إلا تعلم الطرفين !
بل أكبر خطأ ، إن كنت ترى أن لا يجب التكلم إلا من الخبراء ، حسناً كلامي هذا قط لم يكن خطأ ، وأقتبس :
عليك بذهاب والجلوس مع لاري أو بيل جيتس ، فالمبرمجون هنا ليسوا من المستوى :)
-
أسف على وقتك ، وأعتذر لن أكمل نقاش حول هذا الأمر :)
المنطقي عندما يطرح سؤال شخص في أي مكان في العالم ، سيكون الرد " جواب " على السؤال ، وليس طلب منه أن يذهب ويتعلم
قوله "هذه فضيحة للجافا" استفزني جداً و لا أدري كيف يأخذ أحكاما مُسبقة و هو يقول بأنه مبتدأ.
الهجوم على لغة ووصفها بالفضيحة سوقيٌ جداً و لا يمت للموضوعية بصلة و أنا أفضل الانسحاب في هذه الحالة لأن النقاش سيأخذ مجرى آخر.
أسف على وقتك ، وأعتذر لن أكمل نقاش حول هذا الأمر :)
طابت أوقاتك، بالتوفيق.
فقط للتوضيح
استفزني جداً و لا أدري كيف يأخذ أحكاما مُسبقة و هو يقول بأنه مبتدأ.
ركز في جملته :)
و مع ذلك غير مقتنع بمعظم الكلام إنها فضيحة بالنسبة Java
-
وطاب مسائك :)
كنت أعتقد أن فكرك غير محدود ، لما عرفت لماذا هاجمتني غيرت رأيي فيك :) ، بالمناسبة جملة "أنا مبتدأ و مع ذلك غير مقتنع بمعظم الكلام إنها فضيحة بالنسبة Java في تشفير ال Source code" أنا قصدت بهذة الجملة إني على غير إقتناع بالرد الأعلى الخاص بالأخ "معتز" لما قال إنها فضيحة بالنسبة اللجافا لأنها اللغة الثانية في الإستخدام وليس مهاجمة اللغة بحد ذاتها ، كيف أهاجم أول لغة تعلمتها ؟! خلاصة الكلام ليس ذنبي إنك فهمت قصدي غلط وظلمتني وأتمنى عدم الحكم السريع على الأشخاص
بالمناسبة، أرجو من الإخوة الكرام عدم الإفراط في التقييم بالسالب مع أنني لا أكترث له أبداً لكن من الناحية الموضوعية، يجب أن يخضع التقييم لأسباب منطقية بعيداً عن الشخصنة.
ردي مثلا على الأخ أبو عبد البر لا أدري لماذا تم تقييمه بالسالب !! :)
لا بل اقصد كثيرا من مستخدميها الذين صار التقييم السلبي والإجابي عندهم كاللعبة في يد الطفل
لو كان الأمر إلي لما جعلت التقييم السلبي إلا لمن حصل 200 نقطة أو أكثر ، على الأقل أضمن أن المقيم بالسالب رجل ذو علم وهو أعلم بما يفعل
التقييم السلبي لا يهمني ولكن له تاثير على المشاركات ، فكم من مشاركة مفيدة قيمت سالبا فنزلت في الظهور للناس وكم من مشاركة ساذجة قيمت إيجابا فكانت اول ما يظهر للناس
لا ينبغي أن يكون التقييم ممكنا لعامة الناس بل لا لابد أن يكون لمن هو أهل لذلك
التعليقات