-
المساهمات
6975 -
تاريخ الانضمام
-
تاريخ آخر زيارة
-
عدد الأيام التي تصدر بها
218
إجابات الأسئلة
-
إجابة Wael Aljamal سؤال في كيفية الحصول على عداد counter داخل حلقة for في بايثون Python؟ كانت الإجابة المقبولة
يمكن عمل عداد للقائمة ضمن حلقة for عن طريق تعريف قائمة enumerate من القائمة الأصلية، والتي تعيد قيمتين، ترقيم العنصر الحالي ضمن الحلقة مع قيمته الفعلية
enumerate users = ['user A', 'user B', 'user C'] for counter, user in enumerate(users): print(f"{counter + 1} - user") يمكن تمرير المعامل start=1 ليبدأ العد من قيمة محددة بدل 0
users = ['user A', 'user B', 'user C'] for counter, user in enumerate(users,start=1): # ^^^^^^^^^ print(f"{counter } - user") # ^^^^^^^^^^ لاحاجة لجمع 1 للعداد ليبدأ من 1
-
إجابة Wael Aljamal سؤال في نقل البيانات بين الصفحات flutter كانت الإجابة المقبولة
في كل مرة تقوم باستدعاء باني الصفحة Page1 سيتم تهيئتها ببيانات جديدة، أي لايوجد ربط بين ما تم تمريره مسبقاً وما تقوم به الآن،
الحل هو حفظ PID في Shared Preference وجلبه في الدخول الثاني للصفحة في حال تمرير اسم، وتعديله لكل مرة يتم الدخول ل PID أي تحديث القيمة القديمة
-
إجابة Wael Aljamal سؤال في خطأ في تعريف محرف فارغ في ++C كانت الإجابة المقبولة
جرب استخدام المحرف الصفري '\0'
#include <iostream> using namespace std; int main() { cout<<"Start\n"; string sss = "0123456"; for (int i = 0; i <= 4; i++) { sss[i] = '\0'; } cout << sss; cout<<"\nEnd"; return 0; } سوف يطبع:
Start 56 End أي لايوجد قيمة للمحارف من 0 حتى 4
-
إجابة Wael Aljamal سؤال في خطأ في دجانغو django: ImportError: cannot import name 'ugettext_lazy' from 'django.utils.translation' كانت الإجابة المقبولة
يوجد عدة أخطاء، في حال استخدامك لإصدار دجانغو الجديد حيث تغير اسم الدالة ugettext_lazy وأصبح بدون u أي gettext_lazy. و خطأين في كتابة CharField و max_length
-
إجابة Wael Aljamal سؤال في استفسار عام في flutter - ربط تغيير في اللون مع تحديث حالة الصفحة كانت الإجابة المقبولة
عليك ربط اللون الخاص بالواجهة أو العنصر مع حالة الصفحة، وعمل set State وتعديل قيمة اللون الذي يتم تخزينه في متغير مثل أي حالة، ثم إعادة بناء الواجهة لوحده سوف يغير اللون.
جرب ذلك
-
إجابة Wael Aljamal سؤال في عدم جلب البيانات ل FutureBuilder في AlertDialog في flutter كانت الإجابة المقبولة
تأكد أن الدالة GetColor هي async وأنك تعمل await فيها لانتظار جهوزية النتيجة
-
إجابة Wael Aljamal سؤال في خطأ A four digit year could not be found Data missing عند تعديل قيمة updated_at في لارافيل Laravel؟ كانت الإجابة المقبولة
الخطأ لديك في تنسيق التاريخ، وهو مختلف عن ما هو موجود في تعريف النموذج.
إن أفضل طريقة لتعديل زمن آخر تعديل لحقل في لارافل هو استخدام دالة Eloquent وهي touch
$user->touch(); حل آخر هو استخدام date المقدم من PHP كالتالي:
$user->updated_at = date('Y-m-d G:i:s'); من الأفضل ترك الحقل updated at وعدم ربطه مع موضوع تسجيل الدخول، وعمل حقل آخر واستخدامه مثل last_login، اترك الحقل updated at للتعديلات الفعلية على قيم هذا الحقل.
-
إجابة Wael Aljamal سؤال في كيفية تمديد مدة الجلسة session في لارافيل Laravel؟ كانت الإجابة المقبولة
يمكن في لارافل في جميع إصداراتها من 5 حتى 9 التحكم في مدة الجلسة من خلال ملفات الإعداد configuration file حيث يتوفر ملف باسم session.php فيه المفتاح lifetime يقبل مدة الجلسة مقدرة بعدد الدقائق.
مثال لمدة جلسة بقيمة ساعتين بشكل مباشر <?php use Illuminate\Support\Str; return [ ..... 'lifetime' => 1 * (60 * 24 * 365), ..... ] أو بالاستعانة بملف البيئة env. .env SESSION_LIFETIME=525600
ثم قراءة القيمة في ملف الإعداد من خلال الدالة evn ممرين المفتاح المعرف في ملفها.
config/session.php <?php use Illuminate\Support\Str; return [ ..... 'lifetime' => env('SESSION_LIFETIME', 120), ..... ] -
إجابة Wael Aljamal سؤال في تخصيص / تعديل اسم المرسل لخدمة sms Twilio كانت الإجابة المقبولة
عليك أولا تفعيل ميزة Alphanumeric Sender ID
بالخطوات:
تسجيل الدخول للوحة التحكم www.twilio.com/console. في القائمة اليسرى اختر Programmable SMS. اضغط Settings. تأكد من تفعيل "Alphanumeric Sender ID" is set to Enabled. ثم عليك التأكد من أن الدولة قد تم تفعيل هذه الميزة فيها من هنا
ثم يمكنك التعديل على الاستمارة مع وضع الحقل From باسم الشركة لديك / التطبيق
curl -XPOST https://api.twilio.com/2010-04-01/Accounts/ACXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX/Messages.json \ -d "Body=Hello there" \ -d "To=+12685551234" \ -d "From=MyCompany" \ -u 'ACXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX:your_auth_token' هذه الخطوات مذكورة في توثيقهم الرسمي من هنا: personalize-sms-alphanumeric-sender-id
-
إجابة Wael Aljamal سؤال في كيفية التحقق من أنه تم إرسال رسالة البريد الإلكتروني بنجاح في لارافيل Laravel؟ كانت الإجابة المقبولة
التابع send نفسه نختبر قيمته
if (Mail::send(...)) {... أو بعد إرسال البريد، يمكن التحقق من وجود أخطاء، من خلال الدالة failures التي تعيد مصفوفة بالأخطاء التي حصلت مع إرسال البريد
// check for failed ones if (Mail::failures()) { // return failed mails return new Error(Mail::failures()); } أو التحقق من عددهم
if(count(Mail::failures()) > 0){ $errors = 'Failed to send password reset email, please try again.'; } كما يمكن عملها ب try catch سيتم رمي استثناء في حال حدوث خطأ
try { Mail::to($userEmail)->send($welcomeMailable); } catch (Exception $e) { //Email sent failed. } أو بالطريقة: اختبار نمط المتغير إن كان من الصنف SentMessage فالرسالة تم إرسالها
$welcomeEmailSent = Mail::to($userEmail)->send($welcomeMailable); if($welcomeEmailSent instanceof \Illuminate\Mail\SentMessage){ //email sent success }else{ //email sent failed }
-
إجابة Wael Aljamal سؤال في كيفية تحصيل عمل في عمر صغير، 14 عام! وهل يجب أن أعمل؟ كانت الإجابة المقبولة
بصراحة يا صديقي عمر 14 صغير للعمل، يعني يعتبر عمر للأطفال (بغض النظر عن الحالة الذهنية و معدل الذكاء و الفطنة) عمر 14 يكون لديك حياة اجتماعية مع أصدقاء من عمرك، تكتشف الحياة و تكون في المدرسة.
أنت تعتبر متقدم على عمرك، وترغب في العمل من هذا العمر، بصراحة تحية لك،
بالنسبة ادلي أشجعك على عيش المراهقة بصورة عادية لأنه من المبكر عليك البدء في العمل.
إن كانت رغبتك بالعمل ولا بد من ذلك، انشر على فيسبوك لديك و أخبر أصدقاءك أنه لديك معرفة في تصميم الواجهات والمواقع و قم بعمل لهم و انشر مشاريعك على حساباتك على مواقع التواصل ليعلم بك المجتمع المحيط، ثم يمكنك الحصول على زبائن من معارفك أو أصدقاء والدك و أقاربك.. تقوم بتصميم مواقع لعملهم و تساعدهم في ذلك، وبالطبع بمقابل مادي مقبول.
أنت شاب يافع وذكي و مثابر وهذا جيد جدا، أتمنى أن تجد فرصتك مع التحفظ على ان تعيش حياتك بالتدرج مع أصدقاء مم عمرك أو أكبر بقليل.
يوجد متسع من الوقت للعمل عندما تصبح بالغاً، لا أحبذ تحملك لهذه المسؤولية بهذا العمر.
-
إجابة Wael Aljamal سؤال في مقارنة بين path_provider vs sqlite vs hive in flutter كانت الإجابة المقبولة
path provider ليست قاعدة بيانات، بل واجهة برمجية لكي نصل لمسارات نظام ملفات نظام التشغيل وبذلك نستطيع كتابة الملفات التي تعود لتطبيقنا بمكان محدد ونستطيع الوصول لها لاحقاً، أي تساعد على توفير مسار معروف لتخزين ملفات. sqlite هي قاعدة بيانات علائقية relational database تفيد في إنشاء جداول و الربط بينها وعمل استعلامات، هي نسخة مخففة من MySQL. ليس عليك استعمالها في حال لا يوجد علاقات بين الجداول وأن تعمل استعلامات ضمن التطبيق. hive هي قاعدة بيانات تشبه shared preference حيث أنها تخزن البيانات على شكل مفتاح-قيمة وهي سريعة ومناسبة للاستعلامات و حجم بيانات كبير نوعاً ما ليس من المنطقي نسخ جدول من قاعدة البيانات للتطبيق. حجم بيانات كبير سيكون مرهق لمعالج الهاتف + وحدة التخزين و الذاكرة فيه
-
إجابة Wael Aljamal سؤال في كيفية تحديث البيانات في تطبيق flutter ومزامنتها مع قاعدة البيانات كانت الإجابة المقبولة
لا مانع من عمل استعلام مع قاعدة البيانات للتحقق من وجود تحديثات أو عدم وجودهم.
كيف نعلم أن البيانات لدينا محدًثة؟
إما عن طريق timestamp أي وقت يحوي توقيت آخر تعديل حدث على المستخدمين في قاعدة البيانات و نمرره مع البيانات و نخزنه في التطبيق يعمل backend على التحقق منه أو طريقة أخرى مثلاً من خلال ID آخر مستخدم مضاف.. سوف يرسل التطبيق توقبت آخر تحديث للملف
final _baseUrl = 'https://website.com/data.php?last_update=time...'; ^^^^^^^^^^^^^^^^^^^ تقوم بتخزين last_update في shared_preferencs
يرسل الخادم البيانات على الشكل التالي مثلاً
يوجد تحديث: نستخلص new_data ونخزنها في الملف { status: need_update, => تحديث الملف في التطبيق time_stamp: time => آخر تحديث في قاعدة البيانات new_data = [users] } لايوجد تحديث: نستعمل الملف المحلي { status: uptodate }
توقيت آخر تعديل لجدول قواعد بيانات MySQL
SELECT UPDATE_TIME FROM information_schema.tables WHERE TABLE_SCHEMA = 'dbname' AND TABLE_NAME = 'tabname'
-
إجابة Wael Aljamal سؤال في Unhandled Exception: FormatException: Unexpected character with readAsStringSync flutter كانت الإجابة المقبولة
المشكلة لديك في كتابة البيانات لأول مرة على التخزين المحلي في الملف، يجب كتابة البيانات بصيغة JSON
أي بدل السطر التالي:
file.writeAsStringSync(responsebody.toString(), flush: true, mode: FileMode.write); ^^^^^^^^^^^^^^^^^^^^^^ سوف يكون:
file.writeAsStringSync(json.encode(responsebody), flush: true, mode: FileMode.write); ^^^^^^^^^^^^^^^^^^^^^^^^^ وللقراءة نعمل التعديل:
data = await json.decode(await file.readAsString());
-
إجابة Wael Aljamal سؤال في استفسار عن path_provider flutter و الفرق بين sharedpreferences كانت الإجابة المقبولة
إن path_provider مختلفة عن sharedpreferences
path_provider هي plugin توفر واجهة برمجية تعطينا مسارات ضمن نظام الملفات الخاص بنظام التشغيل أي file system لإنشاء وتخزين ملفات / كبيرة الحجم نسبياً / نحتاجها بشكل متكرر في التطبيق و لكي نقلل وقت تحميلها من الشبكة لكل مرة نطلبها. (بدون عمل قاعدة بيانات محلية)
بشكل رئيسي نستعملها عند الحاجة لحفظ ملفات في ذاكرة تخزين مؤقت كاش cache memory لتوفير الملفات محلياً بدل طلبها من السيرفر.
sharedpreferences تستخدم لحفظ بيانات على شكل ثنائية (مفتاح / قيمة) وتكون البيانات حجمها صغير نسبياً مع إمكانية حفظ قائمة من السلاسل النصية List Of Strings وليس ملفات كبيرة، مثلاً نستعملها لحفظ تفضيلات المستخدم مثل theme التطبيق هل هو فاتح أو غامق light - dark أو بيانات المستخدم البسيطة مثل اسمه رقمه أي شيء متوسط إلى صغير. هي تخزين دائم لكن لانضع به بيانات خاصة و حرجة لأنها تحذف مع بيانات التطبيق مثلاً إن عملت clear data
-
إجابة Wael Aljamal سؤال في type 'int' is not a subtype of type 'String' Flutter كانت الإجابة المقبولة
أي تفصد قراءة قيمة _limit ؟
تتعلق قيمتها بالمفتاح results ونجلبه في PHP حسب نوع الطلب ولديك http.get
<?php $limit = $_GET['results']; include 'con.php'; ..
اكتب url
final String url = "*********************.php?results=$_limit";
-
إجابة Wael Aljamal سؤال في كيف اعرض كل انميات عن طريقة API؟ كانت الإجابة المقبولة
تنفيذ الدالة الأولى مجددا غير مهم، لقد عرفت للتو ما هو n, في الدالة الثانية اجعل القيمة الابتدائية ل i من مكان توقف اول مرة اي نستكمل مابعد 331.
يعني عدل i=1 إلى i=330 مثلا. واستدعي دالة getDetail() مباشرة
-
إجابة Wael Aljamal سؤال في التعامل مع Drawer وفتحه في صفحات أخرى برمجيا في flutter كانت الإجابة المقبولة
يوجد طريقة من خلال GlobalKey أي تعيين مفتاح عام ل Scafold ومن ثم يمكنك التحكم به من خلال ذلك المفتاح وفتح Drawer
final GlobalKey<ScaffoldState> _key = GlobalKey(); // انشاء مفتاح key @override Widget build(BuildContext context) { return Scaffold( key: _key, // اسناد المفتاح the key ل Scaffold. drawer: Drawer(), floatingActionButton: FloatingActionButton( onPressed: () => _key.currentState!.openDrawer(), // <-- فتح drawer ), ); } يمكنك تمرير المفتاح لأي مكون و التحكم بفتح وإغلاق Drawer.
الطريقة الثانية من خلال تمرير السياق context من خلال builder
@override Widget build(BuildContext context) { return Scaffold( drawer: Drawer(), floatingActionButton: Builder(builder: (context) { return FloatingActionButton( onPressed: () => Scaffold.of(context).openDrawer(), // <-- فتح drawer. ); }), ); } الطريقة الثالثة هي عمل مكون Drawer عام (بالأصل هو عبارة عن حاوية Container) تكون قابلة للانزلاق، هذا المكون يرث من StatefulWidget
import 'package:flutter/widgets.dart'; class PublicDrawer extends StatefulWidget { PublicDrawer({Key key}) : super(key: key); @override _PublicDrawerState createState() => _PublicDrawerState(); } class _PublicDrawerState extends State<PublicDrawer> { @override void initState() { super.initState(); } @override Widget build(BuildContext context) { return Container(); } } ثم في الصفحة الخاصة ب Home لديك نقوم باستدعائه وإسناده ل drawer من scaffold
import 'package:~~~~~~~/Widgets/drawer.dart'; class HomePage extends StatefulWidget { HomePage({Key key}) : super(key: key); @override _HomePageState createState() => _HomePageState(); } class _HomePageState extends State<HomePage> { @override Widget build(BuildContext context) { return SafeArea( child: Scaffold( drawer: PublicDrawer(), <---- body: Container(), ), ); } }
-
إجابة Wael Aljamal سؤال في استخدام اسم مستعار قصير (اسم مختصر) للمكتبات التي يتم تضمينها في بايثون كانت الإجابة المقبولة
يدعى الاسم المختصر للوحدة المستدعاة ب alias ويمكننا من إعادة تسمية الوحدة ضمن الملف الحالي
نستخدم الكلمة المفتاحية as ثم الاسم المستعار
import information_personal as inf_p1 inf_p1.Your_age(50) inf_p1.Your_age(30) inf_p1.Your_age(32) inf_p1.Name("Zeina") inf_p1.Name("Mary") inf_p1.Name("elias")
أرجو مراجعة درس الوحدات
-
إجابة Wael Aljamal سؤال في ظهور خطأ TypeError: Random.random() takes no arguments (2 given) بلغة بايثون عند محاولة توليد ارقام عشوائية كانت الإجابة المقبولة
إن تضمين المكتبات وأول عملية طباعة لايوجد بها مشكلة، أي المشكلة في آخر سطر، حيث قمت بتمرير معاملين للدالة random وهي لا تستقبل وسطاء.
إن الدالة random بنفسها تقوم بتشكيل قيمة عشوائية بين 0-1 ومن نمط float الدالة randint هي التي تقبل مجال من الأعداد start-end وتعيد قيمة عدد صحيح من ضمن المجال >>> type(random()) <class 'float'> >>> type(randint(1,3)) <class 'int'> >>> randint(1,3) 2 أي عليك تغيير الدالة المستدعاة
الدرس التالي فيه مثال عن random:
-
إجابة Wael Aljamal سؤال في كيفية إستخدام متغيرات البيئة في JavaScript في مشروع لارافيل Laravel؟ كانت الإجابة المقبولة
يمكن استخدام الوحدة MIX بعد تضمينها ك laravel-mix و الحزمة dotenv في الملف ثم نصل لمتغيرات البيئة من خلال الكائن process.env مع العلم أن المتغيرات المطلوبة في ملف env. نبدأها بكلمة MIX للمفاتيح
let mix = require('laravel-mix'); require('dotenv').config(); ثم let my_env_var = process.env.MY_ENV_VAR; يمكن استخدام الدالة env من PHP ضمن ملف blade لقراءة متغيرات البيئة
<script> var value = "{{ env("key") }}" </script> مثال آخر:
<script> var name = '{{ env('NAME') }}'; alert(name); </script>
-
إجابة Wael Aljamal سؤال في مشكلة في Flutter يظهر الخطأ Late Initialization Error Field get Task Async has not been initialized كانت الإجابة المقبولة
عملية التهيئة تختبر قيمة المتغير هل هي null أم لا.
وبذلك وضع late ليس سليم في هذه الحالة، أي يجب أن يكون نمط المتغير nullable
Future? _getTaskAsync;
كما أن هنالك ملاحظة، إسناد قيمة لدالة غير متزامنة يتوجب استخدام await قبل الاستدعاء
_getTaskAsync = await ApiUser();
-
إجابة Wael Aljamal سؤال في مشكلة في كتابة List تحتوي اسماء المستخدمين على ملف نصي بلغة بايثون يظهر الخطأ myfile.write(Name_User) TypeError: write() argument must be str كانت الإجابة المقبولة
يوجد حل آخر، وهو استخدام الدالة writelines ونمرر لها قائمة list من السلاسل النصية مثلاً كمثالك وسوف تعمل بدون مشكلة.
f = open("hsoub.txt", "w") f.writelines(["Welcome To Hsoub!", "Have Fun with learning."]) f.close() f = open("hsoub.txt", "r") print(f.read()) # Welcome To Hsoub!Have Fun with learning. سوف لن تضع أي فراغ بين المخرجات. في حال أردت فصل الأسطر نمرر n\ كمحرف سطر جديد f.writelines(["\nWelcome To Hsoub!", "\nHave Fun with learning."]) ^^^ ^^ أو نستخدم Join لتنسيق دمج عناصر القائمة
' '.join(list) or '\n'.join(list) أو يدوياً بالمرمر على القائمة بحلقة مثل ما أشار له سامح
-
إجابة Wael Aljamal سؤال في لا اريد تمرير جميع الوسطاء لتابع بلغة بايثون هل يمكن جعل الوسطاء اختيارية؟ كانت الإجابة المقبولة
إن اقتصر المتغير الذي لن يتم تمريره فقط على الرقم، يمكن حل المشكلة بوضع عبارة if تختبر قيمته الافتراضية التي نمررها مثلاً None ك optional arguments
وبذلك يكون لدينا اثنين من قوالب النص لطباعة أحدهم
def info(name,age,country,number=None): if number == None: print({f" Hello{name} Your age{age} and your country {country}") else: print({f" Hello{name} Your age{age} and your country {country} and {number}") بالنسبة للكلمات يمكن وضع نص افتراضي غير معلوم مثلاً
def info(name,age,country="UnKnown",number): print({f" Hello{name} Your age{age} and your country {country} and {number}") يمكنك القراءة عن: معاملات الدوال
-
إجابة Wael Aljamal سؤال في تحريك PageView في Flutter كانت الإجابة المقبولة
أولاً جرب عدم تمرير itemCount له، إن لم تنجح..
يوجد مكتبة مخصصة لهذه الحركة: carousel_slider تأكد من تمرير enableInfiniteScroll: true للباني
يمكن تطبيق فكرة الدوران من خلال تمرير باقي القسمة لمكان دليل الصفحة المراد عرضها، وبذلك تصبح حلقة لانهائية (مثال) حيث أن باقي القسمة على 3 للمتغير i في حال أخذ هذا المتغير مجال من الاعداد سيكون دوري
for i 1:100 i % 3 => 0 1 2 0 1 2 0 1 2 0 1 2.. لذلك،
لمنع الانتقال يمكن عمل حل ذكي نسبياً وهو تكرار المصفوفة الأصلية بشكل معكوس (دمج قائمة الصفحات مع عكسها عدة مرات)
pages = [1,2,3,4] reverse = [3,2] // بدون الأول لمنع التكرار myList = pages + reverse = 1 2 3 4 3 2 final_list = myList + myList + myList .. = 1 2 3 4 3 2 1 2 3 4 3 2 1 2 3 4 3 2 1 2 3 4 3 2 مرر الدليل الحالي على عدد الصفحات ل itemBuilder حيث أن الصفحات موضوعة ضمن مصفوفة باسم childern_ في المثال (final_list)
return PageView.builder( itemBuilder: (context, index) { return _children[index % _children.length]; }, controller: pageController, ); الآن سوف يتم التمرير بشكل دائري.