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

Chihab Hedidi

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

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

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

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

    13

إجابات الأسئلة

  1. إجابة Chihab Hedidi سؤال في ما هي أفضل وسيلة OTP في Django ؟ كانت الإجابة المقبولة   
    يمكنك الإطلاع على هذه الإجابة ربما ستفيدك:
     
  2. إجابة Chihab Hedidi سؤال في ايهما افضل عند جلب بيانات من قاعدة البيانات فلترة النتائج قبل او بعد جلبها من قاعدة البيانات؟ كانت الإجابة المقبولة   
    من ناحية الأداء والفعالية من الأفضل دائما تطبيق الفلاتر أثناء الاستعلام عن البيانات مباشرة من قاعدة البيانات باستخدام الطريقة الثانية:
    example = MODEL.objects.filter(الفلاتر هنا) السبب في ذلك هو أن تصفية البيانات في قاعدة البيانات قبل جلبها إلى التطبيق يؤدي إلى جلب عدد أقل من السجلات وبالتالي تقليل الحمل على الذاكرة والشبكة، فقاعدة البيانات تمتلك محركات تصفية واستعلام فعالة جدا تستطيع تحديد البيانات المطلوبة بسرعة كبيرة مقارنة بمحاولة جلب جميع البيانات ثم تصفيتها على مستوى التطبيق.
    أما إذا قمت بجلب جميع السجلات ثم قمت بتصفية البيانات داخل القالب أو بعد جلبها في الكود، فسيؤدي ذلك إلى تحميل جميع السجلات في الذاكرة، مما قد يؤدي إلى بطء الأداء وزيادة استخدام الموارد، خصوصا إذا كانت قاعدة البيانات تحتوي على عدد كبير من السجلات.
  3. إجابة Chihab Hedidi سؤال في هل أصبح من الممكن برمجة تطبيقات الهواتف بلغة Python ؟ كانت الإجابة المقبولة   
    نعم من الممكن الآن برمجة تطبيقات أندرويد وiOS باستخدام لغة بايثون، كما يمكن استخدام Flet لإنشاء واجهات مستخدم تفاعلية للتطبيقات التي تعمل على متصفح الويب أو تطبيقات سطح المكتب، و يعتبر دعم التطبيقات المحمولة ما زال قيد التطوير والتجريب، مما يعني أنه لازال هناك بعض المشاكل في التطوير و التناسق مع إصدارات الأندرويد و لكن ليس هذا هو إطار العمل الوحيد المتوفر، فهناك أيضا إطارات عمل أخرى مثل Kivy وBeeWare وPySide، التي توفر أدوات لتطوير تطبيقات أندرويد وiOS باستخدام بايثون، لكن بعض هذه الإطارات قد تتطلب بعض العمل الإضافي لتحقيق تجربة مستخدم مميزة وملائمة لكل منصة لذلك لم تلقى الرواج الكبير مثل ما حدث مع flutter و غيرها من اللغات و أطر العمل.
  4. إجابة Chihab Hedidi سؤال في لماذا لا تعمل الحروف العربية في إكسل؟ كانت الإجابة المقبولة   
    يجب التأكد من أن الملف الناتج يحفظ بالترميز الصحيح UTF-8، يمكنك القيام بذلك عن طريق التأكد من استخدام الترميز الصحيح عند كتابة البيانات إلى ملف CSV بهذا الشكل:
    <?php include('conn.php'); if (isset($_POST['disease_type'])) { $disease_type = $_POST['disease_type']; $sql = "SELECT * FROM UN WHERE disease_type = '$disease_type'"; $result = $conn->query($sql); if ($result->num_rows > 0) { $filename = "data_from_UN_$disease_type.csv"; header('Content-Type: text/csv; charset=utf-8'); header('Content-Disposition: attachment; filename=' . $filename); $output = fopen('php://output', 'w'); fprintf($output, "\xEF\xBB\xBF"); $header = ['الاسم', 'عنوان', 'نوع']; fputcsv($output, $header); while ($row = $result->fetch_assoc()) { fputcsv($output, $row); } fclose($output); exit(); } else { echo "No data found for this disease type."; } } $conn->close(); ?> حيث نقوم بإضافة الـ BOM (\xEF\xBB\xBF) في بداية ملف CSV. هذا يساعد في تأكيد أن Excel سيتعرف على الترميز UTF-8 ويعرض النصوص العربية بشكل صحيح.
  5. إجابة Chihab Hedidi سؤال في استفسار عن دورة تطوير واجهات المستخدم كانت الإجابة المقبولة   
    دورة تطوير واجهات المستخدم تركز على العديد من الأساسيات والتقنيات المختلفة، في الدورة ستتعلم:
    - أساسيات تطوير الويب باستخدام HTML و CSS و JavaScript و Node js.
    - تطبيقات عملية باستخدام HTML و CSS و JavaScript.
    - بناء متجر إلكتروني باستخدام تقنيات Bootstrap 5 و Sass و Webpack.
    - استخدام إطار تطوير المواقع الثابتة Hugo.
    الدورة تركز بشكل أكبر على تعليم الأساسيات وتطوير التطبيقات باستخدام HTML و CSS و JavaScript، بالإضافة إلى استخدام Bootstrap 5 و Sass و Webpack وHugo، و هذه التقنيات تجعلك جاهز لتعلم أي إطار عمل آخر بسهولة.
  6. إجابة Chihab Hedidi سؤال في هل يمكن إرسال رمز تأكيد إلى الإيمايل بشكل مجاني؟ كانت الإجابة المقبولة   
    نعم يمكنك إنشاء صفحة تسجيل الدخول باستخدام HTML وCSS، و يمكنك استخدام PHP لإرسال رمز التأكيد عبر البريد الإلكتروني عن طريق استخدام مكتبة PHPMailer لإرسال البريد الإلكتروني. هنا مثال على كيفية القيام بذلك:
    <?php // login.php if ($_SERVER['REQUEST_METHOD'] == 'POST') { $email = $_POST['email']; $password = $_POST['password']; // إنشاء رمز تأكيد عشوائي $confirmation_code = rand(100000, 999999); // إرسال رمز التأكيد عبر البريد الإلكتروني require 'PHPMailer/PHPMailerAutoload.php'; $mail = new PHPMailer; $mail->isSMTP(); $mail->Host = 'smtp.example.com'; $mail->SMTPAuth = true; $mail->Username = 'your_email@example.com'; $mail->Password = 'your_email_password'; $mail->SMTPSecure = 'tls'; $mail->Port = 587; $mail->setFrom('your_email@example.com', 'Your Name'); $mail->addAddress($email); $mail->isHTML(true); $mail->Subject = 'Confirmation Code'; $mail->Body = 'Your confirmation code is: ' . $confirmation_code; if ($mail->send()) { echo 'Confirmation code has been sent to your email.'; } else { echo 'Message could not be sent. Mailer Error: ' . $mail->ErrorInfo; } } ?> يمكنك إنشاء صفحة أخرى للتحقق من رمز التأكيد الذي أرسله المستخدم وفي ملف verify.php يمكنك التحقق من صحة الرمز الذي أدخله المستخدم، يمكنك استخدام خدمات بريد إلكتروني مجانية مثل smtp.gmail.com، ولكن تذكر أنه قد يكون هناك قيود على عدد الرسائل المرسلة يوميا.
  7. إجابة Chihab Hedidi سؤال في هل تنفع إستضافة Hostinger لموقع من أجل إستخدام digital marketing كانت الإجابة المقبولة   
    لا يوجد ضرورة لاختيار باقة معينة من هوستنجر من أجل جعل الموقع جاهزا للتسويق الرقمي، و أكيد يمكن لأي موقع على هوستنجر أن يكون قابلا لعمليات التسويق الرقمي، و الأمر هنا ليس له علاقة بالإستضافة بل يكون بالتعديل على الكود الخاص بالموقع عن طريق إضافة أكواد التتبع الخاصة بالمواقع المعروفة.
  8. إجابة Chihab Hedidi سؤال في إشكالية معينة في طريقة عمل التعابير النمطية في جافا سكريبت كانت الإجابة المقبولة   
    (\D+.*) يتحقق لأنو القيمة تحتوي على حروف وليس شرط أن تكون الحروف في البداية، لكن إذا كنت تريد أن تضمن أنه لا يجب  أن تكون الأرقام في البداية يمكنك تغييره هكذا:
    /^[^0-9].*@(\D+.*)\.(\w{2,})/i أو تضيف ^ في النمط الخاص بك لأن هذا الرمز يشير إلى البداية، أي بهذه الطريقة نضمن أن البداية تكون حرف:
    /^(\D+.*).*@(\D+.*)\.(\w{2,})/i  
  9. إجابة Chihab Hedidi سؤال في كيفية حذف المسافة في كلمة بلغة البيثون كانت الإجابة المقبولة   
    لا يوجد دالة تقوم بهذا الأمر مباشرة و لكن يمكن إستغلال الدوال الأخرى لتنفيذ هذا الأمر، فمثلا يمكنك استخدام الدالة replace فهذه الدالة تقوم بتغيير الجزء المحدد من النص بقيمة أخرى، لذا يمكنك استخدامها لإزالة المسافات من النص، و هذا مثال على كيفية استخدامها:
    def remove_spaces(text):     return text.replace(" ", "") text = "the king is sleeping" result = remove_spaces(text) print(result)  # ستطبع "thekingissleeping" يمكنك أيضا استخدام الدالة join لدمج الكلمات دون مسافات بينها بالطريقة التالية:
    def remove_spaces(text):     return ''.join(text.split()) text = "the king is sleeping" result = remove_spaces(text) print(result)  # ستطبع "thekingissleeping" هنا split تقوم بتقسيم النص إلى كلمات باستخدام المسافات كمحدد، ثم join تقوم بدمج الكلمات بدون مسافات بينها.
  10. إجابة Chihab Hedidi سؤال في أيهمها أفضل كقيمة أولية للحالة State في رياكت: null أو undefined أو "" ؟ كانت الإجابة المقبولة   
    اختيار القيمة يعتمد على السياق الخاص بتطبيقك ومتطلباته null يستخدم عادة عندما يكون الحالة غير معرفة أو غير محددة، مثلا إذا كنت تتوقع تحميل بيانات من الخادم أو إذا كانت القيمة تحتاج إلى حالة ابتدائية لا تشير إلى شيء معين، فإن null  هو الخيار الأفضل.
    const [userData, setUserData] = useState(null); useEffect(() => { // يتم تحميل البيانات من الخادم fetchData() .then((data) => setUserData(data)) .catch((error) => console.error("حدث خطأ في تحميل البيانات", error)); }, []); "" أو السلسلة الفارغة يمكن استخدامها إذا كانت الحالة تمثل سلسلة نصية والقيمة الابتدائية هي سلسلة فارغة، هذا يمكن أن يكون مناسبا عند بدء العمل بقيمة نصية تكون فارغة ويتم تحديثها فيما بعد.
    const [inputText, setInputText] = useState(""); const handleInputChange = (event) => { // يتم تحديث قيمة النص عند تغيير المدخلات setInputText(event.target.value); }; return ( <input type="text" value={inputText} onChange={handleInputChange} placeholder="أدخل نص هنا" /> );  
  11. إجابة Chihab Hedidi سؤال في تعديل البيانات الشخصية مع عرض البيانات القديمة كانت الإجابة المقبولة   
    لحل المشكلة يمكنك استخدام useEffect ، حيث نستعمله عندما نريد إجراء تعديل على حالة ال component بعد ال render و هذا الكود بعد التحديث:
    import React, { useState, useEffect } from 'react'; import axios from 'axios'; import { useNavigate } from 'react-router-dom'; import HeaderProfile from './HeaderProfile'; import Alert from './Alert'; function PhotoProfile({ profile }) {   const user = JSON.parse(localStorage.getItem("user"));   let profilePhoto = profile?.avatar ? require(`../../assets/profile/${profile.avatar}`) : avatar;   const [profileAvatar, setProfileAvatar] = useState(null);   const [profileImage, setProfileImage] = useState(profilePhoto);   const [data, setData] = useState([]);   const [name, setName] = useState(profile.name || "");   const [bio, setBio] = useState(profile.bio || "");   const [status, setStatus] = useState(profile.status || "");   const [error, setError] = useState("");   const navigate = useNavigate();   useEffect(() => {     // تحديث معلومات البروفايل     let profilePhoto = profile?.avatar ? require(`../../assets/profile/${profile.avatar}`) : avatar;     setProfileImage(profilePhoto);     setName(profile.name || "");     setBio(profile.bio || "");     setStatus(profile.status || "");   }, [profile]);   const handleFileChange = (e) => {     if (e.target.files && e.target.files[0]) {       setProfileImage(URL.createObjectURL(e.target.files[0]));       setProfileAvatar(e.target.files[0]);     }   };   const handleSave = (e) => {     e.preventDefault();     const formData = new FormData();     formData.append('name', name);     formData.append('bio', bio);     formData.append('status', status);     if (profileAvatar) {       formData.append('avatar', profileAvatar, profileAvatar?.name);     }     axios       .post("/api/users/profile", formData, {         headers: {           "Content-Type": "multipart/form-data",           "x-auth-token": user.data?.token,         },       })       .then((res) => {         setData(res.data);         navigate('/');       })       .catch((error) => setError(error.response.data.msg));   };   return (     <div className="photo-profile">       <HeaderProfile         title="Public profile"         paragraphe="Add information about yourself."       />       <div className="photo-profile-img">         <img alt="" src={profileImage} />       </div>       <form         encType="multipart/form-data"         className='form-container'         onSubmit={handleSave}       >         {error && <Alert error={error} />}         <input           className="photo-profile-input"           type="file"           name="avatar"           accept="image/*"           onChange={handleFileChange}         />         <input           type="text"           className="profile-iput-info"           placeholder="name"           value={name}           name="name"           onChange={(e) => setName(e.target.value)}           required         />         <input           type="text"           className="profile-iput-info"           placeholder="bio"           value={bio}           name="bio"           onChange={(e) => setBio(e.target.value)}           required         />         <input           type="text"           className="profile-iput-info"           placeholder="status"           value={status}           name="status"           onChange={(e) => setStatus(e.target.value)}           required         />         <button className="submit" type="submit">           Save         </button>       </form>     </div>   ); } export default PhotoProfile; يمكنك الإطلاع اكثر على هذه العناصر من خلال المقالات التالية:
     
×
×
  • أضف...