اذهب إلى المحتوى

البحث في الموقع

المحتوى عن 'إصدار'.

  • ابحث بالكلمات المفتاحية

    أضف وسومًا وافصل بينها بفواصل ","
  • ابحث باسم الكاتب

نوع المحتوى


التصنيفات

  • الإدارة والقيادة
  • التخطيط وسير العمل
  • التمويل
  • فريق العمل
  • دراسة حالات
  • التعامل مع العملاء
  • التعهيد الخارجي
  • السلوك التنظيمي في المؤسسات
  • عالم الأعمال
  • التجارة والتجارة الإلكترونية
  • نصائح وإرشادات
  • مقالات ريادة أعمال عامة

التصنيفات

  • مقالات برمجة عامة
  • مقالات برمجة متقدمة
  • PHP
    • Laravel
    • ووردبريس
  • جافاسكربت
    • لغة TypeScript
    • Node.js
    • React
    • Vue.js
    • Angular
    • jQuery
    • Cordova
  • HTML
  • CSS
    • Sass
    • إطار عمل Bootstrap
  • SQL
  • لغة C#‎
    • ‎.NET
    • منصة Xamarin
  • لغة C++‎
  • لغة C
  • بايثون
    • Flask
    • Django
  • لغة روبي
    • إطار العمل Ruby on Rails
  • لغة Go
  • لغة جافا
  • لغة Kotlin
  • لغة Rust
  • برمجة أندرويد
  • لغة R
  • الذكاء الاصطناعي
  • صناعة الألعاب
  • سير العمل
    • Git
  • الأنظمة والأنظمة المدمجة

التصنيفات

  • تصميم تجربة المستخدم UX
  • تصميم واجهة المستخدم UI
  • الرسوميات
    • إنكسكيب
    • أدوبي إليستريتور
  • التصميم الجرافيكي
    • أدوبي فوتوشوب
    • أدوبي إن ديزاين
    • جيمب GIMP
    • كريتا Krita
  • التصميم ثلاثي الأبعاد
    • 3Ds Max
    • Blender
  • نصائح وإرشادات
  • مقالات تصميم عامة

التصنيفات

  • مقالات DevOps عامة
  • خوادم
    • الويب HTTP
    • البريد الإلكتروني
    • قواعد البيانات
    • DNS
    • Samba
  • الحوسبة السحابية
    • Docker
  • إدارة الإعدادات والنشر
    • Chef
    • Puppet
    • Ansible
  • لينكس
    • ريدهات (Red Hat)
  • خواديم ويندوز
  • FreeBSD
  • حماية
    • الجدران النارية
    • VPN
    • SSH
  • شبكات
    • سيسكو (Cisco)

التصنيفات

  • التسويق بالأداء
    • أدوات تحليل الزوار
  • تهيئة محركات البحث SEO
  • الشبكات الاجتماعية
  • التسويق بالبريد الالكتروني
  • التسويق الضمني
  • استسراع النمو
  • المبيعات
  • تجارب ونصائح
  • مبادئ علم التسويق

التصنيفات

  • مقالات عمل حر عامة
  • إدارة مالية
  • الإنتاجية
  • تجارب
  • مشاريع جانبية
  • التعامل مع العملاء
  • الحفاظ على الصحة
  • التسويق الذاتي
  • العمل الحر المهني
    • العمل بالترجمة
    • العمل كمساعد افتراضي
    • العمل بكتابة المحتوى

التصنيفات

  • الإنتاجية وسير العمل
    • مايكروسوفت أوفيس
    • ليبر أوفيس
    • جوجل درايف
    • شيربوينت
    • Evernote
    • Trello
  • تطبيقات الويب
    • ووردبريس
    • ماجنتو
    • بريستاشوب
    • أوبن كارت
    • دروبال
  • الترجمة بمساعدة الحاسوب
    • omegaT
    • memoQ
    • Trados
    • Memsource
  • برامج تخطيط موارد المؤسسات ERP
    • تطبيقات أودو odoo
  • أنظمة تشغيل الحواسيب والهواتف
    • ويندوز
    • لينكس
  • مقالات عامة

التصنيفات

  • آخر التحديثات

أسئلة وأجوبة

  • الأقسام
    • أسئلة البرمجة
    • أسئلة ريادة الأعمال
    • أسئلة العمل الحر
    • أسئلة التسويق والمبيعات
    • أسئلة التصميم
    • أسئلة DevOps
    • أسئلة البرامج والتطبيقات

التصنيفات

  • كتب ريادة الأعمال
  • كتب العمل الحر
  • كتب تسويق ومبيعات
  • كتب برمجة
  • كتب تصميم
  • كتب DevOps

ابحث في

ابحث عن


تاريخ الإنشاء

  • بداية

    نهاية


آخر تحديث

  • بداية

    نهاية


رشح النتائج حسب

تاريخ الانضمام

  • بداية

    نهاية


المجموعة


النبذة الشخصية

تم العثور على 3 نتائج

  1. إذا كانت لديك فكرة لمُنتج لم تبدأ ببنائه بعد، فعليك بجعل أوّل أهداف ذلك المُنتج هو حلّ لمشكلة ما. ينصح Paul بوضوح: اصنع مُنتجا يحلّ مشكلة. لكن في الواقع هنالك العديد من المُنتجات التي تُصنع كل يوم ولكنّها لا تحلّ مشكلة لأي أحد. قد يبدو المُنتج ذو مظهر رائع ويحتوي على العديد من الميزات الجيّدة، لكن هذه الأشياء لا تنفع إذا كنت تبحث عن مشكلة (يعني لا تدري بعد أي مشكلة يحلّها مُنتجك). لذلك من الأفضل أن تقيّم فكرتك قبل استثمار الكثير من الوقت والمال. يُطلق على الإصدار الأوّل من المُنتج مصطلح المُنتج الفعّال القاعدي (Minimum Viable Product (MVP، وعادًة ما يحتوي هذا الإصدار على الميزات الأساسيّة لعمله. لقد شاع هذا المصطلح (MVP) عندما تمّت الإشارة إليه كجزء من منهجيّة الشركات الناشئة الليّنة Lean Startup methodology التي تدعو إلى إزالة ما يمكن إزالته من "المخلّفات" عند بناء الأعمال. إنّ MVP هو أبسط إصدار يمكن أن يكون عليه مُنتج. إنّ بناء MVP كجزء من أسلوب الشركات الناشئة الليّنة ليس هو الوسيلة الوحيدة لتطوير المُنتج، لكنّ هذه الوسيلة تمتلك مزايا فريدة من نوعها. كما إنّ بناء MVP يمكن أن يوفّر عليك الوقت والمال، لكن هذا لا يشكّل دعوة إلى بناء مُنتج رديء. عندما تبني المُنتج الفعّال القاعدي ينبغي عليك التفكير في جميع العناصر التي يمكن للمُنتج احتوائها، كأن تكون ميزات، عناصر تكميليّة، أو صفحات متعددة، إلخ، ثم تجريدها للوصول إلى العناصر الأكثر ضروريّة لجعل الأشخاص يرغبون بمُنتجك. على الأرجح سيكون MVP الخاص بك مختلفًا عن MVP الخاص بغيرك بسبب العديد من العوامل؛ كالسوق الخاص بك والحلول البديلة للمشكلة. لذلك سيكون من المفيد أن تسأل: "ما الذي يمكن عمله كحدّ أدنى للحصول على مُنتج يعمل كحلّ لمشكلة؟" إنّ التفكير بهذه الطريقة يمكن أن يساعدك على تجنّب قضاء الكثير من الوقت في بناء أمور ذات أولويّة أقل بالنسبة للمُنتج الجديد. ابدأ بحل مشكلة تواجهك أصلاإنّ أفضل المُنتجات هي التي تحلّ المشاكل التي يواجهها الأشخاص بالفعل، وليس هنالك مكانًا أفضل من حياتك الخاصّة للبحث عن الإلهام. قبل بضع سنوات، احتجنا إلى بعض الصور للصفحة الرئيسيّة الجديدة لموقع Crew، وبعد أن أُحبطنا بخيارات الصور الموجودة على الإنترنت قررنا توظيف مصوّرنا الخاص. وبسبب مشكلة الصور منخفضة الجودة عالية الكلفة التي واجهتنا، افترضنا أنّ الأشخاص الآخرين لديهم نفس المشكلة أيضًا. لذلك قمنا بنشر الصور على الإنترنت مجّانًا بعد الانتهاء من التّصوير، وتحت رخصة المشاع الإبداعي Creative Commons Zero license على موقع يدعى Unsplash، وذلك بتوفير 10 صور عالية الجّودة ومجّانية كل 10 أيام. اليوم أصبح Unsplash يمتلك مجتمعًا من أكثر من 120,000 من المصوّرين، الفنّانين والمبدعين الذين يشاركون الصور التي يتم تنزيلها أكثر من 30 مليون مرّة. لكنّنا لم نكن نتصّور أن تأخذ الأمور هذا المنحى عندما أطلقنا الموقع. لقد قمنا ببناء المُنتج الفعّال القاعدي لـ Unsplash باستخدام أحد قوالب Tumblr بسعر 19$، فأصبح Unsplash يعمل خلال 3 ساعات، بدلًا من قضاء عدّة أسابيع أو أشهر في إنشاء موقع يمكن أن يخفق. بداية Unsplash.com كقالب Tumblrكانت الخطوة التالية بعد بناء الموقع هي اختبار الطلب عليه. لقد أردنا معرفة ردّة فعل الناس حول فكرة الموقع فقمنا بعرض Unsplash في موقع Hacker News؛ مجتمع من المصمّمين، المطوّرين، ورجال الأعمال. لقد شعرنا بأنّ هذا هو المكان حيث يوجد أشخاص مهتمّون بما نقدّمه. لقد تمّ تحميل أكثر من 20,000 صورة بعد عدّة ساعات من عرض Unsplash. في البداية قمنا برفع الصور على حساب Dropbox شخصي لأنّنا لم نكن نتوقّع هذا القدر من الاهتمام، مما أدى إلى وصولنا إلى حدّ الاستضافة وتوقّف الصور عن العمل. وبذلك اضطررنا إلى الانتقال إلى مكان آخر للحفاظ على الموقع فعّالًا. وعلى الرّغم من أنّ الإصدار الأوّل لـ Unsplash كان بدائيًّا وبالكاد يعمل، لكنّه كان كافيًا لإثبات أنّه كان حلًّا لمشكلة لا تواجهنا نحن فحسب، وإنّما جميع الصنّاع حول العالم. ومن المثير للاهتمام أنّ المظهر الأساسي للإصدار الأول لـ Unsplash هو نفسه اليوم. ففي النهاية بساطته هي ما جعلته بارزًا. استخدم ما بحوزتكلا تحتاج في بعض الأحيان لكتابة شيفرة أو عمل تصميم لتبني مُنتجا يمثّل حلًّا لمشكلة، كما رأينا مع Unsplash. وكما يقول Mark Randall كبير الاستراتيجيين ومدير عام قسم الإبداع في Adobe: في البداية قد تحتاج فقط إلى إجراء مكالمة مع مجموعة من العملاء المحتملين، أو رسم فكرتك لموقع باستخدام ورقة وقلم. هنالك أسلوب شائع للتحقق من صلاحيّة الفكرة يدعى اختبار الدخان Smoke Test. في هذا الاختبار تقوم بإنشاء موقع وهمي بهدف معرفة مقدار الاهتمام في مُنتجك حتّى قبل أن تبنيه. تستطيع، كمثال على اختبار الدخان، أن قوم بإنشاء موقع من صفحة واحدة تشرح فيه فكرة مُنتجك مع إضافة نموذج تسجيل بريد إلكتروني. لا يوجد مُنتج فعلي في الواقع ولكنك تستطيع معرفة عدد الزبائن المهتميّن بإحصاء عدد المسجّلين. عندما أُطلق Buffer لأول مرّة، كتطبيق ويب لجدولة وسائل التواصل الاجتماعي، قام مؤسّسوه ببناء صفحتين بسيطتين توضّحان ماهيّة التطبيق. في تلك المرحلة كان Buffer بعيدًا عن الاكتمال، لكنّ اختبار الدخان أعطاهم فكرة عمّا يتطلبّه بناء الإصدار الأول لمُنتج يعمل بشكل أساسي. وعلاوة على ذلك، أصبح لديهم مجموعة كبيرة من العملاء في الوقت الذي كانوا فيه جاهزين لإطلاق المُنتج. حتّى إنّ بعض العملاء يسجل بحسابات مدفوعة. المنتج الفعال القاعدي لبعض المنتجات الأكثر شعبية اليومعندما تبحث عن نظّارة شمسيّة في متجر eBay، أو تساعد في تمويل مشروع ناشئ في Kickstarter، فإنّه من السهل أن تنشغل بجميع تلك الميزات والطبقات من التعقيد التي يوفّرها الموقعان. لكنّ العديد من المُنتجات الرقميّة التي تستخدمها اليوم بدأت صغيرة؛ قاموا باختبار فكرتهم وسوق المُنتج باستخدام مُنتج أكثر بدائيّة بكثير. ولإعطائك فكرة أفضل، ألق نظرة على بعض عمالقة اليوم وبداياتهم: eBay eBay هو من مواقع المزادات الإلكترونيّة الأكثر شعبيّة في يومنا هذا. وكان يسمّى في الأصل AuctionWeb عندما تمّ إطلاقه عام 1995. الصورة أدناه هي أقدم لقطة شاشة متاحة لموقع eBay مقارنة مع صفحة الموقع لهذا العام: Appleتُعتبر Apple من أثمن العلامات التجاريّة في العالم. مع ذلك لم يكن يبدو أنّهم يملكون الكثير عندما أُنشأت الشركة عام 1976. Apple1 كان أوّل جهاز حاسوب أصدرته Apple عام 1976، وكان مجرّد لوحة دائرة إلكترونية بدون لوحة مفاتيح، شاشة، أو حتّى صندوق لاحتواء الدائرة. Kickstarterقام Kickstarter بتغيير عملية تمويل المشاريع الإبداعيّة بالكامل وذلك بالسّماح للأشخاص بمساندة وتمويل المُبدعين من جميع أنحاء العالم. يبدو Kickstarter كأداة بسيطة وواضحة اليوم، لكنّ الأمر استغرق Perry Chen، مؤسّس كيكستارتر، 6 أو 7 سنوات لتحويل فكرته إلى واقع بإطلاق الموقع. رسم Perry رؤيته الأوليّة لـ Kickstarter في عام 2009 بالرّغم من أنّه لم يكن مصمّمًا. خاتمةنحن نرى النجاح الذي وصلت إليه المُنتجات اليوم وننسى أحيانًا أنّ الأمر استغرق سنوات من التطوّر لكي تصل إلى ما هي عليه الآن. إنّ موازنة أولويّات المُنتج لا تنتهي عند إطلاق المُنتج الفعّال القاعدي بل تستمر طوال دورة حياة المُنتج. حتّى وإن كان لديك عملاء أو كانت لديك شركة راسخة ما زالت هنالك حاجة إلى الاختيار بين الأشياء التي تُبنى أولًا والأشياء التي تؤجّل حتّى وقت لاحق. إنّ بناء المُنتج الفعّال القاعدي لا يعني بناء مُنتج أوّلي سيئ وإنمّا التركيز على الشيء الأكثر أهميّة والشيء الذي يحلّ المشكلة المعنيّة بأسهل وأسرع طريقة. وماذا بعدها؟ بعدها تبدأ المتعة! ترجمة -وبتصرّف- للمقال Start small: In search of the minimum viable product لصاحبه: Mikael Cho. حقوق الصورة البارزة: Designed by Freepik.
  2. يتيح Git مثل الكثير من أنظمة إدارة النسخ VCS، إمكانية تعليم مواضع معينة خلال مرحلة التطوير على أنها مهمة باستخدام وسوم Tags. يستخدم المطورون كثيرا هذه الميزة لتحديد مواضع إطلاق الإصدارات (الإصدار 1.0؛ 1.1 وهكذا). سنرى في هذا المقال كيفية عرض الوسوم المستخدمة في المستودع، كيفية إنشاء وسوم جديدة وما هي أنواع الوسوم. عرض الوسوم يعرض الأمر التالي قائمة بالوسوم الموجودة في المستودع: git tag النتيجة: v0.1 v1.3 يعرض الأمر أعلاه الوسوم حسب الترتيب الأبجدي. يمكن أيضا البحث عن الوسوم التي تتبع نمطا معيّنا. يحوي مستودع الشفرة المصدرية لـGit على سبيل المثال أكثر من 500 وسم؛ إن كنت ترغب في إظهار الوسوم التي تتعلق بالإصدار 1.8.5 فقط دون غيره فالأمر التالي يؤدي المهمة: git tag -l "v1.8.5*" مثال على النتيجة: v1.8.5 v1.8.5-rc0 v1.8.5-rc1 v1.8.5-rc2 v1.8.5-rc3 v1.8.5.1 v1.8.5.2 v1.8.5.3 v1.8.5.4 v1.8.5.5 إنشاء الوسوم يستخدم Git نوعين من الوسوم: الخفيفة Lightweight والمشروحة Annotated. يشبه الوسم الخفيف فرعا لا تدخل عليه تغييرات، إذ أنه ليس إلا مؤشر على إيداع محدّد. الوسوم المشروحة على العكس من ذلك تخزّن بوصفها كائنات داخل قاعدة بيانات Git ويُنشأ لها مجموع تحقق، تحتوي على اسم من أضاف الوسم، بريده الإلكتروني والتاريخ. كما أن لديها رسالة وسم، ويمكن أن توثَّق ويُتحقَّق منها بواسطة GnuPG (برنامج تعمية تابع لمشروع GNU). يُنصَح باستخدام الوسوم المشروحة من أجل الحصول على كل هذه المعلومات، لكن إن كنت تريد وسما ظرفيا أو لا تريد لسبب ما حفظ البيانات المذكورة آنفا فإن الوسوم الخفيفة متاحة لهذا الغرض. الوسوم المشروحة كل ما عليك فعله لإنشاء وسم مشروح هو إضافة خيار a- إلى أمر git tag على النحو التالي: git tag -a v1.4 -m "my version 1.4" git tag v0.1 v1.3 v1.4 يحدّد الخيار m- رسالة الوسم التي تخزَّن معه. إن لم تحدّد رسالة فسيظهر محرّر بعد تنفيذ الأمر لإضافتها. يمكن عرض الوسم مع الإيداع الموسوم به باستخدام الأمر git show: git show v1.4 tag v1.4 Tagger: Ben Straub <ben@straub.cc> Date: Sat May 3 20:19:12 2014 -0700 my version 1.4 commit ca82a6dff817ec66f44342007202690a93763949 Author: Scott Chacon <schacon@gee-mail.com> Date: Mon Mar 17 21:52:11 2008 -0700 changed the version number يعرض الأمر بيانات الواسِم (صاحب الوسم)، تاريخ وسم الإيداع ورسالة الوسم قبل أن يظهر بيانات الإيداع. الوسوم الخفيفة الطريقة الأخرى لوسم الإيداعات هي استخدام الوسوم الخفيفة. لا تُخزّن أي معلومات إضافية بالنسبة لهذه الوسوم، ما عدا مجموع التحقق من الإيداع. استخدم أمر git tag دون ذكر خيار لإنشاء وسم خفيف: git tag v1.4-lw git tag v0.1 v1.3 v1.4 v1.4-lw v1.5 إن نفذت أمر git show على الوسم الخفيف فلن تظهر سوى بيانات الإيداع: git show v1.4-lw commit ca82a6dff817ec66f44342007202690a93763949 Author: Scott Chacon <schacon@gee-mail.com> Date: Mon Mar 17 21:52:11 2008 -0700 changed the version number الوسم المتأخر يوفّر Git إمكانية وسم الإيداعات حتى بعد أن تكون تجاوزتها. فلنفترض أن سجلّ الإيداعات لديك يبدو كالتالي: git log --pretty=oneline 15027957951b64cf874c3557a0f3547bd83b3ff6 Merge branch 'experiment' a6b4c97498bd301d84096da251c98a07c7723e65 beginning write support 0d52aaab4479697da7686c15f77a3d64d9165190 one more thing 6d52a271eda8725415634dd79daabbc4d9b6008e Merge branch 'experiment' 0b7434d86859cc7b8c3d5e1dddfed66ff742fcbc added a commit function 4682c3261057305bdd616e23b64b0857d832627b added a todo file 166ae0c4d3f420721acbb115cc33848dfcc2121a started write support 9fceb02d0ae598e95dc970b74767f19372d61af8 updated rakefile 964f16d36dfccde844893cac5b347e7b3d44abbc commit the todo 8a5cbc430f1a9c3d00faaeffd07798508422908a updated readme نفترض الآن أنك نسيت إضافة الوسم v1.2 على الإيداع ذي الرسالة updated rakefile. لا زال بإمكانك وسم الإيداع؛ لوسم هذا الإيداع حدّد مجموع التحقق منه (أو جزءًا من مجموع التحقق) في نهاية الأمر كالتالي: git tag -a v1.2 9fceb02 يمكنك التحقق من وسم الإيداع: git tag v0.1 v1.2 v1.3 v1.4 v1.4-lw v1.5 git show v1.2 tag v1.2 Tagger: Scott Chacon <schacon@gee-mail.com> Date: Mon Feb 9 15:32:16 2009 -0800 version 1.2 commit 9fceb02d0ae598e95dc970b74767f19372d61af8 Author: Magnus Chacon <mchacon@gee-mail.com> Date: Sun Apr 27 20:43:35 2008 -0700 updated rakefile ... مشاركة الوسوم لا ينقُل أمر git push مبدئيا الوسوم إلى الخواديم البعيدة. ستحتاج للتصريح بأنك تريد نقل الوسوم التي أنشأتها: git push origin v1.5 Counting objects: 14, done. Delta compression using up to 8 threads. Compressing objects: 100% (12/12), done. Writing objects: 100% (14/14), 2.05 KiB | 0 bytes/s, done. Total 14 (delta 3), reused 0 (delta 0) To git@github.com:schacon/simplegit.git * [new tag] v1.5 -> v1.5 إن كانت لديك الكثير من الوسوم وتريد دفعها معا فخيار tags-- بدلا من اسم الوسم يؤدي المهمة: git push origin --tags Counting objects: 1, done. Writing objects: 100% (1/1), 160 bytes | 0 bytes/s, done. Total 1 (delta 0), reused 0 (delta 0) To git@github.com:schacon/simplegit.git * [new tag] v1.4 -> v1.4 * [new tag] v1.4-lw -> v1.4-lw سيحصُل المساهمون الآخرون بهذه الطريقة على الوسوم التي أضفتها عندما ينسخون المستودع أو يجلبون البيانات منه. نقل ملفات وسم إلى مجلد العمل إن كنت تريد وضع إصدار يستخدم وسما من المستودع في مجلد العمل فيمكنك إنشاء فرع جديد انطلاقا من الوسم باستخدام أمر git checkout كما يلي: git checkout -b version2 v2.0.0 Switched to a new branch 'version2' تحدّد الوسوم، على عكس الفروع، نقطة زمنية ثابتة من المستودع. من هذا المنطلق لا يتطور الوسم بتغير ملفاته لذا ينبغي الانتباه إلى أن الفرع version2 لن يكون موافقا للوسم v2.0.0 بعد إضافة إيداع إليه؛ إذ أن الفرع تقدم إلى الأمام بالتعديلات الجديدة التي أضافها الإيداع. ترجمة -وبتصرّف- للفصل Git Basics - Tagging من كتاب Pro Git لصاحبه Scott Chacon.
  3. إنّ كل مكتبات بايثون (مثل حزم التّطبيقات application packages) التي نقوم بتنزيلها باستخدام مدير الحزم package manager (مثل pip) يتمّ توزيعها باستخدام أداة مساعدة مُخصصة لهذا العمل، تقوم هذه الأدوات المساعدة بإنشاء توزيعات بايثون Python distributions والتي هي أساسا عبارة عن ملفات أرشيف مرقمة بإصدار ومضغوطة، تحتوي هذه الملفّات على جميع العناصر المتعلقة بما يتم توزيعه، مثل ملفات المصادر source files وملفات الموارد resource files. سنقوم في هذا الدرس بالتحدث عن الأدوات الضرورية للتوزيع، وسنتطرق إلى الخطوات الأساسية التي تسمح لنا بحزم المكتبات المفيدة الخاصة بنا، الوحدات modules، أو حتى التطبيقات applications والتي ستكون مفيدة لنا عند توزيع المشروع الخاص بنا على خادوم أو مشاركته على الإنترنت. توزيعات وحزم بايثونحتى ولو كنا قد عملنا قليلًا فقط مع بايثون، فنحن متآلفون مع مفهوم استخدام مدير الحزم (مثل pip ،easy_install) لتنزيل الوحدات والمكتبات (مثل هياكل تطوير التطبيقات application development frameworks) والتي يتم بعدها استيرادها واستخدامها لإنشاء واحدة جديدة. تقوم أدوات إدارة الحِزَم هذه -والتي تعمل محليا- بالاتصال إلى مصدر بعيد source (مثل دليل حزم بايثون Python Package Index – PyPI) وتنفيذ الإجراء المطلوب (كالبحث والتنصيب). تتكوّن طريقة توزيع تطبيق ما من تغليف الدليل directory الخاص به ببعض الملفّات الضّروريّة (مع القليل من الملفّات المُوصى بها)، تحديد العناصر المرتبطة (كالموارد resources والاعتماديات dependencies، إلخ) وإصدارها أو استخدامها في مكان آخر ببساطة. ملاحظة: نشجعك بشدة على العمل على بيئات افتراضيّة لعزل تنزيلات بايثون، الوحدات والتطبيقات التي تعمل عليها. 1. حزم بايثونالحزمة في بايثون هي تقنيا عبارة عن دليل قابل للاستيراد (باستخدام init__.py__ ) يحتوي على ملفات المصادر (كالوحدات)، ولا يجب الخلط بينها وبين حزم نظام التشغيل والتي هي تقنيًّا تطبيقات فعلية (مثل حزمة Debian)، ومع ذلك يجب أن نُلاحظ أنّ توزيعات بايثون في الواقع تدعى أيضًا بالحزم. مثال على بنية الحِزمة: package | |-- __init__.py2. تطبيقات بايثونعلى الرّغم من أنّه يُمكننا اعتبار أي شيء في بايثون كتطبيق وذلك ابتداء من ملف واحد وحتى مئات الملفات المُبعثرة عبر الحزم المُختلفة، فإنّ التطبيق في أغلب الحالات الواقعيّة يتكوّن من العديد من الوحدات والبعض من الاستيرادات الخارجيّة (من المكتبات). مثال على بنية التّطبيق: myapp | |-- __init__.py |-- amodule.py |-- anothermod.py |__ tests | | | |-- __init__.py | |-- .. | |-- . | ..3. مكتبات وأدوات توزيع بايثوننظرا لطبيعة شعبية لغة بايثون ووجود كميّة وافرة من مكتبات وتطبيقات الطرف الثالث third-party المكتوبة لأجلها فقد كان من الضّروري دوما إيجاد طريقة مُوحّدة وأبسط لتوزيعها، تُوجد العديد من المكتبات والأدوات المختلفة المُستخدمة لإنشاء توزيعات بايثون. تمّ إنشاء مجموعة الأدوات المساعدة لتوزيع بايثون والتي تدعى distutils من أجل التعامل مع مهام التوزيع. 4. دليل حزم بايثون (Python Package Index (PyPIدليل حزم بايثون أو PyPI هو مستودع مركزي (على الإنترنت Online) للمشاريع (توزيعات بايثون)، حيث تستخدم أدوات إدارة الحِزم مثل pip هذا المستودع من أجل استضافة، إيجاد وتثبيت الحِزَم. البدءفلنقم في البداية بإنشاء تطبيق بايثون بسيط وعام باستخدام إطار العمل المصغّر flask (إنشاء البنية) والذي يُمكننا لاحقًا تحزيمه. التطبيق عبارة عن تطبيق ويب بسيط جدا، ﻷن الهدف من الدرس هو كيفية التحزيم وليس التطبيق في حد ذاته. إنشاء بنية التطبيقنهدف إلى إنشاء مثال يشابه معظم مشاريع العالم الحقيقي، ولهذا من الأفضل أن نتخيّل حالة تحتوي على وحدات. بُنية المثال: /MyApplication |-- run.py |-- config.py |__ /app |-- __init__.py |-- /module_one |-- __init__.py |-- controllers.py |-- models.py |__ /templates |-- module_one |-- hello.html |__ /static |__ .. |__ .1. إنشاء المجلدات:/MyApplication |-- run.py |-- config.py |__ /app |-- __init__.py |-- /module_one |-- __init__.py |-- controllers.py |-- models.py |__ /templates |-- module_one |-- hello.html |__ /static |__ .. |__ .2. تعديل الملف run.py باستخدام برنامج nano:nano ~/MyApplication/run.pyنضع المحتويات التّالية بداخله: # Run a test server. from app import app app.run(debug=True)نقوم الآن بحفظه والخروج منه باستخدام CTRL+X ومن ثم تأكيد ذلك باستخدام Y. 3. تعديل الملف config.py باستخدام برنامج nano:nano ~/MyApplication/config.pyنضع المحتويات التّالية بداخله: DEBUG = True THREADS_PER_PAGE = 4 CSRF_ENABLED = True CSRF_SESSION_KEY = "secret"نقوم الآن بحفظه والخروج منه باستخدام CTRL+X ومن ثم تأكيد ذلك باستخدام Y. 4. تعديل الملف app/init.py باستخدام برنامج nano:nano ~/MyApplication/app/__init__.pyنضع المحتويات التّالية بداخله: from flask import Flask, render_template app = Flask(__name__) app.config.from_object("config") from app.module_one.controllers import module_one app.register_blueprint(module_one) نقوم الآن بحفظه والخروج منه باستخدام CTRL+X ومن ثم تأكيد ذلك باستخدام Y. 5. تعديل الملف app/module_one/controllers.py باستخدام برنامج nano:nano app/module_one/controllers.pyنضع المحتويات التّالية بداخله: from flask import Blueprint, request, render_template module_one = Blueprint("auth", __name__, url_prefix="/auth") @module_one.route("/hello") def hello(): return render_template("module_one/hello.html")نقوم الآن بحفظه والخروج منه باستخدام CTRL+X ومن ثم تأكيد ذلك باستخدام Y. 6. تعديل الملف app/templates/module_one/hello.html باستخدام برنامج nano:nano app/templates/module_one/hello.htmlنضع المحتويات التّالية بداخله: <DOCTYPE html> <html lang="en"> <head> <title>{% block title %}My Site{% endblock %}</title> {% block css %} {% endblock %} <meta name="viewport" content="width=device-width, initial-scale=1.0"> </head> <body> Hello, world! </body> </html>نقوم الآن بحفظه والخروج منه باستخدام CTRL+X ومن ثم تأكيد ذلك باستخدام Y. البدء بتوزيع وحزم التطبيقبعد إنشاء بنية التطبيق المثالية لموقع ويب يستخدم flask، نستطيع المتابعة بالقيام بالخطوة الأولى في إعداد التوزيعة. 1. تبديل بنية المجلدمن أجل حَزْم تطبيقنا بشكل جيّد نحتاج للقيام ببعض الإضافات لبُنية مجلّدنا. /MyApplication |-- run.py |__ /app |-- __init__.py |-- /module_one |-- __init__.py |-- controllers.py |-- models.py |__ /templates |-- module_one |-- hello.html |__ /static |__ .. |__ . |-- setup.py # Distribution setup file |-- README.txt # Read-me file |-- MANIFEST.in # Distribution manifest file |-- CHANGES.txt # Changes logفلنقم بتبديل بنية المجلد لإنشاء الملفات الضروريّة: touch ~/MyApplication/setup.py touch ~/MyApplication/README.py touch ~/MyApplication/MANIFEST.py touch ~/MyApplication/CHANGES.py mv ~/MyApplication/run.py ~/MyApplication/bin/run2. إنشاء الملف setup.pynano ~/MyApplication/setup.pyنضع المحتويات التّالية بداخله: from distutils.core import setup setup( # Application name: name="MyApplication", # Version number (initial): version="0.1.0", # Application author details: author="name surname", author_email="name@addr.ess", # Packages packages=["app"], # Include additional files into the package include_package_data=True, # Details url="http://pypi.python.org/pypi/MyApplication_v010/", # # license="LICENSE.txt", description="Useful towel-related stuff.", # long_description=open("README.txt").read(), # Dependent packages (distributions) install_requires=[ "flask", ], )نقوم الآن بحفظه والخروج منه باستخدام CTRL+X ومن ثم تأكيد ذلك باستخدام Y. 3. إنشاء الملف MANIFEST.inإن كنا نحتاج إلى شحن دلائل إضافية (ثابتة static أو قوالب templates) يجب علينا التصريح عنها في manifest لكي يتمّ حَزْمها، سنقوم بفعل هذا في MANIFEST.in. nano ~/MyApplication/MANIFEST.inنضع المحتويات التّالية بداخله: recursive-include app/templates * recursive-include app/static *نقوم الآن بحفظه والخروج منه باستخدام CTRL+X ومن ثم تأكيد ذلك باستخدام Y. هذا هو كل ما نحتاجه ، الآن حِزمة توزيعة بايثون جاهزة ليتمّ تثبيتها وشحنها. 4. ملفات إضافيةيجب دومًا أن نتذكّر أنّه من أجل الحصول على توزيعة كاملة يجب أن يكون الملف/الدليل محتويًا على الملفّات التالية ومربوطًا بها: README.txtMANIFEST.inLICENSE.txtالتعامل مع التطبيق الجاهز للتوزيعبعد أن انتهينا من إنشاء تطبيقنا ومن ثم أجرينا التبديلات الضرورية لبنية الملف لتحضيره لبناء توزيعة لا تحتوي على أيّة أخطاء، نستطيع الآن البدء بالمرور على عمليّات الحَزْم. 1. كيف نقوم بإنشاء ملف التوزيعمن أجل توليد نسخة ملف التوزيع، نقوم بتنفيذ الأمر التالي: cd ~/MyApplication python setup.py sdistسيذهب هذا الأمر إلى إعداداتنا، يطبع العمليات التي يتمّ تنفيذها ويُوَلِّد ملف أرشيف tar داخل الدليل الجديد diet، مشابهًا لما يلي: # root@hostname:~/MyApplication# ls dist # MyApplication-0.1.0.tar.gzملاحظة: بما أنّنا لم نقم بتأهيل جميع المجلدات الفرعية (مثل static) وتعاملنا مع ملفات إضافية (مثل README.txt)، فقد نحصل على بعض التحذيرات أثناء عمليّة الإنشاء. 2. كيفية تثبيت التطبيقيستطيع الآخرون من الآن فصاعدًا تثبيت واستخدام التّطبيق باستخدام ملف setup.py الذي أنشأناه. من أجل تثبيت التطبيق نقوم بتنفيذ الأوامر التالية: python setup.py installإن كان هذا التثبيت من أجل التطوير وأردنا تثبيت المُتطلّبات سنقوم بتنفيذ ما يلي: python setup.py develop3. كيفية مشاركة التطبيقإن أردنا مشاركة الشيفرة على دليل حِزَم بايثون، نستطيع فعل ذلك عن طريق بدء الإجراء register كما يلي: python setup.py registerنستطيع إكمال هذا الإجراء عبر اتّباع التّعليمات التي تظهر على الشّاشة. وإن كنّا نملك تسجيل دخول مسجل registered login من أجل الرفع Upload فقط نستطيع استخدام الأمر التالي: python setup.py sdist upload4. كيفية إنشاء حزم من الإصدارات الجديدة للتطبيقنقوم بتحرير الملف setup.py عن طريق مُحرّر نصوص (مثل nano) وتعيين رقم الإصدار الجديد "version="0.1.1.نقوم بتحرير الملف CHANGES.txt لنعكس التغييرات.نقوم بإجراء التّعديلات الضّروريّة على الملفين LICENSE.txt و README.txt.رفع الشّيفرة بعد الخطوة السّابقة.ترجمة -وبتصرّف- لـلمقال How To Package And Distribute Python Applications لصاحبه O.S. Tezer. حقوق الصورة البارزة: Designed by Freepik.
×
×
  • أضف...