لوحة المتصدرين
المحتوى الأكثر حصولًا على سمعة جيدة
المحتوى الأعلى تقييمًا في 05/27/20 في كل الموقع
-
مرحبا @Ahmed Sawy بالنسبة لسؤالك هل أستعمل جافا أو رئاكت نتيف لبرمجة و بناء تطبيقات موبايل هذا يعتمد على المبرمج و يتغير من شخص لآخر و من مشروع لآخر إذا كان المشروع يعتمد و بدرجة كبيرة على محسسات و مستشعرات الهاتف و التعامل مع android native APIs و التواصل معها بشكل كبير فالأحسن إعتماد لغة جافا أو كوتلن لكن إن كان المشروع عبارة عن متجر فيه سلة مشتريات أو تطبيق إخباري أو مثلا تطبيق يعرض أشياء فرئاكت نتيف سيكون خيار جيد جافا أو كوتلن تسمح لك ببناء تطبيقات كبيرة التعقيد و الوصول إلى native apis يكون أسهل رئاكت نتيف مبنية على أساس رئاكت فريموورك التي تستعمل لغة جافاسكربت لذلك فبناء التطبيقات يكون بإستخدام رئاكت نتيف أسرع منه عند إستخدام جافا أو كوتلن إذا كنت مطور ويب و تحسن إستخدام تقنيات الويب بما فيها لغة الجافاسكربت فمن الأحسن التوجه نحو الرئاكت نتيف لكن إن كنت مطور جافا و تحسن التعامل مع لغة الجافا فمن الأحسن التوجه لبناء تطبيقات موبايل بلغة جافا ملاحظة إذا كان لديك خبرة مسبقة في التعامل مع أندرويد بإستخدام جافا أو كوتلن فليس هناك أي داع للتحويل الى رئاكت نتيف و من الأحسن كسب أكبر خبرة ممكنة فيما أنت فيه كلا من بناء تطبيقات أندرويد بإستخدام جافا أو كوتلن و رئاكت نتيف مطلوبين و بكثرة رئاكت نتيف سهلة التعلم مقارنة بجافا أو كوتلن لأن جافا تحتاج معرفة مسبقة بالبرمجة الكائنية التوجه و تعلمها سيحتاج منك مدة أكبر من تعلم رئاكت نتيف رئاكت نتيف cross platform فريم وورك من خلالها تنتج تطبيق للمنصتين ( أندرويد و iOS ) بكود واحد هذا لا يعني أنك لن تحتاج الى جافا أو كوتلن أو سويفت في بعض الحالات تحتاج الى إضافات باللغات النتيف تذكر أن أيا منهما ليس جيدًا ولا أحدًا منهما يعتبر سيئًا. يعتمد ذلك على المطور ومتطلباته2 نقاط
-
إذا كنت قد مررت بتجربة فاشلة في مجال التسويق، فلست الوحيد في ذلك. نعم، لا أحد يحب الفشل، ولكننا جميعا نمر بتجارب فاشلة، وما يميز المسوق الجيد عن غيره، ليس أنه لا يخطئ، بل أنه يتعلم من أخطائه. وكما قال باراك أوباما: "لا تدع أخطاءك تعبر عنك، وإنما دعها تعلمك"، فهذه النصيحة من أفضل النصائح التي قيلت. بناء على ذلك فقد سألنا 11 خبير تسويق عما تعلموه من أخطاء الماضي. وكانت إجاباتهم دليلا قاطعا على أنه يمكننا تعلم الكثير من تلك الأوقات التي سارت فيها الأمور على النحو الذي لا يعظم مكاسبنا. وسنرى كيف ساعدتهم الأخطاء التي ارتكبوها على تنمية مشاريعهم وتطوير فلسفة تركز على العملاء، وتحسن مهاراتهم القيادية، وما هو أكثر بكثير، فهيا بنا نبحر مع أهم ما تعلموه. 1. استهداف الكلمات المفتاحية الصحيحة كل من يعمل بالتسويق يعرف أهمية الكلمات المفتاحية، فمعرفة ما يبحث عنه جمهورك المستهدف (وكيفية ترتيب الكلمات المفتاحية المحددة)، يمكنك من تحسين حملاتك التسويقية وتطوير استراتيجية العمل على ظهور المحتوى من خلال محركات البحث المجانية بطريقة أكثر كفاءة. لكن ماذا لو لم يكن لمحتوى شركتك أي ترتيب، أو جاء بعيدا في آخر صفحات المحركات بحيث لا يكاد يراه أحد؟ هذا ما حدث لآندي كريستودينا، أحد مؤسسي استديوهات "أوربت ميديا". لقد فشل بعد 20 ساعة عمل، في وضع مقالة من 4100 كلمة (وفيديو مدته 12 دقيقة)، كجزء من المحتوى الأساسي. لقد ظن أنه باستخدامه لإحدى العبارات الشائعة، يمكنه تحسين فرصة ظهورها وإعطائها مرتبة تحقق لها تدفقا ثابتا من الزيارات، ولكن هذا لم يحدث. يوضح آندي سبب فشله في ذلك، قائلا: ولقد تعلم آندي من ذلك درسا مهمًا وهو أن تصنيف المحتوى لا يأتي بالمصادفة. بل لابد من العمل الجاد في استهداف الجمل الصحيحة التي يمكنها زيادة أعداد المشاهدة بمرور الوقت. وبذل الوقت الكافي في البحث عن الكلمات المفتاحية المستهدفة، حتى لا يضيع المحتوى الخاص بك بين صفحات البحث على جوجل. إن اختيار أفضل الكلمات المفتاحية يأتي بالبحث عن أفضل الجمل، والتي تتكون من مزيج رائع من جودة البحث والاتجاهات العامة، والإقبال الجماهيري بين المنافسين. المصدر: أوربت ميديا فالبحث الجيد ليس كل شيء، وإنما يجب النظر إلى تصنيف المنافسين أيضا، للتأكد من استعدادك لمواجهتهم. فقبل دخول حلبة المصارعة يجب أن تعرف من هو خصمك حتى لا تفاجأ بأنك تقف أمام خصم شرس لا يمكنك مواجهته. 2. أهمية تحديد شخصية المشتري لوضع الخطط التسويقية تمضي شخصية المشتري جنبا إلى جنب مع خططك التسويقية، إنهما كالإبرة لخيوط التسويق، وكالسهم للقوس. إن تحديد فئات العملاء الذين تريد جذبهم سيساعدك على اختيار أفضل طرق التسويق لهم. وحتى تستطيع تحديد شخصية المشتري بدقة، تحتاج إلى شيء واحد هو: البيانات. افترض براندون جينز، نائب مدير التسويق بشركة MonetizeMore، في بداية حياته المهنية، ملامح لشخصية المشتري المستهدف بناء على تصوراته وشعوره الغريزي، ولكن من خلال البحث النوعي، والدراسات الاستقصائية، والمقابلات، لم يستطع إثبات صحة فرضيته. ولأنه لم يتخذ أي إجراءات رسمية لجمع نقاط البيانات الداخلية والخارجية، فشل في إدراج قاعدة كبيرة من العملاء ضمن الخطط التسويقية لشركته. لقد كان بحاجة إلى أكثر من شعوره الغريزي للحصول على التأييد الداخلي من رؤساء الأقسام، وكان بحاجة إلى إثبات صحة صياغة شركته لشخصية المشتري: كما يقول براندون: تحتاج إلى تحديد شخصية المشتري الحقيقية على أرض الواقع، من خلال البحث والبيانات، وليس من خلال ما تشاهده على الشاشات. وكل الجهود المبذولة في إعداد مقابلات العملاء وإدارة المناقشات الداخلية حول المبيعات، ونجاح العملاء والمنتج وفريق التسويق، سوف تؤتي ثمارها على المدى الطويل. وستتمكن من تحديد أهدافك وتوقع احتياجات عملائك بشكل أفضل. تحديد شخصية المشتري، يمكنك من تكييف المحتوى الخاص بك بحسب شرائح الجماهير، التي لديها تفضيلات وتحديات ونقاط ألم مختلفة. المصدر: Unbounce مثل أي ثنائي ديناميكي، فإن تحديد شخصية المشتري يمكنك من إنشاء صفحات معينة يمكن تجزئتها من أجل التعامل مع أنواع مختلفة من الزوار. كما يمكنك من استخدام قوالب مختلفة وإنشاء صفحات مخصصة بسرعة، وهو ما سيمنحهم ما يبحثون عنه تماما. 3. إجراء اختبارات ضمان الجودة ضمان الجودة هي الخطوة التي يجب عليك ألا تتجاوزها أبدا، مهما كانت الدوافع، إذا أردت التحقق من جودة أداء الحملات التسويقية. ضع نفسك في مكان زوار صفحتك؛ كيف سيكون شعورك إذا ضغطت على أحد الروابط، فذهب بك إلى صفحة غير موجودة؟ هل السعادة أم الامتعاض؟ لا شك أن وجود روابط لا تعمل، يعطي انطباعا أوليا سيئا. هذا ما حدث لسكوت ماكليود، رئيس فريق العاملين في Resident، لقد تعلم من خلال تجربة قاسية أهمية إجراء اختبارات الجودة، بعدما قام ببدء الإعلان عن صفحة لا يمكن تحميلها. لقد كانت صدمة حقيقية، خاصة في تلك اللحظة التي تحتاج فيها إلى تحميل صفحتك بأسرع ما يمكن. وكانت نصيحته هي: لابد من توفير تجربة مستخدم سلسة لعملائك، حتى يرتبطون بمنتجك. وكاول تعامل بينكم يجب أن توفر لهم ما يشجعهم على توطيد علاقتهم بك، لتستمر طويلا. في شركتنا تحديدا، نتابع الفريق منذ إنطلاق الدعاية وحتى إتمام عملية البيع النهائي، خاصة فيما يتعلق بالمبيعات الكبيرة والاتصال الجماهيري. فتكرار اختبارات ضمان الجودة أو المراجعة، يقلل من وقوع الحوادث. عندما يكون لديك عشرة أشياء أخرى يجب عليك القيام بها، فقد ترغب في ادعاء إنجاز شيء ما دون اتخاذ الخطوة الأخيرة الحاسمة لضمان جودتها، ولكن إنفاق الوقت في القيام بذلك سيوفر عليك الكثير من المتاعب على المدى الطويل. 4. إضافة الاختبارات الآلية لضمان الجودة بينما يوصي سكوت بإجراءات ضمان الجودة، يأخذ دريك هايناي، كبير فنيي التجارة الإلكترونية بشركة Ecommerce Tech خطوة أخرى للأمام، وينصح بإجراءات آلية لضمان الجودة، وذلك تجنبا للأخطاء الصغيرة التي قد تؤدي إلى خسارة الأموال التي تم إنفاقها على الإعلانات. إن أفضل المسوقين يقومون بذلك من أجل توفير تجربة مستخدم سلسة لعملائهم منذ النقر على الإعلان وحتى الصفحة المقصودة. لم يدرك دريك هذا الأمر فجأة، وإنما بعد إدارة حملة شرائية انتهت بالموت على صفحة 404، وبحساب بسيط فهذا يعني إلقاء 10 آلاف دولار في المحيط، أو حوالي 40 ألف قطعة (ناجتس) من الدجاج. لحسن الحظ تشتمل إعلانات جوجل على عناوين URLs النهائية، للمساعدة في التحقق من أن إعلاناتك تقود عملاءك للصفحات المطلوبة. لذا يستخدم دريك هذا المجال، خاصة في الإعلانات الديناميكية، والتي تتغير وفقا لمحتواها. عنوان URL النهائي، هو عنوان إحدى صفحات موقعك، التي يصل إليها العميل بالضغط على إعلانك. المصدر: جوجل، أدرج عمليات التحقق الآلي ضمن إجراءات ضمان الجودة الخاصة بك، بقدر ما تستطيع. فذلك سيقلل من أخطاء العامل البشري وربما يحقق لك وفرا بالميزانية يفوق 10 قطع (ناجتس) دجاج. 5. استخدام أبحاث العملاء للتحقق من صلاحية الأفكار الجديدة يجب أن تكون البيانات هي القوة الدافعة وراء أي استراتيجية تسويق في هذه الأيام. هذا ما لابد من توافره لنمو ونجاح أي مشروع (ولو كان أوبي وان كينوبي بطل حرب الكواكب مسوقا، لاستخدم قوة البيانات، بالتأكيد). ولكن لا تأخذ بكلامي في هذا، بل إليك ما قاله جوجل: إذا سألت أي خبير تسويق، فسيخبرك بأنه لا يتخذ أي قرار يتعلق بمشروعه قبل الرجوع إلى البيانات. وهذا الأمر على قدر أهميته فإنه أسهل ما ننسى القيام به. ارتكب مارك بيتانجا، المؤسس والمدير العام لشركة Discoverable Media، فشلًا ملحميًا تقريبًا لأن أحد الشركاء الرئيسيين في شركة إعلامية قرر إجراء تغيير جذري في موقعهم على الويب دون توفر البيانات اللازمة. اعتقد الشريك أن التغيير سيؤدي إلى تحقيق انتصارات كبيرة. ولكن مارك شعر على العكس من ذلك أنها ليست فكرة جيدة. فأجرى بحثا بالتعاون مع فريقه UX، لتأكيد حدته. وقام بتسجيل ردود فعل العملاء من واقع التعامل معهم، للتحقق من صلاحية مطالب الشركاء. وتبين صدق حدس مارك: فإن التغييرات المقترحة كانت ستؤدي إلى تجربة سيئة لزوار الموقع. فإذا كان هناك ما يقال، فإن مارك يعتبر دليلا على أن البحث هو مفتاح اتخاذ القرارات المستنيرة. ولقد تعلم مارك درسه: تذكر دائما أن عملاءك هم الهدف من كل فكرة أو قرار تسويقي، حتى يمكنك تحديد ما إذا كانت الفكرة قابلة للتطبيق أم لا. فغالبا ما يكون هذا هو الفرق، بين الأفكار الناجحة وغيرها. 6. عدم اختبار أكثر من تغيير في نفس الوقت يأتي التسويق الجيد من الاختبار والتحليل والتكرار بناءً على النتائج. (إنه فن وعلم). نحن المسوقون دائمًا مشغولون بإطلاق الحملات، لكننا بحاجة إلى تذكير أنفسنا بأن لا نغرق في أفكارنا. فعند الاختبار يجب الرجوع خطوة إلى الخلف وإجراء تغيير واحد فقط، وليس كل التغييرات في نفس الوقت. على سبيل المثال، أعادت كاسي جيلليت، كبيرة مديري التسويق الرقمي في KoMarketing، تصميم موقع ويب كبير للعميل، تضمن تغيير كل شيء دفعة واحدة بدءًا من تحديث عناوين URLs، إلى تبديل أنظمة CMS وتغيير المحتوى. فأين أخطأت؟ أدت التعديلات إلى خسارة هائلة في حركة المرور الفعالة بالموقع، والتي تدير كل شيء، بالإضافة إلى مجموعة من المشكلات الفنية المزعجة. عرفت Casie أنه لابد من مراجعة واختبار محتوى الصفحة من أجل تعزيز صلتها بزائريها وترتيبها بين مواقع البحث. وحتى تزيد التحويلات إلى صفحتها، قام فريق العمل باختبار العلامات الموجودة عليها وأنشأ وسوما للمنافسة في صفحات نتائج محرك البحث (SERPs)، وقام بتحسين صفحاتهم المستهدفة باستخدام CTA، والعناوين، والنماذج. ليس هناك وصفة سحرية تحقق النجاح للجميع، ولكن بدلا من معالجة كافة الأمور في نفس الوقت، يجب تركيز جهود الاختبار من أجل تحديد ما يصلح وما لا يصلح. ومعرفة أفضل الممارسات. يعني اختبار A/ B أن تجري تغييرا واحد في كل مرة. هل ترغب في زيادة معدلات التحويل الخاصة بك؟ من خلال الصفحات المستهدفة لدينا ، يمكنك تجربة الرسائل الخاصة بك وتصميم الصفحة والنماذج، للتحقق من صلاحية الأفكار وتحقيق المزيد من التحويلات باستخدام اختبار A / B. 7. واقعية الأهداف والتوقعات (التنبؤات) تحديد الأهداف هو حجر الأساس لأي شخص يعمل بالتسويق، ففيها يصبح الطريق واضحا ومعلوما عند وضع كلا من استراتيجية التسويق وخطة العمل. ولكن القول بوضوح الأهداف جيدا وواقعيتها أسهل من العمل به، لا سيما إذا كنت شخصا طموحا. تهمس Sphoorti Bhandare، مسئولة العلاقات العامة والتسويق بالمحتوى، بالموافقة وتقول: بالفعل فلقد أعددنا لافتتاح متجرا كبيرا قبل الموعد بشهر، وبرغم خطة الإعداد المسبقة فقد بدأت الأمور تتداعى الواحد تلو الآخر حتى قبل خروج المشروع للنور بأسبوع واحد. ومع ضيق الوقت وعدم وجود خطة للطوارئ اضطرت Sphoorti، لتأجيل الافتتاح. وبرغم صعوبة الموقف إلا أنه ساعدها على تبين موضع الخطأ: تحدث العديد من الأخطاء في الحملات التسويقية، فعندما تبدأ مشروعا اسأل نفسك: هل أمتلك الوقت والموارد والميزانية التي أحتاج إليها لإتمام كل شيء؟ ثم ضع أهدافا تسويقية محددة وواقعية، وأخبر الجميع بها. إن أكبر درس تعلمته مما حدث، هو ضرورة وضع أهداف تسويقية وتصورات واقعية، ومتابعتها باستمرار. ليس فقط لفريق التسويق، وإنما لكل قسم وبائع ومسئول تنفيذي يتصل عمله بها. إن وجود رؤية واضحة لما تريد عمله يساعدك في وضع إطار زمني محدد لمسئوليتك ومسئولية فريقك عن تحقيقه. فإن لم تكن قادرا على بلوغ أهدافك في النهاية، فلا بأس. 8. إنشاء محتوى مختصر وواضح بعد أن وضعت استراتيجية واضحة، وحددت شخصية المشتري، أصبح عليك الآن جمع المحتوى الذي يعبر عن هذه الاستراتيجية ويوجه مباشرة إلى المشتري. يعد الوقت الذي سوف تقضيه لإنشاء محتوى مختصر وواضح واحد من أذكى الاستثمارات التي يمكنك القيام بها، وسوف تكون ممتنا لها فيما بعد. تقول تارو Foundation Marketing: عندما بدأت العمل في التسويق بالمحتوى، كلفت تارو مجموعة من كتاب المقالات المستقلين بالمساهمة في إنشاء مقالات طويلة. واختصارا للوقت فقد اقترحت عليهم نوعية الموضوعات المطلوبة وحسب. وما لبثت حتى وجدت أن هذا الأسلوب يأتي بنتائج عكسية. كيف؟ انعكس عدم وجود تفاصيل موجزة للمحتوى، على جودة المقالات، والأهم من ذلك فقد تحول الأمر إلى مضيعة عظيمة للوقت والجهد. لكن تارو بعد أن أدركت خطأها، وضعت إطار عمل يتضمن كل ما يحتاج كاتب المحتوى معرفته، كالصوت والنبرة والجمهور المستهدف، والمنافسين، والكلمات المفتاحية والروابط الداخلية، وما هو أكثر من ذلك. يعد الاهتمام بموجز المحتوى والتواصل الدائم لتوضيح التوقعات، استراتيجية جيدة دائما عند التعامل مع المستقلين … إن تزويدهم بأكبر قدر ممكن من المعلومات قبل كتابة أي حرف من المحتوى، هو أفضل طريقة لتجنب إجراء التعديلات. سر تارو هو هذا النموذج لموجز كتابة محتوى من CoSchedule 9. اطلاع الفريق على كافة المستجدات نحن نعيش في عالم التسويق سريع الخطى، حيث تتبدل الجداول الزمنية، وتتغير الحملات، وتأتي الطلبات من أصحاب مصالح مختلفين في أي لحظة. لذا يعد إبلاغ كل عضو في الفريق بكل التغييرات تحديًا كبيرًا. فعلى سبيل المثال، أبرم إريك سيو، الرئيس التنفيذي لشركة Single Grain، صفقة بقيمة 500 ألف دولار لإدارة حملة ترويجية لشركة SaaS. ولكنه لم يخبر فريقه، إلا بعد أن انهالت ااطلبات عليهم، فأخذ الجميع يتدافعون في اللحظة الأخيرة، ولم يكن أحد سعيد بما حدث. اعترف أريك بخطئه وقال: إن إعلام الآخرين بما تعمله، خاصة إذا كان هذا العمل يتعلق بهم أمر هام لتحقيق النجاح، فعندما يكون لدينا كثير من المهام نحتاج أن نسمع ما يجب علينا عمله قبل البدء في العمل عليها. لذا كن أكثر وضوحًا وتواصلا، حتى لا تفاجئ أي شخص تعمل معه. ثم احتفظ بخطوط اتصال مفتوحة بينك وبين أي فريق تعمل معه. 10. تحديد أولويات المشروعات بناءً على التأثير المحتمل فهناك أهداف عليا ومبادرات إستراتيجية للإدارة وأولويات التسويق، وكلها أمور يجب العمل عليها بعناية. لكن بأيها تبدأ؟ إن اختيار الأولويات الأكثر تأثيرا أمر صعب للغاية، خاصةً عندما يضغط أصحاب المصالح عليك لمتابعة مشاريعهم. ففي عام 2018، أثناء الإعداد لمؤتمر Call to Action، فكر فريق محتوى Unbounce في إعادة تصميم نمط مجلة رقمية، وكتابة محتوى مختصر يمكنه إطالة عمر الحدث المباشر. وذلك على غرار الكتاب المطبوع المذهل الذي يستخدمه منظمو مؤتمر G2 في مونتريال للاحتفال بالتجربة. بينما قفز فريق محتوى Unbounce متحمسا لإنشاء هذا المحتوى الخاص، كانت Jennifer Pepper رئيسة قسم تسويق المحتوى في Unbounce، ترى أن هناك العديد من مشاريع المحتوى الأخرى التي يجب إنجازها، والتي تعد أكثر إلحاحا. وتقول: كان ينبغي علي تحديد الأولويات، وعلى الرغم من رغبة أصحاب المصالح في الاستفادة من حدثنا المباشر، فقد كان علي أن أثق في تقديري للأمور، وقدمت حجة أكثر صلابة للعمل على المشاريع التي أعرف أنها يمكن أن تكون أكبر نفعا لرجال الأعمال. عبرت مجلة Call to action عن ورؤى مؤتمر Call to action عام 2017م أصبحت Jenn الآن أكثر تمسكا بالأولويات، وأصبحت تعبر عما تراه صحيحا بقوة. 11. لا تتنازل عما تعتقده صوابا سواء كنت تقود فريقًا تسويقيًا كبيرًا أو جزءًا من فريق، فمن السهل أن تختلط الأمور عليك. فمختلف الخبراء لديهم آراء مختلفة، وليس الجميع على حق 100٪ طول الوقت. فكيف تتعامل مع الأمور؟ واجهت كيسي باين، مديرة التسويق في DataTrue، موقفًا صعبًا في بداية حياتها المهنية. عندما أراد أحد أفراد فريقها اقتحام سوق جديد عن طريق إقامة معرض تجاري كبير. ومع عدم وجود الوقت الكافي للإعداد أو السمعة في هذه الصناعة (فضلا عن ضعف الميزانية) شعرت كاسي بالقلق تجاه الفكرة، وأعربت عن مخاوفها بشأنها في البداية، لكنها وافقت أخيرا على اتخاذ هذه الخطوة المخالفة لرأيها الصائب. وكانت النتيجة أن فشل المعرض. لكن كيسي تعلمت درسا قيما: لا شك أن عدد سنوات عمرك أو خبرتك في العمل تمنحك الثقة في معرفتك بمجال التسويق. فلا تخف من توضيح موقفك والتعبير عن مخاوفك واقتراحاتك. وكما يقول Marc Bitanga: "من الأفضل حفظ هذه المناقشات مع البيانات". إذا فشلت في البداية فحاول ثانية كلنا يخطئ، وكلنا تمر به مثل تلك الأيام، وقد رأينا من خلال 11 نموذج كيف أن الجميع يتعرض لتجارب فاشلة حتى وإن كانوا خبراء تسويق، ومهما كانت خبرتهم. ولكنهم يصرُّون على تحويل تجاربهم الفاشلة إلى خبرات تفيدهم في معرفة ما يجب عمله بالمستقبل. فإذا ما ارتكبت خطأ ما ذات يوم -وغالبا ما ستفعل- فعده إحدى فرص اكتساب الخبرات، ولا داع للشعور بالخجل منه، وإنما فكر فيه كلحظة من لحظات الانتباه لما لا يجب فعله في حياتك. استمر، واغتنم الفرص، وارتكب الأخطاء، وتعلم منها.. وستكون في شركة رائعة. ترجمة وبتصرف للمقال: 11 Marketing Experts Share Their Marketing Fails (and Lessons Learned) لصاحبه Ashley Luk1 نقطة
-
السلام عليكم ... كيف اعرف نوع سيرفر الاستضافه مثل اباتشي او اي نوع اخر - و نظام التشغيل الخاص به مثل لينكس او اي نوع اخر سؤال اخر هل يتوجب عليي انا اركب لوحه التحكم مثل سي بانل ؟ سؤال ثالث هل يوجد تركيب مثل ادوات حمايه فيروسات بالسيرفر لابطال اي ملفات مشبوهه او برمجيات خبيثه او شيل يرسلها زوار موقعي ؟1 نقطة
-
تعلمت من قناة elzero web school لغة html وأكملتها وبدأت في Css والى الان أتابع الحلقات الخاصة بها.. وأيضاً هناك لغة html5 و css3، ما الفرق بينهما وبين html و css وبماذا تنصحوني بعد أن أكمل هذه اللغات؟ أنا مشتت وحائر... وأرغب أيضاً بتعلم برمجة تطبيقات أندرويد وبحثت كثير ولاقيت موقع اسمه مليون مبرمج عربي وفيه دورة لأساسيات أندرويد وتطوير تطبيقات أندرويد فهل هو جيد؟ وما هو الفرونت إند وكيف أصبح فرونت اند؟ وكم المدة التي سأستطيع تعلم ال html و css بها؟1 نقطة
-
شكراً لك على المعلومات الرائعة، بصراحة كنت ماني عارف أكمل ولا لا ولكن الآن إن شاء الله رح أكمل وأنا مرتاح، جزاك الله خير..... نصائح مفيدة جداً أنا أشكرك. إن شاء الله نركز على هدف معين 👍.1 نقطة
-
مرحبا @عبدالعزيز العدني فعلا أنت مشتت و حائر أولا html و html5 نفس اللغة فقط تم إضافة بعض الخصائص و العناصر الجديدة و هي لغة توصيفية نفس الشيء بالنسبة لل CSS و Css3 تم إضافة خصائص جديدة و تم التطوير على CSS و تعتبر لغة تنسيقية بالنسبة لمبادرة المليون مبرمج عربي تم إطلاقها من دولة الإمارات بمساعدة udacity حيث ستقوم بإختيار أحد المسارات الموجودة و تقوم بالتعلم و عند الانتهاء هناك إمتحان و الناجحين يتحصلون على nanodegre أي دورة أخرى متكاملة في نفس المسار الذي قمت بالإنخراط فيه مقدمة من udacity و مؤخرا تم إضافة مسارات أخرى بالتعاون مع شركة ميكروسوفت أنصحك بأن تضع هدف لنفسك و لا تشتت نفسك بأشياء أخرى حاول التركيز للوصول إلى الهدف الذي وضعته و تعلم التقنيات و اللغات التي توصلك الى هدفك أعط لنفسك الوقت الكافي في التعلم و تطبيق ما تعلمته حاول إيجاد حلول لمشاكل موجودة بالأشياء التي تعلمتها عليك أن تحب المجال و الهدف الذي تطمح إليه عند التأكد من إتقانك بنسبة كبيرة لتقنية تعلمتها انتقل لتقنية أخرى ال front end developer أو مبرمج الواجهات الأمامية هو الشخص الذي يقوم بتطوير واجهات تفاعلية مع المستخدم و من بين التقنيات التي يجب عليك تعلمها حتى تصبح مطور واجهات أمامية : Html CSS JavaScript jQuery CSS framework مثل bootstrap JavaScript Frameworks مثل angular او Vue أو react CSS preprocessor مثل sass او less خبرة في التعامل مع RESTful APIs خبرة في ال git و GitHub ركز على هدفك و لا تشتت نفسك و بالتوفيق1 نقطة
-
مرحباً عبدالعزيز: بالطبع أنأ أعلم كم أنت حائر لأني كنت في مثل موضعك في يوم من الأيام وأيضا أنا تعلمت من الزيرو ومن معظم كورساته وهو محتوى فوق الممتاز .أما عن أسئلتك فهي بالترتيب كالآتي: بالنسبة لتعلم HTML - CSS فهي بداية صحيحة لبرمجة المواقع الإلكترونية أما عن الإختلاف بينهم وبين HTML5 - CSS3 فلا يوجد فرق إلا أن محتوى HTML تحدث وأصبحت فيه عناصر أكثر من HTML ولذلك هناك تحديث يسمى HTML5 = HTML + التحديثات الجديدة وكذلك بالنسبة ل CSS3 أما عن المدة التي تستطيع تعلم فيها HTML - CSS فهذه تعتمد عليك فقد تأخذ معي شهر وتأخذ معك أسبوع على حسب إستيعابك ولكن في المتوسط 3 أسابيع بالتطبيقات ويمكنك متابعة الزيرو فهو يطبق على مواقع. أما عن الفرونت إيند هو المسار الذي يمكنك من برمجة تطبيقات الواجهة الأمامية ويمكنك الإطلاع على التفاصيل من أكادمية الزيرو أما عن برمجة الأندرويد والمليون مبرمج عربي فأنا لم أتعامل معهم مباشرة ولكن ممن تعاملوا معهم أستطيع ان أقول إنهم محترفين. في النهاية لا تركز في برمجة المواقع الإلكترونية وبرمجة الأندرويد في بداية مشوارك يجب أن تصقل مهاراتك في أحدهم ثم بعد ذلك تدرس الآخر.1 نقطة
-
1 نقطة
-
مرحباً بك، منصة GitHub تتيح لك إستضافة مستودعات Git المتواجدة محلياً في جهاز الحاسوب لديك والمقدرة على الوصول إليها من أي مكان عبر الانترنت وأيضاً مشاركة عدد من الأشخاص في عملية التطوير في آن واحد. لا يوجد هنالك طريقة ربح للمستخدمين من خلال المنصة، ولكن عندما تكون لديك عدة مساهمات في عدد من المستودعات الخاصة بالمشاريع مفتوحة المصدر من خلال حل بعض المشاكل البرمجية أو إضافة ميزات جديدة فهذا سوف يزيد فرصك عند التقديم لوظيفة برمجية.1 نقطة
-
السلام عليكم من فضلكم كيف استرجع ما دفعته من مصروفات؟ انا سجلت اليوم اشتراكى واريد الخروج من الدورة وانا لم اسمع اى من الفيديوهات ارجو الرد1 نقطة
-
مرحبا اخواني الكرام اعمال على نظام خرائط وهو شغال ميه ميه ولكن توجد مشكله واجهتني بعد طلب اذونات تشفيل GPS وذهاب الى اعدادات الهاتف وتشغيل نظام GPS بطبيعة الحال اعمل رجوع الى الاكتفي من خلال زر الرجوع بعد تشغيل GPS المشكله بعد من ارجع للاكتفتي الاكتفي الاكتفي هنا لا يعمل تحديث الى نفسه بصراحه انا مطور تطبيقات جديد ولا اعلم اذا كان وصفي صحيح هاكذا ولكن الفكرة المطلوبه بعد تشغيل GPS ورجوع الى الاكتفتي المفترض احصل على قيمة Longitude and latitude ولكن هذا لا يحدث من اجل ان يحدث احتاج الرجوع الى صفحة main activity واعادة الدخول الى هذا الاكتفتي حتى اجد القيمة الكود الي شغال عليه كالتالي: public class SendMapLactiontest extends AppCompatActivity implements OnMapReadyCallback { private static final String TAG = SendMapLactiontest.class.getSimpleName(); private GoogleMap mMap; LocationManager locationManager; private CameraPosition mCameraPosition; private PlacesClient mPlacesClient; private FusedLocationProviderClient mFusedLocationProviderClient; private final LatLng mDefaultLocation = new LatLng(-33.8523341, 151.2106085); private static final int DEFAULT_ZOOM = 15; private Location mLastKnownLocation; private static final String KEY_CAMERA_POSITION = "camera_position"; private static final String KEY_LOCATION = "location"; private static final int M_MAX_ENTRIES = 5; EditText textLatitude,textLongitude,lonTextView,lonTextView1; Button button,btn; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); if (savedInstanceState != null) { mLastKnownLocation = savedInstanceState.getParcelable(KEY_LOCATION); mCameraPosition = savedInstanceState.getParcelable(KEY_CAMERA_POSITION); } setContentView(R.layout.map_send_lcation); textLatitude=findViewById(R.id.textLatitude); textLongitude=findViewById(R.id.textLongitude); lonTextView =findViewById(R.id.tap_text1); lonTextView1 =findViewById(R.id.tap_text); String apiKey = getString(R.string.google_map_api_key); Places.initialize(getApplicationContext(), apiKey); mPlacesClient = Places.createClient(this); mFusedLocationProviderClient = LocationServices.getFusedLocationProviderClient(this); SupportMapFragment mapFragment = (SupportMapFragment) getSupportFragmentManager() .findFragmentById(R.id.map);mapFragment.getMapAsync(this); if(!isLocationEnabled()) { AlertDialog.Builder builder = new AlertDialog.Builder(SendMapLactiontest.this); builder.setTitle("R.string.network_not_enabled") .setMessage("R.string.open_location_settings") .setPositiveButton("R.string.yes", new DialogInterface.OnClickListener() { public void onClick(DialogInterface dialog, int id) { startActivity(new Intent(Settings.ACTION_LOCATION_SOURCE_SETTINGS)); } }) .setNegativeButton("R.string.cancel", new DialogInterface.OnClickListener() { public void onClick(DialogInterface dialog, int id) { dialog.cancel(); Intent imgListIntent = new Intent(SendMapLactiontest.this, AddNewItem.class); startActivity(imgListIntent); finish(); } }); AlertDialog alert = builder.create(); alert.show(); } } @Override protected void onSaveInstanceState(Bundle outState) { if (mMap != null) { outState.putParcelable(KEY_CAMERA_POSITION, mMap.getCameraPosition()); outState.putParcelable(KEY_LOCATION, mLastKnownLocation); super.onSaveInstanceState(outState); } } @Override public void onMapReady(GoogleMap map) { mMap = map; mMap.clear(); if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) { if (ActivityCompat.checkSelfPermission (this, Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED && ActivityCompat.checkSelfPermission (this, Manifest.permission.ACCESS_COARSE_LOCATION) != PackageManager.PERMISSION_GRANTED) { requestPermissions(new String[]{ Manifest.permission.ACCESS_COARSE_LOCATION, Manifest.permission.ACCESS_FINE_LOCATION }, 1); // 1 is requestCode return; } }else{ } getDeviceLocation(); mMap.setMyLocationEnabled(true); mMap.getUiSettings().setMyLocationButtonEnabled(true); } protected boolean isLocationEnabled(){ String le = Context.LOCATION_SERVICE; locationManager = (LocationManager) getSystemService(le); if(!locationManager.isProviderEnabled(LocationManager.NETWORK_PROVIDER)){ return false; } else { return true; } } @Override public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) { switch (requestCode) { case 1: if (grantResults[0] != PackageManager.PERMISSION_GRANTED){ Toast.makeText(SendMapLactiontest.this,"PERMISSION_DENIED",Toast.LENGTH_SHORT).show(); Intent imgListIntent = new Intent(SendMapLactiontest.this, AddNewItem.class); startActivity(imgListIntent); finish(); } else { Toast.makeText(SendMapLactiontest.this,"PERMISSION_GRANTED",Toast.LENGTH_SHORT).show(); mMap.setMyLocationEnabled(true); mMap.getUiSettings().setMyLocationButtonEnabled(true); getDeviceLocation(); // permission granted do something } break; } } private void getDeviceLocation() { try { Task<Location> locationResult = mFusedLocationProviderClient.getLastLocation(); locationResult.addOnCompleteListener(this, new OnCompleteListener<Location>() { @Override public void onComplete(@NonNull Task<Location> task) { if (task.isSuccessful()) { mLastKnownLocation = task.getResult(); try { if (mLastKnownLocation==null){ isLocationEnabled(); }else { textLatitude.setText("" + mLastKnownLocation.getLatitude()); textLongitude.setText("" + mLastKnownLocation.getLongitude()); if (mLastKnownLocation != null) { mMap.moveCamera(CameraUpdateFactory.newLatLngZoom( new LatLng(mLastKnownLocation.getLatitude(), mLastKnownLocation.getLongitude()), DEFAULT_ZOOM)); } } } catch (Exception e) { e.printStackTrace(); } } else { Log.d(TAG, "Current location is null. Using defaults."); Log.e(TAG, "Exception: %s", task.getException()); mMap.moveCamera(CameraUpdateFactory .newLatLngZoom(mDefaultLocation, DEFAULT_ZOOM)); mMap.getUiSettings().setMyLocationButtonEnabled(false); } } }); } catch (SecurityException e) { Log.e("Exception: %s", e.getMessage()); } } } اتمنى من الي يعرف حل للمشكلة يساعدني1 نقطة
-
@Mohamd Imran الكود شغال ميه ميه ربي يعطيك الف عافيه وجنات النعيم يا رب1 نقطة
-
@مروان مروان3 يمكنك إظهار ال Dialog هكذا ,عدلت الكود لك private void CheckEnableGPS(){ String provider = Settings.Secure.getString(getContentResolver(), Settings.Secure.LOCATION_PROVIDERS_ALLOWED); if(!provider.equals("")){ //GPS مفعل نبدأ الأكتيفتي Toast.makeText(this, "GPS Enabled: " + provider, Toast.LENGTH_LONG).show(); }else{ //نطلب تفعيله من المستخدم new AlertDialog.Builder(this) .setTitle(R.string.title_location_permission) .setMessage("يرجى تفعيل ال GPs") .setPositiveButton("موافق", new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialogInterface, int i) { Intent intent = new Intent(Settings.ACTION_SECURITY_SETTINGS); startActivity(intent); } }) .create() .show(); } }1 نقطة
-
@Mohamd Imran يا غالي هل يمكن اضافة صندوق Dialog لكودك الي يتحقق من GPS? الان هو يذهب مباشرتا نحو الاعدادات بدون سوال المستخدم اذا ممكن اضافة Dialog يكون افضل1 نقطة
-
@Mohamd Imran الكود شغال تمام ي غالي ربي يعطيك الف صحه وعافيه1 نقطة
-
اهلا بك @مروان مروان3 أنت تريد تفقد إذا المستخدم مفعل ال GPS أو لا إذا كذلك ,قمت بعمل فنكشن بسيط سيتفحص إذا ال GPS مفعل أو لا إن غير مفعل نظهر للمستخدم خيار تفعيل ال GPS private void CheckEnableGPS(){ String provider = Settings.Secure.getString(getContentResolver(), Settings.Secure.LOCATION_PROVIDERS_ALLOWED); if(!provider.equals("")){ //GPS مفعل نبدأ الأكتيفتي Toast.makeText(this, "GPS Enabled: " + provider, Toast.LENGTH_LONG).show(); }else{ //نطلب تفعيله من المستخدم Intent intent = new Intent(Settings.ACTION_SECURITY_SETTINGS); startActivity(intent); } } ثم نقوم بإستخدام الفنكشن في ال onCreate ميثود هكذا @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); CheckEnableGPS(); }1 نقطة
-
@Mohamd Imran هلا بيك ي غالي شكرا على ردك على سوالي ولكن جوابك مختلف قليلا اخي انته عملت اذونات لوكيشن هذا الاوذنات شغاله معي انا ميه ميه مشكلتي في اذونات فحص نظام GPS هذا الي فيها المشكله1 نقطة
-
السلام عليكم @مروان مروان3 الخطأ لديك هو أنك يجب أن تطلب الأذونات من المستخدم قبل تشغيل الأكتفيتي الذي تريده ,بعد ما يتم إعطاء الأذونات من المستخدم ثم يتم المباشرة في تشغيل الكود وهذا فنكشن بسيط لطلب الأذونات من المستخدم بعد ذلك قم بتشغيل الأكتفيتي إذا المستخدم وافق على إعطاء الأذونات public static final int MY_PERMISSIONS_REQUEST_LOCATION = 99; public boolean checkLocationPermission() { if (ContextCompat.checkSelfPermission(this, Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED) { // Should we show an explanation? if (ActivityCompat.shouldShowRequestPermissionRationale(this, Manifest.permission.ACCESS_FINE_LOCATION)) { //هنا نظهر للمستخدم لماذا نطلب الأذونات من خلال Dialog // sees the explanation, try again to request the permission. new AlertDialog.Builder(this) .setTitle(R.string.title_location_permission) .setMessage(R.string.text_location_permission) .setPositiveButton(R.string.ok, new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialogInterface, int i) { //Prompt the user once explanation has been shown ActivityCompat.requestPermissions(MainActivity.this, new String[]{Manifest.permission.ACCESS_FINE_LOCATION}, MY_PERMISSIONS_REQUEST_LOCATION); } }) .create() .show(); } else { // No explanation needed, we can request the permission. ActivityCompat.requestPermissions(this, new String[]{Manifest.permission.ACCESS_FINE_LOCATION}, MY_PERMISSIONS_REQUEST_LOCATION); } return false; } else { return true; } } @Override public void onRequestPermissionsResult(int requestCode, String permissions[], int[] grantResults) { switch (requestCode) { case MY_PERMISSIONS_REQUEST_LOCATION: { // If request is cancelled, the result arrays are empty. if (grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED) { if (ContextCompat.checkSelfPermission(this, Manifest.permission.ACCESS_FINE_LOCATION) == PackageManager.PERMISSION_GRANTED) { // تم إعطاء الأذونات قم بتشغيل الأكتفيتي هنا } } else { // permission denied, boo! Disable the //في حال لم يعطي المستخدم الأذونات إذاً نلغي التشغيل أو تقوم بإظهر توست بفشل العملية } return; } } } الأن نقوم بإستخدام الفنكشن في ال onCreate ميثود هكذا @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); checkLocationPermission(); }1 نقطة