كل الأنشطة
- الساعة الماضية
-
خالد زايد2 اشترك بالأكاديمية
-
Youssef Ahmed35 اشترك بالأكاديمية
-
Mari Almalkye اشترك بالأكاديمية
- اليوم
-
أغلب الشركات والمشاريع الحرة ما زالت تعتمد على Node.js لأنه الأقدم والأكثر استقرارًا وانتشارًا. أما Bun.js فهو حديث وسريع جدًا، لكنه ما زال في مرحلة التطور، وعدد الشركات التي تستخدمه قليل مقارنةً بـ Node.js. أنصحك أن تبقى على اطلاع بـ Node.js معرفتك به ستفيدك كثيرًا في العمل الحر أو عند التقديم لوظائف.
-
إن فرص وإنتشار وظائف Node.js أكبر كثيرا حاليا من Bun.js لذلك ستجد أن الفرص الخاصة ب Bun قليلة وبالفعل إذا تركت Node.js فقد تخسر حاليا وقتك الذي عملت فيه على تعلم Node ومن الممكن أن تجد صعوبة قليلا في العثور على وظائف ل Bun . لهذا الأفضل عدم ترك Node.js تماما يمكنك البحث عن وظائف بها بينما تقوم بتعلم Bun حتى لا تخسر كثيرا.
-
انا تعلمت Bun.js وتركت Node.js هل بهي حالة لح اخسر شغل في شركات او عمل حر
- 2 اجابة
-
- 2
-
-
مدثر الامين اشترك بالأكاديمية
-
سعاد أخياض اشترك بالأكاديمية
-
Ali Benhenia اشترك بالأكاديمية
-
Mina Saeed اشترك بالأكاديمية
-
Khaled Abdelgaber اشترك بالأكاديمية
-
هبة درويش اشترك بالأكاديمية
-
السلام عليكم, هل توجد نماذج ocr أو خوارزميات دقيقة وفعّالة يمكنها قراءة لوحات السيارات باللغة العربية و اللاتينية؟ ماذا عن البيانات. جربت عددا لا بأس به من النماذج لكنها كثيرا ماتفشل. و شكرا.
-
- 1
-
-
Yahia Ali4 اشترك بالأكاديمية
-
وعليكم السلام ورحمة الله وبركاته. توجد العديد من المواقع الشهيرة لذلك مثل Leetcode و codewars و codeforces و HackerRank وغيرها من المواقع الأخرى ويمكنك التدرج في مستوى صعوبة الأسئلة كما تريد. وإليك المزيد من المواقع في الإجابة التالية :
-
عماد شيخ العشرة بدأ بمتابعة مسائل برمجية بلغة الباثون
-
وعليكم السلام, يوجد مواقع متخصصة لهذا المجال وذلك لكي تتعلم هذه المسائل والأمر يعتمد على مستواك الحالي فمثلا يوجد موقع leetcode يهتم بمسائل الخوارزميات وهياكل البيانات لكنه صعب للمبتدئين حيث يجب عليك أن تتعلم بعض اساسيات الخوارزميات وهياكل البيانات قبل حل المشاكل. يوجد مواقع اسهل مثل موقع https://www.hackerrank.com وهو يساعد على حل المشاكل ايضا لكن هذه المواقع قد تحتاج إلى لغة إنجليزي وذلك لكي تستطيع فهم السؤال بشكل جيد. حدد مستواك الحالي وعلى اساسه حل المسائل التي تناسب وذلك لانه يوجد الكثير من المستويات.
-
سلام عليكم. هل يمكن لأحد أن يعطيني فكرة لمسائل برمجية بلغة البايثون ثم يقيمها لي.
- 2 اجابة
-
- 2
-
- البارحة
-
حليت مشكلة المشكلة كانت غريبة هي بسبب GitHub حيث في مستودع قمت برفعه قبل رفع على ريندر وبذالك الاكواد في جيت هب كانت localhost
-
اختبر المشروع على حاسوبك إذن، وقم بتبديل رابط قاعدة البيانات برابط atlas وقم بمحاولة تسجيل حساب جديد، هل يتم الأمر بشكل سليم؟
-
تمام حليت مشكلة
-
الخادم يعمل، في حال لا يعمل، فستحصل على رسالة خطأ عند زيارة الرابط: https://pinterest-clone-3ans.onrender.com هل قمت بتعيين قيم لمتغيرات البيئة بشكل صحيح على الاستضافة؟ وبالأخص رابط قاعدة البيانات على Atlas
-
- 6 اجابة
-
- 1
-
-
الخادم يعمل لا مشكلة فهو يعرض رسالة hell bun عند زيارة الرابط، قمت بمحاولة التسجيل فحدث خطأ، ما هي الأخطاء التي تظهر في الـ logs على الاستضافة؟
-
Zen Eddin Allaham بدأ بمتابعة مشكلة بعد رفع المشروع على render
-
انا انتهيت من مشروعي Fullstack بستخدام Bun.js Express react ورفعت مشروع على render واخدت رابط وحطيته ب fetch API وفي cors قبل رفع على ريندر انا حاطت رابط مشروع وMongoDB atlas IP عالمي ورفعت مشروع على نتليفاي بعد بنائه ولم يعمل خادم رابط خادم https://pinterest-clone-3ans.onrender.com رابط مشروع https://www-pinterest-clone.netlify.app/ import { useEffect, useState } from "react"; import toast from "react-hot-toast"; import "./profile.css"; import { FaDeleteLeft, FaPenClip } from "react-icons/fa6"; import { useNavigate } from "react-router-dom"; interface Image { _id: string; title: string; description: string; imageUrl: string; } const Profile = () => { const [images, setImages] = useState<Image[]>([]); const [loading, setLoading] = useState(false); const [modalOpen, setModalOpen] = useState(false); const [editingImage, setEditingImage] = useState<Image | null>(null); const [newTitle, setNewTitle] = useState(""); const [newDescription, setNewDescription] = useState(""); const [newFile, setNewFile] = useState<File | null>(null); const navigate = useNavigate(); const token = localStorage.getItem("token"); useEffect(() => { const token = localStorage.getItem("token"); if (!token) { toast.error("You must log in first"); navigate("/login"); return; } }); const fetchImages = async () => { if (!token) return; setLoading(true); try { const res = await fetch("https://pinterest-clone-3ans.onrender.com/api/image/imageme", { credentials: "include", method: "GET", headers: { Authorization: `Bearer ${token}` }, }); const data = await res.json(); setImages(data); } catch (err) { console.error(err); toast.error("Failed to load images"); } finally { setLoading(false); } }; useEffect(() => { fetchImages(); }, []); const handleDelete = async (id: string) => { if (!token) return; try { const res = await fetch(`https://pinterest-clone-3ans.onrender.com/api/image/${id}`, { credentials: "include", method: "DELETE", headers: { Authorization: `Bearer ${token}` }, }); const data = await res.json(); if (res.ok) { toast.success(data.success); setImages(images.filter((img) => img._id !== id)); } else toast.error(data.error); } catch (err) { console.error(err); toast.error("Failed to delete image"); } }; const openEditModal = (img: Image) => { setEditingImage(img); setNewTitle(img.title); setNewDescription(img.description); setModalOpen(true); }; const handleUpdate = async () => { if (!token || !editingImage) return; try { const res = await fetch( `https://pinterest-clone-3ans.onrender.com/api/image/${editingImage._id}`, { credentials: "include", method: "PUT", headers: { "Content-Type": "application/json", Authorization: `Bearer ${token}`, }, body: JSON.stringify({ title: newTitle, description: newDescription, }), } ); const data = await res.json(); if (res.ok) { toast.success(data.success); fetchImages(); setModalOpen(false); setNewTitle(""); setNewDescription(""); } else toast.error(data.error); } catch (err) { console.error(err); toast.error("Failed to update image"); } }; const handleUpload = async () => { if (!token || !newTitle || !newDescription || !newFile) { return toast.error("All fields are required for upload"); } if (newDescription.length > 60) { return toast.error("Maximum description: 60 characters"); } const formData = new FormData(); formData.append("title", newTitle); formData.append("description", newDescription); formData.append("image", newFile); try { const res = await fetch("https://pinterest-clone-3ans.onrender.com/api/image/upload", { credentials: "include", method: "POST", headers: { Authorization: `Bearer ${token}` }, body: formData, }); const data = await res.json(); if (res.ok) { toast.success(data.success); fetchImages(); setNewTitle(""); setNewDescription(""); setNewFile(null); } else toast.error(data.error); } catch (err) { console.error(err); toast.error("Failed to upload image"); } }; return ( <div className="profile-page"> <h2>Your Images</h2> <div className="upload-section"> <input type="text" placeholder="Title" value={newTitle} onChange={(e) => setNewTitle(e.target.value)} /> <input type="text" placeholder="Description" value={newDescription} onChange={(e) => setNewDescription(e.target.value)} /> <input type="file" onChange={(e) => setNewFile(e.target.files?.[0] || null)} /> <button onClick={handleUpload}>Upload Image</button> </div> {loading && <p className="no-images">Loading...</p>} {images.length === 0 && !loading && ( <p className="no-images">No images uploaded yet.</p> )} <div className="image-grid"> {images.map((img) => ( <div key={img._id} className="image-card"> <img src={img.imageUrl} alt={img.title} /> <h3>{img.title}</h3> <p>{img.description}</p> <div className="image-actions"> <button onClick={() => openEditModal(img)}> <FaPenClip /> Edit </button> <button onClick={() => handleDelete(img._id)}> <FaDeleteLeft /> Delete </button> </div> </div> ))} </div> {modalOpen && editingImage && ( <div className="modal"> <div className="modal-content"> <h3>Edit Image</h3> <input type="text" value={newTitle} onChange={(e) => setNewTitle(e.target.value)} /> <input type="text" value={newDescription} onChange={(e) => setNewDescription(e.target.value)} /> <div className="modal-actions"> <button onClick={handleUpdate}>Save</button> <button onClick={() => setModalOpen(false)}>Cancel</button> </div> </div> </div> )} </div> ); }; export default Profile; import express from 'express'; import dotenv from 'dotenv'; import cors from 'cors'; import { connectDB } from './utils/db'; import userRouter from './routes/user.routes'; import imageRouter from './routes/image.routes'; dotenv.config(); const app = express(); const port = process.env.PORT || 3000; connectDB(); app.use(cors({ origin: 'https://www-pinterest-clone.netlify.app', credentials: true, })); app.use(express.json()); app.get('/', (req, res) => { res.send('Hello Bun!'); }); app.use('/api/auth', userRouter); app.use('/api/image', imageRouter); app.listen(port, () => { console.log(`Server is running on port ${port}`); });
- 6 اجابة
-
- 1
-
-
نعتذر لكِ عن أي إنزعاج أثناء تواجدك بالأكاديمية، قمت بتفقد الأمر ومنصة الأكاديمية تعمل بشكل سليم وسريع. هل لديكِ إضافة مانع إعلانات في المتصفح لديكِ؟ أحيانًا تسبب مثل تلك الإضافات مشاكل لمشغل الفيديو بالأكاديمية لسبب ما، لذا استثني الأكاديمية من المواقع التي تعمل عليها الإضافة، بمعنى ضعي الموقع في قائمة white list. أيضًا هل الإنترنت لديكِ مستقر؟ فربما يوجد مشكلة به، للتأكد في حال المشكلة تظهر على الهاتف أيضًا إذن المشكلة من شبكة الإنترنت لديك، حاولي تعديل إعدادات الـ DNS للشبكة لديكِ إلى جوجل أو Cloudflare والأداة التالية جيدة حمليها واختاري من القائمة الـ dns ثم apply https://dnsjumper.net أو ربما المشكلة في المتصفح، حاولي تحديثه أو استخدمي متصفح آخر.
-
Jawaher Yahiy بدأ بمتابعة مشكلة في تصفح الأكاديمية
-
للأسف الموقع سيء جداً وبطيء ويحتاج كل شوي احذف الكوكيز والكاش عشان يفتح اضافه لذلك المشكله ظاهره أمامكم أرجو الحل في اسرع وقت ، يضيع وقتي وانا كل شوي اسوي refresh
- 1 جواب
-
- 2
-
-
هذا السؤال تمت الإجابة عليه من قبل، أرجو مراجعة الأجوبة من هنا:
-
بعد إتمام أربعة مسارات على الأقل من الدورةأو إنهائها بالكامل يجب أن تقوم برفع المشاريع التي أنجزتها خلال الدورة إلى حسابك على GitHub بعد ذلك أرجو منك التواصل مع مركز المساعدة وإبلاغهم برغبتك في التقدم إلى الاختبار موضحا روابط المشاريع التي رفعتها على GitHub. بعد إرسال الطلب انتظر حتى تتم مراجعة مشاريعك، وسيتم الرد عليك لتحديد موعد المقابلة، والتي تتضمن: محادثة صوتية تتعلق بالدورة والمشاريع التي نفذتها. إنجاز مشروع جديد مرتبط بما تعلمته خلال الدورة. بعد تسليم المشروع تعقد محادثة صوتية ثانية مدتها 30 دقيقة لمناقشة ما نفذته والإجابة عن أسئلة المدرّب.
-
الرجاء التواصل مع مركز المساعدة واخبارهم انك تريد ان تختبر يمكنك الوصول اليه عن طريق الرابط : https://support.academy.hsoub.com/conversations كما انه قد يتاخر الرد بضعة ايام حيث يوجد ضغط على مركز المساعدة.
-
يمكنك التقدم إلى امتحان الدورة، من خلال التواصل مع مركز المساعدة وسيتم إخبارك بالخطوات التي يجب عليك القيام بها
-
آلية الإختبار هي كالتالي: بعد إنهاء 4 مسارات من الدورة على الأقل، أو الدورة بالكامل عليك رفع المشاريع التي قمت بها بالدورة على حسابك في github، ثم التحدث لمركز المساعدة وإخبارهم أنك تريد التقدم للإختبار وتوفير روابط المشاريع على github. ثم الإنتظار لبعض الوقت لحين مراجعة المشاريع وسيتم الرد عليك، وتحديد موعد لإجراء مقابلة، وبها يتم: إجراء محادثة صوتيّة لمدة 30 دقيقة يطرح المدرّب عليك أسئلة متعلّقة بالدورة والأمور التي نفّذتها خلالها. يحدد لك المدرّب مشروعًا مرتبطًا بما قمت به أثناء الدورة لتنفيذه خلال فترة محددة تتراوح بين أسبوع إلى أسبوعين. إجراء محادثة صوتيّة أخرى لمدّة 30 دقيقة يناقش بها مشروعك وما نفذته وتطرح أسئلة خلالها. إن سارت على جميع الخطوات السابقة بشكل صحيح، تحصل على الشهادة أو يرشدك المدرّب لأماكن القصور ويطلب منك تداركها ثم التواصل معنا من جديد.
-
لقد انهيت المطلوب لدخول الإمتحان . كيف أتقدم لآدء الإمتحان؟
- 5 اجابة
-
- 5
-
-
الواجهة الخلفية ليست بتلك السهولة بل معقدة أكثر من الواجهة الأمامية، الفكرة أنك لا تتعامل مع تصميم والألوان بل منطق برمجي فقط، وبالطبع ليس دائمًا فهناك مشاريع الواجهة الأمامية بها معقدة أكثر. ولا تتنقل بين اللغات والتقنيات بشكل عشوائي، في البداية يجب الإلتزام بمسار مُحدد ولا مشكلة في تغيير التخصص حيث أنك في مرحلة استكشاف لمجال البرمجة، ويجب الآن التعمق في تخصص محدد لاكتساب خبرة به لدخول سوق العمل. حاليًا المطلوب أكثر هو Full-Stack، وتستطيع التغلب على مشكلة الضعف في الواجهة الأمامية من خلال استخدام إطار عمل مثل Tailwind ومكونات جاهزة من خلال shadcn لكن بالطبع يشترط تعلم الأساسيات HTML, CSS, JS والوصول لمستوى متوسط على الأقل بهم.
-
ما تقوم به غير صحيح، أنت في مرحلة التعلم لذا يجب التعمق في التقنيات المطلوبة في سوق العمل، وهي Node.js وفي وقت فراغك فيما بعد تستطيع الإطلاع على bun.js للمعرفة ليس أكثر فهي تقنية جديدة ليست ناضجة ومستخدمة بشكل كافٍ بعد. لا تقم بتعلم ما تفضله أنت بل المطلوب في سوق العمل، وإلا ستجد نفسك تعلمت مهارات غير مطلوبة ويضيع مجهودك نسبيًا، فهناك الكثير من المفاهيم المشتركة بالطبع، لكن لكل تقنية مفاهيم خاصة بها وبحاجة إلى التعمق بها واكتساب خبرة من خلال المشاريع. تعلم Bun.js بعد أن تحصل على وظيفة وتتقن Node.js.
-
مبارك لك مجهود تُشكر عليه، الآن تنتقل لمرحلة المراجعة والاستعداد للإختبار، هل قمت بالتطبيق العملي على الدروس؟ حيث هناك تطبيقات عملية مطلوب تسليمها، وكذلك الممارسة العملية هي الأهم عند تعلم البرمجة وليس المشاهدة. ليس المطلوب منك رفع التطبيقات العملية البسيطة، بل المشاريع العملية الكاملة، بمعنى في قسم "استخراج البيانات من الويب Web scraping" يوجد تطبيق عملي ستوظف به ما تعلمته، فذلك مطلوب منك رفعه. وفي مسار "تطبيقات عملية على النماذج النصية الكبيرة LLMs" مطلوب منك التطبيقات التي سنقوم بها في ذلك المسار. بالتالي لتجنب إدخال نفسك في متاهة مفرغة، أرجو إنشاء مجلد للدورة ثم بداخله قم بإنشاء عدّة مجلدات حيث مجلد لكل مسار في الدورة. وبداخل كل مجلد قم بوضع التطبيقات العملية التي قمنا بها في ذلك المسار. ثم رفع المجلد الرئيسي بالكامل بما يحتويه من مجلدات على مستودع GitHub وتوفير الرابط الخاص به عند التقدم للإختبار. وفي حال وجود مشروع به الكثير من الملفات والمجلدات ويحتاج إلى مجلد خاص به مثل مشروع "تخصيص نموذج لغة باستخدام LangChain و OpenAI" هنا تقوم برفع المشروع على مستودع GitHub منفصل خاص به. ويجب تعلم مهارة استخدام GIT ومنصة GitHub فهي أساسية لا غنى عنها، ستجد مصادر هنا: ولمراجعة الدورة عليك بتنفيذ مشاريع مشابهة لما قمت به بالدورة، لكن على بيانات جديدة وستجد ذلك في موقع Kaggle، ثم العودة للدروس لمراجعة نقاط الضعف التي وجدتها لديك. أي قم بمراجعة مسار مسار من خلال التطبيق العملي، وفي حال المسار نظري، لخص أهم النقاط التي تعلمتها منه، واشرح لنفسك بشكل شفهي كيف تعمل الخوارزمية مثلاً.
- 4 اجابة
-
- 1
-
