لوحة المتصدرين
المحتوى الأكثر حصولًا على سمعة جيدة
المحتوى الأعلى تقييمًا في 01/16/20 في كل الموقع
-
اهلا بك Google sites هو نظام يقدمة غوغل يتيح بناء مواقع ويب (يشبه فكرة عمل ووردبريس)، إذا كنت تريد انشاء موقع ويب عادي فقط بهدف تجديد طريقة مشاركة المحتوى وضبطة فيمكنك استخدام جوجل سايتس.. ما يميزه سهولة وسرعة بناء المواقع من خلاله لكن هذا النظام يقيدك بتصاميم قوالب محددة متاحة تختار احداها.. ايضا يقيدك ب domain خاص ب Google وهو .Google. com.. ناهيك عن المساحة المحددة التي يقيدك بها بالتالي إذا كنت تتطلع إلى brand خاص بشركتك او موقعك الشخضي وتوسع وكبير ف Google sites لا يناسبك.. وهذا ما يدفع الكثير من رجال الاعمال الى الانتقال لإنشاء مواقع ويب خاصة بعيدا عن انظمة بناء المواقع مثل Google sites وغيرها هنا مقال حديث يجمل مزايا وعيوب Google sites1 نقطة
-
بعد أن تعرّفنا على المفاهيم الأساسيّة لتطوير الويب كماهية تطبيق الويب، وإطار العمل، سنُكمل هذه السّلسلة من الدروس وسنتعرّف في هذا الدّرس على كيفيّة تهيئة بيئة التّطوير وتنصيب الأدوات اللازمة، وكذا بعض أساسيّات التّعامل مع إطار العمل Flask. تنصيب لغة بايثون لغة بايثون مُتواجدة بشكل افتراضي على على أنظمة لينكس و OS X، أما بالنّسبة لمستخدمي نظام Windows فيُمكنك تنزيل Python 2 من الموقع الرّسمي، فقط تأكّد من تنزيل آخر نسخة ذات الرّقم x.2.7. تنصيب إطار العمل Flask إنشاء بيئة وهميّة بأداة virtualenv البيئة الوهمية تُوفّر جميع المكتبات والاعتماديات والأدوات التي نقوم بتنصيبها والتي سنحتاج إليها في المشروع في مُجلّد واحد بمعزل عن اعتماديات نظام التّشغيل العامّة، وذلك لتجنّب تصادم بين الاعتماديات، يُمكنك القيام بالتّطوير بعد تشغيل البيئة الوهميّة ولن يكون لذلك تأثير على نظام التّشغيل، وسيبقى كل شيء بداخل مُجلّد واحد، ويُمكنك كذلك إيقاف تشغيل البيئة الوهميّة متى ما تشاء. يُمكن أن تكون أداة Virtualenv مُنصّبة مُسبقا في نظام التّشغيل لديك، يُمكنك التأكد بالأمر التّالي: $ virtualenv --version إذا حصلت على رقم نُسخة فهذا يعني بأنّ الأداة مُنصّبة من قبل. أما إذا لم يكن الأمر كذلك، فيُمكنك تنصيبها بالأمر التّالي في حالة كنت تستعمل توزيعة Ubuntu. $ sudo apt-get install python-virtualenv إذا لم تكن تستعمل نظام Ubuntu فيُمكنك أن تقوم بتنصيبها عبر أداة pip، فقط نفّذ الأمرين التاليين واحدا تلو الآخر: $ pip install -U pip $ pip install virtualenv الأمر الأول معني بتحديث أداة pip والثاني يقوم بتنصيب أداة virtualenv، قد تحتاج إلى إضافة sudo إلى بداية الأمرين إن لم تكن تملك صلاحيات مُدير النّظام (خاص بأنظمة Gnu/Linux و OSX). $ sudo pip install -U pip $ sudo pip install virtualenv تنصيب Flask سنستعمل أداة virtualenv لإنشاء بيئة وهميّة، أولا قم بإنشاء مُجلّد باسم flask_app أو باسم من اختيارك، بعد إنشاء المُجلّد يُمكنك الانتقال إلى مساره بسطر الأوامر وذلك بتنفيذ الأوامر التالية على الطّرفيّة Terminal، بالنّسبة لمُستخدمي Windows فيُمكن تنفيذ هذه الأوامر باستخدام طرفيّة PowerShell: $ mkdir ~/flask_app $ cd ~/flask_app بعدها يُمكنك يُمكنك إنشاء بيئة وهميّة باسم venv (اختصارا فقط) بالأمر التّالي: $ virtualenv venv انتظر لبضع لحظات إلى أن تُلاحظ ما يلي: Installing setuptools, pip, wheel...done. ستلاحظ بأنّ مُجلّدا جديدا باسم venv يحتوي على العديد من الملفّات قد ظهر، وهناك ستبقى الاعتماديات والمكتبات التي سنقوم بتنصيبها بأداة pip. بعد إنشاء البيئة الوهمية تبقى مهمّة تشغيلها، ويُمكن القيام بذلك بالأمر التّالي: $ . venv/bin/activate بعد تنفيذ الأمر أعلاه ستُلاحظ بأنّ سطر الأوامر قد تغيّر، وأضيفت كلمة (venv) إلى بداية السّطر، هذا يعني بأنّ كلّ شيء يعمل مثلما هو مُخطّط له. إذا أردت أن تقوم بإيقاف تشغيل البيئة الوهميّة فيُمكنك تنفيذ الأمر التّالي (لا تقم بذلك الآن): $ deactivate سنقوم الآن بتنصيب إطار العمل Flask، فقط نفّذ الأمر التّالي: $ pip install flask تنبيه نجاح العمليّة سيكون كالآتي: Successfully installed Jinja2-2.8 MarkupSafe-0.23 Werkzeug-0.11.5 flask-0.10.1 itsdangerous-0.24 تطبيقك الأول، مرحبا بالعالم بعد تشغيل البيئة الوهمية، أنشئ ملفا باسم app.py وافتحه بمُحرّرك المُفضّل، وضع به الأسطر التّالية: from flask import Flask app = Flask(__name__) @app.route("/") def hello(): return "Hello World!" if __name__ == "__main__": app.run() بعد حفظ الملفّ يكفي تشغيله بتنفيذ الأمر python app.py وستُلاحظ بأنّ الخادوم قد بدأ بالاستماع للطّلبات في المنفذ رقم 3000، ما يعني أنّك تستطيع الوصول إليه من المُتصفّح عبر العنوان http://127.0.0.1:5000 وهذا العنوان خاصّ بجهازك فقط ولا يُمكن لأحد غيرك أن يصل إليه ويُسمى عنوان المُضيف المحلي أو localhost ويُمكنك الوصول إليه من المُتصفّح من العنوان localhost:5000 كذلك. بعد الدّخول إلى العنوان عبر المُتصفّح ستُلاحظ جملة "!Hello World" على الصّفحة، لإيقاف الخادوم يُمكنك الضّغط على تركيبة المفاتيح Ctrl+c. الأسطر أعلاه هي كلّ ما تحتاج إليه لعرض نصّ على المُتصفّح، وإليك شرحا لكلّ جزء من البرنامج: هذا السّطر مسؤول عن استيراد Flask من حزمة flask (لاحظ الفرق بين حالة الحرف f). from flask import Flask نقوم بإنشاء كائن باسم app (يُمكنك تغيير الاسم على شرط أن تُغيّره في بقيّة الشيفرة)، الكائن هو الذي سيُمكننا من الوصول إلى الدوال التي يُوفرها Flask. app = Flask(__name__) السّطر التّالي هو نواة التّطبيق، وفيه تُصاغ الإجابة التي تُقدّم عند طلب الصّفحة من طرف المُتصفّح. @app.route("/") def hello(): return "Hello World!" السّطر الأول عبارة عن مُزخرف يُمكّن من ضبط المُوجّه (أي مسار الجواب) وهو ما يأتي في آخر عنوان التّطبيق http://127.0.0.1:5000 ويُمثّل / المُوجّه الرّئيسي. لتغيير المُوجّه يُمكن ببساطة تغيير قيمة المُعامل، فمثلا تعديله إلى السّطر التّالي سيُمكّننا من الوصول إلى صفحة !Hello World عبر العنوان http://127.0.0.1:5000/hello بدلا من العنوان http://127.0.0.1:5000: @app.route("/hello") بالنّسبة للدالة hello فهي مسؤولة عن تنفيذ الشيفرة التي بداخلها فور طلب الصّفحة وإرجاع قيمة نصيّة. ولإنشاء أكثر من صفحة يكفي تغيير المُوجّه Router، وتغيير اسم الدّالة. @app.route("/") def home(): page = 'Home Page' return page @app.route("/hello") def hello(): return "Hello World!" يُلاحظ أنّ اسم الدالة لا يجب تكراره بين المُوجّهات وإلا فلن يعمل التّطبيق. أما الشيفرة المُتواجدة في السّطرين الأخيرين فتقوم بتشغيل الخادوم ما يُمكّنك من الوصول إلى التّطبيق عن طريق المُتصفّح عبر العنوان http://127.0.0.1:5000. if __name__ == "__main__": app.run() الأمر ()app.run يقوم بتشغيل الخادوم ويُتيح الوصول إليه عبر جهازك فقط، أي أنّك لن تستطيع الوصول إلى التّطبيق إلا من الجهاز الذي قُمت بتشغيله منه، أما إذا كنت ترغب بأن يصل إليه من يتّصل بشبكتك المحليّة (شبكة الـ WiFi مثلا) فعليك إضافة مُعامل host بالقيمة 0.0.0.0 كالتالي: if __name__ == "__main__": app.run(host='0.0.0.0') ستتمكن الآن من الوصول إلى التّطبيق من أي جهاز مُتصل بالشّبكة المحليّة عبر عنوان IP جهازك متبوعا برقم المنفذ (مثلا http://192.168.1.5:5000). ويُمكنك الحصول على عنوان IP جهازك عبر تنفيذ الأمر ifconfig على أنظمة جنو/لينكس وأنظمة OS X والأمر ipconfig خاص بمُستخدمي نظام Windows (ستجد العنوان في السّطر الذي يحتوي على IPv4). للحصول على العنوان وحده في أنظمة جنو/لينكس يُمكن تنفيذ الأمر التّالي من الطّرفيّة: $ ifconfig | grep 'inet addr:' | cut -d: -f2 | awk '{ print $1}' لتغيير رقم المنفذ، يُمكن إضافة العامل port مع تعيين رقم منفذ أكبر من 1024 لأنّ كلّ المنافذ ذات الأرقام الصغيرة تتطلّب صلاحيات المُدير، في المثال التالي سنقوم باستعمال الرّقم 1200 كمنفذ للتّطبيق. if __name__ == "__main__": app.run(host='0.0.0.0', port=1200) اللغة العربية عرض اللغة العربية سيحتاج إلى إضافة السطر: # -*- coding:utf8 -*- إلى بداية الملفّ، كما يجب على السّلاسل أن تُسبق بحرف u. @app.route("/hello") def hello(): return u""" <h1 style="direction:rtl"> مرحبا بالعالم! </h1> """ لاحظ بأنّنا أحطنا شيفرات HTML بثلاثة علامات تنصيص لأنّها مُتعدّدة الأسطر. سيُصبح التّطبيق كما يلي: # -*- coding:utf8 -*- from flask import Flask app = Flask(__name__) @app.route("/") def home(): page = 'Home Page' return page @app.route("/hello") def hello(): return u""" <h1 style="direction:rtl"> السّلام عليكم ورحمة الله وبركاته </h1> """ if __name__ == "__main__": app.run() إذا قُمت الآن بزيارة العنوان http://127.0.0.1:5000/hello فستجد صفحة تحتوي على جملة "السّلام عليكم ورحمة الله وبركاته" بخط كبير (بسبب الوسم h1). أما إذا قمت بالدّخول إلى العُنوان http://127.0.0.1:5000 فستجد عبارة Home Page. مع ملاحظة بأن استعمال هذه الطّريقة لتقديم صفحات HTML غير مُجد وغير مرن وقد يجعل التّطوير صعبا في حالة كان التّطبيق مُتعدّد الصفحات، ومن الأفضل فصل ملفّات HTML مع ملفّات لغة Python وذلك لمزيد من التّنسيق وسهولة صيانة التّطبيق، ويُمكن فصلهما بمُحرّك القوالب Jinja2 الذي سنتعرّف عليه في الدّرس القادم. تمرير المتغيرات في عنوان Url الحصول على قيمة من العنوان يُمكن الحصول على قيم مُباشرة من العنوان، ويُمكننا توظيفها في الشيفرة، فمثلا يُمكننا الذهاب إلى العنوان http://127.0.0.1:5000/say_hello/Abdelhadi وسنستطيع الوصول إلى القيمة Abdelhadi كمُعامل بحيث يُمكننا إرجاعها مع جملة ترحيب أو تنفيذ أي عمليّة أخرى. ولنقوم بالأمر سنُضيف أوّلا مُوجّها جديدا باسم say_hello ولكن مع وضع المُعامل داخل علامتي <> وسنُمرّر اسم المُعامل إلى الدّالة كذلك، انظر ما يلي: @app.route("/say_hello/<name>") def say_hello(name): return u"Hello {}".format(name) إذا قُمت الآن بالذهاب إلى العنوان http://127.0.0.1:5000/say_hello/Abdelhadi فستجد عبارة Hello Abdelhadi (جرّب تغيير Abdelhadi إلى اسمك، سواء باللغة العربيّة أو باللغة الانجليزية). بعد هذا الجزء سيُصبح التّطبيق الكامل كالآتي: # -*- coding:utf8 -*- from flask import Flask app = Flask(__name__) @app.route("/") def home(): page = 'Home Page' return page @app.route("/hello") def hello(): return u""" <h1 style="direction:rtl"> السّلام عليكم ورحمة الله وبركاته </h1> """ @app.route("/say_hello/<name>") def say_hello(name): return u"Hello {}".format(name) if __name__ == "__main__": app.run() الحصول على أكثر من قيمة من العنوان الطّريقة السابقة جيّدة في حالة أدرت الحصول على قيمة مُعامل واحد، لكن ماذا لو أردت الحصول على أكثر من مُعامل؟ يُمكننا تحقيق مُرادنا عبر طلبات الـ HTTP من نوع GET، بحيث نُرسل المُعامل وقيمته في العنوان كالتّالي: http://127.0.0.1:5000/first_last?first_name=Abdelhadi&last_name=Dyouri بحيث تُمرّر المفاتيح والقيم التّاليّة: first_name=Abdelhadi last_name=Dyouri لاحظ بأنّنا نفصل بين المُعامل والآخر برمز &. وبالطّبع يُمكنك تمرير مُعامل واحد فقط. http://127.0.0.1:5000/first_last?first_name=Abdelhadi للوصول إلى قيم هذه المُعاملات، سنستخدم الوحدة request التي يُوفّرها إطار Flask وسنستوردها جنبا إلى جنب مع Flask في السّطر الثاني من البرنامج كالتّالي: from flask import Flask, request بعد ذلك سنتمكّن من الوصول إلى قيمة مُعامل كالتّالي: request.args.get('parameter') تطبيق سنُطبّق هذا بإنشاء تطبيق لعرض الاسم الأول للشّخص بأحرف صغيرة مع تكبير الحرف الأول، والاسم الثاني سيكون بأحرف كبيرة، وسنستعمل الدوال upper و capitalize. أولا سننشئ مُوجّها جديدا باسم first_last بعدها سنقوم بالحصول على قيمتي المُعاملين first_name و last_name، ثمّ سنحولّ الاسم الأول باستخدام التّابع capitalize وسنُحوّل الاسم العائلي إلى أحرف كبيرة بالتّابع upper، سنعرضه النتيجة بعد ذلك في وسمي h3 كلّ في سطر. @app.route("/first_last") def first_last(): first_name = request.args.get('first_name').capitalize() last_name = request.args.get('last_name').upper() return "<h3>First Name: {} <br>Last Name: {}</h3>".format(first_name, last_name) يُمكنك تصفّح شيفرة هذا الدّرس وتنزيلها من موقع Github عبر هذا الرّابط تشغيل مصحح الأخطاء Debugger يأتي Flask بمُصحّح أخطاء يعرض مصدر الخطأ مُباشرة على المُتصفّح، ويُنصح باستعماله ليسهل عليك تحديد مصدر الخطأ لإصلاحه. يُمكن تشغيل مُصحّح الأخطاء عبر إضافة مُعامل debug بقيمة True إلى التّابع run. if __name__ == "__main__": app.run(debug=True) وهذه صورة لمُصحّح الخطأ بعد وقوع خطأ في تطبيق Flask. وقع الخطأ لأنّ القيمة الافتراضيّة لمُعامل مُعيّن عند عدم تحديد قيمة له هي None ما يعني بأنّك لا تستطيع تنفيذ التّابع upper الخاص بالسّلاسل النّصية. يُمكنك مُشاهدة هذا الخطأ بالذهاب إلى العنوان http://127.0.0.1:5000/first_last?first_name=abdelhadi لاحظ الجملة الأولى 'AttributeError: 'NoneType' object has no attribute 'upper هذا الخطأ وقع بعد تنفيذ التّابع upper على القيمة None وهذا لأنّنا لم نُوفّر قيمة للمُعامل last_name. خاتمة تعرّفنا إلى الآن على أساسيات التّعامل مع المُوجّهات، وكيفيّة تقديم صفحات HTML للمُتصفّح أو الزّائر، وسنتعرّف في الدّرس القادم بإذن الله على كيفيّة استعمال مُحرّك القوالب Jinja2 لتقديم ملفّات HTML مُستقلّة وكيفيّة استعمال بعض الأساليب البرمجيّة فيه.1 نقطة
-
تعني كلمة Front-end أو الواجهة الأماميّة في مجال تطوير الويب مجموع العمليات التي تتم في جهة المُتصفح، إذ تتم العمليات في تطبيقات الويب على مرحلتين، مرحلة الخادوم التي تقوم بالتعامل مع قواعد البيانات بلغات برمجة مثل بايثون وروبي وphp وغيرها، والمرحلة الأخرى هي مرحلة تقديم البيانات بقالب جميل بلغات يفهمها المُتصفح مثل لغتي Html و CSS ولغة البرمجة Javascript ومُختلف المكتبات الخاصة بهذه اللغة مثل Jquery و Ajax وغيرها. ومُطوّر الواجهة الأمامية هو الشّخص الذي يستخدم هذه اللغات والتّقنيات للتحسين من تجربة المُستخدم.1 نقطة
-
ابدأ الآن.. هذه هي النصيحة التي يمكن أن تسمعها من أي رائد أعمال مخضرم، لو طلبت رأيه حول الوقت المناسب لبدء عملك التجاري الخاص. فكثيرون منا، يستغرقون الكثير من الوقت في التفكير والتخطيط، والكثير من الوقت في القراءة عن إنشاء الأعمال وتطويرها، لكن دون الخوض فعليا في التجربة. متناسين بأن أساس وجوهر ريادة الأعمال هي المبادرة؛ أي الشروع فورا في تأسيس الأعمال، وليس القراءة عن تأسيس الأعمال. هذه هي الفكرة التي ينبني عليها كتاب ”فن البدء“، الذي يأخذ على عاتقه مهمة توجيه رائد الأعمال الشاب لتسخير معارفه وشغفه لبدء مشروعه الخاص، دون الضياع بين الأسطر المملة لكتب تأسيس وإدارة الأعمال. تزخر المكتبات بمئات الكتب حول ريادة الأعمال، لكنها سرعان ما تتقادم بسبب الثورات المستمرة التي تحدث في المجال والأساليب الجديدة التي تظهر كل يوم لتنسخ ما سبقها مقدمة حلولا أفضل لمشاكل تأسيس وإدارة الأعمال. إلا أن كتاب جاي كاواساكي ”فن البدء – الدليل المثبت بالزمن والمحسن بالتجربة لأي شخص يريد أن يبدأ أي شيء“ يبقى كتابا كلاسيكيا لا بد أن يمر عليه أي رائد أعمال قبل الانتقال إلى الكتب الثورية الجديدة. فهو دليل مبسط مباشر يسعى لتحفيز رواد الأعمال على البدء فورا، من خلال أحد عشر فصلا، تفصل المعارف الأساسية لقيادة العمل التجاري الناشئ نحو النجاح الكاسح. أرى أن الفصل الأول هو أهم فصول الكتاب، ومهما تقادم محتوى الكتاب فإن هذا الفصل سيبقى صامدا في وجه الزمن، لأنه يؤطر للأساس الذي تقوم عليه ريادة الأعمال، ويحدد المهام الخمس التي يجب على رائد الأعمال إنجازها، وإلا فلن تكون لمغامرته في مجال الأعمال سوى نهاية واحدة: الفشل. أول ما على رائد الأعمال فعله هو بناء المعنى. إعطاء معنى لما ينوي القيام به. أي ما الهدف الذي يريد تحقيقه. المقصود بالمعنى هنا ليس المال ولا الشهرة ولا حتى الاستمتاع بالعمل. تلك غايات وليست معان. المعنى يجب أن يكون شيئا نبيلا غير شخصي، يمثل النهاية المشرقة في نهاية النفق المظلم، ويكون الحافز الذي سيتيح للمبادر النهوض بعد كل سقطة يسقطها. المعنى قد يكون جعل العالم مكانا أفضل للعيش، تحسين مستوى عيش الإنسان، تحقيق إنجاز للأمة، إلخ. المهمة الثانية التي يحددها جاي كاواساكي لرواد الأعمال هي تحديد الرؤية. ليس المقصود هنا تلك الصيغ الطويلة المملة التي كانت تعتمدها الشركات منذ زمن، مثل ”مهتمنا هي توفير منتج رائع رخيص... مع الحفاظ على بلا بلا بلا و... بلا بلا بلا“. كلا، على المبادر أن يجد المعنى أولا، ومنه يستخلص الرؤية، التي يجب أن تكون مختصرة، تدل على رسالة الشركة وتجعل خطى المبادر وخطى فريقه راسخة موجهة مباشرة نحو الهدف. الخطوة الثالثة هي البدء. على المبادر أن يفكر بالأدوات التي يحتاج إليها ويوفرها ليبدأ في الإنتاج، لا أن يركز على البحث والتخطيط. الشيء الآخر، من الأشياء المهمة التي يجب أن يفكر فيها رائد الأعمال، هي تحديد النموذج الربحي. أي أساليب تحقيق الدخل المالي والربح المادي. هذا هو أساس العمل التجاري، وأي مشاريع مهما تكن عظيمة فإن مصيرها الفشل إن لم تكن ثمة طريقة لتحقيق الدخل من ورائها. لذلك على المبادر أن يحذر، ليست أي فكرة تخطر بباله ويقدر على تنفيذها يجب أن ينفذها. إن لم تكن ثمة استراتيجية واضحة لتحقيق المال فإنه يلهو فحسب، قد ينجح في تحقيق الدخل المالي وقد لا ينجح. فالأمر سيكون متروكا آنذاك للحظ. الخطوة الأخيرة هي تحديد الأهداف، التقديرات والمهام. الأهداف هي أهم العتبات التي يريد المبادر بلوغها، أو المراحل التي يجب قطعها. التقديرات تشمل الأرقام التي تحدد نجاح المبادر، مثل عدد العملاء ونسبة النمو. أما المهام فهي ما يجب على المبادر إنجازه لبناء العمل التجاري، مثل توفير رأس المال، توظيف الموظفين، تحديد مقر العمل، إلخ. الفصول الأخرى للكتاب مهمة أيضا، وهي تتطرق لمسائل مثل، فن تقديم المشروع للمستثمرين، الصحفيين والشركاء. فن التسويق وبناء العلامة التجارية. فن التمويل الذاتي وفن إيجاد الاستثمارات الخارجية. الكتاب إجمالا يستحق القراءة للمبادرين المبتدئين، والفصل الأول لوحده يستحق أن يشترى الكتاب لأجله.1 نقطة