لوحة المتصدرين
المحتوى الأكثر حصولًا على سمعة جيدة
المحتوى الأعلى تقييمًا في 08/27/24 في كل الموقع
-
2 نقاط
-
2 نقاط
-
كيف اقوم بعمل input جنب مع in python لان ال input() تقوم بادخال البيانات تحت بعض num1 = int(input()) operation = input() num2 = int(input()) اريد وانا علي ال Terminal اقوم بالادخال بالشكل ده 5 + 10 وليس بالشكل ده 10 + 5 ارجو المساعده وشكراا...2 نقاط
-
السلام عليكم لغة البرمجة php - Laravel اخواني انا سويت مشروع نموذج يتعبأ وفي زر حفظ ابيه لما يضغط الزر يوجه المدخلات الى قاعدة البيانات كيف افعل زر اذا تم الضغط عليه يرسل المدخلات الى قاعدة البيانات واذا في امر احطه في ملف web.php ياليت تساعدوني فيه كود الصفحة <div class="formbold-main-wrapper"> <!-- Author: FormBold Team --> <!-- Learn More: https://formbold.com --> <div class="formbold-form-wrapper"> <img src="ght.png"> <form action="layouts.form" method="POST"> <div class="formbold-input-flex"> <div> <label for="firstname" class="formbold-form-label"> First Name </label> <input type="text" name="firstname" id="firstname" placeholder="Your first name" class="formbold-form-input" /> </div> <div> <label for="lastname" class="formbold-form-label"> Last Name </label> <input type="text" name="lastname" id="lastname" placeholder="Your last name" class="formbold-form-input" /> </div> </div> <div> <label for="email" class="formbold-form-label"> Email </label> <input type="email" name="email" id="email" placeholder="example@email.com" class="formbold-form-input" /> </div> <div class="formbold-mb-3 formbold-input-wrapp"> <label for="phone" class="formbold-form-label"> Phone </label> <div> <input type="text" name="areacode" id="areacode" placeholder="Area code" class="formbold-form-input formbold-w-45" /> <input type="text" name="phone" id="phone" placeholder="Phone number" class="formbold-form-input" /> </div> </div> <div> <label class="formbold-form-label">Category</label> <select class="formbold-form-input" name="category" id="category"> <option value="nurse">Nurse</option> <option value="physician">Physician</option> <option value="services">Allied healthcare services</option> <option value="admin">Admin</option> </select> </div> <br> <div id="wrapper"> <label for="yes_no_radio formbold-form-label">Are licensed to practice in one or more of these countries (Saudi Arabia, UAE, Oman, Kuwait, Bahrain, Qatar)</label> <p> <br> <input type="radio" name="yes_no" checked>Yes </input> </p> <br> <p> <input type="radio" name="yes_no">No </input> </p> </div> <br> <div class="formbold-form-file-flex"> <label for="upload" class="formbold-form-label"> Upload Resume </label> <input type="file" name="upload" id="upload" class="formbold-form-file" /> </div> <button class="formbold-btn">Apply Now</button> </form> </div> </div> <style>1 نقطة
-
could you explain how the certification work and how it effect my career?1 نقطة
-
أهلا لكل شخص يرا مشكلتي اتمنى رد بأسرع وقت وشكرا انا استخدم محرك جودوت 4.3 على الهاتف وتواجهني مشكلة مقياس المشهد عندما اقوم بعمل خريطة العبه وشخصيه يكون كل شيء جيد عندما اقوم بالإختبار وأقوم بتشغيل المشهد تصبح الخريطة وشخصية صغير ويكون هنالك حواف فارغه لقد حاولت ايجاد الحل ولكن لم اجد اي حل المشكله (اذا كنت تريد مزيد من تفاصيل مشكلتي يمكنني الإخبار بالمزيد وشكرا لأي شخص يقوم بمساعدتي^✓^)1 نقطة
-
المشكلة بسبب الطريقة التي يتعامل بها نظام أندرويد مع ملفات الموارد في الإصدار 21 (SDK 21) والإصدارات الأحدث. ففي الإصدار 21، قدم نظام أندرويد نظامًا جديدًا للموارد يُسمى Vector Drawables يسمح بتخزين وتحميل الموارد بكفاءة أكبر، وأدخل التغيير أيضًا بعض مشكلات التوافق مع واجهات برمجة التطبيقات القديمة، بما في ذلك فئة SoundPool. فرسالة الخطأ File res/raw/click.wav from drawable resource ID #0x7f080000 تعني أن النظام يحاول تحميل ملف click.wav كمورد قابل للرسم drawable resource بدلاً من مورد خام raw resource، وذلك لأن معرّف مورد R.raw.click يتم تفسيره على أنه معرّف مورد قابل للرسم، وهو ليس ما نريده. عليك استخدام ميثود getResources().openRawResourceFd() بدلاً من soundPool.load(this, R.raw.click, 1)، ويعود الميثود بكائن FileDescriptor يمكن استخدامه لتحميل ملف المورد الخام. soundClick = soundPool.load(getResources().openRawResourceFd(R.raw.click), 1); واستخدام فئة AssetFileDescriptor لتحميل ملف المورد الخام، حيث توفر تحميل الملفات من دليل الأصول assets directory: AssetFileDescriptor afd = getResources().openRawResourceFd(R.raw.click); soundClick = soundPool.load(afd.getFileDescriptor(), 0, afd.getLength(), 1); ووضع ملف click.wav في assets directory بدلاً من دليل res/raw، للسماح بتحميل الملف باستخدام فئة AssetManager. AssetManager assetManager = getAssets(); soundClick = soundPool.load(assetManager.openFd("click.wav"), 0);1 نقطة
-
كيفكم يا أصدقاء... لماذا لم يتم الإجابة على الأسئلة الذي نطرحها هون؟ هل فيه مشكله او بذر شيء مننا ليتم تجاهلنا هيك1 نقطة
-
1 نقطة
-
توجد طرق عديدة لعمل ذلك، لكن الأبسط والأسهل هي عن طريق استخدام دالة input() بالشكل الذي يسمح لك بإدخال البيانات جنبا إلى جنب في سطر واحد ثم يمكنك القيام بذلك عن طريق قراءة السطر ذاته كاملا ثم تقسيمه إلى أجزاء ففرضا عندما يدخل المستخدم البيانات بهذا الشكل 5 + 10، سيتم تقسيم المدخلات إلى ثلاثة أجزاء: 5 و + و 10، ومن ثم يتم تحويل الأرقام إلى أعداد صحيحة على هذا النحو: # اطلب من المستخدم إدخال البيانات على سطر واحد user_input = input("أدخل العملية (مثال: 5 + 10): ") # قسم المدخلات بناءً على الفراغات num1, operation, num2 = user_input.split() # تحويل الأرقام من نصوص إلى أعداد صحيحة num1 = int(num1) num2 = int(num2) # يمكنك الآن استخدام num1 و operation و num2 كما تريد print(f"العملية: {num1} {operation} {num2}")1 نقطة
-
يمكنك القيام بهذا الأمر بإستخدام الدالة split حيث تقوم بقراءة السطر بأكمله ثم تقسيم السلسلة النصية الناتجة إلى الأجزاء المطلوبة و تكون بهذا الشكل: # أدخل القيم بالشكل 5 + 10 input_string = input("Enter the operation (e.g., 5 + 10): ") # تقسيم السلسلة النصية إلى ثلاثة أجزاء: الرقم الأول، العملية، والرقم الثاني num1, operation, num2 = input_string.split() # تحويل الأرقام إلى نوع int num1 = int(num1) num2 = int(num2) # الآن يمكن استخدام num1 و num2 و operation في العمليات print(f"Number 1: {num1}") print(f"Operation: {operation}") print(f"Number 2: {num2}") بهذه الطريقة سيتم تقسيم الإدخال إلى الأجزاء المطلوبة بحيث يكون num1 هو 5، و operation هو +، و num2 هو 10.1 نقطة
-
مرحبا عمر، يتمّ الإجابة على الأسئلة في هذا القسم بشكل عادي، فالأسئلة التي تتعلّق بأسئلة الدورات يتمّ توجيه أصحابها وتنبيههم لضرورة طرحها في صندوق التعليقات الخاص بكلّ درس، ويتمّ الإجابة عن أسئلتهم بكل رحابة صدر. في حين الأسئلة العامة فيتمّ الإجابة عنها هنا وفقا لتوفّر المدرّبين فلو لاحظت أنّ سؤالك لم يتمّ الإجابة عنه فهذا قد يكون بسبب ضغط لدى المدرّبين وسيقومون بالإجابة عنه في أقرب وقت ممكن، لذلك لا تقلق ولا تخف فالأمر ليس شخصيا ولا يستدعي ذلك. لكن بعض الأسئلة قد لا تتوفّر على شروط معينة لذا ينبغي دائما مراجعة الأسئلة قبل نشرها، فربّما هو سؤال مكرّر أو تمّت الإجابة عنه سابقا من قبل أحد المدربين وهذه المقالة شاملة لهذا الأمر: https://support.academy.hsoub.com/questions-and-answers1 نقطة
-
سنتعرف في هذه السلسلة من المقالات على منصة Hugging Face وهي منصة تفاعلية سهلة الاستخدام للمهتمين بإنشاء تطبيقات الذكاء الاصطناعي وتعلم الآلة، فهي توفر أكثر من 400 ألف نموذج جاهز للاستخدام وتوفر مجموعات بيانات مخصصة لتدريب نماذج جديدة، كما أنها تتيح لك التواصل مع مجتمع ضخم مع المهتمين بتعلم الآلة من جميع أنحاء العالم ومشاركة تجاربك معهم. سنبدأ السلسلة بالتعرف على أداة برمجية فعالة تعمل على هذه المنصة وهي المكتبة Transformers التي تسهل استخدام نماذج تعلم الآلة الحديثة وتمكنك من أداء عدة مهام متعلقة بالذكاء الاصطناعي، ونتعرف على النماذج المتنوعة التي توفرها هذه المكتبة للتعامل مع النصوص والصور والصوت والوسائط المتعددة كما نستعرض مختلف إطارات العمل البرمجية التي تدعمها وأهم تطبيقاتها. ما هي المكتبة Transformers مكتبة المحوّلات Transformers هي أحدث تقنيات تعلُّم الآلة المستخدمة مع أطر عمل الذكاء الاصطناعي الشهيرة مثل باي تورش PyTorch وتنسرفلو TensorFlow و JAX، وهي تزود المبرمجين بواجهات برمجة تطبيقات APIs وأدوات مساعدة تُسهّل عليهم تحميل أحدث نماذج تعلم الآلة المدربة مسبقًا pretrained models وإعادة تدريبها. وتوفر هذه النماذج المدربة مسبقًا وقتك وجهدك فلن تحتاج لجمع البيانات، وتنظيفها، وتحضيرها، ولا لتشغيل عمليات التدريب والتحسين بل يمكنك استخدام النموذج مباشرة في تطبيقك، كما توفر أيضًا الموارد وعمليات الحوسبة وحتى استهلاك الطاقة الذي تحتاجه لتدريب نماذج جديدة من الصفر، وتخدمك في العديد من مجالات الذكاء الاصطناعي وإليك أهما: مجال معالجة اللغة الطبيعية Natural Language Processing: ومن أهم تطبيقاته تصنيف النصوص text classification، والتعرّف على الكائنات المسماة named entity recognition، والإجابة على الأسئلة question answering، والاختيار من متعدد multiple choice، ونمذجة اللغة language modeling، والتلخيص summarization، والترجمة translation، وتوليد النص text generation. مجال الرؤية الحاسوبية Computer Vision: تستخدم الرؤية الحاسوبية في مشاريع عديدة مثل: تصنيف الصور image classification، والتعرّف على الكائنات object detection، وتجزئة الصور segmentation بناءً على خصائص محددة وغير ذلك. مجال الصوتيات Audio: ومن أهم تطبيقاته التعرّف التلقائي على الكلام automatic speech recognition، وتصنيف المقاطع الصوتية audio classification. مجال الأنماط المتعددة Multimodal: يقصد به التعامل مع أنواع متعددة من المُدخَلات ومن أمثلتها الإجابة على الأسئلة الموجودة ضمن جدول معين table question answering، والتعرّف البصري على الحروف optical character recognition، واستخراج المعلومات من المستندات الممسوحة ضوئيًا، وتصنيف مقاطع الفيديو video classification، والإجابة على الأسئلة مرئيًا visual question answering أي الإجابة على أسئلة حول الصور. وتدعم مكتبة المحولات التشغيل البيني framework interoperability لأطر العمل الثلاثة PyTorch و TensorFlow و JAX أي أن بإمكانك جمعها في مشروع واحد بمرونة تامة، فهي تتيح لك استخدام إطار عمل مختلف في كل مرحلة من مراحل بناء النموذج؛ تستطيع مثلًا تدريب النموذج بإطار عمل معين، ثم استخدام إطار آخر في مرحلة الاستدلال inference وهكذا، يمكنك أيضًا تصدير نماذج الآلي بصيغ مثل: ONNX و TorchScript لنشرها في بيئات الإنتاج. النماذج التي يدعمها كل إطار عمل يبين الجدول التالي نماذج المكتبة التي يدعمها كل إطار عمل من الأطر التالية PyTorch و TensorFlow و JAX حتى تاريخ ترجمة هذا المقال، سواء كانت مميزة بمُرمِز tokenizer بايثون بطيء"slow" أو سريع "fast". النموذج توافقيته مع PyTorch؟ توافقيته مع TensorFlow؟ توافقيته مع JAX؟ ALBERT نعم نعم نعم ALIGN نعم لا لا AltCLIP نعم لا لا Audio Spectrogram Transformer نعم لا لا Autoformer نعم لا لا Bark نعم لا لا BART نعم نعم نعم BARThez نعم نعم نعم BARTpho نعم نعم نعم BEiT نعم لا نعم BERT نعم نعم نعم Bert Generation نعم لا لا BertJapanese نعم نعم نعم BERTweet نعم نعم نعم BigBird نعم لا نعم BigBird-Pegasus نعم لا لا BioGpt نعم لا لا BiT نعم لا لا Blenderbot نعم نعم نعم BlenderbotSmall نعم نعم نعم BLIP نعم نعم لا BLIP-2 نعم لا لا BLOOM نعم لا نعم BORT نعم نعم نعم BridgeTower نعم لا لا BROS نعم لا لا ByT5 نعم نعم نعم CamemBERT نعم نعم لا CANINE نعم لا لا Chinese-CLIP نعم لا لا CLAP نعم لا لا CLIP نعم نعم نعم CLIPSeg نعم لا لا CLVP نعم لا لا CodeGen نعم لا لا CodeLlama نعم لا نعم Conditional DETR نعم لا لا ConvBERT نعم نعم لا ConvNeXT نعم نعم لا ConvNeXTV2 نعم نعم لا CPM نعم نعم نعم CPM-Ant نعم لا لا CTRL نعم نعم لا CvT نعم نعم لا Data2VecAudio نعم لا لا Data2VecText نعم لا لا Data2VecVision نعم نعم لا DeBERTa نعم نعم لا DeBERTa-v2 نعم نعم لا Decision Transformer نعم لا لا Deformable DETR نعم لا لا DeiT نعم نعم لا DePlot نعم لا لا Depth Anything نعم لا لا DETA نعم لا لا DETR نعم لا لا DialoGPT نعم نعم نعم DiNAT نعم لا لا DINOv2 نعم لا لا DistilBERT نعم نعم نعم DiT نعم لا نعم DonutSwin نعم لا لا DPR نعم نعم لا DPT نعم لا لا EfficientFormer نعم نعم لا EfficientNet نعم لا لا ELECTRA نعم نعم نعم EnCodec نعم لا لا Encoder decoder نعم نعم نعم ERNIE نعم لا لا ErnieM نعم لا لا ESM نعم نعم لا FairSeq Machine-Translation نعم لا لا Falcon نعم لا لا FastSpeech2Conformer نعم لا لا FLAN-T5 نعم نعم نعم FLAN-UL2 نعم نعم نعم FlauBERT نعم نعم لا FLAVA نعم لا لا FNet نعم لا لا FocalNet نعم لا لا Funnel Transformer نعم نعم لا Fuyu نعم لا لا Gemma نعم لا نعم GIT نعم لا لا GLPN نعم لا لا GPT Neo نعم لا نعم GPT NeoX نعم لا لا GPT NeoX Japanese نعم لا لا GPT-J نعم نعم نعم GPT-Sw3 نعم نعم نعم GPTBigCode نعم لا لا GPTSAN-japanese نعم لا لا Graphormer نعم لا لا GroupViT نعم نعم لا HerBERT نعم نعم نعم Hubert نعم نعم لا I-BERT نعم لا لا IDEFICS نعم لا لا ImageGPT نعم لا لا Informer نعم لا لا InstructBLIP نعم لا لا Jukebox نعم لا لا KOSMOS-2 نعم لا لا LayoutLM نعم نعم لا LayoutLMv2 نعم لا لا LayoutLMv3 نعم نعم لا LayoutXLM نعم لا لا LED نعم نعم لا LeViT نعم لا لا LiLT نعم لا لا LLaMA نعم لا نعم Llama2 نعم لا نعم LLaVa نعم لا لا Longformer نعم نعم لا LongT5 نعم لا نعم LUKE نعم لا لا LXMERT نعم نعم لا M-CTC-T نعم لا لا M2M100 نعم لا لا MADLAD-400 نعم نعم نعم Marian نعم نعم نعم MarkupLM نعم لا لا Mask2Former نعم لا لا MaskFormer نعم لا لا MatCha نعم لا لا mBART نعم نعم نعم mBART-50 نعم نعم نعم MEGA نعم لا لا Megatron-BERT نعم لا لا Megatron-GPT2 نعم نعم نعم MGP-STR نعم لا لا Mistral نعم لا نعم Mixtral نعم لا لا mLUKE نعم لا لا MMS نعم نعم نعم MobileBERT نعم نعم لا MobileNetV1 نعم لا لا MobileNetV2 نعم لا لا MobileViT نعم نعم لا MobileViTV2 نعم لا لا MPNet نعم نعم لا MPT نعم لا لا MRA نعم لا لا MT5 نعم نعم نعم MusicGen نعم لا لا MVP نعم لا لا NAT نعم لا لا Nezha نعم لا لا NLLB نعم لا لا NLLB-MOE نعم لا لا Nougat نعم نعم نعم Nyströmformer نعم لا لا OneFormer نعم لا لا OpenAI GPT نعم نعم لا OpenAI GPT-2 نعم نعم نعم OpenLlama نعم نعم لا OPT نعم نعم نعم OWL-ViT نعم لا لا OWLv2 نعم لا لا PatchTSMixer نعم لا لا PatchTST نعم لا لا Pegasus نعم نعم نعم PEGASUS-X نعم لا لا Perceiver نعم لا لا Persimmon نعم لا لا Phi نعم لا لا PhoBERT نعم نعم نعم Pix2Struct نعم لا لا PLBart نعم لا لا PoolFormer نعم لا لا Pop2Piano نعم لا لا ProphetNet نعم لا لا PVT نعم لا لا QDQBert نعم لا لا Qwen2 نعم لا لا RAG نعم نعم لا REALM نعم لا لا Reformer نعم لا لا RegNet نعم نعم نعم RemBERT نعم نعم لا ResNet نعم نعم نعم RetriBERT نعم لا لا RoBERTa نعم نعم نعم RoBERTa-PreLayerNorm نعم نعم نعم RoCBert نعم لا لا RoFormer نعم نعم نعم RWKV نعم لا لا SAM نعم نعم لا SeamlessM4T نعم لا لا SeamlessM4Tv2 نعم لا لا SegFormer نعم نعم لا SEW نعم لا لا SEW-D نعم لا لا SigLIP نعم لا لا Speech Encoder decoder نعم لا نعم Speech2Text نعم نعم لا SpeechT5 نعم لا لا Splinter نعم لا لا SqueezeBERT نعم لا لا StableLm نعم لا لا SwiftFormer نعم لا لا Swin Transformer نعم نعم لا Swin Transformer V2 نعم لا لا Swin2SR نعم لا لا SwitchTransformers نعم لا لا T5 نعم نعم نعم T5v1.1 نعم نعم نعم Table Transformer نعم لا لا TAPAS نعم نعم لا TAPEX نعم نعم نعم Time Series Transformer نعم لا لا TimeSformer نعم لا لا Trajectory Transformer نعم لا لا Transformer-XL نعم نعم لا TrOCR نعم لا لا TVLT نعم لا لا TVP نعم لا لا UL2 نعم نعم نعم UMT5 نعم لا لا UniSpeech نعم لا لا UniSpeechSat نعم لا لا UnivNet نعم لا لا UPerNet نعم لا لا VAN نعم لا لا VideoMAE نعم لا لا ViLT نعم لا لا VipLlava نعم لا لا Vision Encoder decoder نعم نعم نعم VisionTextDualEncoder نعم نعم نعم VisualBERT نعم لا لا ViT نعم نعم نعم ViT Hybrid نعم لا لا VitDet نعم لا لا ViTMAE نعم نعم لا ViTMatte نعم لا لا ViTMSN نعم لا لا VITS نعم لا لا ViViT نعم لا لا Wav2Vec2 نعم نعم نعم Wav2Vec2-BERT نعم لا لا Wav2Vec2-Conformer نعم لا لا Wav2Vec2Phoneme نعم نعم نعم WavLM نعم لا لا Whisper نعم نعم نعم X-CLIP نعم لا لا X-MOD نعم لا لا XGLM نعم نعم نعم XLM نعم نعم لا XLM-ProphetNet نعم لا لا XLM-RoBERTa نعم نعم نعم XLM-RoBERTa-XL نعم لا لا XLM-V نعم نعم نعم XLNet نعم نعم لا XLS-R نعم نعم نعم XLSR-Wav2Vec2 نعم نعم نعم YOLOS نعم لا لا YOSO نعم لا لا الخلاصة تعرفنا في مقال اليوم على منصة Hugging Face التفاعلية التي تقدم نماذج مدربة جاهزة ومجموعات بيانات للتدريب تسرع عملية تطوير تطبيقات الذكاء الاصطناعي وتعلم الآلة وتعرفنا على المجالات المختلفة التي يمكن تطبيق الذكاء الاصطناعي فيها باستخدام هذه المكتبة كما استعرضنا أطر العمل المختلفة التي توفرها لبناء النماذج. ترجمة -وبتصرف- لقسم Transformers من توثيقات Hugging Face. اقرأ أيضًا مكتبات وأطر عمل الذكاء الاصطناعي: القوة الكامنة خلف الأنظمة الذكية تلخيص النصوص باستخدام الذكاء الاصطناعي أسئلة شائعة حول الذكاء الاصطناعي استخدام النماذج التوليديّة Generative models لتوليد الصور1 نقطة
-
مصطلح إطار العمل أو الفريم وورك Framework يعد أحد المصطلحات الفنية والبرمجية التي تربك المبتدئين على وجه الخصوص في بداية مشوار تعلم البرمجة والتي لا يستطيع فهم دلالتها ولا إدراك مدى أهميتها بشكل جيد. وكثيرًا ما يتساءل المبرمج المبتدئ عن معنى إطار العمل Framework وعن مزايا ومحدويات استخدام أطر العمل Frameworks في عمله البرمجي وعملية البرمجة عمومًا، وهل يتوجب عليه تعلم إطار عمل للغة برمجة محددة، أم أن تعلمه للغة البرمجة نفسها يكفيه في سوق العمل، وهل تعلم إطار العمل صعب ويستغرق وقتًا، ومالفرق بين إطار العمل والمكتبة، وغيرها من الأسئلة من هذا القبيل. فإذا كنت مهتمًا بعرفة الإجابة على كل هذه التساؤلات فتابع قراءة هذا المقال للنهاية. ما هو إطار العمل Framework؟ إطار العمل Framework في البرمجة هو ببساطة آلية يتم من خلالها إعداد وتجهيز كافة الوظائف الضرورية والشائعة التي تستخدم بكثرة عند تطوير التطبيقات والأنظمة وإتاحتها للمبرمج ليستخدمها ويستفيد منها في عمله دون أن يحتاج لإعادة كتابة هذه الوظائف بنفسه من الصفر وبهذا نستنتج أن استخدام إطار العمل يختصر الكثير من الوقت ويجعل العمل البرمجي أكثر كفاءة. لتفهم الأمر بصورة أفضل تخيل أنك تحتاج لكتابة سيرتك الذاتية، سيكون أمامك خياران إما أن تفتح مستندًا فارغًا وتبدأ بكتابة كل شيء وتنسيقه بنفسك من الصفر، أو تعتمد على قالب جاهز للسيرة الذاتية يكون مقسمًا ومنسقًا وكل ما عليك هو ملء البيانات الضرورية الخاصة بك فقط دون أن تشغل بالك بالكثير من التفاصيل الأخرى سيكون الخيار الثاني أفضل وأسرع بالتأكيد. يساعدك إطار العمل في مشروعك البرمجي بطريقة مشابهة فهو يعمل كقالب أو هيكل أساسي عليك الالتزام به لإنشاء التطبيقات الخاصة بك، ويوفر لك مجموعة من الأدوات أو المكونات أو الحلول البرمجية الجاهزة لبناء تطبيقات مخصصة بطريقة آمنة وسريعة ومنظمة. ستجد الكثير من أطر عمل لكل لغات البرمجة الشائعة مثل جافاسكريبت وبايثون و PHP وجافا، ومن أجل استخدام أي إطار منها عليك بداية تعلم كيفية تطوير المشاريع في كل إطار منها والاستفادة من التسهيلات الكثيرة التي توفرها لك هذه الأطر. ما الفرق بين إطار العمل والمكتبة؟ كثيرًا ما يتم الخلط بين مفهوم إطار العمل Framework ومفهوم مشابه له في البرمجة وهو المكتبة Library ورغم التشابه بينهما في طريقة العمل واستخدامهما بالتبادل في بعض الأحيان، إلا أن مفهوم المكتبة أبسط وأكثر محدودية فالمكتبة تركز على توفير وظيفة محددة في حين يوفر إطار العمل مجموعة متكاملة من الميزات التي تمكنك من برمجة تطبيقات في مجال محدد. تُعرَّف المكتبة بأنها عبارة عن مجموعة من التعليمات البرمجية المختبرة القابلة لإعادة الاستخدام والتي تنفذ وظيفة معينة وتحل مشكلة محددة، في حين ينفذ إطار العمل حزمة وظائف متكاملة أو يوفر مخططًا عامًا لبناء التطبيقات في حين لا توفر المكتبات هذه الميزة كما تحدد أطر العمل قواعد وإرشادات كتابة التعليمات البرمجية الخاصة بك وتنظم الملفات والمجلدات الخاصة بمشاريعك، ويمكن أن تتضمن مجموعة من المكتبات وتستخدمها لتنفذ مهام معينة. على سبيل المثال من بين المكتبات الشائعة نذكر مكتبة ريآكت React وهي مكتبة برمجية مبنية بلغة جافاسكربت ومتخصصة في بناء واجهات المستخدم ومكتبة jQuery التي تختصر العديد من الأكواد والتعليمات البرمجية المكررة في جافا سكريبت لتسهيل عملية البرمجة، ومن بين أطر العمل الشائعة نذكر أنجولار Angular وفيو Vue.js وهما إطارا عمل بلغة جافا سكريبت مختصان في تصميم واجهات مواقع الويب. ما الفرق بين إطار العمل ولغة البرمجة؟ يمكن للمطور أن يستخدم لغة البرمجة ويكتب كافة التعليمات البرمجية اللازمة لبناء التطبيقات من الصفر كما يمكنه إن شاء الاستعانة بإطار عمل Framework مخصص لتطوير برامجه وتطبيقاته. ورغم أن استخدام إطار العمل يفيد المطورين ويسرع وتيرة عملهم، إلا أنه يحد من حريتهم في كتابة التعليمات البرمجية ويقيد إمكانيات التطوير ويمكنهم من بناء تطبيقات لأغراض محددة فقط، في حين أن استخدام لغة برمجة يمكنهم من تطوير ما يشاؤون من تطبيقات متنوعة، حتى إطار العمل نفسه تم بناؤه في النهاية بإحدى لغات البرمجة. باختصار لغة البرمجة هي الأساس ومن خلال تعلمها يمكنك بناء ما تشاء من تطبيقات، أما إطار العمل فهو مصمم لنوع محدد من التطبيقات مثل تطبيقات الويب أو تطبيقات الجوال أو تطبيقات علم البيانات أو الذكاء الاصطناعي وإنترنت الأشياء …إلخ ويفضل أن تتعلم استخدامه بعد أن تتعلم البرمجة وتتمكن من أساسياتها. أهمية إطار العمل في البرمجة تبرز أهمية إطار العمل framework بشكل أساسي في كونه يتيح لك إعادة استخدام التعليمات البرمجية بدلًا من إعادة كتابتها من جديد، وفيما يلي جملة من الفوائد التي يمكن أن يوفرها استخدام إطار العمل: يساعد على توفير كود أكثر أمانًا لكونه يتضمن شيفرات تتحقق من المصادقات والصلاحيات وتحمي تطبيقك من الاختراق وتعالج الكثير من الثغرات الأمنية الشائعة مثل CSRF و XSS و SQL Injection. تركيز الجهود على كتابة التعليمات البرمجية الخاصة بالمشروع فقط بدلًا من برمجة وظائف متكررة وشائعة الاستخدام. توحد أنماط وقواعد كتابة التعليمات البرمجية وتوفر مخططًا عامًّا يمكن لكافة الفرق البرمجية فهمه بسهولة. يساعد في تطوير مشروعك وإضافة ميزات جديدة له بسهولة دون الحاجة للتعديل على الكود الأساسي لإطار العمل. يغني عن إعادة اختراع العجلة ويوفر لك الوقت والتكلفة اللازمين لتطوير المشاريع والتطبيقات. يساعد في كتابة كود نظيف وغير مكرر. يسهل عملية اختبار الكود وتصحيح الأخطاء البرمجية. يقلل بالعموم من كمية الأخطاء البرمجية لأنك ستكتب كود أقل وبالتالي ستنتج لديك أخطاء برمجية أقل. محدوديات إطار العمل لا شكَّ أن استخدام إطار العمل يفيدك كمطور ويساعدك على تسريع وتحسين العمل البرمجي، إلا أن الاعتماد على أطر العمل وحدها يفرض عليك بعض القيود وإليك أبرزها: يوفر وظائف محددة ويختص في بناء تطبيقات في مجالات معينة فقط. الاعتماد عليها قد يعيق المبرمج من فهم لغات البرمجة بشكل متعمق وواضح. بعض أطر العمل معقدة ويستغرق تعلمها وفهمها بشكل جيد وتطوير التطبيقات باستخدامها الكثير من الوقت. نحتاج إلى اختيار إطار العمل المناسب للتطبيق فاختيار الإطار غير الملائم قد يؤثر سلبًا على أداء تطبيقاتك وتجربة المستخدمين. تصدر لها تحديثات جديدة بشكل دوري، لذا سيتوجب عليك البقاء على اطلاع دائم على كل جديد ومعرفة كل الميزات الجديدة المضافة للإطار والمميزات التي تم الاستغناء عنها في كل إصدار. توقف تحديث إطار العمل أو تغيره ينعكس على سير عملية تطوير التطبيق المبرمج فيه وأمانه مثلما حصل مع إطار العمل AngularJS عندما قررت غوغل التوقف عن تطويره وإطلاق نسخة عنه مختلفة تمامًا. صفات إطار العمل الجيد تتوافر عشرات أطر العمل في المجالات البرمجية المختلفة الأمر الذي يشعرك بالحيرة في تحديد الإطار الأفضل لمشروعك ويجعلك تتساءل كيف أختار إطار العمل المناسب؟ بالعموم يتصف إطار العمل الجيد بثلاث صفات أساسية وهي: التوثيق الجيد توفير الوظائف المطلوبة لعملك الشهرة والدعم المجتمعي لنوضح بمزيد من التفصيل كل صفة من هذه الصفات وأهميتها في اختيار إطار العمل الأفضل. التوثيق الجيد اختر إطار عمل موثقًا بشكل جيدًا كي تتمكن من العودة إليه عندما تحتاج لمعرفة المزيد من المعلومات حول استخدام ميزة معينة أو حل مشكلة تواجهك في استخدامه، فالتوثيق الجيد يوفر عليك الكثير من الوقت والجهد. توفير الوظائف المطلوبة لعملك ضع في اعتبارك أن لكل إطار عمل حدود معينة لذا من الضروري أن تبحث بشكل جيد في ميزات الإطار الذي تريد اعتماده وتتأكد من أنه يلبي متطلبات مشروعك ويحقق لك كافة الوظائف والميزات التي تحتاج لتحقيقها بالشكل الأنسب، وبنفس الوقت لا تختر إطار عمل شديد التعقيد أو مكتظًا بالميزات التي قد لا تحتاجها على الإطلاق! الشهرة والدعم المجتمعي لاشك أن شهرة إطار العمل ووجود مجتمع داعم له يدل على قوته والطلب الكبير عليه في سوق العمل، لذا احرص على استخدام إطار عمل معروف وله قاعدة مستخدمين نشطة ويفضل بعض المبرمجين الاعتماد على أطر عمل حرة ومفتوحة المصدر وغير مقيدة أو مدعومة من شركات معينة لتخوفهم من انعكاس أي طارئ يحصل لها أو تغير في سياستها على إطار العمل. ولذلك السبب ترى البعض يميل إلى استخدام إطار العمل Vue.js الذي انبثق من أروقة المجتمع الحر بدلًا من إطار العمل Angular الذي ولد بين أروقة شركة غوغل مثلًا، ولكن هنالك طرف مقابل يشير إلى تنظيم وقوة وسرعة تطوير أطر العمل التي تقف خلفهم الشركات نظرًا لدعمهم السخي طويل الآجل عادةً خصوصًا إن وقفت شركات تقنية كبيرة خلفهم والحديث يطول في هذه النقطة وهي خارج موضوع المقال فقط أحببت الإشارة إليها نظرًا لأهميتها في أي نقاش يدور حول المفاضلة بينها. أنواع أطر العمل frameworks في البرمجة هناك عدة أنواع من أطر العمل حيث يختص كل إطار بمجال استخدام معين، وفيما بعض أهم أنواع أطر العمل حسب التطبيقات أو الوظائف التي يؤديها: 1. أطر عمل تطوير الويب Web development frameworks تستخدم هذه الأطر في تطوير تطبيقات الويب ومن أشهرها إطار عمل أنجولار Angular وفيو جي إس Vue.js وهي أطر عمل جافا سكريبت شائعة تستخدم لتطوير الواجهات الأمامية للويب، وإطاري عمل إكسبرس Express و NestJS وهي أطر عمل Node.js لتطوير الواجهات الخلفية للويب، وإطاري عمل جانغو Django وفلاسك Flask وهي أطر عمل مفتوحة المصدر مكتوب بلغة بايثون مخصصة لتطوير الواجهات الخلفية للويب، وإطار عمل Ruby on Rails الذي يوفر لك كل ما تحتاجه لإنشاء تطبيق ويب بسهولة وسرعة وأمان وإطار عمل لارافيل Laravel المبني بالاعتماد على لغة PHP. 2. أطر عمل تطوير الجوال Mobile development frameworks من أشهرها في تطوير تطبيقات الجوال نذكر إطار عمل React Native مفتوح المصدر مكتوب بلغة جافا سكريبت طورته فيسبوك لتطوير تطبيقات جوال متوافقة مع كافة الأنظمة الأساسية، وإطار أيونيك Ionic الذي يستخدم تقنيات الويب HTML و CSS وجافا سكريبت من أجل تطوير تطبيقات الجوال وهو يتكامل مع أطر تطوير الواجهات الأمامية مثل Angular و Vue، وإطار عمل فلاتر Flutter وهو إطار عمل مفتوح المصدر للغة دارت Dart من جوجل لتطوير تطبيقات الجوال وهو يدعم أنظمة iOS و Android ويحتوي على عناصر واجهة مستخدم قابلة للتخصيص بالكامل، وإطار عمل أباتشي كوردوفا Apache Cordova الذي يمكنك من تطوير تطبيقات هجينة للهاتف الجوال. 3. أطر عمل علم البيانات Data science frameworks تعرف هذه الأطر كذلك بأطر التعلم الآلي Machine Learning Frameworks وهي تساعد علماء البيانات على إنشاء نماذج تعلم آلي وتصميمها بشكل أسرع وأسهل واستخراج المعلومات المفيدة من مجموعات البيانات بالاستفادة من تقنيات البرمجة والذكاء الاصطناعي والتعلم الآلي. وهناك العديد من أطر عمل علم البيانات ومن ضمنها scikit-Learn و XGBoost و TensorFlow و PyTorch. 4. أطر إدارة المحتوى Content management frameworks تعرف أيضًا باسم نظم إدارة المحتوى Content Management Systems أو اختصارًا CMS هي برمجيات توفر مكونات قابلة لإعادة الاستخدام لإنشاء وإدارة محتوى الويب وعرضه ضمن مدونات أو مواقع إلكترونية أو تطبيقات جوال وهي توفر ميزات أخرى مثل سهولة الاستخدام وتحسين محركات البحث والأمان. ومن أشهر هذه النظم نذكر نظام ووردبريس WordPress الشهير المستخدم في إنشاء ما يقارب من نصف المواقع الإلكتروني ودروبال Drupal الذي يعد نظام مثالي لتطوير المواقع التي تحتوي على الكثير من المحتوى وهو يتطلب معرفة تقنية أكثر من بقية نظم إدارة المحتوى. 5. أطر عمل أتمتة الاختبار Test Automation frameworks يستخدم مطورو البرمجيات أطر عمل الأتمتة من أجل إنشاء حالات اختبار التطبيقات والتأكد من سير عملها بكفاءة وتوفر لهم أدوات وتوصيات للتحقق من جودة البرمجيات واتباع معايير الترميز المناسبة. من أشهر أطر الاختبار نذكر سيلينيوم Selenium وهو إطار مفتوح المصدر لأتمتة اختبار تطبيقات الويب، وCypress المبني بجافا سكريبت والمخصص لاختبار الواجهة الأمامية لتطبيقات الويب، و Playwright للاختبار الشامل لتطبيقات الويب. هل يمكن البدء باستخدام إطار العمل دون تعلم لغة البرمجة؟ لاشك أن إطار العمل يوفر لك كمطور أداة قيمة لتطوير البرامج التطبيقات المختلفة، لكن السؤال الذي يطرح نفسه هل يغني تعلم أطر العمل واستخدامها في بناء التطبيقات العملية عن تعلم لغات البرمجة وفهمها بشكل متعمق؟ في الواقع حتى لو لم تكن ترغب في تطوير التطبيقات بإحدى لغات البرمجة وتميل للاستفادة من ميزات أحد أطر العمل فلا غنى لك عن تعلم لغة البرمجة وفهم أساسياتها إلى جانب إطار العمل فكلما فهمت لغة البرمجة بشكل أفضل سيسهل عليك فهم أطر العمل. كما أن تعلّم البرمجة يوسع أفق عملك ويمكنك من بناء العديد من التطبيقات في مختلف المجالات، أما إطار العمل فهو مصمم كما ذكرنا سابقًا لغرض واحد فقط وبالتالي سيقيدك بنوع محدد من التطبيقات. ويمكن باختصار أن نلخص الإجابة على هذا السؤال بجملة واحدة: يمكنك استخدام أطر العمل، لكن قبل ذلك تعلم أساسيات لغة البرمجة واتقنها ثم استفد من ميزات إطار العمل الخاص بتلك اللغة كما يحلو لك. الخلاصة تعرفنا اليوم على مفهوم إطار العمل Framework ودوره المهم في توفير الوظائف القياسية وتحديد الخطوط العريضة التي تنظم المشاريع البرمجية وتوفر وقت وجهد المطورين والمبرمجين، واكشتفنا أهم الفروقات بين أطر العمل وبين أدوات تطوير البرامج الأخرى مثل المكتبات ولغات البرمجة، وتعلمنا طريقة اختيار أفضل إطار عمل يناسب متطلباتنا وعددنا أهم صفات إطار العمل الجيد، وأخيرًا استعرضنا قائمة بأهم أطر العمل المستخدمة في مجالات مختلفة كتطبيقات الويب وتطبيقات الجوال وغيرها من المجالات. هل تستخدم في عملك أحد أطر العمل التي وردت في سياق المقال أو أطر عمل أخرى؟ ما هو هذا الإطار وفي أي مجال تستخدمه؟ هل هناك أي مشاكل تواجهها في التعامل مع هذا الإطار أم أنك راضٍ عن أدائه. شاركنا تجربتك في التعليقات أسفل المقال. اقرأ أيضًا تعلم أساسيات البرمجة قواعد البرمجة ببساطة للمبتدئين أسهل لغات البرمجة مهندس البرمجيات من هو وما هي مهامه تعرف على تخصص هندسة البرمجيات1 نقطة
-
في هذا المسار من الدورة ستتعلم كيفية إنشاء RESTful API من خلال إطار laravel و تأمين الواجهة البرمجية بإستخدام حزمة Passport بإمكانك إلقاء نظرة على هذه الصورة التوضيحية: يشير REST إلى نقل الحالة التمثيلية بمعنى أنه عندما يتم إستدعاء Rest API يكون الخادم مسؤول عن نقل الحالة التمثيلية للمورد المطلوب إلى العميل. على سبيل المثال عندما يطلب أحد المطوِّرين واجهة برمجة تطبيقات Twitter لجلب كائن مستخدم (مورد) ، ستعيد واجهة برمجة التطبيقات حالة هذا المستخدم واسمه ومتابعيه والمشاركات المنشورة على Twitter. و يمكن أن يكون التمثيل على هيئة JSON او XML و نظرا لأن REST يستخدم بروتوكول HTTP في نقل الحالة التمثيلية للمورد فإنه يسمح بعمليات أسرع. تم تصميم Rest على أساس طلب و إستجابة بمعنى تطلب رابط يعيد بيانات أو معلومات على هيئة JSON أو XML و يجب أن تكون جميع الإتصالات عديمة الحالة بمعنى أن البيانات التي يتم إرجاعها لايتم الإحتفاظ بها من خلال خدمة Rest يعني إذا أردت الحصول على بيانات مرة أخرى ستقوم بالطلب مرة أخرى. لماذا Rest مُهمة و يجب عليك العمل بها لأنها تُسهل عملية التطوير و قابلية النقل حيث يُمكن إستضافة كل من العميل و جزء الخادم في خوادم مُنفصلة. و بفضل هذا الفصل يُمكن أن تحدث عملية التطوير في مُختلف المجالات بشكل مُستقل. لذلك بإنشائك لواجهة برمجية يُمكن لتطبيق ios التخاطب معها و لتطبيق اندرويد كذلك أيضاً يُمكن لواجهة موقع مبنية بأحد أطر عمل ال front end التخاطب معها، كما يُمكن أيضاً لسكربت آخر مبرمج بلغة غير التي تم إنشاء واجهة برمجة التطبيقات بها التخاطب معها فمثلاً يُمكن إنشاء API بلغة go و إستهلاكه من خلال سكربت بايثون و هذا ما يُسمى بتعدد الخدمات أو Microservices. أظن أن ما سبب لك الملل هو عدم رؤيتك لنتائج و التفاعل مع الأمر من خلال المُتصفح لكن تذكر ما الهدف من المسار. و خذ الشيء المهم فستحتاج إليه مُستقبلاً. بالتوفيق.1 نقطة
-
يمثّل كلٌّ من الضّغط والتّصغيرأمرًا تقوم بتنفيذه على الأصول الموجودة في موقعك (مثل ملفات css. وملفات js.). تستطيع من خلال كِلَيهما تقليص حجم الملف وبالتّالي جعلَه أكثر فعاليّةً في عبور الشبكة بين الخواديم والمتصفّحات. بكلمات أخرى، يصبح الأداء أفضل بتقليص حجم أصولك. تمثّل الشبكة نقطةَ اختناقٍ لسرعة الويب. لهذا السّبب، يساعد تخفيض حجم الملف وتقليصه في تفادي تحميل عبء زائد على الشّبكة. لكنّهما - أي الضغط والتصغير - يختلفان عن بعضهما بوضوح. إن كنت لا تعرف هذا بالفعل، فالأمر يستحق الاطّلاع. يقوم التّصغير بأمورٍ مثل حذف الفواصل، وحذف التّعليقات، وحذف الفواصل المنقوطة غير الضّروريّة وتقليل طول الرّموز السّت عشريّة وغيرها من الأمور المشابهة. يبقى الملف شيفرةً صالحةً تمامًا. لن ترغبَ في محاولة قراءتها أو العمل عليها، لكنها لا تخرق أيًّا من القواعد. يستطيع المتصفّح قراءتها واستخدامها كما هو الحال في الملف الأصليّ. يُنشئ التّصغير ملفًا جديدًا تقومُ أنتَ باستخدامه في نهاية المطاف. على سبيل المثال، تستطيع إنشاء ملف style.css لتعمل عليه، ومن ثمّ بإمكانك تصغيره إلى style.min.css. يتحرّى الضّغط جميع المقاطع المكرّرة ويستبدلها بمؤشّرات إلى موضع الورود الأول للمقطع المعنيّ. قدّمت جوليا إيفانز Julia Evans طريقةً رائعة لفهم ما سبق (راجع منشورها والفيديو). إليك الفقرة الأولى من القصيدة: .red { color: red; } Once upon a midnight dreary, while I {pon}dered weak an{d wea}{ry,} Over many{ a }quaint{ and }curious volume of forgotten lore, W{hile I }nodded, n{ear}ly napping, su{dde}n{ly }th{ere} ca{me }a t{apping,} As{ of }so{me o}ne gent{ly }r{apping, }{rapping} at my chamb{er }door. `'Tis{ some }visitor,'{ I }mu{tte}r{ed, }`t{apping at my chamber door} - O{nly th}is,{ and }no{thi}{ng }m{ore}. وَجد gzip أن النّصّ الوارد ضمن أقواس متعرّجة هو نصٌّ مكرّر. لهذا السبب، سيُستبدل بمؤشّر يستهلك مساحةً أقل مما يستهلكه النّصّ نفسه. تظهر فعاليّة هذا الأمر في إنقاص حجم الملف، خاصّةً في حالة الشّيفرة البرمجيّة على اعتبار أنّها تحتوي بطبيعتها على الكثير من المقاطع المكرّرة. تخيّل فقط عدد مرّات ورود <div في ملف HTML أو عدد مرّات ورود { في ملف CSS. يمكنك إنشاء إصدارات مضغوطة من الملفات، على سبيل المثال style.css.zip لكنّك نادرًا ما ستضطّر لذلك ولن يعرف المتصفّح ماذا يفعل بهذه الإصدارات. تتّم عمليّة الضّغط على الويب من قبل الخادم مباشرةً ذلك إذا ما قمت بإعداده للقيام بها. حالما تُطبّق الإعدادات، يحدث الضّغط تلقائيًّا ولا حاجةَ بك للقيام بأي عمل آخر. يضغط الخادم الملف ويرسله عبر الشبكة مضغوطًا. يستقبل المتصفح الملف ويفكّ ضغطه قبل استخدامه. لم أسمع قطُّ أحدًا يذكر أعباء عمليّتَي الضّغط وفكّ الضّغط، لذا سأفترض أنّها مهملةٌ وأنّ فوائدها تفوقُ أعباءها بكثيرٍ. يجري عادةً أتمتة عملية الضغط عبر أدوات البناء مثل Gulp مما يسهل عليك العملية. إليك كيفيّة تفعيل عمليّة الضّغط على خادم Apache من خلال استخدام الوحدة mod_deflate . كما يّقدّم H5BP إعدادات الخواديم لجميع الخواديم الشّائعة التي تدعم الضّغط. مثال سنستخدم ملف CSS من Bootstrap على اعتباره مرجعًا شائعًا. ستُوفّر ما يقارب 17% عند تصغير ملف CSS، أو 85% عند ضغطه أو 86% عند قيامك بكليهما. الوضع المثاليّ عند التأكد من عمل كلِّ شيءٍ كما ينبغي من خلال أدوات المطور (DevTools) موضّح كما يلي: الضّغط أكثر فعاليّة، لكنّ القيام بكليهما هو الأفضل بالمطلق. تُخفّض عمليّة الضّغط حجم الملف أكثر بخمسة أضعاف من عمليّة التّصغير. لكنّك تحصل على دفعة صغيرة إضافيّة عند القيام بالتّصغير أيضًا. هناك أيضًا دليلٌ على أنّ المتصفّحات تقرأ وتحلّل الملف المُصغّر أسرع: شرَعَت مايكروسوفت هي الأخرى بتحسين مُحلّلاتها لهذا الأمر: يندرج التّخزين المؤقّت للأصول في هذا السّياق أيضًا حيث لا يوجد ما هو أسرع من مُتصفّح لا يحتاج إلى طلب الأصول على الإطلاق. يوجد الكثير من المعلومات حول هذا الموضوع على الوِيب (أو في الكتب)، وقد نقوم بنشر مقال حول هذا الموضوع قريبًا. ترجمة -وبتصرف- للمقال The Difference Between Minification and Gzipping لصاحبه Chris Coyier1 نقطة