لوحة المتصدرين
المحتوى الأكثر حصولًا على سمعة جيدة
المحتوى الأعلى تقييمًا في 03/13/21 في كل الموقع
-
أنا أستخدم حزمة beyondcode / laravel-websockets وأحاول بدء تشغيل خادم websockets على Homestead. قمت بتثبيت الحزمة لكن عند تنفيذ الأمر: php artisan websockets:serve يُعطي الخطأ التالي: Starting the WebSocket server on port 6001... RuntimeException : Failed to listen on "tcp://0.0.0.0:6001": Address already in use at /home/vagrant/code/websockets/vendor/react/socket/src/TcpServer.php:164 160| \STREAM_SERVER_BIND | \STREAM_SERVER_LISTEN, كيف يُمكن حل هذه المُشكلة.1 نقطة
-
لدي في قاعدة البيانات حقلين تاريخ (ميلاد- وفاة) .. وأريد طرح هذين الحقلين من بعضهما استخدمت هذا الكود ويعمل بنجاح : $bday = new DateTime($birth); $today = new Datetime($death); $diff = $today->diff($bday); printf('%d سنة %d شهر %d يوم', $diff->y, $diff->m, $diff->d); printf("\n"); في حال كان أحد هذا الحقلين يحتوي فقط السنة (ميلاد أو وفاة) أي من دون تفاصيل لليوم والشهر مثلاً (1960) فكيف تتم عملية الطرح .. جربت هذا : $old = strtotime($death); $dth = date('Y',$old); أو كلا الحقلين يحتويان تاريخ لسنوات من دون وجود الشهر واليوم جربت ونجح الأمر : $res = $birth - death; echo "$res"; السؤال هو: كيفية الاستعلام وفحص الحقل الأول (الميلاد) هل هو تاريخ كامل (Y-m-d) (1970-11-05) أو هو حقل يحتوي تاريخ السنة فقط (Y)(1970) وكذلك الأمر بالنسبة للحقل الثاني (الوفاة) .. من ثم تنفيذ الكود المناسب لعملية الطرح ... اتمنى أن تكون الفكرة واضحة لكم .. وشكراً مقدماً ..1 نقطة
-
لدي برنامج يقوم بطباعة جملة للمستخدم على حسب القيمة التي يكتبها المستخدم , مثال: user_value = input("Type : ") if user_value == "1": print("I like to play football") elif user_value == "2": print("The sky is blue") elif user_value == "3": print("Python is a programming language") ولكن هل هنالك طريقة افضل من هذه حتى اقوم باستغناء عن الجمل الشرطية المتكررة ؟1 نقطة
-
إن السبب في ذلك هو أن middlewares في لارافيل والموجودة ضمن مصفوفة $routeMiddleware يتم تطبيقها والتحقق منها مباشرةً بعد تأكد لارافيل من المسار المزود عن طريق HTTP والسبب في ذلك لأن مسارات الطلبات المختلفة قد يكون لها middlewares مختلفة أيضاً. لأنه عندما يتم إرسال الطلبات POST, PUT, DELETE وغيرها... سيتم إرسالها إلى /api/authenticate والمتصفح يقوم بإرسال Options أولاً وبالتالي لارافيل يقوم بتسجيل المسار والتحقق من تطابقه مع المسارات الموجودة قبل الدخول والتحقق في middlewares وبما أن الموارد resources لا تحوي Options أو دوال معينة للتعامل معها لن تقوم بالتالي بالتحقق من أي middleware مرفق مع المسار وهنا يحدث الخطأ. مثال: Route::group(['middleware' => 'cors'], function () { Route::group(['prefix' => 'api'], function() { Route::resources('authenticate', 'AuthenticateController', ['only' => ['index']]); Route::post('authenticate', 'AuthenticateController@authenticate'); }); }); أما middlewares الموجودة ضمن مصفوفة $middleware يتم التحقق منها وتطبيقها (قبل) أن يقوم لارافيل بتسجيل المسار والتحقق من وجوده. فعملية المطابقة matching تستدعي findRoute الموجود ضمن: vendor/laravel/framework/src/Illuminate/Routing/Router.php على الشكل التالي: /** * Find the route matching a given request. * * @param \Illuminate\Http\Request $request * @return \Illuminate\Routing\Route */ protected function findRoute($request) { $this->current = $route = $this->routes->match($request); $this->container->instance(Route::class, $route); return $route; } لذلك لحل هذه المشكلة، يجب استخدام middleware عام أي (global) والذي بدوره يستقبل الخيارات الموجودة ضمن الترويسة OPTIONS ولاختصار الوقت والجهد يمكن استعمال مكتبة fruitcake / laravel-cors الموجودة والتي يمكن إضافتها إلى لارافيل والتي ستقوم بدورها باستعمال CORS الخاصة بها مثل أن يكون cors خاصة لكل مسار أو مجموعة أو لاحقة prefix في ملف api.php وتقوم بحل المشكلة الموجودة.1 نقطة
-
بشكل عام عندما نريد التعامل مع نوعين مختلفين من البيانات data types أو متغيرين من نفس النمط لكن مكتوب بتنسيق مختلف format، علينا تحويل القيمتين لقيمة عامة أو حيادية أو شاملة بحيث نستطيع فيها الاحتفاظ بجميع القيم السابقة لكل قيمة (مثلا الأعداد العشرية في حال التعامل مع float - double) , وغيرها. فالحل هنا هو تحويل النمطين لتاريخ كامل و التعامل معه. يمكنك استخدام الدالة التالية date_format لتجويل نمط التاريخ ليشمل جميع تفاصيل التاريخ و من ثم المقارنة. <?php $date=date_create("2013-03-15"); echo date_format($date,"Y/m/d H:i:s"); ?> قم بحفظ ناتج date_format لكل من المتغيرين لديك واعمل المقارنة بهما1 نقطة
-
نستخدم الطريقة الثانية في حالة واحدة فقط وهي أن كمن بحاجة إلى إستخدام this.props في التابع constructor class TestComponent extends React.Component { constructor(props) { super(props) // السطر التالي سيعمل بشكل صحيح console.log(this.props) } } وفي حالة إستخدام الطريقة الأولى ستكون النتيجة undefined: class TestComponent extends React.Component { constructor(props) { super() console.log(this.props) // Output: undefined // مازال بإمكانك إستخدام props console.log(props) } } لاحظ إن تمرير props إلى الدالة super أو عدم تمريرها لن يؤثر على إستخدام this.props في باقي التوابع مثل render أو كل توابع Lifecycle hooks، بمعنى أنها ستعمل بدون مشكلة في كلتا الحالتين. كما أن موقع React الرسمي ينصح بتمرير props دائمًا في المكونات من نوع Class: بالتوفيق.1 نقطة
-
لا توجد مشكلة في الكود في حد ذاته فالكود يعمل بشكل صحيح، لكن يخبرك مترجم Typescript أن هناك خطأ في السطر 12 لأنه لا يفهم صيغة JSX وذلك لأن JSX ليست معتمدة في لغة Typescript بشكل تلقائي، ويمكنك أن تلاحظ ذلك من صيغة الملف auth.ts والذي من المفترض أن يحتوي على كود Typescript فقط لكنك أضفت كود JSX، ولحل هذه المشكلة يجب تحويل اسم الملف إلى auth.tsx لكي يفهم المترجم صيغة كود JSX.1 نقطة
-
الفرق الوحيد بينهما هو أنك في حالة تمرير props الى super سوف تتمكن من الدخول الى this.props داخل ال constructor نفسها class MyComponent extends React.Component { constructor(props) { super(props) console.log(this.props) //يمكنك قراءتها console.log(props) //يمكنك قراءتها } } وفي حالة لم تقم بتمرير props الى super لا يمكنك الدخول الى this.props داخل ال constructor class MyComponent extends React.Component { constructor(props) { super(props) console.log(this.props) //لا يمكنك قراءتها console.log(props) //يمكنك قراءتها } } لكن هذا لن يؤثر على قدرتك للدخول الى this.props خارج ال constructor1 نقطة
-
يمكنك استخدام حزمة huawei_account, يجب إنشاء تطبيق لمشروعك في AppGallery Connect. إنشاء مشروع في App Gallery Connect سجّل الدخول إلى AppGallery Connect وحدد مشاريعي. انقر فوق مشروعك من قائمة المشروع. انتقل إلى إعداد المشروع - معلومات عامة - وانقر فوق إضافة التطبيق. إذا كان هناك تطبيق موجود في المشروع ، وتحتاج إلى إضافة تطبيق جديد ، فقم بتوسيع منطقة تحديد التطبيق في الجزء العلوي من الصفحة وانقر فوق إضافة التطبيق. في صفحة إضافة التطبيق ، أدخل معلومات التطبيق ، وانقر فوق موافق. دمج المكوِّن الإضافي لحساب Flutter قم بتسجيل الدخول إلى AppGallery Connect وحدد مشاريعي. ابحث عن مشروع التطبيق الخاص بك ، وانقر فوق اسم التطبيق المطلوب. اذهب إلى إعداد المشروع - معلومات عامة. في قسم معلومات التطبيق ، انقر فوق agconnect-service.json لتنزيل ملف التكوين. قم بإنشاء مشروع Flutter إذا لم يكن لديك واحد. انسخ ملف agconnect-service.json إلى دليل android / app الخاص بمشروع Flutter. انسخ ملف التوقيع الذي تم إنشاؤه في قسم إنشاء شهادة التوقيع ، إلى دليل android / app الخاص بمشروع Flutter. تحقق مما إذا كان ملف agconnect-services.json وملف التوقيع قد تمت إضافتهما بنجاح إلى دليل android / app الخاص بمشروع Flutter. افتح ملف build.gradle في دليل android لمشروع Flutter الخاص بك. انتقل إلى buildscript ثم قم بتكوين عنوان مستودع Maven و agconnect plugin لـ HMS SDK. buildscript { repositories { google() jcenter() maven { url 'https://developer.huawei.com/repo/' } } dependencies { /* * <Other dependencies> */ classpath 'com.huawei.agconnect:agcp:1.4.1.300' } } انتقل إلى allprojects ثم قم بتكوين عنوان مستودع Maven لـ HMS SDK. allprojects { repositories { google() jcenter() maven { url 'https://developer.huawei.com/repo/' } } } افتح ملف build.gradle في دليل android / app. apply plugin: 'com.android.application' apply from: "$flutterRoot/packages/flutter_tools/gradle/flutter.gradle" apply plugin: 'com.huawei.agconnect' يمكنك تصفح الحزمة و معرفة ما تقدمه من خصائص من هنا1 نقطة
-
وعليكم السلام اخ محمد عندما نحتاج لاستعلام معلومات من عدة جداول من قاعدة البيانات نستخدم عادة مايسمى بالـJoins ويوجد لها 4 أنواع ولكل نوع استخدام مختلف حسب الحاجة بالنسبة لسؤالك فالأنسب استخدام النوع Inner Join والذي من خلال نقوم بجلب معلومات من عدة جداول "وفق" عمود مرتبط بينهم فإذا اردنا جلب كافة الطلبات واسم العميل لكل طلب يوجد لدينا جدولين orders و clients ويربط بينهما العمود client_id الموجود في جدول orders ومايوافقه اي العمود id في جدول clients فيكون الاستعلام كالآتي SELECT orders.* , clients.client_name FROM orders INNER JOIN clients ON orders.client_id = clients.id والاستعلام السابق يقوم بجلب كافة الصفوف والاعمدة من جدول orders بالإضافة لعمود client_name من جدول clients1 نقطة
-
أخي ببساطة في ملف .env قم بتغيير APP_DEBUG=true إلى APP_DEBUG=false وهنا لا تظهر إي مشاكل في المتصفح و إذا كنت تريد إيجاد الأخطاء تجدها في ملف logs1 نقطة
-
يبدو أن المنفذ الإفتراضي الذي يتم تشغيل خادم websockets عليه من طرف الحزمة قيد التشغيل من طرف برنامج آخر أو Process آخر لذلك عليك تغييره لمنفذ لايتم إستخدامه حيث أنه يُمكن تمرير flag للأمر عن طريق --port و تمرير المنفذ الذي تريد بهذا الشكل: php artisan websockets:serve --port={port} مثال: php artisan websockets:serve --port=3030 كما يُمكن أيضاً تغيير المنفذ من خلال ملف إعدادات الحزمة عن طريق نشر الملف ضمن مجلد الإعدادات: php artisan vendor:publish --provider="BeyondCode\LaravelWebSockets\WebSocketsServiceProvider" --tag="config" بعد ذلك يُمكنك تغيير السطر: 'dashboard' => [ 'port' => env('LARAVEL_WEBSOCKETS_PORT', 6001), ], لاحظ أنه 6001 يُمكنك تغييره او إسناد قيمة ل LARAVEL_WEBSOCKETS_PORT في ملف env.1 نقطة
-
يجب أن تقوم بتمرير رقم IP Address للزبون مع ترويسة X_FORWARDED_FOR وبهذه الطريقة لن يتم حجب رقم IP Address للسيرفر الثاني. ويمكن القيام بذلك كالتالي: Route::get('/', function (Request $request) { $client = new \GuzzleHttp\Client(); $request = $client->request('GET', '/api/example', [ 'headers' => ['X_FORWARDED_FOR' => $request->ip()] ]); $response = $request->getBody(); }); حيث يتم وضع رقم IP ضمن الترويسة 'X_FORWARDED_FOR. ثم في السيرفر الأساسي يجب أن تقوم بإضافة عنوان السيرفر الآخر ضمن trusted proxy ضمن المسار التالي: App\Http\Middleware\TrustProxies ليتم أخذ عنوان IP Address من الترويسة Header بالشكل المطلوب. ويمكن القيام بذلك كالتالي: class TrustProxies extends Middleware { /** * The trusted proxies for this application. * * @var array */ protected $proxies = [ '192.168.1.1', // <-- يتم هنا وضع عنوان السيرفر الثاني ]; //... } الآن مع كل عملية استدعاء من الشكل على السيرفر الأول، ستتمكن من الوصول إلى عنوان الزبون Client IP بدلاً من عنوان السيرفر الثاني وبالتالي سيتم التخلص من الاختناق الحاصل: $request->ip()1 نقطة
-
بخصوص الصنف الذي لا يتم نشره عن طريق أمر: php artisan vendor:publish --tag=jetstream-views تحتاج إلى خطوات إضافية: إنشاء مُجلد Livewire في المسار: app\Http إن لم يكن موجود إنشاء صنف UpdateProfileInformationForm.php داخل المجلد Livewire نسخ مُحتوى الصنف \vendor\laravel\jetstream\src\Http\Livewire\UpdateProfileInformationForm.php إلى الصنف الذي أنشأته مع تعديل مجال الأسماء الخاص به. في مزود الخدمة JetstreamServiceProvider داخل التابع boot قم بإضافة: Livewire::component('profile.update-profile-information-form', UpdateProfileInformationForm::class); و لا تنسى إستدعاء الصنف الذي قمت بإنشائه النُسخة الخاصة بك. use App\Http\Livewire\UpdateProfileInformationForm; بعد ذلك يُمكنك التعديل كيفما شئت على الصنف.1 نقطة
-
يمكنك تنفيذ الأمر التالي php artisan vendor:publish --tag=jetstream-views بعد تنفيذ هذا الأمر ستجد UpdateProfileInformationForm في app\Http\Livewire\UpdateProfileInformationForm.php و ملف view في resources\views\profile\update-profile-information-form.blade.php عند القيام بذلك, يمكنك تغييرها كيف ما تريد. إذا لم ينجح الأمر التالي يمكنك إنشاء مجلد Livewire في المسار التالي app\Http\ إذا لم يكن موجود قم بإنشاء ملف UpdateProfileInformationForm.php داخل Livewire و من ثم نسخ ما بداخل \vendor\laravel\jetstream\src\Http\Livewire\UpdateProfileInformationForm.php و في JetstreamServiceProvider قم بنسخ Livewire::component('profile.update-profile-information-form', UpdateProfileInformationForm::class); يمكنك الآن تخصيص إصدارك من UpdateProfileInformationForm وفقًا لاحتياجاتك.1 نقطة
-
بعد نشر ملفات vendor يمكنك التعديل على مكوّن ما عن طريق إضافة وسم jetstream-views حتى يتم إنشاء الواجهات الموافقة بتنفيذ الأمر التالي: php artisan vendor:publish --tag=jetstream-views وبعد تنفيذ هذا الأمر ستجد UpdateProfileInformationForm ضمن المسار: app\Http\Livewire\UpdateProfileInformationForm.php وستجد الواجهة المرافقة له ضمن المسار التالي: resources\views\profile\update-profile-information-form.blade.php وعندها يمكنك التعديل عليها بالشكل المطلوب1 نقطة
-
لدي مشروع Laravel جديد أعمل عليه. أود أن أجعله متاحًا بلغات متعددة. لقد بدأت المشروع مع JetStream. حيث يتم التعامل مع مسارات المصادقة تلقائيًا بواسطة JetStream / Fortify. ثم أضفت Laravel Localization للتعامل مع تعدد اللغات. إنها تعمل بشكل جيد للمسارات التي أنشأتها بنفسي: Route::group( [ 'prefix' => LaravelLocalization::setLocale(), 'middleware' => [ 'localeSessionRedirect', 'localizationRedirect', 'localeViewPath' ] ], function() { Route::get('/', function () { return view('welcome'); }); Route::middleware(['auth:sanctum', 'verified'])->get('/dashboard', function () { return view('dashboard'); })->name('dashboard'); }); ولكن كيف يمكنني تعيين ال group و ال prefix و ال middleware الخاصة بالحزمة Laravel Localization على المسارات التي تتعامل معها Jetstream و Fortify؟1 نقطة
-
في JetstreamServiceProvider ضع التالي public function register() { Jetstream::ignoreRoutes(); } و في FortifyServiceProvider ضع التالي public function register() { Fortify::ignoreRoutes(); } وانسخ المسارات من Fortify vendor/laravel/fortify/routes/routes.php و من Jetstream vendor/laravel/jetstream/routes/livewire.php إلى ملف web.php في Group الذي تحتاجه1 نقطة
-
هل يمكنك مشاركة الكود لنتمكن من مساعدتك؟ الخطأ query on null يشير إلى أن الاستعلام يتم تنفيذه على اتصال غير موجود ضمن النطاق الحالي أو غير معرف، هذا مثال على كلا الحالتين: الحالة الأولى: متغير الاتصال في غير نطاق scope <?php $db = new mysqli('127.0.0.1', 'root', '', 'db_name'); function getData($user_id){ $result = $db->query("SELECT * FROM chatpp WHERE id = '$user_id'"); //.... } نلاحظ هنا أننا قمنا بتعريف متغير الاتصال db خارج نطاق التابع getData و عند استخدامه داخل التابع لتتنفيذ الاستعلام سيعطي الخطأ: query() on null ولحل هذا الخطأ نقوم بتعريف متغير الاتصال كـ global variable كالتالي: <?php global $db = new mysqli('127.0.0.1', 'root', '', 'db_name'); function getData($user_id){ $result = $db->query("SELECT * FROM chatpp WHERE id = '$user_id'"); //.... } الحالة الثانية: هي وجود خطأ في تسمية متغير الاتصال (بسبب السرعة أو نسخ و لصق الاكواد الجاهزة من الانترنت دون تنقيحها) كالتالي: <?php $db = new mysqli('127.0.0.1', 'root', '', 'db_name'); $result = $conn->query("SELECT * FROM chatpp WHERE id = '$user_id'"); حيث في الكود السابق تم تعريف متغير اتصال اسمه db و استخدام متغير اتصال اخر اسمه conn لاستدعاء تابع الاستعلام. هذه هي الاخطاء الأكثر شيوعا لهذا النوع من الأخطاء، في حال لم تحل المشكلة بتطبيق الحلول السابقة قم برفع الكود كي نتمكن من مساعدتك.1 نقطة
-
اهلا استاذي انحل المشكل عن طريق حذف كل cache شكرا لك.1 نقطة
-
1 نقطة
-
هذا موضع مناسب جدا لاستعمال القاموس في بايثون ، نعلم ان القاموس يختلف من المصفوفة الاعتيادية من انه يحمل مفتاح (key) لكل قيمة (value) و هذا المفتاح دائما مميز و قيمته لا تتكرر لذلك يمكنك الاعتماد عليه في هذا الحال ، اليك المثال : # يمكنك عمل قاموس حيث ان المفتايح هي القيمة التي يمكن ان يكتبها المستخدم # و قيمة كل مفتاح هو الرد الذي يستخدمه البرنامج reply = { "1" : "I like to play football", "2" : "The sky is blue", "3" : "Python is a programming language" } r = input('type : ') # متغير فيه قيمة المستخدم print(reply.get(r)) #get عرض قيمة المفتاح باستخدام المعامل لاحظ شيء مهم ، في المثال قمنا باستخدام المعامل get بدلا من هذه الطريقة لعرض النتيجه : print(reply[r]) وذلك لانها تقوم بعرض الخطا KeyError في حال عدم وجود مفتاح بقيمة المستخدم ، اما get يقوم بعرض None اذا لم نجد المفتاح.1 نقطة
-
جرب تعليق ذلك السطر و ضع مكانه هذا السطر: Route::get('/', function () { dd("test"); }); ثم قم بعمل clear لأي cache او إعدادات عن طريق الأمر: php artisan optimize:clear ثم حاول تشغيل التطبيق.1 نقطة
-
ماهو المسار الذي تُحاول الوصول إليه أي مسار من المسارات المرفقة أعلاه ظهرت صفحة 4041 نقطة
-
يجب ترميز الملف (الصورة) بالصيغة base64 وطباعته في shell قبل نقله إلى لارافيل، ثم يتم فك الترميز base64 في لارافيل. فبفرض لديك السكريبت التالي في بايثون: import base64 from io import BytesIO from PIL import Image, ImageDraw background = Image.new('RGBA', (500, 500)) d = ImageDraw.Draw(background) d.text((10, 10), "Hello World", fill=(255, 255, 0)) imgByteArr = BytesIO() background.save(imgByteArr, format='PNG') imgByteArr = base64.b64encode(imgByteArr.getvalue()) --> يتم هنا الترميز في base64 قبل الطباعة print(imgByteArr) ثم في لارافيل يتم استدعاء process وانتظار انتهاء تنفيذ السكريبت واختبار حدوث أي خطأ أثناء التنفيذ عن طريق استخدام process->isSuccessful كالتالي: public function newImage() { $process = new Process('python3 /path-to-script/shell.py'); $process->run(); if ( ! $process->isSuccessful()) { return abort(404); } return response(base64_decode(str_replace_first('b', '', $process->getOutput())))->header('Content-Type', 'image/png'); } حيث يتم استخدام base64_decode لفك الترميز ونمرر له القيمة الناتجة من تنفيذ السكريبت السابق عن طريق process->getOutput وأخيراً يجب إضافة الترويسة المناسبة لنمط الملف، في حال (صورة) يكون image/png.1 نقطة
-
يقوم لارافيل بفصل ملفات CSS و JavaScript في جزمة منفصلة laravel/ui، لكي يتم تثبيتها عند الحاجة لها فقط، ويمكن تثبيت هذه الحزمة عن طريق الأمر التالي كما وضح الأستاذ @بلال زيادة composer require laravel/ui:^2.4 بعد تثبيت الحزمة يجب أن يتم إستخراج ملفات CSS و JavaScript منها إلى مجلد المشروع نفسه وذلك عن طريق الأمر // في حالة إستخدام Bootstrap php artisan ui bootstrap // في حالة عمل تطبيق ب Vue.js php artisan ui vue // في حالة عمل تطبيق React.js php artisan ui react // لتوليد ملفات login / registration يتم إضافة --auth للأمر php artisan ui bootstrap --auth php artisan ui vue --auth php artisan ui react --auth بعد تنفيذ الأمر السابق يجب تثبيت كل الحزم الموجودة في ملف package.json عن طريق الأمر npm i بمجرد إنتهاء الأمر السابق يمكن تحويل ملفات SCSS إلى CSS وتجميعها في ملف واحد وهو public/css/app.css، ونفس الشيء بالنسبة لملفات js عن طريق تنفيذ الأمر: npm run dev لاحظ أن ملف public/css/app.css ,وملف public/js/app.js لن يكونا مضغوطين وستظهر أي أخطاء js في الـ console لتسهل عملية التطوير، لكن بعد الإنتهاء من المشروع يجب ضغط هذه الملفات وإخفاء كل رسائل الخطأ عن طريق تنفيذ الأمر: npm run prod بالتوفيق.1 نقطة
-
بعد تثبيت Laravel يجب عليك تنفيذ الأوامر التالية لتحميل ملفات الجافاسكريبت و css للمشروع composer require laravel/ui:^2.4 php artisan ui bootstrap npm install npm run dev1 نقطة
-
مرحباً عبدالواحد: يجب أن يكون كل شيئ بإشراف من الطبيب حتى لا تكون هناك مضاعفات إلا إذا كان المكان الذي ستشتري منه هذه النظارات عبارة عن معمل وسيقيسون النظر وما إلى ذلك فلا بأس.1 نقطة
-
مثال لتبديل قيمة متحولين: import java.util.*; class Swap_With { public static void main(String[] args) { int x, y, temp;// x and y are to swap Scanner sc = new Scanner(System.in); System.out.println("Enter the value of X and Y"); x = sc.nextInt(); y = sc.nextInt(); System.out.println("before swapping numbers: "+x +" "+ y); /*swapping */ temp = x; x = y; y = t; System.out.println("After swapping: "+x +" " + y); System.out.println( ); } } اعتمدنا على متغير مؤقت temp لتخزين قيمة X السابقة ثم وضعنا قيمة Y في X (في هذه اللحظة قيمة X أصبحت تساوي قيمة Y و خسرت قيمتها السابقة) ثم نعيد تخزين قيمة المتغير المؤقت temp في Y (أي إرجاع قيمة X الأصلية) يمكن تطبيق نفس الفكرة على المصفوفات: public class SwapArrayElements { public static void main(String[] args) { int a[] = {4, 9, 7}; int t = a[0]; a[0] = a[2]; a[2] = t; for (int i = 0; i < a.length; i++) { System.out.println(a[i]); //TESTING } } في حال استخدام الواجهة الصفة ArrayList لتعريف المصفوفة، يمكننا اسنتخدام الدالة الجاهزة swap من الصنف Collections: Collections.swap(ArrList, 1, 2); أول وسيط يأخذ المصفوفة ثم دليل العنصر الأول ثم دليل العنصر الآخر و سيتم تبديل قيمتهم المثال بشكل كامل: // Java program to swap two elements in an ArrayList import java.util.ArrayList; import java.util.Collections; public class GFG { public static void main(String a[]) { // Create the Array List ArrayList<String> ArrList = new ArrayList<String>(); // add the values in Array List ArrList.add("Item 1"); ArrList.add("Item 2"); ArrList.add("Item 3"); ArrList.add("Item 4"); ArrList.add("Item 5"); // display Array List before swap System.out.println("Before Swap the ArrayList "); System.out.println(ArrList); // Swapping the elements at 1 and 2 indeces Collections.swap(ArrList, 1, 2); // display Array List after swap System.out.println("After Swap the ArrayList"); System.out.println(ArrList); } } _____________________ ضرب مصفوفتين: مثال لحساب فاتورة تحوي على منتجات مختلفة و يمكن شراءعدة واحدات من المنتج نفسه: public class ShoppingCart { public static void main(String[] args) { int price[] = {4, 9, 7}; // سعر المنتج int qty[] = {2, 5, 3}; // عدد المنتجات int amt[] = new int[3]; // إجمالي المنتج for (int i = 0; i < price.length; i++) { // حلقة لضرب العناصر المتقابلة من مصفوفتين amt[i] = price[i] * qty[i]; System.out.println(amt[i]); //TESTING } }1 نقطة
-
مرحبًا، منذ سنتين أو أكثر كانت هذه مشكلة كبيرة جدًا خاصة للمستقلين الجدد في مجال الكتابة والترجمة، ولكن الوضع الآن قد اختلف كثيرًا صديقي! فقد ازداد عدد المشاريع المطروحة يوميًا في هذا المجال من واقع خبرتي منذ أن بدأت عام 2017 وحتى الآن. لقد بدأت العمل على مستقل في مجال الكتابة والترجمة منذ منتصف عام 2017، وكانت هذه المشكلة عقبة كبيرة جدًا بالنسبة لي، وكان السؤال الأوحد والذي طالما أردده "لماذا لم يتم اختياري؟" وهنا بدأت خطواتي الفعلية للتغلب على هذه العقبة، لأتمكن بفضل الله من إنجاز أكثر من 90 مشروع، وسأسردها لك فيما يلي: 1- الأمر ليس متعلق بكونك جديدًا على الموقع أو تمتلك تقييمًا جيدًا أم لا! ما يبحث عنه أصحاب المشاريع هو موضوع نسبي! فهناك من يبحث عن الجودة مقابل السعر، وهناك من يبحث عن أقل تكلفة مقابل عمل "معقول" وهناك من يبحث عن الجودة ولا يهمه التكلفة. وهنا يأتي دور استراتيجية "الاستهداف" كمستقل جديد كل ما يجب أن يهمك هو أن تحصل على أول مشروع لتبني به تقييم جيد على الموقع لتدخل به في طورٍ أعلى أو رتبة أعلى من كونك مستقلًا يراه أصحاب المشاريع مُهمَّشًا بسبب عدم تنفيذك لمشاريع سابقة. وهنا ستسهدف المشاريع التي يبحث أصحابها عن الجودة مقابل السعر الأقل! قد تبدو تضحية بعض الشيء، ولكن لا شيء في عالم العمل الحر بالمجان! 2- كن استثنائيًا! من بين مئات العروض التي يتلقاها أصحاب المشاريع، هناك عرض واحد يقوم بقبوله. وهنا يكمن اللغز. يجب أن تفهم جيدًا متطلبات العميل، لتقوم بدمجها في عرضك بطريقة مميزة واستثنائية يجعله يختارك لهذا العرض الذي كتبته فقط، لهذه الكلمات الاستثنائية التي كتبتها بغض النظر عن قوة أو ضعف ملفك الشخصي. الأمر الذي يحتم عليك أن تكون كلماتك الأولى في العرض مشوقة وخاطفة تجعله يستمر في قراءة بقية العرض رغم عدم امتلاكك "الخمس نجوم المضيئة" التي يبحث عنها معظم أصحاب المشروع عند اختيارهم للمستقلين. 3- كن محددًا ودقيقًا! عند كتابة العرض، يجب أن تذكر لصاحب المشروع ما ستقوم به بناءً على متلطباته بطريقة مُفصلة وواضحة، مع طرح الاقتراحات الفعالة التي يمكن أن تسهم في خروج مشروعه بأبهى صورة. "نتحدث هنا عن الاستثنائية في الصياغة، يجب أن يكون عرضك جذابًا" 4- طمأن صاحب المشروع! بعد كتابة عرض استثنائي، سيقع صاحب المشروع في حيرة كونه سيغامر بقبول عرض مستقل لم يعمل على أي مشروع من قبل، وهنا ستحتاج لطمأنته كالتالي: 1- إضافة معرض أعمال مميز. 2- كتابة عرض مفصل بكافة الخطوات التي ستقوم به، وبخطة العمل، وبتوقيتات التسليم - إن كان المشروع كبير . 3- أذكر له أنك جديد عى الموقع، لكنك محترف وقد قمت بالعديد من المشاريع من قبل وهكذا.. 5- لا تكن مُثير للريبة! عندما يقرر صاحب المشروع أنك قد تكون مناسب سيقوم بالتواصل معك أولًا، وهناك قد تأخك الحماسة لوعد صاحب المشروع بوعود خرافية مقابل العمل بهدف طمأنته وجعل يوافق عليك! وهنا قد يترك عنده أثر سلبي. كن طبيعيًا، تحدث عما ستقوم به، خطة العمل، كيف ستقوم بتبليغه بتحديثات العمل وهكذا، قم بطمأنته ولكن بعقلانية. وهنا، أختم بنصيحة " ليس المهم هو حصولك على أول وظيفة! المهم هو أن تستمر في هذه المنافسة الشرسة بجودة عملك واحترافيتك، لتحصل على المزيد من الوظائف والكثير من التقييمات الإيجابية!" أتمنى لك كل التوفيق1 نقطة
-
مرحبا منصور، يتم تطوير الخدمات Back end كـ API لجعل التطبيق يدعم عددا كبير من طرق العرض على مختلف أنظمة التشغيل و مختلف المنصات بالإضافة لمشاركة بياناته بسهولة مع مواقع و تطبيقات أخرى. إن تطبيق مفهوم API (واجهة التطبيقات البرمجية) هي لعزل البيانات الخام التي هي أساس أي صفحة ويب أو تطبيق هاتف محمول عن طريقة تمثيلها كصفحات HTML مثلا فأنت إذا لم توفر API وطلب موقع أو تطبيق خدمة يوفرها موقعك أو أنت شخصيا أردت توسيع مشروعك بدعم الهواتف المحمولة، فهل سترسل لهم البيانات على شكل صفحات ويب HTML ؟ إن التوجه الحديث هو بناء API أولا، مثلا بناء سكربتات PHP تستعلم أجزاء محددة من البيانات من قاعدة البيانات و طلب هذه السكربتات بمواقع مختلفة إذا كانت صفحة ويب أو تطبيق للأجهزة المحمولة ومن ثم يتم تنسيق هذه البيانات بطرق عرض متناسبة مع المنصة التي عرضت عليها. تشبه مفهوم MVC الذي استعملته في لارافيل بعض الشيئ. أي فصل المتحكم المسؤول عن جلب البيانات (controller) عن طرق عرض البيانات (view). و إتاحة استخدام نفس المتحكم في أكثر من مكان ضمن المشروع و في أكثر من صفحة. بالنسبة لشعورك بالملل، أقترح عليك أن تصنع API خاص بالمشروع الذي أنجزته و استخدامه كمشروع منفصل و جلب البيانات منه و عرضها بطريقة مختلفة و تدريب نفسك على هذه المهارات. هنا باستخدام API لايوجد تصميم لصفحات ويب أو واجهات مستخدم لكنها أهم بالنسبة لعمل المبرمج. جلب البيانات الصحيحة هو أهم جزء من عمل المشروع. بالطبع لا أنقص أهمية التصميم حيث يجب أن يلبي الذوق العام و يحقق معايير تجربة المستخدم بالتوفيق1 نقطة