لوحة المتصدرين
المحتوى الأكثر حصولًا على سمعة جيدة
المحتوى الأعلى تقييمًا في 02/26/23 في كل الموقع
-
ما هو الفرق بين windows hosting و web hosting في منصة GoDaddy لدي مشروع Next.js اريد انا رفعه علي المنصة بأستخدام Economy و نظام الحاسوب الذي اعمل عليه هو windows هل هناك مشكلة في استخدام Economy Linux Hosting with cPanel.2 نقاط
-
1 نقطة
-
السلام عليكم من متابعتي للدورة بدأت تقابلني عدة مفاهيم برمجية احتاج الى معرفة المزيد عنها اكثر او مثل ما ذكر في الدرس الخاص بها. وهذه المفاهيم مثل : Prototype , Inheritance , Promise object..... في الواقع كل ما أبدأ البحث عن مفهوم ما ينتهي بي المطاف في موسوعة حسوب اقرأ تعريف JavaScript وبنيتها واخرج بعدها |: اولا هل موسوعة حسوب تكفي وحدها لكي اعتمد عليها حاليا ومستقبلا؟ لقد سمعت كثيرا عن مهارة البحث الاحترافي في Google ولكن لا اعلم كيف ابدأ بتعلمها , هل يتم تعلمها بكورس ام مقالات ام هي مجرد ممارسة وخبرة متراكمة؟ شكرا لكم1 نقطة
-
مرحبا بعد فتح ملفات المضغوطة حقت css و js اولا مايضهر عندي ملف boostrap.js ولا boostrap.css بيضهر ملفboostrap فقط ونسختو في الملف عندي وبعد الدخول لنسخ الرابط أجد فقط رابطين ولم يوجد رابط popper فقط يوجد رابطين رابط المكتبة جوكوري ورابط اخر وحاولت نسخ الرابط الاحر وتنزيلة في الملف لم يضهر المطلوب1 نقطة
-
1 نقطة
-
Auth0 هي خدمة مصممة لتسهيل عملية تسجيل الدخول والمصادقة للتطبيقات والخدمات عبر الإنترنت، وتتيح هذه الخدمة للمطورين توفير عملية تسجيل دخول موحدة وآمنة للمستخدمين دون الحاجة إلى كتابة الكود من الصفر. يمكن استخدام Auth0 للمصادقة على المستخدمين باستخدام مزودي خدمات المصادقة الخارجية مثل Google وFacebook وTwitter وغيرها، كما يمكنها دعم تسجيل الدخول بالبريد الإلكتروني وكلمة المرور وتوفير إدارة الجلسات وتفويض الوصول وإدارة الصلاحيات والمزيد. فيما يلي بعض الأمثلة على استخدامات Auth0: 1- تسجيل الدخول باستخدام مزود خدمة الهوية الخارجية: يمكن للمستخدمين تسجيل الدخول باستخدام حسابات Google أو Facebook أو Twitter أو GitHub والمزيد، مما يتيح لهم تسجيل الدخول بشكل أسرع وأسهل دون الحاجة إلى إدخال معلومات اعتماد جديدة. 2- إدارة الجلسات: تسمح Auth0 للمطورين بإدارة الجلسات بسهولة، حيث يمكن للمستخدمين تسجيل الدخول مرة واحدة والوصول إلى جميع التطبيقات المرتبطة بحسابهم دون الحاجة إلى تسجيل الدخول مرة أخرى. 3- توفير الوصول للمستخدمين المختلفين: يمكن استخدام Auth0 لتوفير إمكانية الوصول المختلفة للمستخدمين، حيث يمكن تعيين مستويات الصلاحيات المختلفة لمجموعات المستخدمين المختلفة. 4- الحفاظ على سلامة البيانات: يعد حفظ سلامة البيانات أحد أهم استعمالات Auth0، حيث يتم توفير آليات حماية الحسابات وتأمين البيانات المستخدمة لدى المؤسسات. ويمكن لـ Auth0 توفير العديد من الخدمات الأمنية مثل التحقق من صحة كلمات المرور والتحقق الثنائي للعوامل (2FA) والتحقق من صحة الهوية للمستخدمين ومنع الوصول غير المصرح به. 5- منح وإدارة الصلاحيات: يمكن لـ Auth0 منح الصلاحيات للمستخدمين بناءً على الدور الذي يلعبه المستخدم في المؤسسة وفي النظام. ويمكن تعيين صلاحيات الوصول للموارد والخدمات وتقييدها بحيث يتم تعيين حقوق الوصول لكل مجموعة من المستخدمين. وبذلك، يمكن التحكم في الوصول إلى الموارد والبيانات المختلفة ومنع الوصول غير المصرح به. 6- التوصيل بالتطبيقات الخارجية: تتيح Auth0 إمكانية توصيل التطبيقات بخدمات الويب الخارجية وتبادل البيانات بطريقة آمنة وفعالة. فعلى سبيل المثال، يمكن استخدام Auth0 لتوصيل التطبيق بمزود خدمة مثل Google و Facebook وتسجيل الدخول باستخدام هذه الخدمات الأخرى. 7- التقارير والإحصائيات: تتيح Auth0 إمكانية مراقبة أداء التطبيقات وتتبع الأحداث الهامة مثل عمليات تسجيل الدخول وإنشاء الحسابات وإدارة الصلاحيات. وتتيح الخدمة إنشاء تقارير مخصصة والتحليلات لمعرفة الاتجاهات الرئيسية في الاستخدام والنمو والأداء. كثير من الأحيان توفر Auth0 حلولًا مباشرة لأشياء مثل الاعتماد على الهوية وتحميل الملفات والتعرف على الأجهزة والتشفير والوصول إلى API والتحكم في الوصول وإدارة المستخدمين. ومن خلال استخدام Auth0 ، يمكن للمطورين توفير الوقت والجهد اللازمين لتطوير هذه الميزات بأنفسهم وبدلاً من ذلك الاستفادة من واجهات برمجة التطبيقات (APIs) التي توفرها Auth0. على سبيل المثال ، يمكن استخدام Auth0 لتنفيذ مصادقة المستخدمين والتحكم في الوصول إلى موارد التطبيق. يمكن استخدام Auth0 للسماح للمستخدمين بالتسجيل في التطبيق باستخدام حساباتهم الحالية في الخدمات الأخرى مثل Google و Facebook و LinkedIn وغيرها. بالإضافة إلى ذلك ، يمكن استخدام Auth0 للتحقق من صحة رمز المصادقة المرسل إلى بريد المستخدم أو رقم هاتفه الجوال قبل السماح للمستخدمين بتغيير كلمات المرور الخاصة بهم أو تحديث معلومات الحساب الأخرى. يمكن أيضًا استخدام Auth0 لتسجيل الدخول الاجتماعي الذي يتيح للمستخدمين تسجيل الدخول إلى التطبيق باستخدام حساباتهم في الشبكات الاجتماعية. يمكن استخدام Auth0 لإدارة صلاحيات المستخدمين والوصول إلى الموارد ، مثل الملفات والصور والمحتوى الحصري الذي يتطلب اعتمادًا قويًا على الهوية. بالإضافة إلى ذلك، يمكن استخدام Auth0 لإضافة أمان الإنترنت لأي تطبيق ويب أو تطبيق للجوال بسرعة وبسهولة وبأمان. تتضمن ميزات Auth0 تحميل الملفات وتخزينها بشكل آمن وإنشاء سجلات لتتبع النشاطات، بما في ذلك معلومات تسجيل الدخول والمعاملات وتاريخ التعديل والنشاطات الأخرى. يمكن أيضًا للمطورين استخدام Auth0 لإدارة الوصول والهوية في تطبيقاتهم، مما يسمح للمستخدمين بتسجيل الدخول باستخدام حساباتهم على شبكات التواصل الاجتماعي أو حساباتهم الخاصة بالبريد الإلكتروني أو المؤسسات الخاصة بهم. بالإضافة إلى ذلك، يمكن استخدام Auth0 لتسهيل عملية إدارة المستخدمين وصلاحياتهم في التطبيقات، حيث يمكن للمطورين إضافة مستخدمين جدد وإزالة المستخدمين الحاليين وإعداد سياسات الوصول بسهولة وفعالية. ويمكن للمطورين أيضًا إنشاء سياسات مخصصة للتحكم في الوصول إلى الموارد والخدمات المختلفة في التطبيق. وبالإضافة إلى ذلك، يمكن استخدام Auth0 لتحسين تجربة المستخدم في التطبيقات، حيث يمكن للمستخدمين الوصول إلى التطبيق بدون الحاجة إلى إدخال بيانات تسجيل الدخول على الفور، كما يمكن للمستخدمين تذكر المعلومات الخاصة بهم لتسهيل تجربة استخدام التطبيق. بشكل عام، يمكن استخدام Auth0 لتوفير حل شامل للأمان وإدارة الهوية والوصول لأي تطبيق ويب أو تطبيق للجوال، ويتميز بسهولة الاستخدام والتكامل مع العديد من التقنيات والخدمات المختلفة. أمثلة على استخدام Auth0 في تطبيق ويب باستخدام لغة JavaScript ومكتبة React إليك بعض الأمثلة على استخدام Auth0 في تطبيق ويب باستخدام لغة JavaScript ومكتبة React: 1- تثبيت Auth0: npm install --save auth0-js 2- إعداد Auth0: import auth0 from 'auth0-js'; const auth0Client = new auth0.WebAuth({ domain: 'YOUR_AUTH0_DOMAIN', clientID: 'YOUR_AUTH0_CLIENT_ID', redirectUri: 'http://localhost:3000/callback', audience: 'https://api.myapp.com', responseType: 'token id_token', scope: 'openid profile email', }); 3- إنشاء زر تسجيل الدخول: import React from 'react'; const LoginButton = () => { const handleLogin = () => { auth0Client.authorize(); }; return ( <button onClick={handleLogin}>Log In</button> ); }; export default LoginButton; 4- صفحة التوجيه بعد تسجيل الدخول: import React, { useEffect } from 'react'; const Callback = () => { useEffect(() => { auth0Client.parseHash((err, authResult) => { if (authResult && authResult.accessToken && authResult.idToken) { // store tokens in local storage window.localStorage.setItem('access_token', authResult.accessToken); window.localStorage.setItem('id_token', authResult.idToken); // redirect to home page window.location.href = '/'; } else if (err) { console.error(err); } }); }, []); return <div>Loading...</div>; }; export default Callback; 5- إنشاء خيارات تسجيل الدخول: import React from 'react'; const Profile = ({ profile }) => { return ( <div> <h2>Profile</h2> <p>Name: {profile.name}</p> <p>Email: {profile.email}</p> </div> ); }; export default Profile; 6- إنشاء صفحة البروفايل: 6- إنشاء صفحة البروفايل: import React, { useState, useEffect } from 'react'; import auth0Client from './Auth'; import Profile from './Profile'; const ProfilePage = () => { const [profile, setProfile] = useState(null); useEffect(() => { const fetchProfile = async () => { try { const accessToken = window.localStorage.getItem('access_token'); if (accessToken) { const userInfo = await auth0Client.client.userInfo(accessToken); setProfile(userInfo); } } catch (err) { console.error(err); } }; fetchProfile(); }, []); return ( <div> {profile ? <Profile profile={profile} /> : <div>Loading...</div>} </div> ); }; export default ProfilePage; هذه بعض الأمثلة على كيفية استخدام Auth0 في تطبيق ويب باستخدام لغة JavaScript ومكتبة React. تذكر أنه يمكن استخدام Auth0 في أي لغة برمجة أو إطار عمل آخر.1 نقطة
-
{by c language} write recursive function that reverse a string , the function should have two parameters which are two character arrays , the first one is the original one and the second is the revered string like this ex {source string(happiness)} change to {destination string(ssenippah)}1 نقطة
-
لكونه سؤال إمتحاني، سأقوم بتزويدك بالمعلومات حول الفكرة الرئيسية للسؤال فقط. يمكن كتابة دالة باسم "reverseString" في لغة C لعكس السلسلة الأصلية. يتم تمرير سلسلتين من نوع char كمعاملات للدالة. السلسلة الأولى هي السلسلة الأصلية التي يتم عكسها ، بينما تحتوي السلسلة الثانية على السلسلة العكسية. يمكن استخدام دالة strlen لتحديد طول السلسلة الأصلية ، والتي يمكن استخدامها في الدالة العاكسة. أولاً ، يجب كتابة الشرطية "if" للتحقق من صحة الإدخالات. يجب التحقق من أن السلسلة الأولى ليست فارغة وأن طولها صحيح وأن السلسلة الثانية ليست فارغة. ثم ، يمكن استخدام دالة المساعدة "reverseHelper" لعكس السلسلة. يتم تمرير السلسلة الأصلية والسلسلة العكسية ومتغيرات تعرف على النهاية والبداية للحلقة العاكسة. يتم استخدام مؤشرين لتحريك نهاية وبداية الحلقة حتى يتم عكس السلسلة بالكامل. يمكن استخدام دالة printf لطباعة السلسلة العكسية. يمكن استخدام الرمز٪ s لتحديد مكان السلسلة. يمكن تحقق من صحة الإدخالات باستخدام دالة isdigit() للتحقق من أن القيمة المدخلة هي رقم صالح. وللمزيد حول لغة C يمكنك تصفح المقالات الخاصة بها في أكاديمية حسوب.1 نقطة
-
السلام عليكم. كيف يمكنني تحويل الشيفرة التالية إلى شيفرة jsx في ريآكت و باستعمال component <div class="container"> <div class="screen"></div> <div class="row"> <div class="seat"></div> <div class="seat"></div> <div class="seat"></div> <div class="seat"></div> <div class="seat"></div> <div class="seat"></div> <div class="seat"></div> <div class="seat"></div> </div> <div class="row"> <div class="seat"></div> <div class="seat"></div> <div class="seat"></div> <div class="seat occupied"></div> <div class="seat occupied"></div> <div class="seat"></div> <div class="seat"></div> <div class="seat"></div> </div> <div class="row"> <div class="seat"></div> <div class="seat"></div> <div class="seat"></div> <div class="seat"></div> <div class="seat"></div> <div class="seat"></div> <div class="seat occupied"></div> <div class="seat occupied"></div> </div> <div class="row"> <div class="seat"></div> <div class="seat"></div> <div class="seat"></div> <div class="seat"></div> <div class="seat"></div> <div class="seat"></div> <div class="seat"></div> <div class="seat"></div> </div> <div class="row"> <div class="seat"></div> <div class="seat"></div> <div class="seat"></div> <div class="seat occupied"></div> <div class="seat occupied"></div> <div class="seat"></div> <div class="seat"></div> <div class="seat"></div> </div> <div class="row"> <div class="seat"></div> <div class="seat"></div> <div class="seat"></div> <div class="seat"></div> <div class="seat occupied"></div> <div class="seat occupied"></div> <div class="seat occupied"></div> <div class="seat"></div> </div> </div> شكرا1 نقطة
-
لا نقوم بالاجابة عن أسئلة الامتحانات ولكن سأقوم بتوضيح الفكرة الرئيسية للسؤال حتي يمكنك حلة يمكنك إنشاء دالة بلغة السي باسم convert() لتحويل الحرارة. ويأخذ الدالة معاملين: الحرارة المحددة والحرف الذي يحدد الاتجاه المطلوب التحويل فيه. يمكن استخدام if الشرطي لتحديد الاتجاه المطلوب التحويل. لو أن الحرف كان يمثل السلسيوس (ك)، فذلك يعني أن التحويل إلى درجات سلسيوس، وإلا فإنه يعني التحويل إلى درجات فهرنهايت. وبعد تحديد الحرف، يمكن تطبيق الصيغة المناسبة للتحويل. إذا كان الحرف يمثل السلسيوس (ك)، فستتم تطبيق صيغة التحويل التالية: C = (F - 32) * 5/9 وإذا كان الحرف يمثل الفهرنهايت (ف)، فستتم تطبيق صيغة التحويل التالية: F = (C * 9/5) + 321 نقطة
-
لتحويل درجات الحرارة من درجات السيليزية إلى درجات الفهرنهايت والعكس، يمكن اتباع الخطوات التالية: 1- لتحويل درجات السيليزية إلى درجات الفهرنهايت: يجب ضرب درجة الحرارة بـ9/5 ثم إضافة 32. 2- لتحويل درجات الفهرنهايت إلى درجات السيليزية: يجب طرح 32 ثم ضرب الناتج بـ5/9. 3- يمكن إنشاء دالة تستقبل درجة الحرارة ونوع التحويل، وتطبق الصيغة المناسبة وترجع النتيجة. 4- يمكن إنشاء برنامج يستخدم الدالة المنشأة لتحويل درجات الحرارة باستخدام إدخالات المستخدم، ويطبع النتائج على الشاشة. 5- عند استخدام إدخالات المستخدم، يجب التحقق من صحة الإدخالات المدخلة عن طريق فحص نوع التحويل والتأكد من أنه يساوي 'c' أو 'C' لتحويل درجات الفهرنهايت إلى درجات السيليزية، أو 'f' أو 'F' لتحويل درجات السيليزية إلى درجات الفهرنهايت. ويجب أيضاً التحقق من أن درجة الحرارة المدخلة مناسبة وليست سالبة (في حالة التحويل من الفهرنهايت إلى السيليزية) أو أنها لا تتعدى حدود الحرارة القياسية. لكونه سؤال إمتحاني، سأقوم بتزويدك بمزيد من المعلومات حول الفكرة الرئيسية للسؤال فقط. يمكن إنشاء دالة في لغة C باسم "convert" لتحويل الحرارة بين درجتين مختلفتين، ويتم تمرير الدالة اثنين من المعاملات: درجة الحرارة وحرف يحدد الاتجاه الذي يجب فيه تحويل الحرارة. يمكن استخدام الشرطية "if" للتحقق من الحرف المستخدم لتحديد اتجاه التحويل. إذا كان الحرف يشير إلى السيليزيوس (C)، فإننا يمكننا تطبيق الصيغة التالية لتحويل الحرارة إلى فهرنهايت (F): F = (C * 9/5) + 32 وإذا كان الحرف يشير إلى الفهرنهايت (F)، فإنه يمكن تطبيق الصيغة التالية لتحويل الحرارة إلى السيليزيوس (C): C = (F - 32) * 5/9 بعد ذلك، يمكن استخدام دالة "printf" لطباعة النتيجة المحسوبة على الشاشة. أخيرًا، يجب على المستخدم التأكد من صحة الإدخالات، وتحديدًا من حيث الحرف الذي يشير إلى الاتجاه المطلوب للتحويل وأيضًا التأكد من أن قيمة درجة الحرارة في المدخلات صالحة للتحويل. https://academy.hsoub.com/programming/c/1 نقطة
-
لإضافة حالة للمقاعد المحجوزة (occupied seats) ، يمكن إضافة خاصية (prop) إلى عنصر Seat وتمرير قيمة مختلفة لكل Seat بناءً على حالة المقعد. يمكن تحديد حالة المقعد (occupied or not) بواسطة الحالة المحلية (local state) داخل عنصر Seat. على سبيل المثال: import React, { useState } from 'react' function Seat(props) { const [isOccupied, setIsOccupied] = useState(false); const handleClick = () => { setIsOccupied(!isOccupied); } return ( <div className={isOccupied ? 'seat occupied' : 'seat'} onClick={handleClick}> <div></div> </div> ) } export default Seat في هذا المثال ، تم إضافة خاصية (prop) إلى عنصر Seat لتمرير قيمة الحالة المحجوزة (occupied) من Row. يتم تحديد حالة المقعد (occupied) عن طريق النقر على المقعد ، ويتم تغيير حالة المقعد (isOccupied) باستخدام الحالة المحلية (useState). ويتم تحديد الفئة (class) المستخدمة لعنصر Seat باستخدام تعبير تفاضلي (ternary expression) بناءً على قيمة الحالة المحجوزة (isOccupied). بعد ذلك ، يمكن تمرير قيمة محددة للحالة المحجوزة لكل Seat في Row باستخدام الخاصية (prop). يمكن تعيين القيمة المحددة للخاصية (prop) لكل Seat في Row بناءً على الحالة الفعلية للمقعد في التطبيق. يمكن تمرير الحالة المحجوزة (occupied) كخاصية (prop) إلى عنصر Seat في Row كما يلي: import React from 'react' import Seat from './Seat' function Row() { return ( <div className='row'> <Seat occupied={true} /> <Seat occupied={false} /> <Seat occupied={false} /> <Seat occupied={true} /> <Seat occupied={false} /> <Seat occupied={true} /> <Seat occupied={false} /> <Seat occupied={false} /> </div> ) } export default Row في هذا المثال ، يتم استخدام القيمة الممررة للخاصية (prop) occupied لتحديد الفئة (class) المناسبة لعنصر Seat. إذا كانت القيمة الممررة لـ (prop) occupied هي true ، فإن العنصر Seat يحصل على الفئة (class) occupied ، وإلا فإنه يحصل على الفئة (class) الافتراضية (not-occupied). يمكن تمرير الحالة الفعلية للمقاعد (occupied seats) إلى Row كخصائص (props) من المكون الأب (parent component) الذي يحتوي على Rows component. على سبيل المثال: import React from 'react' import Rows from './Rows' function App() { const occupiedSeats = [2, 5, 6, 7]; // assuming seat numbers start from 1 return ( <div> <Rows occupiedSeats={occupiedSeats} /> </div> ) } export default App1 نقطة
-
يعتبر Windows Hosting و Web Hosting اثنين من خيارات استضافة المواقع على منصة GoDaddy، ولكل منهما ميزاته وعيوبه. Windows Hosting: تتميز بدعم تقنيات Microsoft وتشغيل اللغات التي تعتمد على منصة Windows مثل ASP.NET و .NET Core و SQL Server وغيرها. يتم استخدام لوحة التحكم Plesk لإدارة الاستضافة على Windows Hosting. Web Hosting: يستخدم نظام تشغيل Linux ولوحة تحكم cPanel لإدارة الاستضافة. وتعمل على دعم لغات البرمجة المختلفة مثل PHP و Python و Ruby وغيرها. بالنسبة لمشروع Next.js الخاص بك، يمكنك استخدام Economy Linux Hosting with cPanel لاستضافة الموقع بدلاً من Windows Hosting. فعادةً ما يتم تشغيل مشاريع Next.js على Linux بدلاً من Windows. ومع ذلك، يجب التأكد من أن إصدار Node.js الذي تستخدمه متوافق مع Economy Linux Hosting with cPanel. أيضًا، يجب الانتباه إلى أن استخدام Economy Linux Hosting with cPanel يعني أنه سيتم استخدام نظام تشغيل Linux، وبالتالي قد تحتاج إلى تعلم بعض المفاهيم الأساسية لنظام التشغيل Linux ولوحة تحكم cPanel إذا لم تكن لديك الخبرة الكافية في ذلك. وأرجو مراجعة التعليقات على سؤالك السابق للمزيد حول Economy Linux Hosting with cPanel. وللمزيد عن الاستضافات https://io.hsoub.com/hosting/87775-ما-الفرق-بين-استضافة-cloud-hosting-و-استضافة-web-hosting1 نقطة
-
نعم، يمكنك رفع تطبيق Next.js على منصة GoDaddy باستخدام خدمة Economy Linux Hosting with cPanel. يمكنك استخدام cPanel لإدارة الخادم وتثبيت Node.js وnpm لتنزيل وتثبيت التبعيات اللازمة لتشغيل تطبيقك. بعد ذلك يمكنك تحميل ملفات التطبيق وإعداد الاعدادات اللازمة لتشغيل التطبيق. يرجى ملاحظة أنه يجب عليك التأكد من أن الخادم الذي تختاره يلبي متطلبات تشغيل تطبيق Next.js. يمكنك اتباع الخطوات التالية: اشترِ خطة استضافة من GoDaddy وقم بتسجيل الدخول إلى لوحة التحكم الخاصة بك (cPanel). قم بإعداد نطاق الويب الخاص بك واتصل به إذا لزم الأمر. قم بإنشاء قاعدة بيانات MySQL ومستخدم بمسؤولية كاملة لهذه القاعدة. حمِّل تطبيق Next.js الخاص بك إلى مجلد على الخادم (يمكنك استخدام FTP لهذا الغرض). قم بتثبيت Node.js و NPM على الخادم باستخدام SSH. قم بتنزيل وتثبيت جميع الحزم اللازمة التي يتطلبها تطبيق Next.js. قم بتكوين ملفات الإعدادات الخاصة بتطبيق Next.js الخاص بك (مثل المتغيرات البيئية ومعلومات الاتصال بقاعدة البيانات). قم بتشغيل تطبيق Next.js باستخدام SSH وأمر NPM. يمكنك البحث عن دليل خطوة بخطوة على الإنترنت لمساعدتك في تطبيق هذه الخطوات بشكل أفضل. كما يمكنك البحث عن أدوات وحلول متاحة لتحميل تطبيق Next.js الخاص بك ونشره على GoDaddy. سأوضح لك كل خطوة بالتفصيل: 1- شراء حزمة استضافة Linux على GoDaddy: أولاً، يجب عليك شراء حزمة استضافة Linux على GoDaddy. يمكنك ذلك عن طريق الدخول إلى موقع GoDaddy واختيار خيار الاستضافة، ثم تحديد حزمة Linux الاقتصادية مع لوحة التحكم cPanel. 2- إعدادات الدومين ونقل الملفات: بمجرد شراء الحزمة، يمكنك إعداد اسم النطاق الخاص بك ونقل ملفات Next.js إلى الخادم الخاص بك باستخدام FTP أو SFTP. 3- تثبيت Node.js و npm: يجب تثبيت Node.js و npm على الخادم الخاص بك. يمكنك فعل ذلك باستخدام الأمر التالي: sudo apt-get install nodejs npm 4- تثبيت PM2: يمكن استخدام PM2 لإدارة تطبيق Next.js وتشغيله باستمرار. لتثبيت PM2، استخدم الأمر التالي: npm install pm2 -g 5- تنزيل متطلبات المشروع: تحتاج إلى تحميل متطلبات المشروع الخاص بك باستخدام npm. يمكنك فعل ذلك باستخدام الأمر التالي: npm install 6- بناء التطبيق: يجب بناء تطبيق Next.js الخاص بك بواسطة npm. يمكنك فعل ذلك باستخدام الأمر التالي: npm run build 7- تشغيل تطبيق Next.js: يمكنك تشغيل تطبيق Next.js الخاص بك باستخدام PM2. يمكنك استخدام الأمر التالي: pm2 start npm --name "app-name" -- start 8- تكوين ملفات Nginx: يمكنك تكوين ملفات Nginx للتوجيه إلى تطبيق Next.js الخاص بك. يمكنك فعل ذلك باستخدام الأمر التالي: server { listen 80; server_name example.com; location / { proxy_pass http://localhost:3000; proxy_http_version 1.1; proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection 'upgrade'; proxy_set _header Host $host; proxy_cache_bypass $http_upgrade; } } بعد إعداد ملف الـ Nginx، يجب تشغيله باستخدام الأمر التالي: sudo systemctl start nginx ويمكنك التحقق من حالة الـ Nginx باستخدام الأمر التالي: sudo systemctl status nginx ستظهر لك حالة الـ Nginx ويجب أن تكون "active (running)". أخيراً، يجب عليك فتح منفذ 80 في جدار الحماية الخاص بالخادم إذا كان مفتوحاً على منفذ آخر، باستخدام الأمر التالي: sudo ufw allow 80/tcp بهذا، تم إعداد خادم Nginx لتشغيل تطبيق Next.js على خادم Ubuntu 20.04.1 نقطة
-
مرحبا.. لدي جدول مواعيد أريد جلب البيانات منه فقط حسب اسم المركز (ما اقصد به عندما اقوم بتسجيل الدخول الى صفحتي وعرض جدول المواعيد أن يظهر لي فقط المواعيد الخاصة بي فلترة حسب "اسم لcenter") models.py class Appointment(Info_Patient): appointment_d=models.DateField(_("Date"), default=datetime.now,max_length=100) appointment_time= models.TimeField(_("Time:"), default=datetime.now,max_length=100) ///////////////////////////////////// center =models.ForeignKey('accounts.Center',verbose_name=_("Choose health center"), on_delete=models.CASCADE, unique=False) ////////////////////////////////////// doctor =models.ForeignKey('accounts.ListDoctorCenter',verbose_name=_("Choose your doctor"), on_delete=models.CASCADE, unique=False ) views.py def tablebooking(request): tablebooking = Appointment.objects.all() # لا أريد جلب جميع جميع المواعيد # filter(Center=request.center) لم تنجح if request.method == "POST": statform = statusform() if statform.is_valid(): # statform.instance.user = request.user statform.save() messages.success(request, ('Your websit was successfully added!')) else: HttpResponse(request, 'Error saving form') return render(request, 'user/tablebooking.html',{ 'statform':statform, 'tablebooking' : tablebooking })1 نقطة
-
شكرا لك طبقت الحل ظهر الخطأ AttributeError at /accounts/tablebooking/ 'User' object has no attribute 'center' هل لأنني قمت سابقا بالعمل على تجزأتة انواع المستخدمين class User(AbstractUser): is_superuser=models.BooleanField('is_superuser',default=False) is_Pharmacy=models.BooleanField('Is owner pharmacy',default=False) is_Info_Patient=models.BooleanField('Is patient',default=False) # is_ListDoctorCenter=models.BooleanField('Is doctor',default=False) is_Hospital=models.BooleanField('Is owner hospital',default=False) is_Clinic=models.BooleanField('Is owner clinic',default=False) is_Health_Center=models.BooleanField('Is owner center',default=False)1 نقطة
-
لتصفية نتائج البحث بحسب اسم المركز، يمكن استخدام filter وتمرير معامل البحث كمعامل center في ملف views.py. def tablebooking(request): if request.method == "POST": statform = statusform() if statform.is_valid(): statform.save() messages.success(request, ('Your websit was successfully added!')) else: HttpResponse(request, 'Error saving form') return render(request, 'user/tablebooking.html',{ 'statform':statform, }) center_name = request.user.center.name # افترض هنا أن اسم المركز مخزن في حساب المستخدم tablebooking = Appointment.objects.filter(center__name=center_name) return render(request, 'user/tablebooking.html', { 'tablebooking' : tablebooking }) يتم استخدام request.user.center.name للوصول إلى اسم المركز المخزن في حساب المستخدم. إذا كنتي تستخدمي ميزة تسجيل الدخول المدمجة في Django، فسيتم تعيين request.user لكائن User المعني بالمستخدم الحالي. وإذا كان لديك تطبيق خاص بتسجيل الدخول، فيجب عليك تغيير request.user.center.name إلى الطريقة التي تحصلي بها على اسم المركز الذي تريدي تصفيته.1 نقطة
-
يمكن تحويل الشيفرة المعطاة إلى شيفرة JSX في React عن طريق استخدام عناصر الـ JSX والمكونات. لتحويل الشيفرة إلى JSX، يمكن القيام بالتالي: 1- يجب إنشاء ملف جديد بامتداد .jsx 2- يمكن إنشاء مكون جديد باستخدام function component في React ويمكن إسمه SeatMap مثلاً، ويمكن إرجاع العناصر المطلوبة. 3- يمكن إنشاء مكون آخر للصفحة بإسم Screen ويمكن أن يتم إرجاع عنصر div وتخصيصه الفئة container. 4- يمكن إنشاء مكون آخر لعناصر الصف بإسم Row واستخدام عناصر div لتمثيل الأماكن. 5- يمكن إنشاء مكون آخر بإسم Seat وتخصيص الفئات اللازمة وتمثيل الأماكن الشاغرة والمحجوزة بحسب المتغيرات المعطاة في الـ CSS. 6- يمكن استدعاء كل من المكونات المناسبة داخل المكون الأساسي الذي يتم تصوره كشجرة ويمكن تقسيم الكود بحسب الأقسام المناسبة. بالتالي، يمكن الحصول على الشيفرة JSX على النحو التالي: import React from 'react'; function Seat() { return <div className="seat"></div>; } function Row() { return ( <div className="row"> <Seat /> <Seat /> <Seat /> <Seat className="occupied" /> <Seat className="occupied" /> <Seat /> <Seat /> <Seat /> </div> ); } function Screen() { return ( <div className="container"> <div className="screen"></div> <Row /> <Row /> <Row /> <Row /> <Row /> </div> ); } export default Screen; ملاحظة: يتم استدعاء المكون الأساسي Screen في ملف JavaScript لإظهار الكود في الصفحة، ويجب تمريره عبر ReactDOM.render() في الـ index.js لعرضه في الصفحة. هل هناك طريقة افضل لتحسين الكود؟ نعم، هناك طريقة أفضل لتحسين هذا الكود. يمكننا استخدام حلقتين متداخلتين لإنشاء مصفوفة من العناصر التي تشكل الجلوسات، ثم استخدام دالة map لإنشاء عناصر JSX من هذه المصفوفة، وفي نهاية المطاف يمكننا إدراج هذه العناصر في العنصر الرئيسي الذي يحتوي على الجدول. import React from 'react'; function App() { const rows = [...Array(6)].map((_, index) => { const seats = [...Array(8)].map((_, index) => ( <div className="seat" key={index}></div> )); return <div className="row" key={index}>{seats}</div>; }); return ( <div className="container"> <div className="screen"></div> {rows} </div> ); } export default App; يستخدم هذا الكود مصفوفتين متداخلتين: المصفوفة الأولى تنشئ الصفوف، والمصفوفة الثانية تنشئ الجلوسات داخل كل صف. يتم تمرير المصفوفة الثانية إلى map داخل المصفوفة الأولى لإنشاء العناصر JSX. تم إضافة key إلى العناصر لتحسين الأداء عند إعادة رسم المكون.1 نقطة
-
نعم، يمكنك إقلاع نظام Ubuntu من الهارد الخارجي دون أي ضرر على نظام Windows 10 المثبت على الهارد الداخلي. يجب عليك فقط التأكد من أن إعدادات الإقلاع في جهاز الكمبيوتر الخاص بك مُعدَّة للسماح بالإقلاع من وسائط التخزين الخارجية، وذلك من خلال تغيير ترتيب الإقلاع في BIOS أو UEFI. عند البدء في عملية الإقلاع، سيظهر لك شاشة تحتوي على قائمة بخيارات الإقلاع المتاحة، ومن هناك يمكنك اختيار الهارد الخارجي لتشغيل نظام Ubuntu. وبعد الانتهاء من استخدام Ubuntu، يمكنك إعادة تشغيل الكمبيوتر واختيار الهارد الداخلي للعودة إلى نظام Windows 10 الذي تم تثبيته على الهارد الداخلي. حسنًا، هنا خطوات مفصلة لإقلاع نظام Ubuntu من الهارد الخارجي بأمان: قم بتوصيل الهارد الخارجي بجهاز الكمبيوتر الذي يحتوي على نظام Windows 10 المثبت على الهارد الداخلي. قم بتشغيل الكمبيوتر واضغط مرارًا على مفتاح الوصول للبيوس أو UEFI (مثل Delete أو F2 أو F10 أو F12 أو Esc) حتى يتم فتح واجهة BIOS أو UEFI. يمكنك العثور على الزر الصحيح لجهاز الكمبيوتر الخاص بك عبر الإنترنت أو في دليل المستخدم الخاص به. بمجرد الدخول إلى واجهة BIOS أو UEFI، قم بالتنقل إلى القائمة المسؤولة عن ترتيب الإقلاع. قد يكون اسم القائمة مختلفًا اعتمادًا على نوع جهاز الكمبيوتر الخاص بك. اختر الهارد الخارجي من بين القائمة المتاحة للإقلاع. قم بتحريكه إلى الأعلى حتى يتم تحديده كخيار إقلاع أولي. تأكد من حفظ الإعدادات الجديدة. قم بإعادة تشغيل الكمبيوتر. سيعمل الكمبيوتر على الآن من الهارد الخارجي. ستحتاج إلى إدخال اسم المستخدم وكلمة المرور الخاصة بك لتسجيل الدخول إلى نظام Ubuntu. بعد الدخول، يمكنك البدء في استخدام Ubuntu كما تشاء. عند الانتهاء من استخدام Ubuntu، قم بإيقاف التشغيل الكمبيوتر وفصل الهارد الخارجي. يمكنك الآن تشغيل الكمبيوتر واختيار الهارد الداخلي للعودة إلى نظام Windows 10. لا تنسَ حفظ الإعدادات الجديدة للترتيب في BIOS أو UEFI إذا كنت ترغب في العودة إلى الإقلاع من الهارد داخلي. ومن الأفضل أيضًا إنشاء نسخة احتياطية من بياناتك الهامة على كل من الهارد الداخلي والخارجي قبل القيام بأي تغييرات على ترتيب الإقلاع. كما ينصح بإجراء عملية فحص للهارد الداخلي بواسطة برنامج مضاد للفيروسات للتأكد من عدم وجود أي مشكلات أو تهديدات قبل إجراء أي تغييرات عليه. وأخيرًا، قد يختلف الإجراء الدقيق لترتيب الإقلاع حسب نوع جهاز الكمبيوتر الخاص بك، لذلك ينصح بالتحقق من دليل المستخدم أو البحث على الإنترنت لمزيد من المعلومات حول كيفية تغيير ترتيب الإقلاع في جهاز الكمبيوتر الخاص بك.1 نقطة
-
بالنسبة لشاشة الجوال نفسها، فذلك يعود بنوع جهازك ومدى تحمله للاستخدام المتواصل ولكن بشكل عام لن يؤتر الأمر كتيرا على المدى القصير1 نقطة
-
من الممكن رفعه على منصة heroku نبدأ أولاً بتحميل heroku-cli وهي عبارة عن أداة تعمل في الcommand line وستجد الرابط مرفق بالأسفل بعد ذلك نقوم بتنفيذ الخطوات التالية بداخل مجلد المشروع المُراد رفعه: نقوم بالتسجيل إلى heroku عبر الأمر التالي heroku login بعد ذلك نقوم بتهيئة مستودع git git init نقوم بإنشاء مشروع على منصة heroku مع مﻻحظة إستبدال <app-name> بإسم مشروعك heroku create <app-name> نقوم بعد ذلك بتنفيذ الأمر git add . ثم نقوم بتنفيذ الأمر commit -m "first" ثم نقوم بتنفيذ تلك التغييرات إلى المشروع على منصة heroki git push heroku master وستجد في النهاية رسالة بنجاح عملية الرفع ومرفق معها رابط المشروع1 نقطة
-
مُقدّمة بعد أن تعرّفنا على ماهيّة المُرشّحات وكيفيّة استخدام أهم المُرشّحات المبنيّة مُسبقا في Jinja وبعد أن تعرّفنا على كيفيّة إنشاء مُرشّحات خاصّة بنا، سننتقل إلى ميّزة أخرى لا تقلّ أهميّة عن المُرشّحات، ألا وهي ميزة الاختبارات Tests في مُحرّك القوالب Jinja، إذ سنتعرّف أولا على ماهيّة الاختبارات والغرض من استعمالها وكيفيّة الاستفادة منها في تطبيقات Flask الخاصّة بك ثمّ سننتقل إلى التّعرف على بعض من أهم الاختبارات التّي يُمكنك الاعتماد عليها لتطوير تطبيقاتك. ما معنى اختبارات Jinja في ما سبق من الدّروس، تعرّفنا على حقيقة أنّ مُرشّحات Jinja تقوم بتحويل قيمة من حالة إلى أخرى، في اختبارات Jinja لا تتحوّل القيمة، بل تُختبر ضدّ اختبار (Test) للتأكد من أنّها تندرج ضمن حالة مُعيّنة، ومنه تستطيع تطبيق اختبار على كائن للتّحكم بما يُعرض في المُتصفّح وما لا يُعرض حسب ما إذا اجتاز اختبارا أو لم يجتزه. طريقة إجراء الاختبارات هي باستعمال الكلمة المفتاحيّة is عوضا عن الرّمز | الذي يُستعمل لتطبيق مُرشّح مُعيّن. على سبيل المثال، يُمكنك التّحقق ممّا إذا كان مُتغيّر مُعرّفا أو لا كما يلي: name is defined في المثال أعلاه اسم المُتغيّر الذي يُجرى عليه الاختبار هو name والاختبار هو defined، وهو اختبار مُتوفّر مُسبقا في مُحرّك القوالب Jinja، وكما فعلنا مع المُرشّحات المبنيّة مُسبقا، فسنتعرّف على أهم الاختبارات التّي يُمكنك الاستفادة منها مُباشرة مع Jinja. يُمكن كذلك للاختبارات أن تقبل مُعاملات لمرونة أكثر في الاستخدام، فمثلا يُمكنك استخدام الاختبار divisibleby للتّحقق من أنّ عددا مُعيّنا يقبل القسمة على عدد آخر، العدد الأول هو القيمة التّي تُجرى عليها الاختبار، أمّا العدد الثّاني فهو القيمة المُمرّرة إلى الاختبار كمُعامل. مثال: 9 is divisibleby(3) إذا كان الاختبار يقبل مُعاملا واحدا فقط، فيُمكنك تمرير المُعامل دون أقواس، لذا فالمثال التّالي يقوم بنفس الشّيء الذي يقوم به المثال أعلاه: 9 is divisibleby 3 نتيجة الاختبار ستكون إمّا القيمة المنطقيّة True أو القيمة المنطقيّة False، ما يعني بأنّك تستطيع الاستفادة من نتيجة الاختبار باستعمالها مع الجمل الشّرطية if و else و elif. لتفهم هذا الدّرس أكثر، يُمكنك استعمال ملفّ filters.html الذي أنشأناه سابقا لتطبيق الأمثلة وتجربة أفكارك إذا ما شئت، إذ يُمكنك تفعيل البيئة الوهميّة وتعريف مُتغيّرات البيئة ومن ثمّ تشغيل الخادوم المحلي لتطبيق “كلمة” عبر كتابة الأمر flask run في سطر الأوامر، وبعدها كتابة المثال التّالي في ملفّ filters.html وزيارة العنوان http://127.0.0.1:5000/filters لتُلاحظ نتيجة تطبيق الاختبار divisibleby مع أعداد مُختلفة. المثال: {{ 10 is divisibleby 2 }} <br> {{ 4 is divisibleby 3 }} <br> {{ 9 is divisibleby 2 }} <br> {{ 60 is divisibleby 6 }} النّتيجة: True False False True يُمكنك تغيير الأعداد كما تشاء، والنّتيجة ستختلف حسب ما إذا كان العدد الأول قابلا للقسمة على العدد الآخر أم لا. ما الغرض من استعمال الاختبارات؟ قد لا تجد فائدة كثيرة في الاختبارات بعد أن تعرّفت على ماهيّتها، لكن الأمر أبعد من اختبار ما إذا كانت القيمة تقبل القسمة على عدد أم لا، إذ تستطيع استعمال الاختبارات لتحديد ما إذا كان كائن قابلا للاستدعاء أم لا، أو ما إذا كان يُساوي قيمة مُعيّنة أو التّأكّد من أنّ شيفرة مُعيّنة قد مُنعت من العرض على المُتصفّح كما هي لتفادي الهجمات الخبيثة، بالإضافة إلى الكثير من الأشياء الأخرى التّي يُمكنك أن تستعمل الاختبارات لأجلها، ما سيُتيح لك تحكّما أكثر بما يُعرض على مُتصفّح مُستخدم تطبيقك وما لا يُعرض. وبالإضافة إلى ما سبق، فستتعرّف على أهميّة الاختبارات حالما نُلقي نظرة على بعض من أهم الاختبارات التّي يُوفرّها مُحرّك القوالب Jinja وكيفيّة الاستفادة منها، ما سيُساعدك على معرفة الغرض من هذه الخاصيّة وأهمّيتها. قائمة ببعض من أهم اختبارات مُحرّك القوالب Jinja الآن وقد تعرّفنا على ماهيّة الاختبارات في مُحرّك القوالب Jinja، حان الوقت للتّعرف على أهمّ الاختبارات المبنيّة مُسبقا في Jinja والتّي يُمكنك استخدامها مُباشرة. الاختبار defined بالإضافة للمُرشّح default الذي تعرّفنا عليه مُسبقا، والذي يُمكّننا من توفير قيمة افتراضيّة لمُتغيّر مُعيّن في حالة لم يكن مُعرّفا، فالاختبار defined يُمكّنك من التّعرف على ما إذا كان مُتغيّر مُعيّن مُعرّفا أو لا، ما سيُمكّنك من اتّخاذ الإجراءات اللازمة في حالة لم يكن مُعرّفا. يُمكنك استخدام المثال التّالي لتفهم أكثر الغرض من الاختبار defined. {% if variable is defined %} قيمة المُتغيّر: {{ variable }} {% else %} المُتغيّر غير مُعرّف {% endif %} المثال أعلاه يتحقّق ممّا إذا كان المُتغيّر variable مُعرّفا أو لا، إذا كان مُعرّفا فالنّتيجة ستكون الجملة “قيمة المُتغيّر: ” بالإضافة إلى قيمة المُتغيّر، أمّا إذا لم يكن المُتغيّر مُعرّفا فالنّتيجة ستكون الجملة “المُتغيّر غير مُعرّف”. إذا قُمت بتجربة المثال في ملفّ filters.html فستحصل على النّتيجة الثّانيّة، ولتغيير الوضع يُمكنك تعريف المُتغيّر فوق جملة if الشّرطية كما يلي: {% set variable = 'مرحبا بالعالم!' %} بعد تعريف المُتغيّر ستجد بأنّ النّتيجة أصبحت الجملة “قيمة المُتغيّر: مرحبا بالعالم! ” عوضا عمّا سبق. الاختبار callable باستعمال الاختبار callable يُمكنك التّحقق ممّا إذا كان كائن أو مُتغيّر ما قابلا للاستدعاء أو لا، الكائنات القابلة للاستدعاء هي الدّوال، الماكرو وأصناف لغة بايثون وتوابع الأصناف وبعض الأنواع الأخرى. المثال التّالي سيُساعدك على فهم الأمر: {% macro say_hello() %} مرحبا بالعالم! {% endmacro %} {% if say_hello is callable %} الكائن قابل للاستدعاء ونتيجة استدعائه هي: <br> {{ say_hello() }} {% else %} لا يُمكن استدعاء الكائن {% endif %} في المثال، أنشأنا ماكرو بسيطا يقوم بإرجاع الجملة “مرحبا بالعالم!” بعدها طبّقنا الاختبار callable على الماكرو، والنّتيجة هي كما يلي: الكائن قابل للاستدعاء ونتيجة استدعائه هي: مرحبا بالعالم! ما يعني بأنّ الماكرو قابل للاستدعاء، ولو لم يكن كذلك لكانت النّتيجة هي الجملة “لا يُمكن استدعاء الكائن”. يُمكنك اختبار الحالة الأخرى (عدم قابليّة استدعاء الكائن) عبر حذف الماكرو وتعريف المُتغيّر say_hello مكان الماكرو باستعمال السّطر التّالي: {% set say_hello = 'مرحبا بالعالم!' %} وبما أنّ مُتغيّرا عاديّا لا يُمكن استدعاؤه، فالنّتيجة ستكون الجملة “لا يُمكن استدعاء الكائن ”، وذلك لأنّ الاختبار callable يُرجع القيمة المنطقيّة Flase عند استعماله مع متغيّرات بايثون عاديّة أو خصائص الأصناف لأنّها غير قابلة للاستدعاء. الاختباران even و odd إذا أردت التّحقق ممّا إذا كان عدد ما زوجيا أو لا فيُمكنك استعمال الاختبار even للقيام بالأمر، إذ يُرجع الاختبار إذا ما طُبق على عدد القيمة المنطقيّة True إذا كان العدد زوجيّا، أمّا إن لم يكن كذلك فالنّتيجة ستكون القيمة False. أمّا الاختبار odd فيقوم بالعكس، إذ يُستعمل للتّحقق من أنّ عددا ما فردي أو لا. المثال التّالي توضيح لكيفيّة استخدام كل من even و odd: {% set numbers = [1, 2, 3, 4, 5, 6] %} {% for number in numbers %} {% if number is even %} العدد {{ number }} عدد زوجي <br> {% elif number is odd %} العدد {{ number }} عدد فردي <br> {% endif %} {% endfor %} في المثال أعلاه، نُعرّف أولا قائمة أعداد ثمّ ندور حولها باستخدام حلقة for، في كل دورة نتحقّق ممّا إذا كان العدد زوجيّا لعرض رسالة تُفيد بأنّ العدد زوجي، وإن لم يكن العدد زوجيّا نتحقّق مّما إذا كان عددا فرديا لنعرض رسالة مضمونها أنّ العدد فردي. النّتيجة: العدد 1 عدد فردي العدد 2 عدد زوجي العدد 3 عدد فردي العدد 4 عدد زوجي العدد 5 عدد فردي العدد 6 عدد زوجي ختاما تعرّفنا في هذا الدّرس على ماهيّة ميّزة الاختبارات في مُحرّك القوالب Jinja، وتعرّفنا على الغرض منها وكيفيّة استعمالها وعلى بعض الاختبارات المبنيّة مُسبقا، في الدّرس القادم، سنُكمل ما بدأناه بالتّعرف على المزيد من الاختبارات المتواجدة بمُحرّك القوالب Jinja والتّي ستُساعدك على تطوير تطبيقات ويب أفضل كما ستُفيدك في فهم وتطوير تطبيق “كلمة”.1 نقطة
-
الفكره من البرمجه في العموم هي حل مشكله بالخطوات المنطقيه الصحيحه(ال algorithm). فاي مشروع برمجي هو عباره عن حل لمشكله ما فاولى متطلبات المبرمج المحترف واهمها على الاطلاق هو امكانية تحديد وايجاد حلول لمشكله تطرح امامه. ثم ياتي التفكير البرمجي المنظم وهو عمليه تحويل ذلك الحل الى طريقه تساوي طريقة فهم الحاسب للاوامر فكما نعلم جهاز الحاسوب هو جهاز غبي لا يمكنه التفكير كالانسان او ايجاد حلول من تلقاء نفسه لم يدرب عليها, وهنا تحديدا ياتي دور المبرمج. بعد هذا على المبرمج ان يكون مثقفا ومهتما بمعرفه جهاز الحاسوب فكيف لمبرمج ان يقدم حلا يعمل على شئ لا يفهمه. فحري به دائما متابعه تطوره ومعرفه خباياه. ياتي بعد ذلك مهارات البحث وايجاد المطلوب في وقت قصير وهي مهارات مهمه جدا ليس للمبرمج المحترف فحسب بل على الجميع معرفتها والتدرب عليها. ثم بعد ذلك الفهم العميق للغه البرمجه المختاره بحيث يفهم كيف تعمل من لحظه انطلاق التطبيق وحتى المغادره منه بل وكيفيه معالجتها للاوامر. ثم يهتم المبرمج بالامان فالمبرمج عليه ان بتعرف على المخاطر التي تقابل التكنولوجيا ومحاوله حمايه التطبيقات من الهجومات الخفيه والتي تتطلب حذرا شديدا ولكن في النهايه تقدم تطبيقا مؤمنا باقصى ما يستطيع تقديمه ثم مع الوقت يزيد في تامينه لانه في عالم الانترنت لايوجد تطبيق مؤمن بنسبه 100% ولكن هناك تطبيقات مؤمنه بنسبه 0% وهذه مايجب تفاديها التجريب وكسب الخبره واحده من اهم ركائز المبرمج تتطلب تنفيذ لاي فكره تظهر امام المبرمج وبتنفيذها ستعطيه خبره كبيره للمستقبل لايمكن لاي كتاب او فيديو ان يعطيك تلك الخبره. فالخطأ هو ما يعلمنا كبشر. اخيرا وليس اخرا تتلخص النقاط السابقه فيما يلي: التعرف على المشكله وايجاد الحلول بطرق منظمه التفكير في نفس مستوى الاله لتحويل الجمله البشريه الي جمله حاسوبيه قد تكون اطول التعرف على جهازك بشكل جيد البحث و طرق ايجاد المعلومه المطلوبه الفهم العميق للغه الامان التجريب والخطأ1 نقطة
-
عليك أنّ تدرك أنّه لا يوجد ما يُسمى "أفضل طريقة"، الطرق كثيرة وعليك اكتشاف الطريقة الّتي تُناسبك، ولكن بعد تعلّم الأساسيات، سواء بقراءة الكتب أو مُتابعة دورة ما، عليك مُتابعة التعلّم بالتطبيق العمليّ، وهو ما يُسمى Learn by doing.عندما يكون لديك هدف في تعلّم البرمجة، مثلًا لديك فكرة تطبيق أوفكرة موقع وتريد تطبيقها، سيكون ذلك حافزًا قويًا جدًا لك للمُتابعة.اللغة الإنكليزية لا مَفر منها خصوصًا في المرحلة المتوسطة والمُتقدمة، وليس من المُفترض أنّ تكون "بلبلًا" كل ما عليك أنّ تعرفه هو الأساسيات والباقي ترجمة -الجميع يفعل ذلك على الأقل في البداية-فأنت لا تقرأ كتابًا أدبيًا، والكتب التقنيّة أسهل بكثير.أبتعد عن المُقارنات بين لغات البرمجة ولا تلتفت إليها أبدًا، وعندما تقرأ عنوان "لغة x بطيئة" فهذا إشارة لك لكي تُغلق الموضوع على الفور، وضع في بالك أنّه عندما تتعلّم أي لغة فأنت تتعلم أساسيات باقي اللغات، وعليه اختر اللغة الّتي تُناسب رغبتك وميولك.النقطة الأخيرة وهي أهم نقطة في رأي، في مرحلة ما خلال تعلمك وبعد تعلّم الأساسيات، سوف تصل إلى نقطة تظن بها أنّ البرمجة أمرًا صعبًا وهو مجال ليس لك، هذه المرحلة بالذات إنّ تجاوزتها فاعتبر نفسك مُبرمجًا.1 نقطة