ملاحظات

المدونة

ملاحظات عن هندسة الواجهة الأمامية وSEO والذكاء الاصطناعي والتحليلات وبناء منتجات حقيقية.

37 مقالات

17 أغسطس 202610 دقائق قراءة

رفعت DeepSeek أسعارها — فوجدت V4 Flash نفسها لدى مزود آخر بأقل من السعر القديم

في 17 أغسطس لاحظت أن إنفاقي على DeepSeek API أصبح يقارب خمسة أضعاف المعتاد. بعدها وجدت واختبرت مزودًا آخر يشغّل نفس checkpoint ‏DeepSeek-V4-Flash-0731 بأسعار أقل بنحو 45% حتى من أسعار DeepSeek القديمة.

DeepSeekRunwareواجهة LLM APIبنية الذكاء الاصطناعيالنماذج مفتوحة الأوزان
13 أغسطس 202612 دقائق قراءة

كيف أحوّل WebP المتحرك وGIF وAPNG إلى H.264 MP4 من دون إفساد الإطارات أو التوقيت

يعيد مسار الإنتاج لدي بناء الإطارات الكاملة التي يراها المستخدم فعلًا، ويحافظ على توقيت المصدر، ويختار CFR واحدًا لكل ملف MP4 نهائي، ويستخدم أصغر لوحة مشتركة من دون تكبير، ويرمّز مقاطع H.264 متوافقة ويجمعها من دون إعادة ترميز فاقدة ثانية، ثم يتحقق من الملف ومن تسليمه عبر HTTP. وفي تشغيل مقاس فعليًا، تحولت 217 ملف WebP متحرك بحجم إجمالي 1.49 GB إلى ملف H.264 MP4 واحد بحجم 78.49 MB.

H.264FFmpegMP4WebP متحركGIFAPNGضغط الفيديومعالجة الوسائط
13 أغسطس 202615 دقائق قراءة

كنت أنبّه على كل شيء: كيف حوّلت ضجيج أخطاء المتصفح إلى مراقبة مفيدة في الإنتاج

كان نظام الإبلاغ في الواجهة الأمامية يعامل حجب الإعلانات، وأعطال GTM، وAbortError، وScript error الغامض، وأعطال أجزاء Next.js الحقيقية بالطريقة نفسها. أعدت بناء التنبيهات اعتمادًا على ملكية الخطأ، وتأثيره على المستخدم، وجودة الأدلة، وربط الأحداث، وقدرة التطبيق على الاستعادة.

مراقبة أخطاء المتصفحقابلية رصد الواجهة الأماميةأخطاء JavaScriptمراقبة بيئة الإنتاجNext.jsأداء الويب
13 أغسطس 202617 دقائق قراءة

لماذا تتعطل تبويبات Next.js القديمة بعد النشر: HTML قديم، وملفات مفقودة، واختلاف الإصدارات

بعد عملية نشر، سجلت مراقبة الإنتاج فشل تحميل ملف JavaScript تابع لتطبيق Next.js نفسه. السجل أثبت حدوث الفشل، لكنه لم يثبت سببه. تنطلق المقالة من هذه الحادثة لشرح التبويبات القديمة، وHTML القديم، وأصول /_next/static المفقودة، واختلاف الإصدارات، وسياسة الاحتفاظ، وdeploymentId، وترتيب النشر، والمراقبة، والاستعادة الآمنة.

Next.jsالنشراختلاف الإصداراتتخزين الويب المؤقتموثوقية الواجهة الأماميةالأصول الثابتة
13 أغسطس 202612 دقائق قراءة

النبضة الواحدة التي كسرت معدل الإطارات الثابت لدي: لماذا لم تكن 5580 تساوي 5625، ولم تكن 3751 تساوي 3750

رفض المدقّق ملف MP4 بمعدل 16 إطارًا/ثانية مرارًا لأن مدة إحدى الحزم كانت 5580 نبضة بدل 5625، ثم اكتشف لاحقًا 3751 نبضة حيث يتطلب 24 إطارًا/ثانية القيمة 3750 بالضبط. علّمتني الحالتان الفصل بين توقيت المصدر، وتكميم CFR، وقاعدة الزمن، وPTS/DTS، والدمج، والتحقق على مستوى الحزم.

FFmpegH.264CFRالطوابع الزمنية للفيديوPTS وDTSالتحقق من MP4
13 أغسطس 202612 دقائق قراءة

كيف خفّضت فيديو إنتاجيًا من نحو 280 MB إلى نحو 50 MB باستخدام H.264

انخفض فيديو حقيقي من نظام الإنتاج من نحو 280 MB إلى نحو 50 MB بعد أن أعدت بناء إعداد H.264 حول CRF 28 وx264 veryslow وسقف دقة من فئة 720p ومعدلات إطارات مفيدة ومتطلبات معتدلة لفك الترميز. وفي مرحلة أقدم كان المثال نفسه قد انخفض بالفعل من نحو 350 إلى 238 MB، كما أظهر تدقيق المكتبة القديمة أن ملفات H.264 بمعدلات عدة ميغابت في الثانية كانت شائعة.

H.264FFmpegx264ضغط الفيديوأداء الويبتحسين الوسائط
16 أبريل 20266 دقائق قراءة

بنيت Gitae لتشخيص أعطال المواقع بما يتجاوز مجرد «يعمل / لا يعمل»

بنيت Gitae للإجابة عن سؤال عملي: هل الموقع غير متاح فعلاً أم أن المشكلة محلية؟ يجمع بين اختبارات من خوادم VDS خارجية في موسكو وهلسنكي وبين DNS وHTTPS/TLS والمنافذ والتوجيه وIP والاستضافة وإشارات CMS، مع التعامل مع كل نتيجة كدليل مساعد لا كحكم نهائي.

Gitaeتشخيص المواقعمراقبة المواقعDNSSSLPingTracerouteفحص المنافذاستضافةSEO
14 أبريل 20265 دقائق قراءة

لماذا يعمل TypeScript جيداً مع Codex في تطوير البرمجيات المخصصة للإنتاج

في بيئات الإنتاج يمنح TypeScript أداة Codex ما لا يستطيع أفضل prompt تعويضه: عقوداً قابلة للتحقق آلياً، وتغذية راجعة سريعة من المترجم، ومساراً أكثر أماناً لعمليات إعادة الهيكلة الكبيرة.

TypeScriptCodexالبرمجة بالذكاء الاصطناعيتسليم البرمجياتJavaScriptسير عمل المطور
6 أبريل 20264 دقائق قراءة

بنيت Jurfi.com: استوديو في المتصفح لمسودات قانونية منظّمة

بنيت Jurfi.com لتحويل النماذج والقوالب إلى مسودات عمل قانونية منظّمة داخل المتصفح، مع إمكانية الاحتفاظ بالمسودات محليًا وجعل المراجعة جزءًا واضحًا من العملية، من دون الادعاء أن البرمجيات يمكن أن تحل محل المحامي.

JurfiJurfi.comمستندات قانونيةتقنية قانونيةSaaSصياغة قانونيةأدوات المتصفح
5 أبريل 20264 دقائق قراءة

أول إيراد لي من SaaS: ماذا أثبتت دفعة واحدة فعلًا؟

كانت أول دفعة تلقيتها من منتج SaaS بنيته بنفسي صغيرة، لكنها غيّرت نوع الدليل الذي أملكه. هذا ما يمكن لمعاملة واحدة أن تؤكده، وما لا تستطيع إثباته، ولماذا يهم التكرار أكثر من لحظة الإنجاز نفسها.

SaaSأول إيرادمطور مستقلالتحقق من المنتجبناء المنتجاترحلة الشركات الناشئةتجربة مطور
3 أبريل 20268 دقائق قراءة

كيف أستخدم Codex لمراجعة 15 مشروعًا من دون التخلي عن التحكم اليدوي

مراجعة 15 مشروعًا برمجيًا كانت تعني سابقًا الغرق في فحوصات متكررة. يساعدني Codex الآن على فحص الأخطاء والاختبارات وSEO والترجمات والتوطين والاتساق بسرعة أكبر بكثير، لكنني أتعامل مع كل finding من الذكاء الاصطناعي كخيط للتحقيق لا كحكم نهائي، وكل تغيير يجب أن أتحقق منه بنفسي.

Codexبرمجة بالذكاء الاصطناعيمراجعة الكوداختبار البرمجياتسير عمل المطورالتوطينSEO تقنيإنتاجية المطور
2 أبريل 20266 دقائق قراءة

لماذا أستخدم آخر 3–5٪ من حد Codex في ChatGPT Plus لأكبر المهام الهندسية — تحديث: توقف هذا الأسلوب عن العمل في صيف 2026

تحديث: بحلول صيف 2026 لم يعد هذا الـworkflow موثوقًا بالنسبة لي. اختفى عداد نافذة الخمس ساعات من حسابي، وبقي الحد الأسبوعي ظاهرًا، وأصبحت المهمة الطويلة قد تتوقف عند استنفاده.

CodexChatGPT Plusأدوات البرمجة بالذكاء الاصطناعيسير عمل المطورهندسة البرمجياتالترحيل إلى TypeScriptتنظيف ESLintإعادة الهيكلةحدود استخدام Codexتحديث 2026
1 أبريل 20269 دقائق قراءة

نشرت 10,000 مقال SEO بالذكاء الاصطناعي، وانتهى موقعي إلى صفر صفحة مفهرسة في Google

بدت النشر الجماعي بالذكاء الاصطناعي كأنه اختصار مغرٍ: زحف Google إلى جميع عناوين URL للمقالات الـ10,000 التي أنشأتها، لكن نحو 1,000 صفحة فقط دخلت الفهرس فعلياً، وظهرت في البحث وجلبت زيارات حقيقية. ثم بدأت هذه الصفحات نفسها تختفي حتى وصل الموقع كله إلى صفر صفحة مفهرسة. هذه التجربة غيّرت نظرتي إلى AI وSEO والترجمة ودور الذكاء الاصطناعي كمساعد لا كناشر مستقل.

SEO والذكاء الاصطناعيالذكاء الاصطناعي التوليديGoogle Searchالمحتوى واسع النطاقالفهرسةالكتابة بمساعدة AISEO متعدد اللغات
31 مارس 20265 دقائق قراءة

خمس سنوات مع MacBook M1 بذاكرة 8 جيجابايت وSSD سعة 256 جيجابايت: لماذا لم أستبدله حتى الآن

اشتريت MacBook M1 الأساسي بذاكرة 8 جيجابايت وSSD سعة 256 جيجابايت مقابل نحو 1000 دولار، واستخدمته قرابة 15 ساعة يوميًا للتطوير والعمل على الفيديو والصوت والصور والكتابة والتعلّم والمشاريع الجانبية. بعد خمس سنوات أرى حدوده بوضوح، لكنني أفكر في الترقية لأن حجم عملي ازداد، لا لأن الجهاز فقد فائدته.

MacBookAppleM1Apple Siliconتطوير البرمجياتمراجعة طويلة الأمدعمر العتاد
30 مارس 20264 دقائق قراءة

ترجمت مدونتي إلى 20 لغة باستخدام ChatGPT وبدأت أحصل على زيارات من البحث من أنحاء العالم

غيّر الذكاء الاصطناعي بالنسبة لي اقتصاد النشر متعدد اللغات. انتقلت من مدونة بلغة واحدة إلى نشر كل مقال بما يصل إلى 20 لغة، لتصبح كل نسخة محلية نقطة دخول جديدة من البحث العضوي.

الترجمة بالذكاء الاصطناعيSEO متعدد اللغاتChatGPTNext.jsSEO الدوليالتدوين
27 مارس 20264 دقائق قراءة

أطلقت QRViz كمولّد مجاني لرموز QR الثابتة — واعتمدت على SEO للتوزيع

أطلقت qrviz.com كمولّد مجاني لرموز QR من دون ميزانية إعلانية أو خطة استحواذ مدفوعة أو مسار لتحقيق الدخل. أعتمد بالكامل على SEO، ولذلك يبقى اكتشاف الناس للمشروع أكبر نقطة عدم يقين في هذه الإطلاقة.

مولد QRQrvizإطلاق منتجمشاريع جانبيةSEOتطوير الويبتطوير المنتجات
18 فبراير 20264 دقائق قراءة

لماذا بدا اكتساب العملاء أصعب من بناء SaaS

درس من تجربة مباشرة في بناء SaaS: العمل الهندسي أعطاني تغذية راجعة واضحة وقابلة للتحقق، بينما احتاج التوزيع والتموضع وصياغة الرسالة والاحتفاظ إلى حلقة مختلفة وأقل قابلية للتنبؤ.

نمو SaaSاكتساب العملاءتسويق المنتجاتالعمل الفرديبناء علنيالتوزيع
17 فبراير 20264 دقائق قراءة

بنيت منتج SaaS بمفردي. تشغيل المدفوعات غيّر طبيعة العمل

بنيت هذا المنتج وحدي في المساءات وعطلات نهاية الأسبوع والإجازات. عندما فعّلت المدفوعات، لم تعد الأخطاء والـ onboarding والإشراف والاحتفاظ والثقة مشكلات مؤجلة، بل أصبحت جزءاً من تشغيل منتج حقيقي.

SaaSتطوير فرديإطلاق المنتجPaymentsReliabilityتشغيل المنتج
22 يناير 20264 دقائق قراءة

I Got 550 Views from One Image, Voiceover, and Subtitles: What Three Shorts Tests Actually Taught Me

A simple YouTube Short built from one static image, a voiceover, and subtitles reached 550 views. After three early tests, the useful lesson was not a proven formula, but a repeatable way to experiment without confusing a promising signal with proof.

YouTube ShortsContent ExperimentsShort-form VideoVideo EditingCapCutCreator Workflow
20 يناير 20265 دقائق قراءة

رأيت قرابة 6,000 طلب على وظيفة Frontend في موسكو. ماذا يقول ذلك — وماذا لا يقول — عن سوق التقنية الروسي؟

في أواخر 2023 كان مسؤولو التوظيف يخبرونني أن 300–500 طلب على الوظيفة الواحدة رقم كبير بالفعل. وفي 20 يناير 2026 رأيت وظيفة Frontend بمستوى متوسط في موسكو تقترب من 6,000 طلب خلال ساعات. هنا أفصل بين الإشارة الحقيقية التي يحملها هذا الرقم وبين الاستنتاجات التي لا يستطيع إثباتها.

المسيرة المهنيةسوق وظائف التقنيةFrontendروسياموسكوالتوظيفالبحث عن عمل
1 يناير 20264 دقائق قراءة

كيف غيّر DeepSeek سير عملي مع Node.js: أكثر من 4000 commit في ستة أشهر

انتقل مخطط GitHub الخاص بي في 2025 من شبه فارغ إلى أكثر من 4000 commit في النصف الثاني من العام. هذه تجربة عن كيف غيّرت أدوات AI coding سير عملي في مشاريع Node.js الجانبية، وأين وفّرت الوقت، وأين أخطأت، ولماذا بقي التحقق أهم من سرعة التوليد.

Node.jsDeepSeekAI CodingDeveloper ProductivitySide ProjectsSoftware Engineering
30 ديسمبر 20254 دقائق قراءة

أول TikTok لي في سن 28: ما علّمتني إياه تجربة عرض عمودي للمنتج عن الترافيك

في سن 28 نشرت أول TikTok لي، ثم نشرت نفس عرض المنتج على Reels وShorts. الدرس الأهم لم يكن عدد المشاهدات، بل كيف يغيّر إطار 9:16 واجهة سطح المكتب، وكيف نقيس ترافيك الفيديو القصير من دون الخلط بين الوصول والاكتساب.

TikTokProduct MarketingProduct DemosAnalyticsIndie Dev
16 نوفمبر 20255 دقائق قراءة

اشتريت دومينًا عمره 25 عامًا: أكثر من 1,000 طلب يوميًا كانت تصل إلى روابط ميتة

بعد إطلاق موقعي على دومين سُجِّل لأول مرة عام 2000، رأيت أكثر من 1,000 طلب يوميًا لروابط قديمة وأكثر من 900 خطأ في Yandex Webmaster خلال ليلة واحدة. هنا أفرّق بين ما استطعت إثباته فعلًا وما بقي مجرد تفسير، وأشرح لماذا استخدمت 410 بشكل موجّه وكيف سأراجع دومينًا قديمًا اليوم.

SEOHTTPDevOpsالدوميناتWeb Crawling
14 نوفمبر 20255 دقائق قراءة

كان لدى Yandex نحو 12,500 صفحة مفهرسة، لكن الزيارات من روسيا كانت شبه معدومة: مشكلة Cloudflare التي فاتتني

كان Yandex قد فهرس 12,500 صفحة، ومع ذلك كان الترافيك من روسيا شبه صفر. حصرت المشكلة في مسار الشبكة، عطّلت بروكسي Cloudflare، ونقلت التخزين المؤقت والضغط والحماية الأساسية إلى Nginx على خادم VDS الخاص بي، فعادت قابلية الوصول.

DevOpsSEONginxCloudflareالشبكاتالبنية التحتية
27 أكتوبر 20255 دقائق قراءة

موقعي الثابت المبني بـ Next.js يتلقى آلاف فحوصات الثغرات يوميًا، وNginx بالكاد يلاحظها

سجلاتي مليئة بطلبات تبحث عن WordPress وأبواب PHP الخلفية وملفات .env و.git/config. في موقعي الثابت المبني بـ Next.js والمخدوم عبر Nginx، تنتهي معظمها كطلبات فاشلة و404 منخفضة الكلفة، بينما ظل حمل CPU ثابتًا. هذه هي الحدود الحقيقية لما تقوله التجربة عن أمان المواقع الثابتة.

الأمانNext.jsNginxDevOpsاستضافة ثابتةسطح الهجوم
27 أكتوبر 20254 دقائق قراءة

بدأ Yandex يجلب الزيارات إلى موقعي الجديد بينما ظل Google شبه ثابت

في المشروع الجديد نفسه، لم يحقق Google سوى نحو 300 نقرة خلال فترة طويلة، بينما أظهر Yandex Webmaster نموًا واضحًا وصل في إحدى اللحظات إلى +500% في النقرات. المهم هو الفصل بين ما تثبته هذه الأرقام فعلًا وما يبقى مجرد تفسير محتمل.

SEOGoogle SearchYandexGoogle Search ConsoleYandex WebmasterSEO تقني
17 أكتوبر 20255 دقائق قراءة

Yandex فهرس 4,278 صفحة من صفحات Next.js لدي خلال ليلة واحدة — ما الذي أثبته ذلك فعلاً؟

أدخل Yandex فجأة 4,278 صفحة من الصفحات التي أنشأتها بشكل ثابت باستخدام Next.js إلى الفهرس. كان ذلك إنجازاً تقنياً حقيقياً، لكنه لم يكن دليلاً على الترتيب أو الزيارات. هنا أفصل بين ما أثبته هذا الحدث فعلاً بشأن SSG وProgrammatic SEO وما لا يمكن استنتاجه منه.

SEONext.jsSSGYandexProgrammatic SEOالفهرسة
16 أكتوبر 20255 دقائق قراءة

شهري الأول مع SEO: 632 زائرًا عضويًا واختبار واقعي لحركة البوتات

استخدمت مشروعًا جانبيًا شخصيًا للاستعداد لمبادرة SEO أكبر في العمل. بعد شهر وصل المشروع إلى 632 زائرًا عضويًا، لكن يومًا سجّل 83 زائرًا أوضح لي مدى سهولة أن تشوّه الحركة المشبوهة وقيود أدوات التحليل صورة النتائج.

SEOتحليلات الويبحركة البوتاتYandex Metricaتجارب SEO
6 أكتوبر 20253 دقائق قراءة

كدت أتجاهل Yandex Webmaster. بعد أسبوعين كان يرسل زيارات أكثر من Google

أنشأت side project باستخدام Next.js لأكتسب خبرة قبل مشروع عمل سيكون فيه SEO عنصرًا حاسمًا. خلال أول أسبوعين سجلت 58 زائرًا من Google و200 من Yandex، وتعلمت أن الزيارات والفهرسة والتشخيص إشارات مختلفة.

SEONext.jsGoogle SearchYandexSearch Consoleالفهرسة
5 أكتوبر 20255 دقائق قراءة

Yandex Metrica مقابل Google Analytics: لماذا فضّلت Metrica بعد أسبوع واحد

شغّلت Google Analytics وYandex Metrica معًا لمدة أسبوع على مشروع جديد. أصبحت أستخدم Metrica أكثر أساسًا بسبب Webvisor وإعادة تشغيل الجلسات، لكن هذا يصف أسلوب عملي ولا يثبت أن منصة واحدة أفضل للجميع.

تحليلات الويبUXإعادة تشغيل الجلساتYandex MetricaGoogle AnalyticsGA4
3 أكتوبر 20254 دقائق قراءة

زحف Yandex إلى مدونتي من دون /en، وأنقذت تحويلات 308 الروابط من أخطاء 404

بعد أن أضفت نحو 3000 صفحة بصيغة /en/blog/... إلى ملف sitemap، رأيت Yandex يحاول الوصول إلى المسارات المقابلة /blog/.... تحويلات 308 التي كانت مجهزة مسبقًا منعت تلك الطلبات من الانتهاء بأخطاء 404. الدرس الحقيقي لم يكن أن Yandex «أفسد» ملف sitemap، بل أن طبقة تحويلات دقيقة تجعل بنية الروابط أكثر تحمّلًا للأخطاء.

SEOYandexSitemapتحويل 308السيو التقنيالزحف
2 أكتوبر 20254 دقائق قراءة

موقعان جديدان قفزا في Google ثم هبطت الزيارات بنحو 10 أضعاف خلال أيام

في إطلاقين متتاليين رأيت ارتفاعًا حادًا في مرات الظهور على Google، ثم انخفضت الزيارات إلى نحو العُشر بعد أيام قليلة. النمط حقيقي، لكنني لا أستطيع إثبات أن سببه ما يسمى «فترة شهر العسل» لدى Google.

تحسين محركات البحثGoogle SearchSearch Consoleالزيارات العضويةSEO التقني
1 أكتوبر 20254 دقائق قراءة

اختفاء 2,000 صفحة من بحث Yandex خلال ليلة واحدة: ما الذي كان يمكنني استنتاجه فعلاً؟

فتحت Yandex Webmaster ووجدت أن 2,000 صفحة من أصل نحو 8,000 لم تعد تشارك في البحث. كان الانخفاض بنسبة 25% لافتاً، لكن الدرس الأهم كان عدم الخلط بين تغيّر مُلاحظ في حالة الصفحات داخل البحث وسبب تم إثباته.

SEOYandex Webmasterالفهرسةالظهور في البحثSEO تقني
11 يوليو 20252 دقائق قراءة

طرحت أكثر من 10 أسئلة في MoscowJS 66 وفزت بجائزتين

في MoscowJS 66 طرحت أكثر من 10 أسئلة خلال محاضرات عن بوتات Telegram وLangChain.js وهندسة أداة لبناء المواقع واختبار أنواع TypeScript. اختير سؤالان كأفضل الأسئلة، وغادرت بجائزتين.

فعالياتJavaScriptTypeScriptالذكاء الاصطناعيLangChain.jsالمجتمعMoscowJS
23 يونيو 20255 دقائق قراءة

ما الذي خرجت به من PiterJS #79: الأنظمة الأحادية القديمة وFrontOps وأداء الويب والأسئلة الأفضل

ركز PiterJS #79 في سانت بطرسبرغ على صيانة الأنظمة الموجودة بالفعل: monolith قديم، وFrontOps، ومقاييس أداء الويب. خرجت بملاحظات عملية، وجائزتين من جلسات Q&A، وتذكير جديد بأن قيمة اللقاءات الحضورية تزداد عندما نشارك فيها فعلاً.

PiterJSJavaScriptFrontOpsDockerأداء الويبمجتمع المطورين
17 يونيو 20254 دقائق قراءة

أطلقت مدونة Next.js بـ21 لغة: ماذا أخبرتني 439 مرة ظهور في Google فعلًا؟

في الأسبوع الأول حصلت مدونتي المبنية بـNext.js والمترجمة إلى 21 لغة على 439 مرة ظهور و5 نقرات من Google. لاحقًا كانت 436 صفحة من أصل 471 مفهرسة. الدرس الأهم كان الفصل بين الظهور والفهرسة والأداء الحقيقي في البحث.

Next.jsSEOI18nSEO متعدد اللغاتGoogle Searchتطوير الويب
7 يونيو 20253 دقائق قراءة

MoscowJS 65 بعد ست سنوات مع JavaScript: لماذا ما زلت أحضر اللقاءات المحلية

حضرت MoscowJS 65 في T Bank يوم 5 يونيو 2025. تناولت الجلسات الأربع الذكاء الاصطناعي من زوايا مختلفة، لكن خلاصة تجربتي كانت أبسط: اللقاءات المحلية ما زالت تمنحني شيئاً لا تستطيع الوثائق والتسجيلات أن تحل محله بالكامل.

JavaScriptMoscowJSلقاءات تقنيةمجتمع المطورينالذكاء الاصطناعي