كل الأنشطة
- الساعة الماضية
-
احمد عبد الحليم2 اشترك بالأكاديمية
-
Svideogame Bos اشترك بالأكاديمية
-
RHF اشترك بالأكاديمية
-
Osama Abbas3 اشترك بالأكاديمية
-
Ayman Elsherbeny اشترك بالأكاديمية
-
Fares Zahran اشترك بالأكاديمية
- اليوم
-
Osama Barghash اشترك بالأكاديمية
-
Omar Hossam6 اشترك بالأكاديمية
-
خالد ابراهيم احمد نبنب اشترك بالأكاديمية
-
Haidy Abdelhamied اشترك بالأكاديمية
-
ربما حجم الصورة كبير، فالصو الملتقطة بالكاميرا أو المختارة من المعرض، دقتها عالية جداً مثلاً 4000x3000 بكسل، وعند تحميلها في الذاكرة كـ Bitmap، تستهلك مساحة كبيرة. أو تمرر الصورة كـ Bitmap كامل بين صفحة 2 وصفحة 3 عبر Intent Extras، فتواجه خطأ TransactionTooLargeException. لذا قبل إرسال الصورة إلى Gemini API، يجب تصغير حجمها وضغطها، فنماذج Gemini لا تحتاج إلى صور بدقة 4K للتعرف عليها، يكفي دقة 720p أو 1080p. وإليك مثال: import android.graphics.Bitmap import android.graphics.BitmapFactory import java.io.ByteArrayOutputStream fun resizeAndCompressImage(bitmap: Bitmap, maxDimension: Int = 1024, quality: Int = 80): Bitmap { val originalWidth = bitmap.width val originalHeight = bitmap.height var resizedWidth = originalWidth var resizedHeight = originalHeight // Resize the image (تصغير الأبعاد) if (originalHeight > maxDimension || originalWidth > maxDimension) { if (originalWidth > originalHeight) { resizedWidth = maxDimension resizedHeight = (resizedWidth * originalHeight / originalWidth.toFloat()).toInt() } else { resizedHeight = maxDimension resizedWidth = (resizedHeight * originalWidth / originalHeight.toFloat()).toInt() } } val resizedBitmap = Bitmap.createScaledBitmap(bitmap, resizedWidth, resizedHeight, false) // Compress the image (ضغط الجودة) val outputStream = ByteArrayOutputStream() resizedBitmap.compress(Bitmap.CompressFormat.JPEG, quality, outputStream) val compressedBytes = outputStream.toByteArray() return BitmapFactory.decodeByteArray(compressedBytes, 0, compressedBytes.size) } val originalBitmap: Bitmap = // الصورة الأصلية val optimizedBitmap = resizeAndCompressImage(originalBitmap) كذلك يجب أن تتم كل عمليات معالجة الصورة والاتصال بالـ API في thread خلفي لتجنب تجميد واجهة المستخدم، وأفضل طريقة للقيام بذلك في أندرويد هي بواسطة Coroutines import androidx.lifecycle.ViewModel import androidx.lifecycle.viewModelScope import com.google.ai.client.generativeai.GenerativeModel import com.google.ai.client.generativeai.type.content import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.launch import kotlinx.coroutines.withContext import android.graphics.Bitmap class ChatViewModel : ViewModel() { private val generativeModel: GenerativeModel = // تهيئة النموذج هنا fun analyzeImage(prompt: String, image: Bitmap) { viewModelScope.launch { try { val optimizedImage = withContext(Dispatchers.Default) { resizeAndCompressImage(image, maxDimension = 768, quality = 75) } val inputContent = content { image(optimizedImage) text(prompt) } val response = generativeModel.generateContent(inputContent) withContext(Dispatchers.Main) { _chatResponse.value = response.text } } catch (e: Exception) { withContext(Dispatchers.Main) { } } } } } ولا تقم بتمرير الـ Bitmap مباشرة، بل تمرير مسار URI للصورة كـ String من صفحة 1 إلى 2 ثم إلى 3، وفي صفحة 3، قم بقراءة الـ Bitmap من الـ URI ثم قم بمعالجته وإرساله. وبعد التصنيف في صفحة 1، قم بحفظ النسخة المصغرة في ذاكرة التخزين المؤقت للتطبيق ومرر مسار الملف الجديد إلى الصفحات التالية. النموذج المحلي سيعمل على جهاز المستخدم للتصنيف الأولي، لكن مهمة الشات مع Gemini تستطيع نقلها إلى الخادم باستخدام Cloud Functions for Firebase والتي هي أساس Firebase AI Extensions و Genkit. أي في التطبيق سيقوم المستخدم بتصنيف الصورة باستخدام النموذج المحلي، وعند الانتقال لصفحة الشات، ثم يعمل التطبيق على رفع الصورة المُصغّرة إلى Cloud Storage for Firebase. وعند كتابة المستخدم لسؤال، سيقوم التطبيق بإرساله ورابط الصورة في Cloud Storage إلى Cloud Function. وفي الخادم Firebase Cloud Function سيتم تفعيل الـ Function عند استدعائها من التطبيق، سواء مكتوبة بـ Node.js وTypeScript أو Python لتستقبل السؤال ورابط الصورة. ثم تقوم باستدعاء Gemini API من الخادم وذلك أفضل من حيث الأمان، ثم تستقبل الرد من Gemini، ثم إرسال الرد مرة أخرى إلى التطبيق، إما مباشرة كرد على الاستدعاء أو عن طريق كتابته في Firestore أو Realtime Database حيث يستمع التطبيق للتحديثات.
-
قمت بتصميم 3 صفحات في أندرويد ستوديو حيث أن الصفحة الأولى تحوي تصنيف للصورة باستخدام نموذج ML وبعد تصنيفها تظهر في الصفحة الثانية وهناك عدة خيارات منها الانتقال إلى صفحة 3 والذي يحوي Chat-Bot باستخدام gemini نموذج gemini-2.5-flash للتعرف على الصورة وبناء ردود عليها لكن المشكلة عند فتح صفحة الشات يحدث تعليق للتطبيق ويظهر السبب في الصورة بسبب الحجم مع أنه عند المحاولة لأول مرة اشتغل ولكن بعدها أصبح لايستجيب كيف أتأكد من السبب وكيف أحلها أيضًا هل ممكن عمل الشات باستخدام Firebase AI Logic مع أن النموذج يعمل In Local وبعض الوظائف الأخرى تعمل على خدمات Firebase مختلفة
- 1 جواب
-
- 1
-
-
قمت بتصميم 3 صفحات في أندرويد ستوديو حيث أن الصفحة الأولى تحوي تصنيف للصورة باستخدام نموذج ML وبعد تصنيفها تظهر في الصفحة الثانية وهناك عدة خيارات منها الانتقال إلى صفحة 3 والذي يحوي Chat-Bot باستخدام gemini نموذج gemini-2.5-flash للتعرف على الصورة وبناء ردود عليها لكن المشكلة عند فتح صفحة الشات يحدث تعليق للتطبيق ويظهر السبب في الصورة بسبب الحجم مع أنه عند المحاولة لأول مرة اشتغل ولكن بعدها أصبح لايستجيب كيف أتأكد من السبب وكيف أحلها أيضًا هل ممكن عمل الشات باستخدام Firebase AI Logic مع أن النموذج يعمل In Local وبعض الوظائف الأخرى تعمل على خدمات Firebase مختلفة
- البارحة
-
ليس بنفس الطريقة التي تبرمجه بها بلغة C++ في Arduino ثم عمل محاكاة كاملة للكود في بروتيوس، ولكن، يوجد حل بديل عملي يسمح لك باستخدام بايثون للتحكم في الدائرة التي تتم محاكاتها في بروتيوس. المشكلة أنّ بايثون هي لغة يتم تفسيرها Interpreted للغة الآلة، بالتالي تحتاج إلى بيئة تشغيل وهو مُفسر بايثون لترجمة الأوامر إلى لغة الآلة لحظة بلحظة، أي المفسر نفسه يحتاج إلى موارد كبيرة من RAM وذاكرة تخزين. ومتحكم ATmega328p الموجود في أردوينو أونو هو متحكم 8-بت بموارد محدودة جدًا وهي ذاكرة فلاش 32 كيلوبايت لتخزين الكود، وذاكرة SRAM كيلوبايت فقط لتخزين المتغيرات أثناء التشغيل، وبالطبع تلك الموارد لا تكفي إطلاقاً لتشغيل مفسر بايثون. وربما سمعت عن مشاريع مثل MicroPython، وهي نسخة مصغرة من بايثون مصممة للعمل على المتحكمات الدقيقة، ولكن حتى تلك النسخ تتطلب متحكمات أقوى بكثير 32-بت مثل ESP32, ESP8266, Raspberry Pi Pico, أو سلسلة STM32 التي تمتلك ذاكرة RAM وفلاش أكبر بعشرات أو مئات المرات من ATmega328p. لذا دمج بايثون مع الأردوينو أو أي متحكم آخر، ومحاكاتها بشكل ممتاز في بروتيوس، عليك تقسيم المهام، بحيث المتحكم ATmega328p تتم برمجته بلغة C++ فيArduino ليقوم بالمهام البسيطة والمباشرة، ليصبح تابع يستقبل الأوامر عبر المنفذ التسلسلي Serial Port وينفذها، وليكن مثلاً أشعل الليد، اقرأ قيمة الحساس، أرسل لي قيمة الجهد وهكذا. ثم الكمبيوتر وهو المُستضيف Host، ستقوم بإنشاء سكربت بايثون به يحتوي على المنطق المعقد، واجهات المستخدم، معالجة البيانات، أو اتخاذ القرارات، وسيقوم بإرسال الأوامر إلى المتحكم عبر المنفذ التسلسلي.
-
نعم لا مشكلة في هذا الأمر يمكنك إستخدام vite لا داعي لتغيرها .
-
هل يوثر إذا استخدمت vite بدل create react app حيث في مسار رياكت تم استخدام create react app وانا اريد انفذ مشروع من خلال Vite هل يوجد مشكلة بذالك
- آخر أسبوع
-
<a href="https://alalame.com/">مقوي سيرفس</a>
- 1 تعليق
-
- أساسيات في networking
- udp
- (و 5 أكثر)
-
انت في الشركات الكبيرة وحتى المتوسطة تعمل على مشاريع ليست بالصغيرة بل هي إما كبيرة جدا أو متوسطة في الحجم والتعقيد. وستجد أن الملف الواحد يتكون من مئات إن لم يكن ألاف الأسطر في هذا الملف . ولهذا فإن كان المبرمج بطئ في الكتابة فهذا الأمر سيعطله كثيرا وسيجعل إنتاجيته قليلة وهذا ليس بالأمر الجيد أبدا. تخيل معي أن هناك كود يتكون من 100 سطر وهناك مبرمج سريع في الكتابة سينتهي مثلا في 10 دقائق . ولكن على العكس هناك مبرمج بطئ في الكتابة وسيكتب نفس ال 100 سطر في ساعة . فتخيل معي من ستفضل الشركة في العمل الشخص الذي أخذ 10 دقائق أم الشخص الذي أخذ ساعة ؟! . وأيضا الشخص البطئ بالطبع سينهي المهام المطلوبة منه ببطئ ومن الممكن أن يتأخر على موعد التسليم لهذا الأمر سيواجه مشاكل وصعوبات في العمل ولكن الأمر ليس مستحيلا وليس أيضا مهما جدا في البداية . ولكن لا داعي للقلق فعندما تعمل على مشاريع كثيرة وتقوم بكتابة الكثير من الأكواد ستجد أن يديك قد تعودتا على الكتابة سريعا وستجد نفسك تقوم بالكتابة حتى دون النظر إلى لوحة المفاتيح . لذلك الأفضل لك حاليا التركيز على كتابة الكثير من الأكواد والتطبيق العملي وهذا بجانب أنه سيعطيك الخبرة في مجالك أيضا سيكسبك سرعة في الكتابة .
- 1 جواب
-
- 1
-
-
المقال قليل الجودة للغاية اخاف ان تكون المقالات الأخرى في الموقع مثله فالعنوان والموضوع ليس بينهما علاقة ال مقال بالكامل كان يمكن وضعه تحت العنوان فلو قال المتاجر الإلكترونية صارت مهمة مثل الحقيقة ويجب عند البدء تحديد الجمهور ونوع المتجر اختيار منصة التطوير وجعل الموقع متمحور على المنتج دون تشتيت ويدعم التصفح من الهاتف سيكون ذكر كل شي في المقال حرفيا وما ابعد هذا عن الدليل الشامل
-
لا مشكلة إذا تم إضافة خصائص جديدة في المشروع ولكن يجب أن يتم إستخدام نفس التقنيات المستخدمة وذلك لقياس مدى فهمك وتطبيق لنفس التقنيات المستخدمة في المسار . لذلك غالبا سيتم طلب إعادة المشروع بإستخدام جافاسكريبت وليس type script . ولكن اللأفضل إرسال هذا السؤال لمركز المساعدة حيث سيساعدونك أكثر بخصوص ذلك الأمر : https://support.academy.hsoub.com/conversations
-
لماذا يجب على المبرمج أن يتعلّم الكتابة السريعة على لوحة المفاتيح، رغم أنه يكتب كودًا لا مقالات؟ وهل لو كانت مهارته ليست بذاك المستوى المطلوب أن يتقدم لوظائف؟
- 1 جواب
-
- 1
-
-
في نهاية الصفحة بعد تعليقات الطلاب ستجد هذا الصندوق
- 3 اجابة
-
- 1
-
-
ستجد أسفل فيديو الدرس صندوق للتعليقات كما هنا يرجى طرح سؤالك أسفل الدرس وليس هنا حيث هنا قسم الأسئلة العامة ولا نقوم بإجابة الأسئلة الخاصة بمحتوى الدورة أو الدرس، وذلك لمعرفة الدرس الذي توجد به مشكلتك و لمساعدتك بشكل أفضل.
-
انا نفذت مشروع تطبيق ملاحظات الخاص ب مسار رياكت في دورة جافا سكريبت لكن نفذته ب تايب سكريبت واضفت ميزة حذف الكل يعني المدرب لم يقم بتلك الميزة ورفعته على جيت هب هل سيحدث مشكلة عند تسليم مشاريع من اجل اختبار يعني انا قمت بتعديلات على تطبيق هل يوجد مشكلة بذالك ام حصراً لازم تكون تطبيق كما هو في مسار وايضا استخدام نفس تقنيات
-
في الدرس الأول من بنى المعطيات الخطية الأستاذ قال أنه يجب أن يكون طرفي عملية الجمع قائمتين و أعطى مثال لإضافة عنصر الى قائمة. أنا جربت أن أضيف العنصر إلى القائمة من دون أن أضعه في قائمة و تمت إضافته بشكل صحيح. ملاحظة: لم استطع أن أرفق الصورة! ، كيف أرفق صورة الكود؟ سوف أكتب الكود: list_2 = [1,2] list_2 += "a" , then print(list_2) [1,2,"a"]
- 3 اجابة
-
- 1
-
-
ستجد أسفل فيديو الدرس صندوق للتعليقات كما هنا يرجى طرح سؤالك أسفل الدرس وليس هنا حيث هنا قسم الأسئلة العامة ولا نقوم بإجابة الأسئلة الخاصة بمحتوى الدورة أو الدرس، وذلك لمعرفة الدرس الذي توجد به مشكلتك و لمساعدتك بشكل أفضل.
-
- 1 جواب
-
- 1
-
-
وعليكم السلام ورحمة الله وبركاته . شكرا لمشاركتك هذا الأمر معنا . ستجد أسفل الدرس هناك صندوق للتعليقات كما هنا يمكنك نشر تعليقات وأسألتلك هناك أسفل الدرس الخاص وذلك لنستطيع مساعدتك أو مشاركة ما تريده أسفل الدرس الخاص بسؤالك وأيضا ستجد أسئلة الطلاب الأخرى وأجوبتك المدربين وبالفعل ستجد حل تلك المشكلة التي ذكرتها أسفل الدرس. وهنا هذا هو قسم الأسئلة العامة وهو غير مخصص لأسئلة الدورات فأى سؤال في الدورة كما وضحت لك يجب أن تضعه أسفل الدرس.
- 1 جواب
-
- 1
-
-
السلام عليكم , انا الان اوضح مشكلة ربما تظهر لديك في الشرح مع المدرب كتب الامر التالي npx create-expo-app first-app ولكن النسخة في الشرح قديمة ويوجد بعض الاختلافات اذا قمت في كتابة نفس الامر ف الحل هو كتابة الامر التالي : npx create-expo-app first-app--template blank@sdk-54 first-app = هذا اسم المشروع ويمكنك كتابة الاسم الذي تريد. دعواتكم 💖
- 1 جواب
-
- 1
-
-
ستجد أسفل فيديو الدرس صندوق للتعليقات كما هنا يرجى طرح سؤالك أسفل الدرس وليس هنا حيث هنا قسم الأسئلة العامة ولا نقوم بإجابة الأسئلة الخاصة بمحتوى الدورة أو الدرس، وذلك لمعرفة الدرس الذي توجد به مشكلتك و لمساعدتك بشكل أفضل.
-
ستجد أسفل فيديو الدرس صندوق للتعليقات كما هنا يرجى طرح سؤالك أسفل الدرس وليس هنا حيث هنا قسم الأسئلة العامة ولا نقوم بإجابة الأسئلة الخاصة بمحتوى الدورة أو الدرس، وذلك لمعرفة الدرس الذي توجد به مشكلتك و لمساعدتك بشكل أفضل.
-
ماذا تعني ب عوامل المقارنة ليست عوامل ترابطية ؟
- 1 جواب
-
- 1
-
-
عندما كتبت x**y قام البرنامج برفع العدد من اليمين على العدد على اليسار ولكن عند شرح الاولويات (3 ** 2 ** 4) قلت ان رفع الأس يكون من اليسار على العدد الذي في اليمين اي ان العملية تجري عكس اللغة ما الصحيح
- 1 جواب
-
- 1
-