اذهب إلى المحتوى

Mustafa Suleiman

الأعضاء
  • المساهمات

    14490
  • تاريخ الانضمام

  • تاريخ آخر زيارة

  • عدد الأيام التي تصدر بها

    384

كل منشورات العضو Mustafa Suleiman

  1. أنت لم تذكر ما هي تلك المشاريع؟ هل هي مشاريع كبيرة ومشابهة للمشاريع التي يتم تنفيذها بشكل حقيقي وليس مجرد نماذج؟ عند تنفيذ مشروع هل تواجه مشكلة في التنفيذ؟ أم تستطيع تطبيق ما تريده بشكل مباشر أي تعرف ما هي الأدوات التي عليك استخدامها؟ وهنا لا أقصد البحث عن حل لمشكلة معينة تواجهها أو كيفية تنفيذ أمر ما في المشروع بل أقصد المشروع ككل. هل تعمقت في الواجهة الخلفية؟ وأنشات مشاريع أكثر تعقيدًا؟ هل قمت بدراسة المفاهيم المتقدمة في CSS وجافاسكريبت، هل قمت بإنشاء مشروع معقد مثل SPA بواسطة جافاسكريبت وHTML, CSSS ؟ وأنا هنا لا أقصد التقليل أبدًا من ما قد حققته بالفعل، فمجهود يحترم أحسنت حقًا، لكن ما قصدته هو توجيهك إلى أنك في البداية وبمستوى Junior أعتقد، لذلك لا تنتقل إلى لغة أخرى إلا بعد أن تصبح متمكن من الـ Stack الخاص بك وهو MERN. ولتتعمق أكثر في مجالك ستحتاج إلى اللغة الإنجليزية، لذلك عليك بكتابة الكود لكي لا تنسى من وقت آخر من خلال إنشاء مشروع تحب العمل عليه، ثم العمل على اللغة الإنجليزية لو كنت تراها غير جيدة حيث ستحتاج إلى مستوى سؤهلك للاستماع والقراءة في البداية ثم الكتابة والتحدث لتستطيع العمل في شركة في المستقبل. ابحث عن مشاريع أكثر تعقيدًا واعمل عليها، او عليك بتعلم المفاهيم المتقدمة في الـ Stack الخاص بك، وكما أشرت ستحتاج إلى اللغة الإنجليزية لكون الكتب والمقالات والدورات المتقدمة باللغة الإنجليزية.
  2. ستحتاج إلى استخدم JavaScript لتحريك صورة الغلاف على محور الـ Y، باستخدام حدث onMouseMove لتحديد موقع المؤشر وتحديث خاصية background-position-y في CSS بناءًا على ذلك الموقع، وتستطيع ضبط سرعة التحريك عن طريق ضبط القيمة التي تتم إضافتها إلى background-position-y بناءًا على حركة المؤشر. ولكن نصيحتي إليك هي بأن تقوم بإنشاء الموقع بخواصه الأساسية والمطلوب منك فقط، ثم إذا أردت التحسين وإضافة ميزات أخرى افعل ذلك، وتلك الطريقة ستجنبك إضاعة الوقت في ميزات جانبية بدلاً من العمل على إنهاء المشروع بميزاته الأساسية. وللعلم تلك الطريقة مستخدمة في بناء المشاريع حيث يتم بناء ما يعرف باسم MVP أي المشروع بميزات أساسية ليعمل فقط ويتم تجريبه ثم مع الوقت يتم إضافة الميزات والخواص المطلوبة للتوسع وبناءًا على إحتياجات المشروع، ولا أن يتم بناء كل الميزات وإطلاقها في نفس الوقت وتأخير إطلاق المشروع. وعلي أي حال،سأوضح لك بمثال بالكود: أولًا، قم بإنشاء مكون React يسمى "CoverPhoto"، واحفظه في ملف "CoverPhoto.js": import React, { useState } from 'react'; import './CoverPhoto.css'; const CoverPhoto = () => { const [positionY, setPositionY] = useState(0); const handleMouseMove = (event) => { const { clientY } = event; setPositionY(clientY); }; return ( <div className="cover-photo" onMouseMove={handleMouseMove} style={{ backgroundPositionY: `${positionY}px` }} /> ); }; export default CoverPhoto; ثم، قم بإنشاء ملف CSS واحفظه بنفس المجلد تحت اسم "CoverPhoto.css": .cover-photo { width: 100%; height: 300px; background-image: url('image.jpg'); background-size: cover; background-position: center; transition: background-position-y 0.3s ease-out; } وضع في اعتبارك تعديل "image.jpg" بمسار صحيح لصورة الغلاف. أخيرًا، عليك بتضمين مكون "CoverPhoto" في مكان الذي يُعرض فيه الغلاف في المشروع. الخاص بك. import React from 'react'; import CoverPhoto from './CoverPhoto'; const App = () => { return ( <div> {/* عناصر أخرى في التطبيق */} <CoverPhoto /> {/* عناصر أخرى في التطبيق */} </div> ); }; export default App;
  3. بالطبع ذلك ممكن، ستقومين بنفس الخطوات التي أشرك إليك بها، ثم ستقومين بالتالي: اختاري خيار or من أجل تصفية بكلمة أخرى. من القائمة المنسدلة الثانية التي أسفل الأولى اختاري contain أيضًا من أجل تصفية العمود بكلمة تحتوي على الكلمة التي نريدها. بعد ذلك، اكتبي الكلمة التي تريديها ولتكن عربية مثلاً. أخيرًا اضغطي على ok ليتم التصفية. وستجدين أنه تم تصفية الحقول التي تحتوي على كلمة رياضيات التي وضعناها في الخانة الأولى، ثم عربية التي وضعناها في الخانة الثانية.
  4. المشكلة تنتج عن محاولة unserialize (فك تسلسل) بيانات في مشروع Laravel، حاول تنفيذ الأوامر التالية: php artisan config:clear php artisan view:clear php artisan key:generate وأيضًا قم بحذف الكوكيز الخاصة بالموقع في المتصفح كالتالي: في حال استمرار المشكلة اتبع التالي: استخدم أحدث إصدار من Laravel وتأكد أنه متوافق مع إصدار PHP الذي تستخدمه. قم بفحص الكود الخاص بك للتأكد من عدم وجود أخطاء في استخدام دالة unserialize(). تحقق من صحة البيانات التي تتم unserialize عليها، فربما تكون هناك تعديلات أو تغييرات في بيانات مخزنة تسبب في هذا الخطأ، فربما تحتاج إلى إصلاح أو تحديث البيانات المخزنة. تحديث ملف composer.json وتشغيل أمر composer update للتأكد من تحديث جميع الاعتماديات والمكتبات اللازمة لمشروع Laravel. حذف ملف bootstrap/cache/config.php وملفات الكاش المؤقتة الأخرى في حال كنت تستخدم الكاش لتأكيد أن التغييرات في الكود تطبق بشكل صحيح.
  5. سبب المشكلة هو عند تثبيت حزمة http في تطبيق Flutter، تظهر رسالة الخطأ في ملف pubspec.yaml وتشير إلى أن هناك تعارض في إصدارات الحزم. حيث أن الحزمة http تعتمد على حزمة http_parser بإصدارات محددة، وفي حالتك أنت فإصدار الحزمة http_parser المتوفر في البيئة لا يتوافق مع الإصدار المطلوب بواسطة حزمة http. والرسالة تخبرك أن الإصدارات المسموح بها لـ http_parser هي أكبر من 8.0.1 وأقل من 4.0.0، ولكن الإصدار المثبت حاليًا في البيئة ليس من ضمن هذه النطاقات. بما أن التطبيق الخاص بك يعتمد على إصدار 0.12.2 من حزمة http، والتي بدورها تعتمد على إصدارات http_parser غير متوافقة، فإن عملية حل الإصدارات تفشل وتظهر رسالة الخطأ المذكورة. عليك بالتالي: تحديث إصدار حزمة http في ملف pubspec.yaml إلى إصدار يتوافق مع الإصدارات المتاحة لـ http_parser. يمكنك الاطلاع على وثائق الحزمة لمعرفة الإصدارات المدعومة. التحقق من توافق إصدارات الحزم في مشروعك والتأكد من أن الحزم المختلفة التي تستخدمها تعتمد على إصدارات متوافقة مع بعضها البعض. إعادة تثبيت أو تحديث حزمة http_parser لتتوافق مع الإصدارات المطلوبة. من المهم أيضًا استخدام أحدث إصدار من Flutter ومكتبة الـ Dart، فقد تكون هناك تحديثات أو إصلاحات لمشكلة مشابهة.
  6. ربما المشكلة لديك أنك لم تقم بربط ملف جافاسكريبت في HTML بشكل صحيح تأكد من ذلك ومن كتابة اسم الملف والمسار بشكل صحيح. وأيضًا ربما هناك خطأ في اسم الكلاس أو الـ id وإليك مثال يعمل بشكل سليم، وقد كتبت لك السكريبت داخل كود HTML تجنبًا للمشاكل قم بتجربته. <!DOCTYPE html> <html> <head> <title>مثال عن استخدام innerHTML</title> </head> <body> <h1 id="example-heading">مرحبًا بك!</h1> <div id="example-content"> <p>هذا هو المحتوى الأصلي.</p> </div> <script type="text/javascript"> // استهدف عنصر العنوان const heading = document.getElementById('example-heading'); // تحديث المحتوى باستخدام innerHTML heading.innerHTML = 'مرحبًا بكم في مثال innerHTML!'; // استهدف عنصر المحتوى const content = document.getElementById('example-content'); // تحديث المحتوى الداخلي للعنصر بواسطة innerHTML content.innerHTML = `<p>هذا هو المحتوى المحدث باستخدام <strong>innerHTML</strong> و <strong>ES6</strong>!</p>`; </script> </body> </html> وهناك نقاش آخر لنفس المشكلة أنصحك بالإطلاع عليه:
  7. قد يكون السبب هو عدم إعادة تعيين قيمة ScrollY عند تحميل الصفحة الجديدة، بمعنى عندما تقوم بالتنقل بين الصفحات في تطبيق React باستخدام React Router، يتم عرض المحتوى الجديد في نفس المكان الذي كانت فيه الصفحة السابقة، ومن المحتمل أن ScrollY يتم الاحتفاظ به من الصفحة السابقة، مما يجعل الصفحة الجديدة تبدأ في وضعية غير متوقعة. لذلك قم بإعادة تعيين قيمة ScrollY إلى الصفر عند تحميل الصفحة الجديدة باستخدام useEffect() مع مصفوفة الاعتماد الفارغة [] لضمان أن يتم تشغيلها فقط عند تحميل الصفحة للمرة الأولى. import { useEffect } from 'react'; function YourComponent() { useEffect(() => { window.scrollTo(0, 0); }, []); // ... }
  8. إذا فهمت سؤالك بشكل صحيح، فأنت ترغب في تجميع المقالات التي تحمل نفس التاريخ تحتاج إلى استخدام حلقة foreach في Laravel صحيح؟ وإذا كان كذلك فتستطيع استخدام دالة groupBy المتاحة في Laravel لتجميع المقالات حسب التاريخ كالتالي: // استعلام لاسترداد جميع المقالات الموجودة في قاعدة البيانات $articles = Article::all(); // تجميع المقالات حسب التاريخ $groupedArticles = $articles->groupBy('date'); // عرض المقالات حسب التاريخ @foreach($groupedArticles as $date => $articles) <h2>{{ $date }}</h2> @foreach($articles as $article) <h3>{{ $article->title }}</h3> <p>{{ $article->content }}</p> @endforeach @endforeach حيث تسترد جميع المقالات من قاعدة البيانات، ثم تجميعها حسب التاريخ باستخدام الدالة groupBy('date')، ثم استخدام حلقتي foreach متداخلتين لعرض المقالات حسب التاريخ. وعليك بالتأكد من ضبط النموذج وقاعدة البيانات بشكل صحيح وفقًا لما تريده.
  9. أهلاً بك عبد اللطيف، أرجو منك طرح السؤال المتعلق بالدورة أسفل الفيديو الخاص بالسؤال وسيتم الإجابة عليك، وطرح الأسئلة العامة هنا. وبخصوص سؤالك، المشروع القادم هو مشروع تطوير مجتمع يشبه حسوب I/O وستجد في فيديو المقدمة في المدخل ملفات المشروع أسفل الفيديو أرجو منك تحميلها واستخدامها كما فعلت سابقًا، حيث أن الحزم مختلفة، وإليك رابط الفيديو للمشروع القادم:
  10. بالطبع يظهر لك الخطأ عليك باستخدام ملف إكسيل الذي أرفقته لك في مجلد المشروع وليس ملفك أنت، وقم بالتجربة.
  11. هل يمكنك استخدام الكود الخاص بي في المرفقات؟ CLASS_1.rar
  12. سأختصر الطريق عليك والإجابة هي لا قولاً واحدًا ليس في الوقت الحالي، من الممكن أتمتة 70% من عملية تطوير الواجهة الأمامية بحلول 2027 بناءًا على دراسة نشرت مؤخرًا، ولكن ذلك لا يعني أن ذلك أكيد بنسبة 100% فكان من المتوقع أن توجد عربات طائرة في بداية الألفينات وهو ما لم يحدث. عليك بتعلم البرمجة والتركيز بشدة على الأساسيات لا تعلم التقنيات فقط مثل React بدون تعلم اللغات الأساسية وهي HTML, CSS, JS ثم التعمق في مجالك بحيث تصبح قادر على حل المشاكل في المشاريع الكبيرة بعد اكتساب الخبرة. لا تشغل بالك بذلك حاليًا، وتعلم ما تريده والتجربة خير دليل، جرب إنشاء موقع بواسطة أي ذكاء اصطناعي وسيفشل بشكل مضحك. ما يتم حاليًا هو أتمتة المهام المكررة والمساعدة في كتابة أجزاء من الكود، تستطيع البحث عن Copilot وستفهم ما أقصده، وإليك نظرة، الأمر أشبه بمساعد شخصي للبرمجة: https://github.com/features/copilot
  13. أرجو منك الإنتباه، حيث أنك وضعت قيمة إفتراضية في ملف MINE.py بقيمة 1 للمتغير column_values وعند تشغيل البرنامج ستجد في القائمة رقم واحد بشكل إفتراضي وتلك القيمة غير موجودة في ملف إكسيل الذي ارفقته لك بالطبع. ويجب تغيير قيمة المتغير column_values كالتالي: column_values = "test" ثم شغل البرنامج وعند الضغط على print سيتم طباقة القيم الموجودة في العمود الأول.
  14. المطلوب هو إعادة ترتيب البيانات في عمود "Occupation" في جدول "OCCUPATIONS" بحيث يتم فرز كل اسم تحت المهنة المناسبة له ووضعه بشكل أبجدي، وعرضها في أعمدة جديدة تحمل عناوين "Doctor"، "Professor"، "Singer"، و "Actor"، على التوالي. وعندما لا يكون هناك أسماء إضافية تتوافق مع المهنة، يتم عرض القيمة NULL. وفي حالة عدم وجود أسماء إضافية في بعض الأعمدة، سيتم ملء الخانات الفارغة بقيمة NULL.
  15. حددي العمود الذي ترغبين في تصفيته، وكما ذكرتي فهو عمود "اسم الدورة". انتقلي إلى علامة تبويب "بيانات" (Data) في شريط الأدوات العلوي. في مجموعة الأدوات الخاصة بـ "فرز وتصفية" (Sort & Filter)، انقري على الزر "تصفية" (Filter)، وستظهر صناديق تصفية بجانب عناوين الأعمدة. اضغطي على السهم المنسدل بجانب عنوان العمود الذي ترغبين في تصفيته، وستظهر قائمة منسدلة كالتالي اختاري منها: Text filters أو تصفية بالنصوص، وستظهر قائمة جانبية اختاري منها contains أو تحتوي على. والآن قومي بكتابة رياضيات مثلاً وسيتم تصفية كل الخانات في العمود التي تحتوي على رياضيات كالتالي:
  16. قمت بتعديل المشروع لك ورفعه بعد التعديل، عليك فقط تعديل المسار لملف people.xlsx الذي أنشأته وبه بيانات تجريبية فقط، وستقوم بتعديل المسار في ملف MINE.py وتغيير اسم المستخدم إلى اسم المستخدم الخاص بحاسوبك، حيث افترضت أن مجلد المشروع موجود لديك على سطح المكتب. file_path = r"C:\Users\اسم المستخدم هنا\Desktop\CLASS_1\people.xlsx" # المسار الذي تريده CLASS_1.rar
  17. هناك مشكلة في السطر التالي: self.column_values_list = [cell.value for cell in self.sheet['A']] ففي الدالة column_values() في صنف book_E، الخطأ الذي يحدث هو AttributeError: 'book_E' object has no attribute 'column_values_list'. وذلك لأنك تحاول تعيين قائمة column_values_list كخاصية للكائن self، ولكن لم تقم بتعريفها كمتغير عضو في الكلاس book_E. عليك بتعريف المتغير column_values_list كمتغير عضو في الدالة __init__ كالتالي: def __init__(self, BATH=None): self.BATH = BATH self.workbook = None self.sheet = None self.column_values_list = [] # تعريف المتغير كمتغير عضو في الكلاس بعد ذلك، تستطيع استخدام المتغير self.column_values_list في الدالة column_values() بدون أن تحدث الأخطاء. تأكد أيضًا من استيراد load_workbook من الوحدة الصحيحة openpyxl.
  18. إذا كان السؤال تابع لأحد الأسئلة الخاصة بك أرجو وضعه أسفل السؤال وسيتم الرد عليك لا تقلق، وبخصوص سؤالك، في السطر التالي: from LOOD_BOOK import book_E هل أخطأت في اسم الملف؟ حيث أنك قمت بتهجئتها على أنها "LOOD_BOOK" بدلاً من "LOAD_BOOK"، تأكد من أن اسم الملف صحيح. وفي السطر: from ttkbootstrap.constants import * يتم استيراد جميع الثوابت من وحدة ttkbootstrap.constants. ولكن الوحدة ttkbootstrap لا توفر هذه الثوابت، والأفضل الاستيراد كالتالي: from tkinter import ttk وفي السطر التالي: b1 = ttk.Button(widgets_frame, text="print", bootstyle=("info", "outline"), command=COLS_V) الخاصية bootstyle ليست خاصية صحيحة.، هل أنت ترغب في تعيين نمط الزر؟ باستطاعتك استخدام الخاصية style بدلاً من ذلك كالتالي: b1 = ttk.Button(widgets_frame, text="print", style="info.Outline.TButton", command=COLS_V) وفي السطر التالي: combo_name = ttk.Combobox(widgets_frame,justify=RIGHT,width=35,values=column_values) لم يتم تعريف المتغير column_values في هذا المكان، وعليك تعريفه كمتغير عالمي أو تمرير قيمة صحيحة للوظيفة ttk.Combobox أي التعديل لما يلي: combo_name = ttk.Combobox(widgets_frame, justify="right", width=35)
  19. في الكلاس book_E، عليك بتعديل الدالة __init__ لتستقبل المسار كمعامل افتراضي بدلاً من استخدام القيمة المباشرة: class book_E: def __init__(self, BATH=None): self.BATH = BATH self.workbook = None self.sheet = None def load_file(self): if self.BATH: self.workbook = load_workbook(self.BATH) self.sheet = self.workbook.active # ... الدوال الأخرى هنا ... وأيضًا تعديل دالة COLS_V لتحميل الملف عند النقر على زر "Button": def COLS_V(): file_path = "E:\people.xlsx" # المسار الذي تريده BOOK1 = book_E(file_path) BOOK1.load_file() combo_name.configure(values=BOOK1.column_values()) وعليك بتحديث الأمر المرتبط بزر "Button" في الكود الرئيسي ليستدعي الدالة COLS_V بدلاً من COLS_V(BOOK1): b1 = ttk.Button(widgets_frame, text="print", bootstyle=("info", "outline"), command=COLS_V) وبذلك عند النقر على زر "Button" سيتم تحميل الملف وتعيين القيم في combobox. أما بالنسبة لتعديل المتغير column_values، بإمكانك تغيير قيمته بناءً على ما تحتاجه في البرنامج، باستخدام دالة BOOK1.column_values() للحصول على قائمة القيم من الملف، ومن ثم تعيينها للمتغير column_values. كمثال: column_values = BOOK1.column_values() وتستطيع استخدام هذه القائمة لإعداد الخيارات المتاحة في combobox كما فعلت في الكود الحالي لديك.
  20. لا أحد بإمكانه الإجابة على ذلك السؤال سوى مركز المساعدة الخاص بأكاديمية حسوب، عليك بالتحدث إليهم والسؤال. وإذا كان هناك تساؤل لديك حول العروض والخصومات، فقد تم توضيح الأمر هنا:
  21. اسمح لي بنصحك بالتالي، كثرة الأسئلة وتشتيت نفسك ستعيقك عن تعلم أي مجال، وكل ما تحتاجه هو تعلم أساسيات البرمجة وعلوم الحاسب، ثم اختر المجال الذي تريد التخصص به واتبع مسار تعليمي لمدة 6 أشهر ولا تحيد عنه. أي كل ما تحتاجه هو أن تبدأ فقط وستتضح لك كافة الأمور، وستجد نفسك قادر على التحديد والإختيار. وبخصوص سؤالك، لن يتم إختراق جهازك وأنت تعمل على مشروع ما، وما يعرض جهازك للإختراق بالفعل هو استخدام برامج مكركة بدون أي وعي لمخاطر ذلك، وأيضًا عدم وجود وعي أمني عند تصفح الإنترنت والتحميل منه بدون دراية. وعند نشر المشروع على الإنترنت عليك بتوفير الحماية اللازمة لحماية البيانات الحساسة، وستتعلم ذلك عند تعلم مجال الويب، في الوقت المناسب لذلك.
  22. وظيفة lambda في Python تستخدم لإنشاء وظائف مجهولة (anonymous functions)، وتسمح لك بتعريف وظيفة صغيرة دون الحاجة إلى تسميتها بشكل صريح، وتستخدم lambda في السياقات التي تحتاج فيها إلى وظيفة بسيطة وقصيرة. وبخصوص الزر الذي تستخدمه في واجهة البرنامج، تحتاج إلى تعيين دالة (function) للقيام بإجراء معين عند النقر على الزر، وباستخدام lambda، يتم تعريف دالة مجهولة بشكل فوري لتنفيذ الأمر الذي ترغب فيه عند النقر على الزر. بالنسبة للخطأ (TypeError: 'list' object is not callable)، فهناك تعارض في تسمية المتغيرات. وفي الكود الأول لديك، قمت بتسمية المتغير الذي يحمل قائمة القيم بنفس اسم الوظيفة column_values، وبالتالي، عند استدعاء الوظيفة للمرة الثانية، يتم تجاوز الدالة واستدعاء القائمة نفسها، وهذا هو سبب ظهور الخطأ. أي عليك بتغيير اسم المتغير الذي يحمل القائمة إلى اسم مختلف مثلاً تغييره إلى column_values_list كما يلي: class book_E: def __init__(self, BATH): self.BATH = BATH self.workbook = load_workbook(BATH) self.sheet = self.workbook.active def column_values(self): # استخراج قيم العمود الأول من ورقة العمل وتخزينها في قائمة: self.column_values_list = [cell.value for cell in self.sheet['A']] return self.column_values_list ثم في الكود الذي يعرض واجهة البرنامج، استخدم الدالة COLS_V مباشرة بدون استدعاء print: def COLS_V(BOOK1): B = BOOK1.column_values() print(B)
  23. في البداية عليك بتصميم واجهة التطبيق ثم إختيار لغة البرمجة وإطار العمل لبرمجته، فإذا كنت تريد خفض التكلفة، فأنصحك ببرمجته عن طريق Flutter أو React Native. وسيتعين عليك تنفيذ نظام برمجي للحسابات الشخصية يسمح للأعضاء بإنشاء حسابات شخصية وإدارة بياناتهم الشخصية والمعاملات المالية، وأيضًا تنفيذ نظام يتيح للأعضاء إضافة كتب للبيع، وتعديل التفاصيل، وتحديد السعر وحالة الكتاب (مثل جديد أو مستعمل)، وإزالة الكتب التي تم بيعها. بعد ذلك تأتي مرحلة إختيار بوابات دفع مثل Stripe أو PayPal لتسهيل عمليات الدفع، وعندما يقوم عضو بشراء كتاب من آخر، يتم توجيهه لإجراء عملية الدفع عبر البوابة المحددة، وبعد تأكيد الدفع، تستطيع استخدام واجهات برمجة التطبيقات (API) المقدمة من البوابة لإجراء عملية التحويل من حساب التاجر إلى حساب الكاتب، وبالإمكان الإعتماد على المعاملات المالية الوهمية في حساب الكاتب في التطبيق لتتبع الأموال التي يتم تحصيلها بصورة منفصلة عن حساب التاجر. وهناك عامل آخر وهو تحصيل نسبة معينة من المبلغ المدفوع كعمولة للموقع، عن طريق تنفيذ نظام يحتسب هذه العمولة تلقائيًا ويحولها إلى حساب الموقع. وعليك بإنشاء دراسة جدوى للمشروع والطلب المتوقع والتكاليف مقابل العائد ولا تتوقع عائد من أي مشروع على الإنترنت إلا بعد مرور فترة سنة على الأقل.
  24. المشكلة تكمن في الطريقة التي تقوم بها بتعيين الدالة المرتبطة بزر الطباعة (b1) في واجهة البرنامج، ويجب أن تقوم بتمرير الدالة نفسها بدون استدعاءها فورًا. وباستطاعتك استخدام وظيفة lambda لتعيين الدالة كوظيفة منفصلة بدون استدعائها فورًا، وإليك الكود: b1 = ttk.Button(widgets_frame, text="print", bootstyle=("info", "outline"), command=lambda: COLS_V(BOOK1)) باستخدام lambda، سيتم تمرير الدالة COLS_V(BOOK1) نفسها كوظيفة مستقلة إلى الزر، ولن تستدعى فورًا عند تشغيل البرنامج. وعليك أيضًا تصحيح خطأ آخر في الدالة sheet_Names و COLS_V، وفي الدالة sheet_Names يجب أن تقوم بإرجاع A بدلاً من q. وفي الدالة COLS_V يجب أن تقوم بطباعة B بدلاً من q، وإليك الكود بعد التعديل: def sheet_Names(BOOK1): A = BOOK1.workbook.sheetnames return A def COLS_V(BOOK1): B = BOOK1.column_values() print(B) وبعد التعديل من المفترض أن تستدعى الدالة COLS_V(BOOK1) فقط عند النقر على زر "print" في واجهة البرنامج.
  25. لبرمجة تطبيقات iPhone بشكل Native، فمن الضروري أن تتعلم لغة Swift، حيث أن لغة Swift هي لغة برمجة مطورة من قِبل Apple وتستخدم لتطوير تطبيقات iOS وMac. أما لغة Dart، على الجانب الآخر، هي لغة برمجة تستخدم بشكل رئيسي في إطار عمل Flutter الذي يستخدم لتطوير تطبيقات متعددة المنصات، وإذا كان هدفك تطوير تطبيقات لنظام Apple بشكل حصري، فمن الأفضل التركيز على تعلم لغة Swift. وبخصوص الـ API فعليك بتعلم الواجهة الخلفية Back-End لتتمكن من إنشاء API ولكن ذلك ليس ضروري، فيمكنك استخدام منصة مثل Firebase كواجهة خلفية لتطبيقك، وقد أوضحت لك ذلك هنا: وبخصوص تطوير تطبيقات الهاتف والحيرة في إختيار اللغة المناسبة أو الإطار، فأنصحك بقراءة التالي:
×
×
  • أضف...