لوحة المتصدرين
المحتوى الأكثر حصولًا على سمعة جيدة
المحتوى الأعلى تقييمًا في 07/01/20 في كل الموقع
-
الإصدار 1.0.0
116651 تنزيل
سطع نجم لغة البرمجة بايثون في الآونة الأخيرة حتى بدأت تزاحم أقوى لغات البرمجة في الصدارة وذاك لمزايا هذه اللغة التي لا تنحصر أولها سهولة كتابة وقراءة شيفراتها حتى أصبحت الخيار الأول بين يدي المؤسسات الأكاديمية والتدريبية لتدريسها للطلاب الجدد الراغبين في الدخول إلى مجال علوم الحاسوب والبرمجة. أضف إلى ذلك أن بايثون لغةً متعدَّدة الأغراض والاستخدامات، لذا فهي دومًا الخيار الأول في شتى مجالات علوم الحاسوب الصاعدة مثل الذكاء الصنعي وتعلم الآلة وعلوم البيانات وغيرها، كما أنَّها مطلوبة بشدة في سوق العمل وتعتمدها كبرى الشركات التقنية. دورة تطوير التطبيقات باستخدام لغة Python احترف تطوير التطبيقات مع أكاديمية حسوب والتحق بسوق العمل فور انتهائك من الدورة اشترك الآن بني هذا العمل على كتاب «How to code in Python» لصاحبته ليزا تاغليفيري (Lisa Tagliaferri) وترجمه إلى العربية محمد بغات وعبد اللطيف ايمش، وحرره جميل بيلوني، ويأتي شارحًا المفاهيم البرمجية الأساسية بلغة بايثون، ونأمل في أكاديمية حسوب أن يكون إضافةً نافعةً للمكتبة العربيَّة وأن يفيد القارئ العربي في أن يكون منطلقًا للدخول إلى عالم البرمجة من أوسع أبوابه. رُبط هذا الكتاب مع توثيق لغة بايثون في موسوعة حسوب لتسهيل عملية الاطلاع على أي جزء من اللغة مباشرة وقراءة التفاصيل باللغة العربية. هذا الكتاب مرخص بموجب رخصة المشاع الإبداعي Creative Commons «نسب المُصنَّف - غير تجاري - الترخيص بالمثل 4.0». يمكنك قراءة فصول الكتاب على شكل مقالات من هذه الصفحة، «المرجع الشامل إلى تعلم لغة بايثون»، أو مباشرةً من الآتي: المقال الأول: دليل تعلم بايثون اعتبارات عملية للاختيار ما بين بايثون 2 و بايثون 3 المقال الثاني: تثبيت بايثون 3 وإعداد بيئتها البرمجية المقال الثالث: كيف تكتب أول برنامج لك المقال الرابع: كيفية استخدام سطر أوامر بايثون التفاعلي المقال الخامس: كيفية كتابة التعليقات المقال السادس: فهم أنواع البيانات المقال السابع: مدخل إلى التعامل مع السلاسل النصية المقال الثامن: كيفية تنسيق النصوص المقال التاسع: مقدمة إلى دوال التعامل مع السلاسل النصية المقال العاشر: آلية فهرسة السلاسل النصية وطريقة تقسيمها المقال الحادي عشر: كيفية التحويل بين أنواع البيانات المقال الثاني عشر: كيفية استخدام المتغيرات المقال الثالث عشر: كيفية استخدام آلية تنسيق السلاسل النصية المقال الرابع عشر: كيفية إجراء العمليات الحسابية المقال الخامس عشر: الدوال الرياضية المضمنة المقال السادس عشر: فهم العمليات المنطقية المقال السابع عشر: مدخل إلى القوائم المقال الثامن عشر: كيفية استخدام توابع القوائم المقال التاسع عشر: فهم كيفية استعمال List Comprehensions المقال العشرون: فهم نوع البيانات Tuples المقال الحادي والعشرين: فهم القواميس المقال الثاني والعشرين: كيفية استيراد الوحدات المقال الثالث والعشرين: كيفية كتابة الوحدات المقال الرابع والعشرين: كيفية كتابة التعليمات الشرطية المقال الخامس والعشرين: كيفية إنشاء حلقات تكرار while المقال السادس والعشرين: كيفية إنشاء حلقات تكرار for المقال السابع والعشرين: كيفية استخدام تعابير break وcontinue وpass عند التعامل مع حلقات التكرار المقال الثامن والعشرين: كيفية تعريف الدوال المقال التاسع والعشرين: كيفية استخدام *args و**kwargs المقال الثلاثين: كيفية إنشاء الأصناف وتعريف الكائنات المقال الحادي والثلاثين: فهم متغيرات الأصناف والنسخ المقال الثاني والثلاثين: وراثة الأصناف المقال الثالث والثلاثين: كيفية تطبيق التعددية الشكلية (Polymorphism) على الأصناف المقال الرابع والثلاثين: كيف تستخدم منقح بايثون المقال الخامس والثلاثين: كيفية تنقيح شيفرات بايثون من سطر الأوامر التفاعلي المقال السادس والثلاثين: كيف تستخدم التسجيل Logging المقال السابع والثلاثين: كيفية ترحيل شيفرة بايثون 2 إلى بايثون 34 نقاط -
السلام عليكم ورحمة الله وبركاته تحيه طيبه للجميع لدي استفسار لو تكرمتو .. لدي الكود التالي لمشاركة الصور من تطبيقي الى تطبيق الواتساب على سبيل المثال : // Share image private void shareImage( ) { Intent sharingIntent = new Intent(Intent.ACTION_SEND); sharingIntent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_WHEN_TASK_RESET); sharingIntent.setType("image/*"); sharingIntent.putExtra(Intent.EXTRA_STREAM, imageUri); startActivity(Intent.createChooser(sharingIntent, "Share Image Using")); } ولكن لدي مشكلة كالتالي: انا استخدم هذا الكود في activity تم جلب الصور فيه من خلال Intent الكود التالي : final String imurl = i.getStringExtra("Image"); واقوم بعرضها من خلال مكتبة البيكاسو : Picasso.get().load(imurl).into(imageviews); سوالي الان لو ارغب بمشاركة هذا الصورة المعروضه الى الان تطبيق الواتساب مثلا كيف ممكن اعدل على كود مشاركة الصور الذي سبق وقمت بادراجه في اول السوال ؟1 نقطة
-
تم اخي دقائق فقط رح اعمل نسخه مصغره من المشروع وارفقها1 نقطة
-
ولا يهمك أخي ,هل يمكنك مشاركة ملف التطبيق كامل ,حتى أتفحصه ربما سبب المشكلة خطأ في مكان أخر1 نقطة
-
العذر وسموحه اخي تعبتك معي بنسبه ل اصدار نظام التشغيل هو 7.0 الذي اقوم بالاختبار عليه ليس جديد وبنسبه ل اضافة باكينج واتساب المشكلة تحدث بمجرد ان اضغط على زر المشاركة يعني شاشة اختيار التطبيقات التي سوف اشارك الصوره معها لا تظهر بالاساس الكرش يحدث قبل ذلك1 نقطة
-
سبب المشكلة هو من الهاتف الذي تقوم بتشغيل التطبيق عليه يملك إصدار أندرويد عالي مثل ٩ او ١٠ ,الخ.. وفي هذه الإصدارات يجب الحصول على الصلاحيات من التطبيق الذي تريد المشاركة علية أقصد في حالتك هو الواتس أب يوجد خيارات أول واحد هو حاول تجربة التطبيق على جهاز ذو إصدار أندرويد منخفض مثل ٥ أو ٦ الخيار الثاني هو جرب إضافة إسم الباكيج الخاص بالواتس أب إلى الفنشكن هكذا بشكل يدوي private void shareImage( ) { BitmapDrawable bitmapDrawable = ((BitmapDrawable) prImg.getDrawable()); Bitmap myimg = bitmapDrawable .getBitmap(); String bitmapPath = MediaStore.Images.Media.insertImage(getActivity().getContentResolver(), myimg,"some title", null); Uri bitmapUri = Uri.parse(bitmapPath); Intent shareIntent=new Intent(Intent.ACTION_SEND); String packageName = "com.whatsapp"; this.grantUriPermission(packageName,bitmapUri,Intent.FLAG_GRANT_READ_URI_PERMISSION); shareIntent.setType("image/*"); shareIntent.putExtra(Intent.EXTRA_STREAM, bitmapUri); startActivity(Intent.createChooser(shareIntent,"Share Image")); } وقم بالتجربة مرة أخرى إن لم ينفع أيضاً ,تفقد صلاحيات الواتس أب1 نقطة
-
لا تزال المشكلة مستمره غريبه صراحه الامر الكود كامل الان كالتالي :مع العلم اني استخدم الكود في Fragment shareImage.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { shareImage(); } }); return rootView; } public void grantPermissions(Context context, Intent intent, Uri uri, boolean writeAble) { int flag = Intent.FLAG_GRANT_READ_URI_PERMISSION; if (writeAble) { flag |= Intent.FLAG_GRANT_WRITE_URI_PERMISSION; } intent.addFlags(flag); List<ResolveInfo> resInfoList = context.getPackageManager() .queryIntentActivities(intent, PackageManager.MATCH_DEFAULT_ONLY); for (ResolveInfo resolveInfo : resInfoList) { String packageName = resolveInfo.activityInfo.packageName; context.grantUriPermission(packageName, uri, flag); } } private void shareImage( ) { BitmapDrawable bitmapDrawable = ((BitmapDrawable) prImg.getDrawable()); Bitmap myimg = bitmapDrawable .getBitmap(); String bitmapPath = MediaStore.Images.Media.insertImage(getActivity().getContentResolver(), myimg,"some title", null); Uri bitmapUri = Uri.parse(bitmapPath); Intent shareIntent=new Intent(Intent.ACTION_SEND); grantPermissions(getContext(),shareIntent,bitmapUri,true); shareIntent.setType("image/*"); shareIntent.putExtra(Intent.EXTRA_STREAM, bitmapUri); startActivity(Intent.createChooser(shareIntent,"Share Image")); }1 نقطة
-
هذه مشكلة نظام أندرويد (إختلاف طريقة الحصول على صلاحية تخزين الملفات)أو بالتحديد من ال SDK قم بإضافة الميثود التالية فوق الفنكشنshareImage الخاص بنا public void grantPermissions(Context context, Intent intent, Uri uri, boolean writeAble) { int flag = Intent.FLAG_GRANT_READ_URI_PERMISSION; if (writeAble) { flag |= Intent.FLAG_GRANT_WRITE_URI_PERMISSION; } intent.addFlags(flag); List<ResolveInfo> resInfoList = context.getPackageManager() .queryIntentActivities(intent, PackageManager.MATCH_DEFAULT_ONLY); for (ResolveInfo resolveInfo : resInfoList) { String packageName = resolveInfo.activityInfo.packageName; context.grantUriPermission(packageName, uri, flag); } } ثم نقوم بإضافتها في الفنكشن هكذا // Share image private void shareImage( ) { BitmapDrawable bitmapDrawable = ((BitmapDrawable) imageviews.getDrawable()); Bitmap myimg = bitmapDrawable .getBitmap(); String bitmapPath = Images.Media.insertImage(getContentResolver(), myimg,"some title", null); Uri bitmapUri = Uri.parse(bitmapPath); Intent shareIntent=new Intent(Intent.ACTION_SEND); grantPermissions(this,shareIntent,bitmapUri,true); shareIntent.setType("image/*"); shareIntent.putExtra(Intent.EXTRA_STREAM, bitmapUri); startActivity(Intent.createChooser(shareIntent,"Share Image")); }1 نقطة
-
نفس المشكلة عزيزي الكراش كالتالي: 2020-07-02 00:31:48.100 26184-26184/com.example.myapplication E/MediaStore: Failed to insert image java.lang.SecurityException: Permission Denial: writing com.android.providers.media.MediaProvider uri content://media/external/images/media from pid=26184, uid=10315 requires android.permission.WRITE_EXTERNAL_STORAGE, or grantUriPermission() هذا شكل الكود كامل لدي الان : private void shareImage( ) { BitmapDrawable bitmapDrawable = ((BitmapDrawable) prImg.getDrawable()); Bitmap myimg = bitmapDrawable .getBitmap(); String bitmapPath = MediaStore.Images.Media.insertImage(getActivity().getContentResolver(), myimg,"some title", null); Uri bitmapUri = Uri.parse(bitmapPath); Intent shareIntent=new Intent(Intent.ACTION_SEND); shareIntent.setFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION); shareIntent.setType("image/*"); shareIntent.putExtra(Intent.EXTRA_STREAM, bitmapUri); startActivity(Intent.createChooser(shareIntent,"Share Image")); }1 نقطة
-
تمام قم بإضافة الصلاحيات من خلال ال intent في الفنكشن هكذا // Share image private void shareImage( ) { BitmapDrawable bitmapDrawable = ((BitmapDrawable) imageviews.getDrawable()); Bitmap myimg = bitmapDrawable .getBitmap(); String bitmapPath = Images.Media.insertImage(getContentResolver(), myimg,"some title", null); Uri bitmapUri = Uri.parse(bitmapPath); Intent shareIntent=new Intent(Intent.ACTION_SEND); shareIntent.setFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION); shareIntent.setType("image/*"); shareIntent.putExtra(Intent.EXTRA_STREAM, bitmapUri); startActivity(Intent.createChooser(shareIntent,"Share Image")); } لاحظ shareIntent.setFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION);1 نقطة
-
بنسبه ل صلاحيات mainfest android:name="android.permission.WRITE_EXTERNAL_STORAGE" android:maxSdkVersion="18" /> اما لجريدل compileSdkVersion 28 minSdkVersion 161 نقطة
-
جرب إغلاق التطبيق تماماً ,وقم بتشغيله مرة أخرى في حال لم ينفع ,ما هو إصدار الminSDK لديك في ملف ال mainfest1 نقطة
-
1 نقطة
-
سبب الخطأ هو يخبرك بأنه يحتاج إلى ال permission لتخزين الصورة قم بإعطاءه ذلك أما من خلال الدخول على التطبيق من الجوال من خلال التطبيقات ثم الصلاحيات أو ما شابه ,أو قم بإضافة ال permssion المطلوب في ملف mainfest وهو هذا android.permission.WRITE_EXTERNAL_STORAGE ثم قم بالتجربة1 نقطة
-
هذا النتيجة اخي الكراش التالي: 2020-07-01 23:46:58.318 13563-13563/com.example.myapplication E/MediaStore: Failed to insert image java.lang.SecurityException: Permission Denial: writing com.android.providers.media.MediaProvider uri content://media/external/images/media from pid=13563, uid=10315 requires android.permission.WRITE_EXTERNAL_STORAGE, or grantUriPermission() at android.os.Parcel.readException(Parcel.java:1693) at android.database.DatabaseUtils.readExceptionFromParcel(DatabaseUtils.java:183) at android.database.DatabaseUtils.readExceptionFromParcel(DatabaseUtils.java:135) at android.content.ContentProviderProxy.insert(ContentProviderNative.java:476) at android.content.ContentResolver.insert(ContentResolver.java:1280) at android.provider.MediaStore$Images$Media.insertImage(MediaStore.java:1025) at com.example.myapplication.Fragmantmarket.ViewOrders.shareImage(ViewOrders.java:266) at com.example.myapplication.Fragmantmarket.ViewOrders.access$200(ViewOrders.java:65) at com.example.myapplication.Fragmantmarket.ViewOrders$5.onClick(ViewOrders.java:253) at android.view.View.performClick(View.java:6205) at android.widget.TextView.performClick(TextView.java:11103) at android.view.View$PerformClick.run(View.java:23653) at android.os.Handler.handleCallback(Handler.java:751) at android.os.Handler.dispatchMessage(Handler.java:95) at android.os.Looper.loop(Looper.java:154) at android.app.ActivityThread.main(ActivityThread.java:6682) at java.lang.reflect.Method.invoke(Native Method) at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1520) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1410) 2020-07-01 23:46:58.319 13563-13563/com.example.myapplication E/AndroidRuntime: FATAL EXCEPTION: main Process: com.example.myapplication, PID: 13563 java.lang.NullPointerException: uriString at android.net.Uri$StringUri.<init>(Uri.java:475) at android.net.Uri$StringUri.<init>(Uri.java) at android.net.Uri.parse(Uri.java:437) at com.example.myapplication.Fragmantmarket.ViewOrders.shareImage(ViewOrders.java:267) at com.example.myapplication.Fragmantmarket.ViewOrders.access$200(ViewOrders.java:65) at com.example.myapplication.Fragmantmarket.ViewOrders$5.onClick(ViewOrders.java:253) at android.view.View.performClick(View.java:6205) at android.widget.TextView.performClick(TextView.java:11103) at android.view.View$PerformClick.run(View.java:23653) at android.os.Handler.handleCallback(Handler.java:751) at android.os.Handler.dispatchMessage(Handler.java:95) at android.os.Looper.loop(Looper.java:154) at android.app.ActivityThread.main(ActivityThread.java:6682) at java.lang.reflect.Method.invoke(Native Method) at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1520) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1410) بنسبه لمسميات imageviews لا باس بالاختلاف لني اجرب على مشروعين حتى ارء النتيجة مشروع مفصل صغير حتى لا اتوه بالمشروع الكامل وبنسبه لتحميل هذا الكراش الان والتحميل مكتمل1 نقطة
-
تأكد من تحميل الصورة في الفيو قبل إستدعاء الفنكشن مثال Picasso.get().load(imurl).into(imageviews); وأيضا إسم الفيو لديك هو imageviews لذلك عدل ذلك في الفنكشن إلى التالي // Share image private void shareImage( ) { BitmapDrawable bitmapDrawable = ((BitmapDrawable) imageviews.getDrawable()); Bitmap myimg = bitmapDrawable .getBitmap(); String bitmapPath = Images.Media.insertImage(getContentResolver(), myimg,"some title", null); Uri bitmapUri = Uri.parse(bitmapPath); Intent shareIntent=new Intent(Intent.ACTION_SEND); shareIntent.setType("image/*"); shareIntent.putExtra(Intent.EXTRA_STREAM, bitmapUri); startActivity(Intent.createChooser(shareIntent,"Share Image")); }1 نقطة
-
يحدث الاكراش التالي اخي: Process: com.example.myapplication, PID: 8410 java.lang.NullPointerException: Attempt to invoke virtual method 'android.graphics.Bitmap android.graphics.drawable.BitmapDrawable.getBitmap()' on a null object reference at com.example.myapplication.Fragmantmarket.ViewOrders.shareImage(ViewOrders.java:259) at com.example.myapplication.Fragmantmarket.ViewOrders.onCreateView(ViewOrders.java:251) at androidx.fragment.app.Fragment.performCreateView(Fragment.java:2698) at androidx.fragment.app.FragmentStateManager.createView(FragmentStateManager.java:320) at androidx.fragment.app.FragmentManager.moveToState(FragmentManager.java:1187) at androidx.fragment.app.FragmentManager.moveToState(FragmentManager.java:1356) at androidx.fragment.app.FragmentManager.moveFragmentToExpectedState(FragmentManager.java:1434) at androidx.fragment.app.FragmentManager.moveToState(FragmentManager.java:1497) at androidx.fragment.app.BackStackRecord.executeOps(BackStackRecord.java:447) at androidx.fragment.app.FragmentManager.executeOps(FragmentManager.java:2169) at androidx.fragment.app.FragmentManager.executeOpsTogether(FragmentManager.java:1992) at androidx.fragment.app.FragmentManager.removeRedundantOperationsAndExecute(FragmentManager.java:1947) at androidx.fragment.app.FragmentManager.execSingleAction(FragmentManager.java:1818) at androidx.fragment.app.BackStackRecord.commitNowAllowingStateLoss(BackStackRecord.java:303) at androidx.fragment.app.FragmentPagerAdapter.finishUpdate(FragmentPagerAdapter.java:246) at androidx.viewpager.widget.ViewPager.populate(ViewPager.java:1244) at androidx.viewpager.widget.ViewPager.populate(ViewPager.java:1092) at androidx.viewpager.widget.ViewPager.onMeasure(ViewPager.java:1622) at android.view.View.measure(View.java:21051) at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:6459) at android.widget.LinearLayout.measureChildBeforeLayout(LinearLayout.java:1464) at android.widget.LinearLayout.measureVertical(LinearLayout.java:758) at android.widget.LinearLayout.onMeasure(LinearLayout.java:640) at android.view.View.measure(View.java:21051) at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:6459) at android.widget.FrameLayout.onMeasure(FrameLayout.java:185) at androidx.appcompat.widget.ContentFrameLayout.onMeasure(ContentFrameLayout.java:143) at android.view.View.measure(View.java:21051) at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:6459) at android.widget.LinearLayout.measureChildBeforeLayout(LinearLayout.java:1464) at android.widget.LinearLayout.measureVertical(LinearLayout.java:758) at android.widget.LinearLayout.onMeasure(LinearLayout.java:640) at android.view.View.measure(View.java:21051) at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:6459) at android.widget.FrameLayout.onMeasure(FrameLayout.java:185) at android.view.View.measure(View.java:21051) at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:6459) at android.widget.LinearLayout.measureChildBeforeLayout(LinearLayout.java:1464) at android.widget.LinearLayout.measureVertical(LinearLayout.java:758) at android.widget.LinearLayout.onMeasure(LinearLayout.java:640) at android.view.View.measure(View.java:21051) at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:6459) at android.widget.FrameLayout.onMeasure(FrameLayout.java:185) at com.android.internal.policy.DecorView.onMeasure(DecorView.java:853) at android.view.View.measure(View.java:21051) at android.view.ViewRootImpl.performMeasure(ViewRootImpl.java:2583) at android.view.ViewRootImpl.measureHierarchy(ViewRootImpl.java:1642) at android.view.ViewRootImpl.performTraversals(ViewRootImpl.java:1893) at android.view.ViewRootImpl.doTraversal(ViewRootImpl.java:1522) at android.view.ViewRootImpl$TraversalRunnable.run(ViewRootImpl.java:7098) at android.view.Choreographer$CallbackRecord.run(Choreographer.java:927) at android.view.Choreographer.doCallbacks(Choreographer.java:702) 2020-07-01 23:35:28.035 8410-8410/com.example.myapplication E/AndroidRuntime: at android.view.Choreographer.doFrame(Choreographer.java:638) at android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:913) at android.os.Handler.handleCallback(Handler.java:751) at android.os.Handler.dispatchMessage(Handler.java:95) at android.os.Looper.loop(Looper.java:154) at android.app.ActivityThread.main(ActivityThread.java:6682) at java.lang.reflect.Method.invoke(Native Method) at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1520) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1410)1 نقطة
-
مرحباً إخواني بدأت للتو في تعلم لغة الجافا سكربت وبدأت مع قناة الزيرو وإلى الآن توقفت عند دروس Function لأني بصراحة عندما حاولت حل أحد الألغاز في أحد المواقع لم أتمكن من ذلك، وأحسست أني لم أتعلم شيء مع أني كنت أكتب كل ما أفهمه وأقوم بالتطبيق عليه على الخفيف لكن أحسست أن هناك خللاً ما، ما الحل في هذه الحالة هل أقوم بالاكمال أم أقوم بدراسة الخوارزميات وحل المشاكل كما يقول البعض،؟ أي ما هي الطريقة الصحيحة لتقوية مهاراتي في جافا سكربت حتى لو قليلاً، أنا أعلم أن اللغة عميقة وكبيرة واحترافها ليس بالسهل لكن أنا أريد ع الأقل أن يكون مستواي جيد فيها...1 نقطة
-
1 نقطة
-
مرحباً.. يوجد نسخة مجانية بإمكانك تحميلها من الموقع الرسمي و لكن ستحتاج أن تكون موصولًا بالإنترنت على الدوام للعمل. و هذه مجموعة من البرامج المجانية البديلة لgravit designe : 1 - Inkscape 2 - Vectornator 3 - Figma 4 - GRAVIT 5 -GIMP1 نقطة
-
دراسة الخورزميات وحل المشاكل شيء أساسي في البرمجة. يمكنك تعلم هاته المهارة من خلال بعض الدورات المتخصصة بتعلم الخورزميات، لكن الجزء الأكبر من التعلم يكتسب عن طريق التطبيق ويتعلم مع الوقت. مهارة حل المشاكل أو الخوارزميات، هي في الأساس أفكار لحل مشاكل، يجب عليك أن تقوم بتحويل هذه الأفكار إلى كود برمجي. إذن عليك أن تكون ملمًا بأساسيات وأكواد جافاسكربت لأنك ستحتاجها في تحويل أفكارك لكود برمجي. بما أنك بدأت دورة جافاسكربت، أنصحك بمواصلة التعلم ما دمت تستفيد وتتعلم أشياء جديدة. حاول تطبيق الدروس التي تتعلمها، وتجربة مختلف الأكواد في الدورة. ثم حاول التعديل على التطبيقات قليلًا حتى تترسخ المفاهيم الجديدة وتفهم الشيفرات بشكل جيد. بعد مدة من تعلمك للأساسيات ستجد أنك إكتسبت بعض المهارات، يمكنك حينها بدأ دورة خوارزميات، أو محاولة حل بعض الألغاز البرمجية، إبدأ بالألغاز البسيطة ثم توجه لألغاز أصعب في كل مرة.1 نقطة
-
مرحباً عبد العزيز .. لا شك أن لغة الجافا سكربت لغة عميقة و مجالاتها عديدة و إحترافها ليس شيئاً سهلاً. قناة الزيرو قناة غنية و محتواها مفيد جداً و دورات الجافا سكربت التي يقدمها الأخ أسامة إبتداءً من أساسيات اللغة إلى DOM ثم ال BOM كافية للبناء المعرفي للغة لكن تطبيق المفاهيم و دمجها مع بعض لحل المشاكل أو التمارين التي تواجهك هذه مهارة أخرى تكتسبها مع الوقت لأن كل شخص و كيف يُفكر و المشكلة لديها عدة حلول برمجية أي هناك عدة طرق للوصول إلى الحل . في بداية الأمر قد لا يستطيع الشخص توظيف ما تعلمه من مفاهيم لحل مشكلة ما و هذا شيء طبيعي لكن بالممارسة أكثر و رؤية حلول كثيرة و بالبحث سيُكون الشخص هذه المهارة . ما عليك فعلهه هو مشاهدة الدروس و التطبيق عليها . إبحث عن مشاكل. لحلها تحتاج فقط المفاهيم التي درستها و ليس مفاهيم متقدمة لم تدرسها بعد حاول توظيف ما تعلمته لحل هذه المشاكل إن لم تستطع حلها بنفسك إبحث عن كيفية توظيف ما تعلمته مثلا لحل هذه المشكلة لا تشاهد الحل مباشرة بعد القيام بهذه المراحل إذا لم تجد حل أو لم تستطع إيجاد كيفية الحل قم بمشاهدة الحل لأن هذا الشيء سيُعلمك و مستواك سيتطور أكثر بعد تعلم أساسيات اللغة و ال DOM بالإضافة إلى ال BOM و التطبيق عليها إنتقل إلى تعلم الإصدارات الحديثة من جافاسكربت es6 و مافوق و ستجد قائمة لها في قناة الزيرو و بعدها إنتقل إلى البرمجة الكائنية أو غرضية التوجه بلغة الجافا سكريبت و بهذا تكون قد قطعت شوطا كبيراً يُنصح كثيرا بتعلم مكتبة jQuery قبل تعلم es6 و أخيراً أنصحك بتعلم أحد أطر عمل اللغة ك React.js Vue.js Angular بالتوفيق1 نقطة
-
لا يمكننا في جافاسكربت إلّا أن نرث كائنًا واحدًا فقط. وليس هناك إلّا كائن [[Prototype]] واحد لأيّ كائن. ولا يمكن للصنف توسعة أكثر من صنف واحد. وأحيانًا يكون ذلك مُقيّدًا نوعًا ما. فنقل بأنّ لدينا صنف ”كنّاسة شوارع“ StreetSweeper وصنف ”دراجة هوائية“ Bicycle، وأردنا صنع شيء يجمعهما: ”كنّاسة شوارع بدراجة هوائية“ StreetSweepingBicycle. أو ربّما لدينا صنف المستخدم User وصنف ”مُطلق الأحدث“ EventEmitter حيث فيه خاصية توليد الأحداث، ونريد إضافة ميزة EventEmitter إلى User كي يُطلق المستخدمون الأحداث أيضًا. هناك مفهوم في اللغة يساعد في حلّ هذه وهو ”المخاليط“ (Mixins). كما تقول ويكيبيديا، المخلوط هو صنف يحتوي على توابِع يمكن للأصناف الأخرى استعمالها دون أن ترث ذاك الصنف. أي بعبارة أخرى، يُقدّم المخلوط توابِع فيها وظائف وسلوك معيّن، ولكنّا لا نستعمله لوحده بل نُضيف تلك الوظيفة أو ذاك السلوك إلى الأصناف الأخرى. مثال عن المخاليط أبسط طريقة لكتابة تنفيذ مخلوط في جافاسكربت هو صناعة كائن فيه توابِع تُفيدنا في أمور معيّنة كي ندمجها بسهولة داخل كائن prototype لأيّ صنف كان. لنقل مثلًا لدينا المخلوط sayHiMixin ليُضيف بعض الكلام للمستخدم أو الصنف User: // مخلوط let sayHiMixin = { sayHi() { alert(`Hello ${this.name}`); // مرحبًا يا فلان }, sayBye() { alert(`Bye ${this.name}`); // وداعًا يا فلان } }; // الاستعمال: class User { constructor(name) { this.name = name; } } // ننسخ التوابِع Object.assign(User.prototype, sayHiMixin); // الآن يمكن أن يرحّب المستخدم بغيره new User("Dude").sayHi(); // Hello Dude! مرحبًا يا Dude! ما من وراثة هنا، بل نسخ بسيط للتوابِع. هكذا يمكن أن يرث صنف المستخدم من أيّ صنف آخر وأن يُضيف هذا المخلوط ليدمج فيه توابِع أخرى، هكذا: class User extends Person { // ... } Object.assign(User.prototype, sayHiMixin); يمكن أن تستفيد المخاليط من الوراثة بينها ذاتها المخاليط. فمثلًا، نرى هنا كيف يرث sayHiMixin المخلوطَ sayMixin: let sayMixin = { say(phrase) { alert(phrase); } }; let sayHiMixin = { __proto__: sayMixin, // (أو نستعمل Object.create لضبط كائن prototype هنا) sayHi() { // نستدعي التابِع الأب super.say(`Hello ${this.name}`); // (*) }, sayBye() { super.say(`Bye ${this.name}`); // (*) } }; class User { constructor(name) { this.name = name; } } // ننسخ التوابِع Object.assign(User.prototype, sayHiMixin); // الآن يمكن أن يرحّب المستخدم بالناس new User("Dude").sayHi(); // مرحبًا يا Dude! لاحظ كيف يبحث استدعاء التابِع الأب super.say() في sayHiMixin (في الأسطر عند (*)) - كيف يبحث عن التابِع داخل كائن prototype المخلوطَ وليس داخل الصنف. إليك صورة (طالع الجانب الأيمن فيها): يعزو ذلك إلى أنّ التابِعين sayHi وsayBye أُنشآ في البداية داخل sayHiMixin. فحتّى حين ننسخهما تُشير خاصية [[HomeObject]] الداخلية فيهما إلى sayHiMixin كما نرى في الصورة. وطالما يبحث super عن التوابِع الأب في [[HomeObject]].[[Prototype]] يكون البحث داخل sayHiMixin.[[Prototype]] وليس داخل User.[[Prototype]]. مخلوط الأحداث EventMixin الآن حان وقت استعمال المخاليط في الحياة العملية. يُعدّ توليد الأحداث ميزة مهمّة جدًا للكائنات بشكل عام، وكائنات المتصفّحات بشكل خاص. وتُعدّ هذه الأحداث الطريقة المُثلى ”لنشر المعلومات“ لمن يريدها. لذا هيًا نصنع مخلوطًا يُتيح لنا إضافة دوال أحداث إلى أيّ صنف أو كائن. سيقدّم المخلوط تابِعًا باسم .trigger(name, [...data]) ”يُولّد حدثًا“ متى حدث شيء مهم. وسيط الاسم name هو… اسم الحدث، وبعده تأتي بيانات الحدث إن احتجناها. كما والتابِع .on(name, handler) الذي سيُضيف دالة ”معاملة“ handler لتستمع إلى الأحداث حسب الاسم الذي مرّرناه. ستُستدعى الدالة متى تفعّل الحدث بالاسم name وسيُمرّر لها الوسطاء في استدعاء .trigger. وأيضًا… التابِع .off(name, handler) الذي سيُزيل المستمع handler. بعدما نُضيف المخلوط سيقدر كائن المستخدم user على توليد حدث ولوج "login" متى ولج الزائر إلى الموقع. ويمكن لكائن آخر (لنقل التقويم calendar) الاستماع إلى هذا الحدث للقيام بمهمة ما (مثلًا تحميل تقويم المستخدم الذي ولج). أو يمكن أن تُولّد القائمة menu حدثَ الاختيار "select" متى اختار المستخدم عنصرًا منها، ويمكن للكائنات الأخرى إسناد ما تحتاج من معالجات للاستماع إلى ذلك الحدث. وهكذا. إليك الشيفرة: let eventMixin = { /** *طريقة الانضمام إلى الحدث * menu.on('select', function(item) { ... } */ on(eventName, handler) { if (!this._eventHandlers) this._eventHandlers = {}; if (!this._eventHandlers[eventName]) { this._eventHandlers[eventName] = []; } this._eventHandlers[eventName].push(handler); }, /** * طريقة إلغاء الانضمام إلى الحدث * menu.off('select', handler) */ off(eventName, handler) { let handlers = this._eventHandlers && this._eventHandlers[eventName]; if (!handlers) return; for (let i = 0; i < handlers.length; i++) { if (handlers[i] === handler) { handlers.splice(i--, 1); } } }, /** * توليد حدث من خلال الاسم والبيانات المعطاة * this.trigger('select', data1, data2); */ trigger(eventName, ...args) { if (!this._eventHandlers || !this._eventHandlers[eventName]) { return; // no handlers for that event name } // call the handlers this._eventHandlers[eventName].forEach(handler => handler.apply(this, args)); } }; .on(eventName, handler) -- يضبط الدالة handler لتُشغّل متى ما حدث الحدث بهذا الاسم. تقنيًا تُخزّن خاصية _eventHandlerslrm مصفوفة من دوال المعاملة لكلّ حدث، وتُضيف الدالة إلى القائمة. .off(eventName, handler) -- يحذف الدالّة handler من القائمة. .trigger(eventName, ...args) -- يولّد حدث: كلّ المعاملات تُستدعى من _eventHandlers[eventName] مع قائمة الوسطاء ...args. الاستعمال: // أنشئ صنف class Menu { choose(value) { this.trigger("select", value); } } // أضف مخلوط مع التوابع المرتبط به Object.assign(Menu.prototype, eventMixin); let menu = new Menu(); // أضف معالج حدث من أجل أن يستدعى عند الإختيار *!* menu.on("select", value => alert(`Value selected: ${value}`)); */!* // ينطلق الحدث=> يُشغّل المعالج مباشرةً ويعرُض // القيمة المختارة:123 menu.choose("123"); يمكننا الآن أن نحوّل أيّ شيفرة لتتفاعل متى ما اخترنا شيئًا من القائمة بالاستماع إلى الحدث عبر menu.on(...). كما ويُسهّل المخلوط eventMixin من إضافة هذا السلوك (أو ما يشابهه) إلى أيّ صنف نريد دون أن نتدخّل في عمل سلسلة الوراثة. خلاصة مصطلح المخلوط في البرمجة كائنية التوجّه: صنف يحتوي على توابِع نستعملها في أصناف أخرى. بعض اللغات تتيح لنا الوراثة من أكثر من صنف، أمّا جافاسكربت فلا تتيح ذلك، ولكن يمكننا التحايل على الأمر وذلك بنسخ التوابع إلى النموذج الأولي prototype. يمكننا استعمال المخاليط بطريقة لتوسيع الصنف وذلك بإضافة سلوكيات متعددة إليه، مثل: معالج الأحداث كما رأينا في المثال السابق. من الممكن أن تصبح المخاليط نقطة تضارب إذا قاموا بدون قصد بإعادة تعريف توابع الأصناف. لذا عمومًا يجب التفكير مليًا بأسماء المخاليط لتقليل احتمالية حدوث ذلك. ترجمة -وبتصرف- للفصل Mixins من كتاب The JavaScript language1 نقطة
-
وعليكم السلام أهلا بك، يتطلب عليك في هذه الحالة ربط واجهة المستخدم لديك إلى سيرفر يقوم بمعالجة البريد الإلكتروني المدخل وحفظه إلى قاعدة بيانات. ويمكن عمل ذلك باستخدام أي اطار عمل خاص بتطوير سيرفرات الويب مثل Express - جافاسكريبت أو Django - بايثون أو Laravel - PHP. يمكنك الاطلاع على المقالات المتوفرة في الاكاديمية أو الدورات المخصصة لذلك لمعرفة المزيد حول تطوير سيرفرات الويب.1 نقطة