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

لوحة المتصدرين

  1. Ali Haidar Ahmad

    Ali Haidar Ahmad

    الأعضاء


    • نقاط

      10

    • المساهمات

      1068


  2. Yosra Zaki

    Yosra Zaki

    الأعضاء


    • نقاط

      4

    • المساهمات

      13


  3. Najah Alsaker

    Najah Alsaker

    الأعضاء


    • نقاط

      4

    • المساهمات

      543


  4. Ali Ismael

    Ali Ismael

    الأعضاء


    • نقاط

      3

    • المساهمات

      96


المحتوى الأكثر حصولًا على سمعة جيدة

المحتوى الأعلى تقييمًا في 10/29/21 في كل الموقع

  1. عندما أقوم بعمل ربط لجهاز مع vsc يعطى لي هذا Launching lib\main.dart on LDN L21 in profile mode... lib\main.dart:1 Parameter format not correct - FAILURE: Build failed with an exception. * What went wrong: Execution failed for task ':app:stripProfileDebugSymbols'. > NDK at C:\Users\Attia With Us\AppData\Local\Android\sdk\ndk-bundle did not have a source.properties file * Try: Run with --stacktrace option to get the stack trace. Run with --info or --debug option to get more log output. Run with --scan to get full insights. * Get more help at https://help.gradle.org BUILD FAILED in 2m 14s Exception: Gradle task assembleProfile failed with exit code 1 Exited (sigterm)
    1 نقطة
  2. هل يصادفك أحيانًا عندما تترجم بالطريقة الاعتيادية، بوضع الملفين بجوار بعضهما البعض، أن تجد تكرارًا في بعض المصطلحات وربّما بعض العبارات أيضًا؟ هل ترجمت يومًا ملفًا بالغَ التّعقيد ومليئًا بالرموز والاختصارات، وبذلت جهدًا مضنيًا في البحث عن تلك الرّموز والاختصارات، ثمّ مرّت الأيّام وإذا بملفٍّ أخر يحوي بعض الرّموز والاختصارات التي سبق وأن ترجمتها، لكن للأسف تبخّر الكثير منها من رؤوسك وستضطر إلى أن تبحث عنها مجددًا؟ ما رأيك إذًا في مساعدٍ صغيرٍ يخزّن كل ما تترجمه، ثم يعرض عليك العبارات أو الكلمات أو المصطلحات المكرَّرة تلقائيًّا؟ بل وأكثر من ذلك، إذا كنت تعمل ضمن فريق على ترجمة ملفٍّ كبيرٍ، وبالطّبع تريدون أن يكون هناك اتساقًا في ترجمة المصطلحات المتكررة، فيمكنكم مشاركة ذاكرة الترجمة الخاصة بكم لتعملوا معًا، توفيرًا للوقت والجهد، وللخروج بترجمةٍ أكثرَ ما تكون احترافية. هذا بالضبط ما يفعله برنامج ترادوس (Trados) أحد أشهر برامج الترجمة بمساعدة الحاسوب (CAT Tools). وسنشرح كيفية العمل على هذا البرنامج بالتفصيل في سلسلة مقالاتٍ متتالية، فسواء كنت تخطط لاستخدامه أو كنت تستخدمه بالفعل، فستتيح لك تلك المقالات الكثير من المعلومات والشروحات المدعَّمَة بالصور، والتي لن تجدها في أي مكان آخر، وذلك حتى تستفيد من كل كبيرة وصغيرة من هذا البرنامج. ولكن ما الذي يميز ترادوس عن باقي برامج الترجمة بمساعدة الحاسوب؟ نبذة عن تاريخ شركة ترادوس المنتجة لبرنامج (SDL Trados Studio) تعدُّ شركة (TRADOS) من أقدم الشّركات المنتجة لبرامج الترجمة، حيث قامت بطرح أول منتج لها (MultiTerm) عام 1990م، لكنه كان قاعدة مصطلحاتٍ فحسب، ولم يكن ذاكرة ترجمة أو برنامج ترجمة (CAT Tool) بالشكل المتعارف عليه الآن. وفي عام 2005م استحوذت شركة (SDL) على شركة (TRADOS)، وطرحت منتج (SDL Trados 2007 Suite)، وبعد ذلك بعامين، أي في عام 2009م، طرحت الجيل التالي من برامج ذاكرات الترجمة، ألا وهو (SDL Trados Studio 2009)، وقد كان انطلاقة لسلسة برامج الترجمة بمساعدة الحاسوب لشركة (SDL Trados)، وهو البرنامج الذي اخترناه لنشرحه في مجموعة من المقالات. موازنة سريعة بين ترادوس (Trados) وميموكيو (MemoQ) إذا بحثتَ في الإنترنت عن برامج الترجمة بمساعدة الحاسوب (CAT Tools) فستجد -دون مبالغةٍ- العشرات من تلك البرامج، فإذا لم تعمل من قبل على أيٍ منها، وفي الوقت ذاته تملك حرية الاختيار من بينها، فدعني أساعدك في ذلك عن طريق عقد موازنة سريعة بين أشهر برنامجين من تلك البرامج، ألا وهما: ترادوس وميموكيو. أولا: واجهة المستخدم وسهولة الاستخدام نشر موقع Capterra، أحد المواقع التي تتيح مراجعات للبرامج، مراجعاتٍ شارك فيها 61 شخصًا في تقييم ترادوس و26 شخص في ميموكيو. حصل ترادوس على (3,6/5) في بند سهولة الاستخدام، بينما حصل ميموكيو على (3,8/5). يمكنك الحكم بنفسك بالحصول على تجربة مجّانيّة للبرنامجين. في الإجمالي، أشادَ المستخدمون بسهولة استخدام برنامج ميموكيو وإمكانية تَعَلُمَهُ بنفسك عن طريق التعلم الذاتي، بينما انتقد البعض الآخر صعوبة الوصول إلى بعض الوظائف. في حين عزا أحد المستخدمين الذين قاموا بالتحويل من ميموكيو إلى ترادوس سبب ذلك التحول إلى أنَّ ترادوس مطلوب من العديد من شركات الترجمة، في حين رأي مستخدم أخر أنَّ ترادوس مزدحمٌ بالأيقونات ويحتاج للتدريب عليه. ثانيا: الملفات المدعمة كلا البرنامجين يدعمان العديد من الملفات. الصّورة التالية توضح بعضًا من تلك البرامج، مع الانتباه إلى أنَّ بعض تلك الملفات تحتاج إلى إعدادٍ قبل الشروع في ترجمتها. يمكنك معرفة المزيد من موقع ترادوس الرسمي للدعم، وكذلك موقع ميموكيو. ثالثا: السعر هناك العديد من النُسخ التي تقدمها تلك الشركتان بأسعار متفاوتة بحسب احتياجاتك، فهناك عروض للمترجمين المستقلين، وهناك عروض لشركات الترجمة. بافتراض أنَّ غالبية القُرَّاء من المترجمين المستقلين، فسنعرض لمحةً سريعةً عما تقدمه تلك الشركتان للمترجمين المستقلين. تعرض شركة ميموكيو برنامجها (MemoQ Translator Pro) وقت كتابة المقال مقابل (620) يورو، في حين تعرض شركة ترادوس خطط دفع متنوعة للمترجمين المستقلين، فبدايةً هناك نسخة (starter)، وهي نسخة مُصغرة من البرنامج صالحة لمدة (365) يوم فقط، وذلك مقابل (99) يورو، ويمكنك تجديد الرّخصة لـ (365) يومٍ أخرين مقابل (99) يورو أيضا. أما إذا أردت أن تتمتع بكامل مزايا البرنامج ولكنك لست متأكدًا هل ستستمر في استخدامه أم لا، فيمكنك دفع اشتراكًا سنويًا قدره (295) يورو، وبعد انتهاء السنة يمكنك أخذ قرار إن كنت ستجدد الاشتراك أم ستختار برنامجًا أخر. أما إذا كنت قد حسمت أمرك في شراء نسخة دائمة من البرنامج، فسعرها (695) يورو (هناك حسم في الوقت الحالي بنسبة 30%، فسعره بعد الحسم (485) يورو. وأخيرًا، هناك عرض على رخصتي تنشيط بسعر (595) يورو بعد الحسم، فيمكنك استخدام تلك الرخصتين بنفسك إذا كنت تعمل على جهازين مختلفين، حاسوب شخصي بمكان العمل وحاسوب متنقل في المنزل مثلًا، أو ربما تفكر في مشاركة الرخصة الأخرى مع أحد زملائك. وأخيرًا كانت تلك محاولة لعقد موازنة سريعة بين البرنامجين الأكثر شهرة من بين برامج (CAT Tools). لكن السؤال الذي يطرح نفسه، هل تقتصر فائدة برنامج ترادوس (Trados) على حفظ الترجمة فقط؟ الإجابة: لا، فهناك العديد من الفوائد، وإليكم بعضها: فوائد أخرى لـ ترادوس (Trados) غير حفظ الترجمة ما ذكرناه في السابق جزء بسيط مما يقدمه لك ذلك البرنامج الرائع، فلا يزال هناك المزيد من الوظائف التي يقدمها على سبيل المثال: تقسيم الملف يقسم برنامج ترادوس الملفات إلى فقرات وعبارات، كما هو موضح بالصورة، ويضع النصين المصدر والهدف بجوار بعضهما البعض، مما ييسر لك الوصول إلى النقطة التي انتهيت عندها، ويقسم عملك إلى أجزاء، فيسهل عليك معرفة ما قمت بإنجازه وما هو متبقٍ. إحصاء الكلمات بمجرّد إلقاء نظرة على أسفل الشاشة يمينًا سيظهر أمامك العدد الإجمالي للكلمات، وما أن تشرع في الترجمة، حتى يبدأ البرنامج في إحصاء عدد الكلمات المترجمة وعدد الكلمات التي راجعتها واعتمدتها، وأخيرًا العدد المتبقّيَ من الكلمات التي لم تُترجَم بعد، وكذلك النِّسب المئوية لكلٍ منها، ففي الصورة التالية، عدد الكلمات المُعتَمَدَة 30 كلمة، والكلمات المترجَمة التي لم تُعتَمد بعد 241 كلمة، وأخيرًا المتبقّي من الكلمات التي لم تُترجَم 10046 كلمة. فإذا كنت تعمل مترجمًا حرًا، فيمكنك بكل بساطة معرفة إجمالي عدد الكلمات، وبالتالي إخبار عميلك بالوقت الذي ستحتاج إليه لإتمام العمل وتكلفته. أمَّا إذا كنت تعمل في إحدى شركات الترجمة، والمطلوب منك كم محدد من الكلمات المترجمة يوميًا، فيمكنك حساب ذلك بكل سهولة، علاوة على أنَّ تلك الميزة ستجنبك تمامًا مشكلة إغفال ترجمة بعض الفقرات أو حتى الكلمات، بالإضافة إلى إمكانية قياس إنتاجيتك ومدى تقدمك في عملك بكل دقة. التنسيق التلقائي لو كنتَ مكان العميل، وقُدِّم لك عرضان، أحدهما يشمل تنسيق الملف المُترجَم تمًامًا مثل الملف الأصلي، والعرض الأخر يشمل الترجمة فقط، أي العرضين ستقبل؟ بالتأكيد الذي يشمل التنسيق أيضًا، صحيح؟ ما رأيك إذًا في أنَّ عملية التنسيق باستخدام برنامج ترادوس (Trados) تتم أتوماتيكيًّا، وبطريقة احترافية أيًا كان نوع الملف؟ إنه ينقل الصور والجداول وما إذا كان الخط ثخينًا أو مائلًا …إلخ. كلّ ذلك دون وقت إضافي منك أو جهد. خاتمة والآن، بعدما تعرفت على بعض مزايا العمل على ذلك البرنامج، هل تحمست للعمل عليه؟ هل يثيرك الفضول للاطلاع على واجهة المستخدم الخاصة به وعلامات التبويب الرئيسية (tabs) التي تتكون منها؟ هذا ما ستعرفه في المقالة القادمة. اقرأ أيضًا المقال التالي: تعرف على برنامج ترادوس (Trados) للترجمة وأهم الأقسام فيه أدوات الترجمة الضرورية لعمل المترجمين المستقلين أدوات الترجمة بمعونة الحاسوب CAT tools: بوابة الترجمة العصرية لماذا ينبغي عليك استخدام برامج الترجمة بمساعدة الحاسوب CAT tools
    1 نقطة
  3. السلام عليكم اعمل على مشروع و اريد تصفية البيانات حسب الصنف (category) عبر الضغط على ال checkbox باستخدام تقنية ال AJAX علما انني استخدم PHP codeigniter framework لذلك اريد الطريقة الصحيحة لبناء كود ال AJAX التي تقوم بتصفية البيانات
    1 نقطة
  4. قرأت عن توابع النافذة أنها تطبق دالة معينة على بعض الأسطر من ناتج استعلام وتفيد في الترتيب والتجمع ولكن ماهي هذه الدوال وكيف نصنفهم
    1 نقطة
  5. تقسم توابع النافذة window functions في SQL إلى 3 أقسام. توابع التجميع Aggregate functions مثل: COUNT AVG SUM MAX MIN توابع التصنيف أو الترتيب Ranking functions مثل: RANK ROW_NUMBER DENSE_RANK. توابع التحليل Analytic functions مثل: FIRST_VALUE LAST_VALUE LEAD LAG بشكل عام، تعمل توابع التجميع على إعادة قيمة واحدة كنتاتج معالجة قيم عمود ما، وعند استخدامها مع الدالة OVER مع عمل تقسيم الناتج لأجزاء أي نوافذ، يصبح عمل توابع التجميع بشكل مختلف حيث تعيد قيمة لكل مجموعة أسطر حسب التقسيم: إقراء عن دوال النوافذ في: دوال النافذة Window Functions:
    1 نقطة
  6. كنت أقرأ عن دوال النافذة في SQL وهم window functions ولم أفهم بالضبط عمل الدالة OVER وكيفية استخدامها مع التقسيم partitions في جلب الاستعلامات
    1 نقطة
  7. لدي الكود التالي وأريد وضع عنوان لل Legend فكيف نقوم بذلك؟ import numpy as np import matplotlib.pyplot as plt x = np.linspace(-2, 2, 50) y1 = x**3 y2 = x**2 fig, ax = plt.subplots() ax.plot(x, y1, c = 'black',label = 'x^3') ax.plot(x, y2, c = 'c',label = 'x^2') leg = plt.legend() plt.show()
    1 نقطة
  8. في الحقيقة , هذا ما تم وصفه في التعليق السابق . و قد تم تجزئته إلى إحتمالين : في حالة محدودية العناصر المنتمية للفئات : أين تم تفضيل عرض كل المحتوى بالصفحة و التلاعب بإظهاره و إخفاءه بحسب التفاعل مع مربعات التحقق . في حالة كثرتها : أين تم تأويل العمل بالأجاكس لعرض الفئات فقط , و إرسال طلبات الأجاكس عند التحقق من المربعات لجلب بيانات معينة تخص الفئة المحدد مربع تحققها . لاحظ تماثل منطق المثالين مع مطلوبك تماما : المثال 1 : المثال 2 : لا يقترح أن يكون طلب الأجاكس من النوع POST , فهذا الأخير موجود خصيصا لإرسال بيانات من الواجهة الأمامية للخلفية على عكس GET الذي هو موجود لعكسها . أظن أن أفضل و أقصر طريق هي ما تم وصفها سابقا , فنحن لا نقوم بإرسال أية بيانات للواجهة الخلفية . على عكس ذلك نحن نقوم بتمرير ما نحتاج في عنوان الـ URL الخاص بنا مباشرة . وهو نفس المتبع في الفيديو , على أن صاحب الفيديو يعتمد تخصيص الفلتر و إضافة مميزات أخرى بجانب غرضه الأساسي , و بالطبع يمكنك ذلك فالعملية عملية تطوير إبتداءا من فكرة صغيرة و بدائية.
    1 نقطة
  9. كيف يمكنني تغير الروت "root" الخاص بالينكس وكلمة المرور ؟ كمثال : هنا أريد أن أقوم بتتغير kali@kali إلى Ali@kali وأقوم بتغيير كلمة المرور كيف يمكن فعل ذالك ؟
    1 نقطة
  10. شكراً لك عدنان لكن لا أقصد هذا ، أنا أريد تغيير اسم الروت وليس كلمة المرور
    1 نقطة
  11. اولا شكرا لك و يعطيك العافية على كتابة هذا الشرح . ولكن في المشروع الذي أعمل عليه , أنا مجبر على استخدام الـ AJAX . فقد بحثت عن عدة طرق و لكن لم افهمها بشكل جيد و لم اعرف من أين سأبدا أريد من كود الـ ajax أن يكون هكذا $.ajax({ type: "POST", url: "CS.aspx/GetCustomers", data: '{searchTerm: "' + text + '"}', contentType: "application/json; charset=utf-8", dataType: "json", success: function (response) { او أية طريقة اخرى . الفيديو المرفق لتقريب الصورة , ولكن ببيانات مختلفة حيث اريد أن أعرض و أفلتر الجدول الخاص بالـ database حسب الصنف (أي أريد عرض البيانات في ال view) . مثال : لدي 5 تصنيفات : fruits vegetables electronics meats clothes في جدول البيانات , و كل تصنيف لديه منتجات متعلقة به . أريد عند الضغط على ال checkbox الخاص لكل تصنيف, عرض و فلترة المنتجات تبعا للتصنيف , اي إرجاع جدول البيانات الخاص بال، items حسب ال، category الداخلة أو الخاصة بها .
    1 نقطة
  12. و عليكم السلام و رحمة الله . أظن أنك تقصد فلترة بيانات معينة بحسب الفئات التي تنتمي لها إعتبارا لهاته العلاقة . مثال : فلترة المنتجات بحسب الفئات التي تنتمي لها . لنقم بتجزئة الأمر إلى فكرتين : بيانات محدودة في حالة محدودية الفئات لديك يمكنك الإستغناء عن AJAX تماما و طباعة كامل الفئات مع كامل البيانات , و التعامل مع إخفاء بيانات الفئة الواحدة عن طريق أصناف CSS عادية و بعض الجافاسكربت . سيمكن ذلك كالتالي : في ملف المتحكم : جلب كامل الفئات و تمريرها إلى ملف العرض . public function index(){ $query = $this->db->get('categories'); $data['categories'] = $query->result(); $query = $this->db->get('products'); $data['products'] = $query->result(); $this->load->view('categories_view' ,$data); } في ملف العرض , عرض كامل الفئات : <?php foreach($categories as $c):?> <div> <label for="cat_<?php echo $c['id']; ?>"> <?php echo $c['name']; ?> </label> <input type="checkbox" id="cat_<?php echo $c['id']; ?>" value="<?php echo $c['id']; ?>"> </div> <?php endforeach;?> مرفقة بكامل المنتجات : <?php foreach($products as $p):?> <div class="product c_<?php echo $p['category_id']; ?>"> <h2><?php echo $p['name']; ?></h2> </div> <?php endforeach;?> ثم لنقم بإضافة التفاعلية التي تقوم بعمل التالي : عند تحديد أي مربع تحقق يتم تخزين قيمته و تحديدها . يتم إخفاء كامل المنتجات . يتم إظهار تلك التي تمتلك صنفا كالتالي : [c_[category_id . مثال عملي : عند تحديد مربع تحقق الفئة بالعنوان "ملابس رجال" يتم تخزين القيمة 5 و تحديدها . يتم إخفاء كامل المنتجات . يتم إظهار تلك التي تمتلك صنفا كالتالي : c_5 . ستفي الشيفرة التالية بذات الغرض : $("input[type='checkbox']").change(function() { if(this.checked) { let target_id = $(this).val(); $('product_container').hide(); $('c_' + target_id).show(); } }); بيانات غير محدودة سنضطر في هذا إلى إخفاء كامل العناصر (المنتجات مثلا) , و إظهار كامل الفئات : لنقم بتغيير محتوى ملف المتحكم كالتالي : public function index(){ $query = $this->db->get('categories'); $data['categories'] = $query->result(); $this->load->view('categories_view' ,$data); } public function get_products_of_category(){ $c_id = $this->input->get('category_id'); $query = $this->db->get('products')->where('category_id' ,$c_id); return $query->result(); } على أن يحتوي ملف العرض الهيكلية التالية : <?php foreach($categories as $c):?> <div> <label for="cat_<?php echo $c['id']; ?>"> <?php echo $c['name']; ?> </label> <input type="checkbox" id="cat_<?php echo $c['id']; ?>" value="<?php echo $c['id']; ?>"> </div> <?php endforeach;?> <div id="products_container" ></div> سنحتاج الان تعديل التفاعلية لتصبح كالتالي : عند تحديد أي مربع تحقق يتم تخزين قيمته و تحديدها . يتم حذف أي عناصر لمنتجات تظهر . يتم إرفاق طلبية AJAX لجلب بيانات المنتجات إلى عنوان URL مرفق بمعرف الفئة . مثال عملي : عند تحديد مربع تحقق الفئة بالعنوان "ملابس رجال" يتم تخزين القيمة 5 و تحديدها . يتم حذف أي عناصر لمنتجات تظهر و ذلك تجنبا لإضافة أي بيانات لا تهم الفئة الحالية . يتم إرفاق طلبية AJAX لجلب بيانات المنتجات إلى العنوان التالي : https://domain.info/categories/5/products عند نجاح الطلبية , يتم عرض كامل المنتجات التي تم جلبها داخل حاوي المنتجات . يترجمه : $("input[type='checkbox']").change(function() { if(this.checked) { let target_id = $(this).val(); $('#products_container').empty(); $.get("https://domain.info/categories/"+ target_id +"/products", function(data, status){ data.forEach(function(item){ $('#products_container').append('<h2>'+ item['title'] +'</h2>'); }); }); } }); و بالطبع سيجب تعريف المسارات اللازمة في ملف routes.php و إرفاقها بالمتحكمات و التوابع المتعلقة بها . سيمكن تخصيص العملية أكثر و جعلها عملية أكثر , كأن يتم إضافة حاو لكل منتج , و طباعة إسم المنتج بجانب غلافه و تخصيص تصميم هذا الحاو و غيرها من الأفكار ..
    1 نقطة
  13. ماسبب عدم وجود الملفات داخل مستودع git مع أنها كانت موجودة سابقا ؟ تظهر هكذا كما في الصورة تظهر هكذا ايضا عند رفع اي مشروع جديد
    1 نقطة
  14. كيف يمكننا إيجاد صورة داخل صورة أخرى؟ على سبيل المثال لدي صورة وجه لشخص ما وأريد البحث عنها ضمن صورة تحتوي مجموعة من صور الوجوه الأخرى (ومن ضمنهم صورة وجهه)؟
    1 نقطة
  15. أعمل على مهمة لتحديد حدقية العين، لذا أحتاج لرسم دائرة، فهل هناك دالة للقيام بذلك في بايثون أو OpenCV؟
    1 نقطة
  16. يمكنك ذلك عن طريق تشغيل الأمر التالي مباشرة : passwd root أو : sudo passwd root سيطلب منك طباعة كلمة مرورك القديمة و الجديدة مع تكرار هاته الأخيرة للتأكيد . قم بعد ذلك بتقديم الطلب و ستظهر لك رسالة لطيفة تخبرك بنجاح تحديثها كالتالي : passwd: password updated successfully
    1 نقطة
  17. شكرا لك لم أفهم ماذا تقصد بمعملية توثيق طلب الدفع ولكن لا أظن أنها تخصني لأنني استخدم النسخة المجانية ولقد قمت بعمل التعليمات بشكل صحيح متأكدة من ذلك كما اني أضفت أيضا التعليمات التي أعطيتني اياها وهذه النتيجة أيضا ظهر خطأ
    1 نقطة
  18. السلام عليكم ورحمة الله وبركاته اذا كان هناك جدول للموضوعات باسم news به حقل id تتسلسل من خلاله المواضيع وهناك جدول اخر للتعليقات باسم comment به حقل news_id رقم الموضوع id هو نفسه news_id في التعليقات ماذا يمكن فعله لحذف كل التعليقات المتعلقة بموضوع معين عندما يتم حذف الموضوع نفسة من القاعدة اي ان id ليس له وجود في الجدول
    1 نقطة
  19. المشكلة هي في المحرك MYISAM فهو لا يدعم مفاتيح الارتباط، حاولي استخدام InnoDB فهو يدعم شروط المفاتيح على الجداول ليصبح انشاء الجدول كالتالي CREATE TABLE comments ( ... FOREIGN KEY (`subject_id`) REFERENCES news (`id`) ON DELETE CASCADE ) ENGINE = InnoDB
    1 نقطة
  20. قمت بعمل ذلك لكن لم تنجح CREATE TABLE comments ( `id` INT( 9 ) NOT NULL AUTO_INCREMENT , `comment_text` Text NOT NULL , `subject_id` INT( 9 ) NOT NULL , `commentor_id` varchar(50) NOT NULL, `comment_date` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP, `comment_status` int(1) NOT NULL, PRIMARY KEY ( `id` ), FOREIGN KEY (subject_id) REFERENCES news (id) ON DELETE CASCADE ) ENGINE = MYISAM
    1 نقطة
  21. يمكن عند تعريف الربط بين جدول التعليقات وجدول الموضوعات تحديد معاملة التعليقات المرتبطة بموضوع تم حذفه عن طريق تحديد ON DELETE بالقيمة CASCADE CREATE TABLE comment ( ... FOREIGN KEY (news_id) REFERENCES news (id) ON DELETE CASCADE ); بعدها عند حذف موضوع من جدول news سيتم حذف كل التعليقات المتعلقة من جدول comment به تلقائيا
    1 نقطة
  22. السلام عليكم لما بحاول اعمل run علي الipad حقيقي بعطيني هـذا الخطأ مع العلم لما بشغل على الsimulator بشتغل طبيعي لو حل المشكلة من خلال الxCode يا ريت يكون الشرح مفصل لقلة الخبرة باستخدامه
    1 نقطة
  23. السلام عليكم ورحمة الله وبركاته احتاج نقل الدورة الى حساب جيميل آخر لي على منصة حسوب هل يمكنني ذلك ؟؟
    1 نقطة
  24. قم بتحويل فضاء الألوان إلى HSV، حيث أن فضاء الألوان HSV مكون من اللونية Hue ودرجة الإشباع Saturation و درجة الإضاءة Value وبالتالي يمكننا التحكم بدرجة الإضاءة من خلال قيمة ال Value. وبالتالي نقوم بالتحويل إلى هذا الفضاء ثم باستخلاص قناة ال v (value) ثم قم بزيادة قيمتها بالدرجة التي تحتاجها ثم أعد تركيب القنوات. وأخيراً قم بالتحويل من جديد إلى BGR أو RGB. def incb(image, value=0): #HSV التحويل إلى فضاء hsv = cv2.cvtColor(image, cv2.COLOR_BGR2HSV) # value استخلاص قناة ال h, s, v = cv2.split(hsv) # في حالة كانت القيمة التي نريد إضافتها تجعل قيمة البكسل أكبر من 255 نقوم بتثبيت # القيمة على 255 لأن الصورة يجب أن تكون أعلى قيمة فيها 255 l = 255 - value v[v > l] = 255 v[v <= l] += value image = cv2.merge((h, s, v)) return cv2.cvtColor(image, cv2.COLOR_HSV2BGR) مثال. لدينا الصورة التالية: import cv2 # قراءة صورة image=cv2.imread("/content/test.jpg") # زيادة السطوع بمقدار 30 درجة im=incb(image,30) # عرضها from google.colab.patches import cv2_imshow cv2_imshow(im) النتيجة:
    1 نقطة
  25. قد نحتاج لعمل فهرسة لعدة أعمدة سويا في عدة حالات منها: استرجاع بيانات التي تحتاج تحقيق عدة شروط سويا تجميع البيانات أو فرزها بعد تنظيف البيانات بعد البحث تكرار فهرسة عدة أعمدة لجدول واحد تسريع عمليات البحث في عدة أعمدة الصيغة العامة لعمل فهرسة لعدة أعمدة سويا كالتالي: CREATE INDEX [index name] ON [Table name]([column1, column2, column3,...]); وترتيب الفهرسة هو نفسه الذي يظهر عند دمج الأعمدة سويا. المثال التالي يوضح كيفية استخدامها. دعنا ننشئ جدولنا ونضع به بعض القيم كالتالي: CREATE TABLE class_records(id INT,firstname VARCHAR(50),lastname VARCHAR(50)); edb=# insert into class_records values (1,'harman','baweja'); INSERT 0 1 edb=# insert into class_records values (2,'hardik','pandya'); INSERT 0 1 edb=# insert into class_records values (3,'tom','lane'); INSERT 0 1 ثم عمل الفهرسة كالتالي: create index class_records_index1 on class_records (lastname,firstname); CREATE INDEX
    1 نقطة
  26. 1. إنشاء الرسوم البيانية الخاصة بك ثم عرضها في النهاية من خلال الدالة plt.show: matplotlib.pyplot.imshow(X, cmap=None, alpha=None) # X: الصورة # cmap: اسم خريطة الألوان التي تريد استخدامها (وسيط اختياري) # alpha: شفافية الصورة وتأخذ قيمة بين 0 و 1 (اختياري) مثال: import matplotlib.pyplot as plt # تعريف بيانات عشوائية x = np.linspace(-2, 2, 50) y1 = x**3 y2 = x**2 # رسمها plt.plot(x, y1) plt.plot(x, y2) # تسمية المحاور plt.xlabel('x - axis') plt.ylabel('y - axis') # وضع عنوان عام plt.title('My first graph!') # لعرضهم show استخدام الدالة plt.show() 2. إنشاء الرسوم البيانية الخاصة بك وعرضها في لحظة إنشاءها من خلال استدعاء الوحدة interactive وتفعيلها: import matplotlib.pyplot as plt import numpy as np from matplotlib import interactive interactive(True) # تفعيلها # تعريف بيانات عشوائية x = np.linspace(-2, 2, 50) y1 = x**3 y2 = x**2 # رسمها plt.plot(x, y1) input('press return to continue') plt.plot(x, y2) input('press return to end') 3. توفر مكتبة matplotlib الأداة savefig لتخزين الرسم البياني الناتج: savefig(fname, dpi=None, format=None,bbox_inches=None) حيث أن الوسيط الأول يمثل المسار الذي تود فيه حفظ الملف الناتج، وال dpi أو dots per inch (وهي وحدة قياس تحدد عدد النقاط الفردية التي يمكن وضعها في مربع 1 × 1 بوصة) وزيادتها تؤدي لزيادة حجم الصورة. أما الوسيط الثالث فهو لتحديد الصيغة التي سيتم فيها حفظ الشكل البياني أي 'png', 'pdf', 'svg' ...إلخ. أما الوسيط الأخير ففي حال ضبطه على tight سيتم إزالة المسافة البيضاء الغير مرغوب فيها التي تكون حول الرسم البياني. import matplotlib.pyplot as plt fig, ax = plt.subplots( nrows=1, ncols=1 ) #figure إنشاء ax.plot([0,1,2], [10,20,3]) fig.savefig('to.png') # حفظه plt.close(fig) # figure إغلاق ال
    1 نقطة
  27. سأعطيك طريقتين لحذفها، الأولى من خلال استخدام الدالة ()ax.get_legend().remove : import numpy as np import matplotlib.pyplot as plt # تعريف بيانات عشوائية x = np.linspace(-2, 2, 50) y1 = x**3 y2 = x**2 # رسم الدوال fig, ax = plt.subplots() ax.plot(x, y1, c = 'black',label = 'x^3') ax.plot(x, y2, c = 'c',label = 'x^2') # إنشاء صندوق البيانات leg = plt.legend() # حذفه ax.get_legend().remove() plt.show() في حالة وجود أكثر من supplot ، يمكننا أن نذكر الكائن axes المطلوب الذي نريد إزالة ال legend الخاص بك: import numpy as np import matplotlib.pyplot as plt # تعريف بيانات عشوائية x = np.linspace(-2, 2, 50) y1 = x**3 y2 = x**2 # رسم الدوال fig, axs = plt.subplots(2, 1) axs[0].plot(x, y1, c = 'r',label = 'x^3') axs[1].plot(x, y2, c = 'black',label = 'x^2') axs[0].legend(loc = 'upper left') # صندوق بيانات للرسم الأول axs[1].legend(loc = 'upper left') # صندوق للرسم الثاني # سنحذف صندوق البيانات من الرسمة الثانية axs[1].get_legend().remove() plt.show() أو عن طريق الدالة ax.get_legend().set_visible(False) كما في المثال التالي: import numpy as np import matplotlib.pyplot as plt # تعريف بيانات عشوائية x = np.linspace(-2, 2, 50) y1 = x**3 y2 = x**2 # رسم الدوال fig, ax = plt.subplots() ax.plot(x, y1, c = 'black',label = 'x^3') ax.plot(x, y2, c = 'c',label = 'x^2') # إنشاء صندوق البيانات leg = plt.legend() # حذفه ax.get_legend().set_visible(False) plt.show()
    1 نقطة
  28. يمكنك القيام بذلك بالشكل التالي: import numpy as np import matplotlib.pyplot as plt from PIL import Image # مسار الصورة path = r"/content/test.jpg" # PIL فتح الصورة من خلال الحزمة image = Image.open(path) # عرضها plt.imshow(image) plt.show() الآن لعرض صورة بالتدرج الرمادي نفتح الصورة باستخدام الدالة open من الحزمة PIL ونقوم بتحويلها إلى الوضع L من خلال الدالة convert وهذا يعني أنها صورة ذات قناة واحدة أي تفسر على أنها تدرج رمادي. يخزن فقط التدرج الرمادي وليس اللون. ثم نقوم برسم الصورة من خلال الدالة imshow مع ضبط الخريطة اللونية cmap على "gray": import numpy as np import matplotlib.pyplot as plt from PIL import Image # مسار الصورة path = r"/content/test.jpg" # PIL فتح الصورة من خلال الحزمة image = Image.open(path).convert("L") # عرضها بالصيغة الرمادية plt.imshow(image, cmap='gray') plt.show() وإذا كنت تريد عرض عكس التدرج الرمادي ، فقم بضبط cmap على gray_r.
    1 نقطة
  29. الإصدار 1.0.0

    10334 تنزيل

    تُعد أنظمة التشغيل موضوعًا متقدمًا في العديد من برامج علوم الحاسوب، حيث يتعرف المتعلم على كيفية البرمجة بلغة C بحلول الوقت الذي يتعرف فيه على أنظمة التشغيل، وربما يأخذ المتعلم فصلًا دراسيًا في معمارية الحاسوب Computer Architecture قبل ذلك، فيصبح الهدف من تقديم هذا الموضوع عادةً هو عرض تصميم وتنفيذ أنظمة التشغيل للطلاب مع افتراض ضمني أن بعضهم سيجري بحثًا في هذا المجال، أو يكتب جزءًا من نظام تشغيل. هذا الكتاب مترجم عن الكتاب Think OS لكاتبه آلن داوني Allen B. Downey والذي يعد مسودة أولية لم تكتمل بصورة نهائية بعد إذ طُوّر لفصلٍ دراسي في كلية أولين Olin College يدعى أنظمة البرمجيات Software Systems. لا يفترض هذا الكتاب أنك قد درست معمارية الحاسوب، فيجب أن يمنحك فهمًا أفضل أثناء قراءته عن الحاسوب ومعماريته وكيف يعمل المعالج والذاكرة فيه وكيف تُدار العمليات وتُخزَّن الملفات وما يحدث عند تشغيل البرامج، وما يمكنك القيام به لجعل البرامج تعمل بصورة أفضل وأسرع بوصفك مبرمجًا. يشرح الفصل الأول بعض الاختلافات بين اللغات المُصرَّفة compiled واللغات المُفسَّرة interpreted، مع بعض الأفكار حول كيفية عمل المصرِّفات compilers، ويشرح الفصل الثاني كيف يستخدم نظام التشغيل العمليات لحماية البرامج قيد التشغيل من التداخل مع بعضها البعض. ويشرح الفصل الثالث الذاكرة الوهمية virtual memory وترجمة العناوين، ويتحدث الفصل الرابع عن أنظمة الملفات ومجرى البيانات، ويصف الفصل الخامس كيفية تشفير الأرقام والأحرف والقيم الأخرى، ويشرح أيضًا العامِلات الثنائية bitwise operators. أما الفصل السادس، فيشرح كيفية استخدام إدارة الذاكرة الديناميكية وكيفية عملها، ويدور الفصل السابع حول التخبئة caching وهرمية الذاكرة. ويشرح الفصل الثامن تعدد المهام multitasking والجدولة scheduling. ويدور الفصل التاسع حول خيوط POSIX وكائنات المزامنة mutexes، ويشرح الفصل العاشر المتغيرات الشرطية POSIX ومشكلة المنتج / المستهلك، ويدور الفصل الحادي عشر حول استخدام متغيرات تقييد الوصول POSIX وتطبيقها في لغة C. هذا الكتاب مرخص بموجب رخصة المشاع الإبداعي Creative Commons «نسب المُصنَّف - غير تجاري - الترخيص بالمثل 4.0». يمكنك قراءة فصول الكتاب على شكل مقالات من هذه الصفحة، «مدخل إلى أنظمة التشغيل»، أو تجدها مسردة بالترتيب التالي: الفصل الأول: مفهوم التصريف Compilation في لغات البرمجة الفصل الثاني: العمليات Processes في أنظمة التشغيل الفصل الثالث: الذاكرة الوهمية Virtual memory في نظام التشغيل الفصل الرابع: فهم الملفات Files وأنظمة الملفات file systems الفصل الخامس: تمثيل الأعداد والنصوص بالبتات وإجراء العمليات على مستوى البت الفصل السادس: إدارة الذاكرة Memory management في لغة C الفصل السابع: فهم عملية التخبئة Caching في معمارية الحاسوب الفصل الثامن: تعدد المهام Multitasking في الحواسيب الفصل التاسع: مفهوم الخيوط Threads في عملية المعالجة الفصل العاشر: المتغيرات الشرطية وحلها مشاكل التزامن بين العمليات في لغة C الفصل الحادي عشر: متغيرات تقييد الوصول Semaphores في لغة البرمجة سي C
    1 نقطة
  30. يمكنك القيام بذلك من خلال أخذ نسخة عن الصورة (copy) لكي لاتتأثر الصورة الأصلية، ثم تعيين القيمة 0 للقنوات التي لاتريدها، مثلاً لاستخلاص اللون الأحمر سنقوم بأخذ نسخة من الصورة، ثم تصفير القناتين الزرقاء والخضراء: import cv2 image = cv2.imread("/content/test.jpg") # قراءة الصورة # BGR تقرأ الصورة بالصيغة opencv red = image.copy() # أخذ نسخة red[:, :, 0] = 0 # تصفير قناة الأزرق red[:, :, 1] = 0 # تصفير الأخضر # عرض الصورة from google.colab.patches import cv2_imshow cv2_imshow(red) والنتيجة: نفس الأمر بالنسبة للأزرق والأخضر: import cv2 image = cv2.imread("/content/test.jpg") # قراءة الصورة # BGR تقرأ الصورة بالصيغة opencv blue = image.copy() # أخذ نسخة blue[:, :, 2] = 0 # تصفير قناة الأحمر blue[:, :, 1] = 0 # تصفير الأخضر # عرض الصورة from google.colab.patches import cv2_imshow cv2_imshow(blue) الأخضر: import cv2 image = cv2.imread("/content/test.jpg") # قراءة الصورة # BGR تقرأ الصورة بالصيغة opencv green = image.copy() # أخذ نسخة green[:, :, 2] = 0 # تصفير قناة الأحمر green[:, :, 0] = 0 # تصفير الأزرق # عرض الصورة from google.colab.patches import cv2_imshow cv2_imshow(green)
    1 نقطة
  31. لا يوجد تابع جاهز. لكن المثال التالي يبين لك كيفية إضافته، فكما نعلم إن الضجيج الغاوصي هو ضوضاء أو تشويش له دالة كثافة احتمالية مساوية لدالة الكثافة الاحتمالية للتوزيع الطبيعى (normal distrbution). وبالتالي يمكننا استخدام الدالة np.random.normal التي تعطي عينات عشوائية من التوزيع الطبيعي (غاوسي)، لتشكيل مصفوفة من هذه العينات (مطابقة بالحجم لحجم الصورة) ثم إضافتها إلى الصورة الأصلية ( هو ضجيج جمعي). random.normal(loc=0.0, scale=1.0, size=None) حيث نمرر للوسيط Size أبعاد الصورة نفسها، والوسيط loc يمثل الوسيط Mean أي مركز التوزيع، والوسيط scale يمثل الانحراف المعياري (الانتشار أو العرض) للتوزيع. ويجب أن تكون غير سالبة. انظر للمثال: import cv2 as cv import numpy as np import matplotlib.pyplot as plt # قراءة الصورة image=cv.imread("/content/gray.png",0) # قراءتها بالحالة الرمادية # إضافة الضجيج الغاوصي لها بشكل يدوي gauss=np.random.normal(0,1.0,image.shape).astype('uint8') gauss_image=cv.add(image,gauss) # عرض النتائج plt.figure(figsize=(25,15)) plt.subplot(131) plt.imshow(image, cmap='gray') plt.title("gray_image") plt.subplot(132) plt.imshow(gauss_image, cmap='gray') plt.title("gray_image with noise") والنتيجة: وهنا قمت بإنشاء تابع لك لإضافة الضجيج الغاوصي: import cv2 import numpy as np def gausseanNoise(image): gauss = np.random.normal(0,1.0,image.shape).astype('uint8') return cv2.add(image,gauss) وهنا تابع لإضافة ضجيج الملخ والفلفل حيث أن هذا الضجيج هو عبارة عن ثقوب بيضاء (ملح) وسوداء (فلفل) في الصورة وبالتالي أصفار و واحدات. كما تجدر الملاحظة إلى أن هذا الضجيج يطبق فقط على الصور الرمادية: import random import cv2 def s_p_noise(img): row , col = img.shape # أبعاد الصورة # اختيار بعض وحدات البكسل في الصورة عشوائياً لتلوينها باللون الأبيض number_of_pixels = random.randint(300, 10000) # بين ال 300 و 10000 وحدة for i in range(number_of_pixels): # اختيار إحداثي عيني بشكل عشوائي y_coord=random.randint(0, row - 1) # إحداثي سيني عشوائي x_coord=random.randint(0, col - 1) # جعله أبيض img[y_coord][x_coord] = 255 # الآن نفس الأمر لكن نريد الأسود number_of_pixels = random.randint(300 , 10000) for i in range(number_of_pixels): y_coord=random.randint(0, row - 1) x_coord=random.randint(0, col - 1) img[y_coord][x_coord] = 0 return img
    1 نقطة
  32. الدالة putText لا تتعامل مع رموز مثل n\، لذا أنت مجبر على التعامل مع هذا الأمر بشكل يدوي، لذا إليك حل لمشكلتك: نقوم بقسم النص إلى عدة أسطر من خلال الدالة split حيث تكون عملية التقسيم على أساس ظهور الرمز n\: your_text.split('\n') ==> ['Yesterday I was clever.. ', 'so I wanted to change the world.'] ثم نقوم بالمرور على هذه الأسطر وإضافتها واحداً تلو الآخر، لكن قبل ذلك يجب أن نقوم بتحديد الموضع الابتدائي للإحداثي y (ارتفاع المكان الذي سنضع فيه أول سطر): y0= 50 # 100 فلن نتلاعب به وسيبقى كما حددته في البداية أي x أما الإحداثي y الإحداثي ثم يجب أن نقوم بتحديد مسافة الانتقال بالبكسل (الانتقال من السطر الأول للثاني): dy = 40 # 40 بكسل ثم داخل الحلقة يجب أن نعرَف معادلة لطباعة باقي الأسطر وتحقيق الانتقال: for i, line in enumerate(your_text.split('\n')): y = y0 + i*dy cv2.putText(image,line , (100,y), font, fontScale, color, thickness, cv2.LINE_AA) وبالتالي يكون الكود بعد التعديل: import cv2 # قراءة الصورة image = cv2.imread("/content/test.jpg") # الخط font = cv2.FONT_HERSHEY_SIMPLEX # الإحداثيات org = (100, 50) # fontScale fontScale = 1 # red color in BGR color = (0, 0, 255) # السماكة thickness = 2 # استخدام cv2.putText() your_text='Yesterday I was clever.. \nso I wanted to change the world.' y0= 50 dy = 40 for i, line in enumerate(your_text.split('\n')): y = y0 + i*dy cv2.putText(image,line , (100,y), font, fontScale, color, thickness, cv2.LINE_AA) cv2.imshow( image) cv2.waitKey(0) cv2.destroyAllWindows() والنتيجة:
    1 نقطة
  33. في حالة كنت تستخدم الدالة plot من pandas أو Matplotlib فلا فرق، حيث في كلاهما يمكنك استخدام الوسيط xlabel لتسمية المحور الأفقي والوسيط ylabel لتسمية المحور العمودي، كما ويمكنك إضافة عنوان للرسم من خلال الوسيط title كما يلي: import numpy as np import pandas as pd # إنشاء داتافريم مكون من عمودين d = {'col_1' : np.arange(20), 'col_2' : np.arange(20,60,2)**8} df = pd.DataFrame(d) # تمثيلهما بيانياً df.plot(x='col_1', y='col_2', style='-',xlabel='X Label', ylabel='Y Label', title='Plot Title') والنتيجة: أو يمكنك كذلك تسمية المحور الأفقي والعمودي (بشكل غير مباشر) من خلال كائن ال axes (الذي يمثل ال plot) حيث أن الدالة plot تعيد (ترجع return) كائن matplotlib.axes.AxesSubplot يمكنك أن تستخدم معه الدالة set_xlabel و set_ylabel لتأدية المطلوب: import numpy as np import pandas as pd # إنشاء داتافريم مكون من عمودين d = {'col_1' : np.arange(20), 'col_2' : np.arange(20,60,2)**8} df = pd.DataFrame(d) # تمثيلهما بيانياً ax=df.plot(x='col_1', y='col_2', style='-') ax.set_xlabel("x label") ax.set_ylabel("y label") أو من خلال الدالتين plt.xlabel و plt.ylabel كما يلي: import numpy as np import pandas as pd # إنشاء داتافريم مكون من عمودين d = {'col_1' : np.arange(20), 'col_2' : np.arange(20,60,2)**8} df = pd.DataFrame(d) # تمثيلهما بيانياً df.plot(x='col_1', y='col_2', style='-') plt.xlabel('xlabel') plt.ylabel('ylabel')
    1 نقطة
  34. يمكنك استخدام الوسيط numpoints لتحديد عدد النقاط التي ستظهر: import matplotlib.pyplot as plt import numpy as np x = np.linspace(-10, 10, 1000) f=x**2+30 plt.plot(x, f, label="Gradient descent") i = 0 j = 30 plt.plot(i, j, "ko",color="red", label="Global Optimum") plt.legend(numpoints=2) plt.xlabel("X") plt.ylabel("Y") plt.show() والنتيجة: أو يمكنك استخدام rcParams لتحديدها بالشكل التالي (هنا ستطبق التغيرات على كامل الرسوم في الملف): import matplotlib as mpl mpl.rcParams['legend.numpoints'] = 1 # تحديد نقطة وحيدة
    1 نقطة
  35. لا يكفي استخدام bbox_inches وحده. الوسيطتان bbox_inches و pad_inches هما من يتحكمان بهذا الأمر سويَاً. فمهمة bbox_inches عندما تقوم بضبطه على "tight" هي ملائمة وضع (position) ال figure ضمن الصورة أو الملف أي أنه يستخدم لملاءمة الشكل المحفوظ بشكل مناسب. و pad_inches تستخدمه ((معه)) لتحديد المساحة المتروكة (الفارغة) حول الشكل المحفوظ. لاحظ المثال التالي (قمت بتلوين الخلفية باللون الأصفر للوضوح أكثر): import matplotlib.pyplot as plt # سأقوم برسم هيستوغرام لبيانات عشوائية plt.hist([1, 4, 9, 16, 25, 36, 49, 64, 81, 100]) # حفظ الشكل plt.savefig("squares1.png", bbox_inches ="tight", transparent = True, facecolor ="y", edgecolor ='b', orientation ='landscape') # عرضه plt.show() والنتيجة: الآن لو قمنا بعرض الصورة التي تم حفظها ستظهر لنا مشكلتك: from IPython.display import Image Image(filename='/content/squares1.png') والنتيجة: لاحظ وجود الهوامش. الآن لو قمنا بضبط الوسيط pad_inches على 0 (أي الهوامش من كل الاتجاهات تساوي 0 بوصة): import matplotlib.pyplot as plt # سأقوم برسم هيستوغرام لبيانات عشوائية plt.hist([1, 4, 9, 16, 25, 36, 49, 64, 81, 100]) # حفظ الشكل plt.savefig("squares2.png", bbox_inches ="tight", pad_inches =0.0, transparent = True, facecolor ="y", edgecolor ='b', orientation ='landscape') ثم لو قمنا بعرض الصورة التي تم حفظها: from IPython.display import Image Image(filename='/content/squares2.png') والنتيجة:
    1 نقطة
  36. توقفنا في المقالة السابقة عند الفرق بين ترجمة ملف واحد وإنشاء مشروع، وشرحت كيفية ترجمة ملف واحد، والآن سأشرح كيفية إنشاء مشروع والخطوات التي تلي إنشاءه. إنشاء مشروع جديد اضغط على قسم مشاريع (Projects) من الأقسام التي على اليسار، ثم مشروع جديد (New Project) من قسم الصفحة الرئيسية (Home) بالأعلى، ستظهر نافذة بها عدة مراحل كما التالي: هناك العديد من الحقول بتلك النافذة، سأقتصر على اللازم والهام منها فقط، ستكتب اسم المشروع في حقل (Project Name) وستختار لغة الملف من (Source Language) واللغة الهدف من (Target Language) ثم تضيف المستندات التي ترغب في ترجمتها من الايقونات الموجودة بأسفل (Project Files) التي على اليسار وستختار إما أن تضيف مستندًا مستندًا أو أن تضيف المجلد بأكمله، ثم تضغط التالي (Next) . بعدها ستنتقل إلى الصفحة العامة (General) يمكنك أن تضيف وصفًا للمشروع واسم العميل والتاريخ الذي يتوجب عليك الانتهاء منه، وهذه كلها بيانات اختيارية يمكنك إدخالها أو الانتقال مباشرة إلى مرحلة مصادر الترجمة أو (Translation Resources) وهنا إما أن تختار إنشاء ذاكرة ترجمة جديدة من (Create) أو أن تستخدم ذاكرة ترجمة موجودة. بالطبع لن أكرر خطوات إنشاء ذاكرة الترجمة ويمكنك الرجوع إليها في المقالة السابقة. المرحلة الرابعة من مراحل إنشاء المشروع هي مرحلة قاعدة المصطلحات (Termbases): ستضغط على إنشاء (Create) ستظهر نافذة توضح الخمس خطوات لإنشاء قاعدة المصطلحات، اضغط التالي وانقر على (Create a new termbase definition from scratch) ثم اضغط على التالي. ثم اختر اسمًا لقاعدة المصطلحات ويمكنك إضافة وصفًا ولمن يرجع حق المؤلف إذا رغبت في ذلك ويمكنك تركهم والضغط مباشرةً على التالي. في المرحلة التالية اختار اللغات من القائمة المنسدلة تحت اللغات (Languages) ثم اضغط التالي، التالي، وأخيرًا إنهاء (Finish). ستجد أن قاعدة البيانات الجديدة قد أُضيفت تلقائيًا وسترجع مرة أخرى لمرحلة قاعدة البيانات بالمشروع، اضغط التالي. ستنتقل إلى مرحلة GroupShare وهذه ستدخل فيها الخادم (Server) في حالة ما إذا كنت تعمل عليه، أما إذا كنت تعمل على جهازك فاترك تلك المرحلة إلى التالية مباشرةً. المرحلة التالية هي PerfectMatch وهذه المرحلة تستخدمها فقط حال ترجمتك لملف مشابه لملف ترجمته في السابق باستخدام ترادوس لكنك لم تنشيء له ذاكرة ترجمة (translation memory)، وتريد الاستفادة منه في استخراج الترجمات وتطبيقها على ملف المشروع الجديد. في هذه الحالة ستضيف المجلد ثنائي اللغة (ستجده داخل المسار الذي تحفظ به المشاريع داخل مجلد المشروع المشابه وستجد اسمه يتضمن الحرفين الأولين من لغة المصدر واللغة الهدف مثلًا إن كان من الإنجليزية للعربية ستجد اسمه: "En-Ar") عن طريق الضغط على (Add Matching file) ثم تختار الخيار الأول، بعدما تضيف المجلد تنتقل للمرحلة التالية بالضغط على Next. المرحلة السابعة وهي مرحلة المهمات المجمعة (Batch Tasks) يمكنك الاختيار من عدة خيارات من القائمة المنسدلة في تسلسل المهام (Task Sequence) كل خيار ستختاره سيوضح لك المهام التي ينطوي عليها بالمربع الكبير بالأسفل، على سبيل المثال، تحويل الملف وتحليله واقتراح ترجمات له …إلخ. يمكنك تغيير تلك المهام بالحذف أو الإضافة من خلال الضغط على زر تسلسل المهام (Task Sequence) أيضًا الموجود على الناحية اليمنى. ملحوظة: إذا كنت مبتدأً في استخدام ترادوس فإنني أُوصي بشدة بخيار (Prepare) لأنه يحتوي على المهام الأساسية التي تحتاجها دون المزيد من التعقيدات. المرحلتين الأخيريتين في إنشاء المشروع ألا وهما (Summary) و(Preparation) هما مرحلتين يقوم بها البرنامج بناءً على اختياراتك في المراحل السابقة، فالمرحلة (Summary) سيعرض عليك ملخص المشروع حتى إذا رغبت في تعديل أمرًا ما الضغط على السابق (Back) وإجراء التعديلات التي ترغب بها، أما إذا وجدت أن كل شيء على ما يرام، فستضغط إنهاء (Finish) وتنتظر حتى يعد البرنامج المشروع وينقلك مباشرة إليه بعد الانتهاء. ماذا بعد إنشاء المشروع بعد إنشاء المشروع ستنتقل تلقائيًا إلى المحرر حتى تشرع في الترجمة -إذا لم تنتقل تلقائيًا يمكنك الانتقال بالنقر مرتين على المشروع ثم النقر مرتين على الملف الذي ترغب في العمل عليه- ستجد أن الملف قد قُسم إلى العديد من الخلايا وأمام كل خلية من الملف المصدر خلية فارغة لتكتب بها الترجمة المقابلة. هناك أمام كل خلية ستجد رمزًا من ثلاثة رموز: الأول رمز يشبه المستند الأبيض وهذا يعني أن الخلية غير مترجمة، ما أن تشرع في الترجمة سيتحول ذلك الرمز إلى رمز قلم أزرق وهذا يعني مسودة (Draft) بعدما تنتهي من ترجمة الخلية ومراجعتها قم بالضغط على (Ctrl+Enter) لاعتماد الترجمة والانتقال إلى الخلية التي تليها، ستجد أن الرمز تحول إلى قلم أخضر وعلامة صح خضراء وتعني مُترجم، ولابد من تلك الخطوة حتى يبدأ البرنامج في حفظ الترجمة واقتراحها عليك لاحقًا. أثناء عملك قد تجد في بداية الخلية أو في نهايتها علامة أرجوانية كما في الخليتين الثامنة والعاشرة بالصورة أعلاه، وبداخل هذه العلامة الأرجوانية ستجد كلمة تصف ما الذي تدل عليه، ففي الخلية الثامنة ستجد كلمة رابط (Hyperlink)، والخلية العاشرة ستجد كلمة شكل (Shape) عندما تظهر تلك العلامات يجب عليك نقلها للخلية الهدف -التي بها الترجمة- حتى تنتقل كما هي بنفس الشكل في الملف النهائي. ويمكنك نقلها إما عن طريق النسخ واللصق أو عن طريق النقر بالزر الأيمن للفأرة، ستظهر قائمة طويلة اختار منها نسخ المصدر للهدف (Copy source to target). كيفية التعديل على ذاكرة الترجمة إذا كان هناك تشابه بين الخلية المراد ترجمتها ووحدات الترجمة (Translation Units) التي تتكون منها ذاكرات الترجمة (Translation Memories) المخزن عليها الترجمات السابقة، فستظهر نتائج ذاكرة الترجمة في صندوق (Translation Results) الموجود بالأعلى أسفل قسم التنسيق (Formatting) كما ستظهر نسبة التوافق مثلًا في الصورة أدناه نسبة التوافق 83% وهذا يعني أن هناك اختلاف بين الوحدة المخزنة والخلية الجديدة وهذا الاختلاف يوضح بلون مختلف ويكون تحته خط كما في الصورة. في حالة رغبتك في التعديل على الترجمة المخزنة في وحدة الترجمة (Translation Unit) انقر بالزر الأيمن للفأرة على الوحدة المراد تعديلها والموجودة بصندوق نتائج الترجمة (Translation Results)، ستظهر قائمة، اختر منها تعديل وحدة الترجمة (Edit Translation Unit) ستنبثق نافذة جديدة يمكنك من خلالها التعديل ومن ثم الضغط على موافق (OK). الفرق بين قاعدة المصطلحات (Term Base) وذاكرة ترجمة (Translation Memory) الكثيرون لا يعلمون ما أهمية قاعدة المصطلحات (Term Base) مع وجود ذاكرة ترجمة (Translation Memory)، في الحقيقة أن آلية عمل ذاكرة الترجمة هي كالتالي: حفظ الخلايا التي غالبًا ما تحتوي على فقرات وجمل وعبارات، وبالتالي إذا تكرر مصطلح ذُكر في تلك العبارة أو الجملة أو الفقرة مع اختلاف السياق تمامًا ففي الغالب لن يقترح البرنامج ترجمة هذا المصطلح، لعدم وجود نسبة تشابه كبيرة بين الخليتين، تأتي هنا فائدة قاعدة المصطلحات (Term Base) حيث إنها تُخزن المصطلحات بها فقط وليس خلايا كاملة من الفقرات والجمل، الأمر الذي يسهل تعرف البرنامج على المصطلح وبالتالي عند تكرره يسهل اقتراحه عليك. كيفية إضافة مصطلحات جديدة لقاعدة المصطلحات نأتي لكيفية إضافة مصطلح جديد لقاعدة المصطلحات، ستقوم بالتظليل بالفأرة على المصطلح في اللغة المصدر ثم على ترجمة المصطلح في اللغة الهدف وتضغط (Ctrl+F2) وهذه هي أسهل وأسرع طريقة. البحث في قاعدة المصطلحات إذا أردت البحث في قاعدة المصطلحات عن مصطلح سبق وأن ترجمته، فعليك الذهاب إلى الصندوق الموجود بالأعلى على اليمين المسمى (Termbase Search) وتكتب المصطلح في خانة البحث ومن ثم سيعرض عليك البرنامج النتيجة. لماذا قد لا تظهر بيانات بوحدات الترجمة وكيفية حل تلك المشكلة؟ من الوارد جدًا حدوث العديد من المشكلات أثناء استخدام البرنامج، ولكنني اخترت هذه المشكلة تحديدًا لأنها من أكثر المشكلات شيوعًا خاصة أمام المبتدئين كما إنها محبطة للغاية لأنها تشعرك أنه لا جدوى من استخدام البرنامج لأن ما ترجمته لا يظهر وبالتالي لا يمكنك الاستفادة منه. ملحوظة: المقصود بوحدات الترجمة هي الوحدات التي تتكون منها ذاكرات الترجمة والتي لابد أن تظهر بعد الانتهاء من الترجمة في قسم ذاكرات الترجمة، لمزيد من التوضيح انظر الصورة أدناه. إذا ظهرت لديك تلك المشكلة فتأكد أولًا من إضافتك لذاكرة الترجمة في مشروعك وذلك من خلال ضبط المشروع (Project Settings) الموجود أعلى اليسار في المشروع. ثم تأكد من أن جميع الخلايا التي ترجمتها يظهر أمامها علامة القلم وعلامة الصح الأخضران-نفس الرمز الموضح بالصورة التالية أمام كلمة لا ينطبق- لأن الترجمة لا تنتقل إلى ذاكرة الترجمة إن كانت على وضع المسودة والذي يظهر فيها قلم أزرق أمام الخلية- نفس الرمز الموضح بالصورة التالية أمام كلمة لا. وأخيرًا عليك تحديث ذاكرة الترجمة العامة وذاكرة ترجمة المشروع من خلال القائمة المنسدلة بالمهام المجمعة (Batch Tasks) واختيار (Update Main Translation Memories) وبعد الانتهاء اختار (Update Project Translation Memories) من نفس القائمة المنسدلة. ومن ثم أعد فتح ذاكرة الترجمة من قسم ذاكرات الترجمة، في الغالب ستجد أن المشكلة قد حُلت وستظهر وحدات الترجمة أمامك. كيفية حفظ ما ترجمته بملف وورد وهنا تأتي المرحلة الأخيرة، فبعد الانتهاء من ترجمة الملف فأنت ترغب في حفظه بملف وورد لإرساله للعميل، يمكنك فعل ذلك بخطوات بسيطة: اضغط على القسم الملف (File) بأقصى اليسار بالأعلى، ستظهر لك الصفحة الموضحة بالصورة التالية: اختر (Save Target As) سيظهر لك صندوق حوار، اكتب اسم الملف واختر المكان الذي تود حفظه فيه، واضغط حفظ (Save) وبهذا أخيرًا حصلت على ملفك مترجمًا ومنسقًا. مصدر رائع في حالة واجهتك مشاكل مع ترادوس (Trados) في المستقبل من الطبيعي والوارد جدًا حال استخدامك لأي تقنية أو برنامج أن تعترض طريقك بعض المشكلات، لذا سأقترح عليك مصدرين مفيدين في ذلك الأمر- وذلك بخلاف طبعًا صفحات المساعدة المسبقة الموجودة على الموقع الرسمي لترادوس- الأول: قسم الأسئلة في البرامج والتطبيقات في أكاديمية حسوب حيث يمكنك طرح سؤال ليجيب عليه المستخدمون الأخرون للبرنامج، فإذا لم تجد إجابة لسؤالك يمكنك الانتقال للمصدر الأخر-هذا المصدر باللغة الإنجليزية ولا يدعم العربية إلا عن طريق الترجمة الآلية- ألا وهو: مجتمع ترادوس حيث يمكنك البحث عن مشكلتك في المشكلات السابقة ومن ثم تجربة نفس الحل المقترح ويمكنك أيضًا إنشاء منشور جديد لترسل به مشكلتك حتى تجد الدعم من خدمة عملاء ترادوس. الخاتمة بوصولك لهذه السطور وتطبيقك للخطوات السابقة خطوة بخطوة تكون قد تعلمت أساسيات برنامج ترادوس المميز، أقدم وأشهر برامج الترجمة بمساعدة الحاسوب (CAT Tools)، النصيحة التي أود أن أشاركها معك/معكِ في هذه المرحلة، هي أنه في البداية قد تشعر بعدم راحة أثناء استخدام ترادوس نتيجة لاختلاف العمل عليه عن العمل بالطريقة التقليدية، لكن مع مرور الوقت ستعتاد العمل عليه وسيصبح برنامج المفضل، وأنصح باستخدامه يوميًا ولو على ترجمة بضع فقرات فقط وهي نصيحة مبنية على تجربة وخبرة سابقة. اقرأ أيضًا المقال السابق: بدء استخدام ترادوس (Trados) وضبط ذاكرة الترجمة فيه لمحة عن برنامج ترادوس أهم برامج الترجمة عبر الحاسوب CAT
    1 نقطة
  37. تعرفنا في المقالة السابقة على فوائد برنامج ترادوس وكيف يمكنه مساعدتك في عملك كمترجم عن طريق توفير الكثير من الوقت والجهد. سنتعرف في هذه المقالة على كيفية الحصول على برنامج ترادوس، وما هي الأقسام الرئيسية (tabs) به. كيفية الحصول على برنامج ترادوس وازنا في المقالة السابقة بين أسعار برنامج ترادوس والخطط المختلفة التي تعرضها الشركة، يمكنك الرجوع إليها لتعلم ما يناسبك منها، والشراء من الموقع الرسمي للشركة، أما إذا كنت لم تحسم أمرك بعد، فيمكنك الاستفادة من التجربة المجانية التي توفرها الشركة لمدة ثلاثين يومًا، مع العلم أنه لا يمكنك الاستفادة من هذه التجربة المجانية إذا كان قد سبق لك تثبيت أي نسخة من برنامج (SDL Trados Studio 2021) أو قد استفدت من تلك التجربة المجانية مسبقًا. كل ما عليك فعله هو أن تملأ البيانات المطلوبة في الرابط أعلاه-لا تقلق لن يطلبوا منك بيانات بطاقتك الائتمانية- وتضغط إرسال (Submit) وتبدأ عملية التنزيل خلال ثوان، لتبدأ رحلتك الماتعة والقيمة في استخدام واحد من أفضل وأشهر برامج الترجمة بمساعدة الحاسوب (CAT Tools) على الإطلاق. كيفية تثبيت برنامج ترادوس تثبيت برنامج ترادوس عملية سلسة وسهلة للغاية، لكن قبل شرحها يجب أن تتأكد من أن لديك الإمكانيات التالية على حاسوبك: *- يُفضل أن تستخدم متصفح غوغل كروم (Google Chrome) أو فايرفوكس (Firefox) كمتصفحك الافتراضي. يجب أن يكون لديك أحدث نسخة من انترنت اكسبلورر. نظام التشغيل: ويندوز 7 أو النسخ الأحدث. يجب أن تفتح جهازك كمدير (ADMIN) وليس كضيف (guest) بعد إتمام عملية التنزيل، اضغط على الايقونة وستبدأ عملية التثبيت فورًا، وعند اكتمالها سيظهر لديك على سطح المكتب رمزًا مختصرًا للبرنامج، اضغط عليه، والآن مبارك أصبحت مستعدًا للعمل على برنامج ترادوس. واجهة المستخدم والأقسام الرئيسية بمجرد ضغطك على الرمز المختصر لبرنامج ترادوس، سيفتح معك البرنامج تلقائيًا وستظهر لديك واجهة المستخدم التالية (قد تكون هناك بعض التغييرات الطفيفة نظرًا لاختلاف نسخ البرنامج)، ستجد الأقسام الرئيسية التي سأشرحها تباعًا: قسم الترحيب (Welcome) وهو أول قسم ستجده مفتوح أمامك بصورة افتراضية، وبها أربعة أقسام فرعية: الصفحة الرئيسية (Home)، ابدأ (Get Started)، مصادر أكثر (More Resources)، وأخر الأخبار (Latest News). الصفحة الرئيسية (Home) في بداية ذلك القسم، ستجد خيارًا بسحب الملف (drag) أو البحث عنه (browse) الذي ترغب في ترجمته، وأسفل منه ستجد خيارًا بفتح حزمة المشروع (Open Project Package)، وهذا إذا كنت ترغب في العمل على ملف أُرسل لك في الصيغة الخاصة لمشروعات ترادوس. يأتي بعده، فتح مشروع مشارك مع مجموعة (Open Trados GroupShare Project)، وهذا إذا كنت تريد العمل ضمن فريق على نفس الملف، وأخيرًا هناك سحابة اللغة (Language Cloud) وهي تزودك بمصادر للترجمة الآلية العصبية. ابدأ (Get Started) بهذا القسم عدة روابط تزودك بمصادر للتعلم الذاتي لاستخدام البرنامج، بعض هذه الروابط للقراءة والبعض الأخر فيديوهات توضيحية، كما به رابط القناة الرسمية على اليوتيوب والتي يمكنك من خلالها متابعة كل جديد تنشره الشركة عن برامجها. مصادر أكثر (More Resources) بهذا القسم إرشادات أيضًا ولكنها ربما أكثر تحديدًا عن القسم السابق، فستجد ملاحظات عن الإصدار الذي تستخدمه بالإضافة إلى رابط لنظام المساعدة تبحث فيه عن أي مشكلة قد تواجهك أثناء استخدامك للبرنامج والحل المقترح لها. علاوة على دليل الانتقال من إصدار لأخر، فإذا كنت تستخدم مثلًا إصدار 2019 وتريد تحديثه لتستخدم إصدار 2021 فسيزودك هذا الدليل بالفروق الجوهرية بين الإصدارين ليجعل استخدامك أسهل. وأخيرًا، يوجد بذلك القسم رابط لمتجر التطبيقات الخاص بـ(SDL) والذي يحتوي على العديد من التطبيقات المجانية -لكن يُشترط حصولك على رخصة لاستخدام البرنامج- التي تثري من تجربتك في استخدام البرنامج. آخر الأخبار (Latest News) هذا القسم هو الأخير ضمن قسم الترحيب، وهو يعرض تلقائيًا الأخبار الجديدة للشركة وجميع المستجدات بها. قسم "المشاريع" (Projects) تظهر بهذا القسم جميع المشاريع الموجودة سواء التي لم تبدأ العمل بها بعد أو التي تعمل عليها أو التي أتممتها. هناك أربعة أقسام فرعية بهذا القسم وكل قسم فرعي به عدة أقسام أخرى، لذا سأشرح فقط أهم تلك الأقسام وأكثرها استخدامًا. قسم "الصفحة الرئيسية" (Home) المندرج تحت قسم "المشاريع" (Projects) يحتوي هذا القسم على أهم الوظائف التي ستحتاجها أثناء استخدامك للبرنامج، بدايةً من إنشاء "مشروع جديد" (New Project) إلى فتح مشروع قائم بالفعل، إلى تحكم في ضبط مشروعك (Project Settings). بالإضافة إلى القيام بمهمات مجمعة (Batch Tasks) والتي تحتوي على عشرات المهمات، أهمها على الإطلاق تحديث ذاكرة الترجمة الرئيسية وتحديث ذاكرة ترجمة المشروع. أظن تلك هي أهم الوظائف وأكثرها استخدامًا في ذلك القسم لننتقل إلى القسم التالي الملفات (Files). قسم الملفات (Files) ولا يوجد الكثير في هذا القسم للتعرف عليه، فهو يختص بإظهار الملفات التي يحتوي عليها كل المشروع وإضافة المزيد منها من خلال (Add Files) أو حذفها (Delete Files). قسم التقارير (Reports) أيضًا لا يوجد الكثير لنستعرضه في هذا القسم، فهو يظهر لك مختلف التقارير التي يقوم بها وهناك عدة تقارير، أهمها تقرير تحليل الملفات (Analyze Files) وهو يظهر العديد من الاحصائيات كعدد الإجمالي للكلمات وكم كلمة مكررة وكم كلمة جديدة وكم كلمة يوجد توافق بينها وبين الكلمات الموجودة بذاكرات الترجمة وما هي نسبة هذا التوافق إلى أخره. قسم المحرر (Editor) يُعد هذا القسم من أهم الأقسام إذ أن غالبية المهام التي ستقوم بها موجودة به. فبعد إنشاء المشروع واضافة الملفات إليه، ستفتح هذا القسم لتبدأ العمل على الترجمة. هناك قسمان مشتركان بين قسم المشاريع وقسم المحرر، ألا وهما: ضبط المشروع (Project Settings) هذا القسم به العديد من المزايا وهي في حالة إغفالك لإنشاء ذاكرة ترجمة أو قاعدة بيانات فيمكنك تدارك هذا الأمر عن طريق إنشاء ذاكرات ترجمة أو استخدام ذاكرات موجودة بالفعل، من خلال هذا القسم. وأما القسم الثاني فهو: مهمات مجمعة (Batch Tasks) الذي سبق وأن أعطيت نبذة عنه في قسم المشاريع. يلي ذلك الأقسام خاصة بالتنسيق، مع العلم بأن البرنامج يطبق التنسيق الخاص بالملف الأصلي على الملف الهدف تلقائيًا، لكن فائدة هذا القسم تأتي في حالة رغبتك إدخال تنسيقات إضافية. ثم قسم الإدراج السريع (Quick Insert) في حالة رغبت في إدراج بعض الرموز أو أردت تظليل نصًا محددًا. يليه بحث التماثل (Concordance Search) وهي وظيفة مهمة جدًا إذ تمكنك من البحث في جميع الذاكرات الترجمة عن كلمة أو عبارة ما وإظهار النتائج لها، ومن ثم التنقل بين الترجمات السابقة لها واختيار أحدها لتطبيقه. قسم المصطلحات (Terminology) وهذا القسم لن يكون مفعلًا إلا إذا أنشأت قاعدة بيانات (Term Base) عند إنشائك للمشروع، وهو يمكنك من إظهار الترجمات للمصطلحات وإضافة مصطلحات جديدة، أما البحث فيمكنك القيام به في قواعد البيانات المختلفة الموجودة لديك عن طريق المستطيل الذي يقع تحت قسم إجراءات الخلايا (Segment Actions) وهو يُسمى (Termbase Search). غالبًا لن تحتاج للقسم التالي ألا وهو التأكيد (Confirm) -لأنني سأشرح اختصارًا سريعًا يُغني عن استخدامه- والمقصود به التأكيد على صحة الترجمة ومن ثم إضافتها لذاكرة الترجمة. إجراءات الخلايا (Segment Actions) أيضًا غالبًا لن تحتاج لهذا القسم إلا إذا رغبت في دمج عدة خلايا مع بعضها أو شعرت أن هناك خلية كبيرة وأردت تقسيمها لخليتين (المقصود بالخلية هي تلك الحقول التي يقسم ترادوس الملف إليها ويكون مقابل كل خلية خلية فارغة لتضيف الترجمة فيها). قسم الملاحة (Navigation) وذلك إذا أردت الانتقال لخلية معينة وهو يتيح لك الانتقال إما برقم الخلية أو فئتها-المقصود بالفئة: خلية غير مترجمة، أو الخلية التي يوجد توافق بنسبة 100% بينها وبين خلية سابقة...إلخ- أو حالتها-مسودة، مُترجمة، غير مُترجمة…إلخ- أو الخلايا التي بها تعليقات. وأخيرًا قسم التحرير وبه وظائف البحث(Find) والاستبدال(Replace) واختيار الكل (Select All) وهذا أيضًا يوجد اختصارات -سنشرحها في وقتها- تغنينا عن اللجوء إليه. هناك خياران مهمان في قسم المراجعة (Review) بقسم المحرر ألا وهما تتبع التغيير (Track Change) وهو يعمل على الملف الهدف في حالة مراجعة ترجمة ملف مثلًا وتريد إبراز ما قمت بتغييره. والخيار الآخر هو التدقيق الاملائي (Spell Check) هو يعمل بصورة مشابهة لتلك الموجودة في برنامج مايكروسوفت وورد. الخاتمة ذلك كان عرضًا سريعًا لأهم الأقسام الموجودة بترادوس وأكثرها استخدامًا، والآن بعدما أصبح البرنامج مألوفًا لديك وكسرت حاجز الخوف، استعد لإطلاق أول مشاريعك على ترادوس والذي ستتعلم كيفية إنشائه في المقالة الثالثة. اقرأ أيضًا المقال التالي: بدء استخدام ترادوس (Trados) المقال السابق: لمحة عن برنامج ترادوس أهم برامج الترجمة عبر الحاسوب CAT
    1 نقطة
  38. إذا كنت تتابع سلسلة مقالات ترادوس منذ أول مقالة، لمحة عن برنامج ترادوس أهم برامج الترجمة عبر الحاسوب CAT، فمن المفترض أنه أصبح لديك الآن برنامج ترادوس-سواء النسخة المجانية أو النسخة المدفوعة- كما أنك قد أصبحت على دراية بالأقسام الرئيسية في البرنامج وأنك مستعد الآن للبدء في استخدام البرنامج والتمتع بمزاياه المختلفة. بادئ ذي بدء، هناك طريقين لتبدأ فيهما مع ترادوس، فإما أن تبدأ مباشرة في إنشاء المشاريع وفي تلك الحالة ستكون أول ذاكرة ترجمة (Translation Memory) لديك هي تلك التي ستنشئها مع أول مشروع، وبالتالي ستستفيد منها فقط إذا تكررت نفس الكلمات والعبارات بنفس المشروع كما إنك ستستفيد منها في الملفات الأخرى بنفس المشروع -إن كان يحتوي على عدة ملفات- وأخيرًا ستستفيد منها في المشاريع اللاحقة أيضًا، وهذا الطريق هو الأنسب إذا كنت مترجمًا مبتدئًا. أما إذا كنت مترجمًا متمرسًا لديك عشرات الملفات المترجمة بالفعل والتي ترغب في الاستفادة منها في تغذية ذاكرات الترجمة في البرنامج، فالطريق الثاني هو الأنسب لك، ومن حسن الحظ أن هناك طريقتين للاستفادة من الملفات المترجمة لديك، سأشرحهما تباعًا. طريقتين لتغذية ذاكرات الترجمة ملحوظة: إذا لم يكن لديك ملفات مترجمة ولكنك تريد تعلم هذه المهارة، فيمكنك تحميل قرار الأمم المتحدة بالعربية والإنجليزية، والسير على الخطوات التي سأشرحها تاليًا: الطريقة الأولى: المحاذاة التلقائية افتح البرنامج واضغط على قسم الترحيب (Welcome)، ثم أختر محاذاة المستندات (Align Documents) الموجود بالأعلى بقسم الصفحة الرئيسية (Home) واختر أول اختيار (Align Single File Pair). ستظهر لك نافذة ستختار منها أولًا ما إذا كنت ستضيف ذاكرة ترجمة موجودة بالفعل من خلال الضغط على (Add) أو ستنشئ واحدة جديدة من خلال (Create) وبفرض إن هذه أول مرة تستخدم البرنامج فسنختار (Create) وسنختار الخيار الأول (New File-based Translation Memory) وبذلك ستحفظ ذاكرة الترجمة لديك على جهازك. ستظهر نافذة أخرى بها عدة حقول، تجاهل أول حقل (Create From) لأنه يفترض وجود ذاكرة ترجمة مسبقة وتريد الاستفادة منها والتعديل والإضافة عليها، وستكتب مباشرة الاسم الذي ترغب في إطلاقه على ذاكرة الترجمة في الحقل (Name) بعده حقليين غير الزاميين ألا وهما الوصف (Description) وتضيف فيه وصفًا لذاكرة الترجمة إذا رغبت في ذلك، والحق الثالث حق المؤلف (Copyright) وتكتب فيه من يملك حق المؤلف هل أنت أم شركة الترجمة التي تعمل لديها أم العميل، ثم يأتي حقل (Location) تختار منه من خلال الضغط على (Browse) المكان الذي ترغب في حفظ ذاكرة الترجمة به. بالأسفل ستختار لغة المصدر (Source Language) وهي لغة الملف الذي ترغب في ترجمته -في الصورة السابقة اخترت اللغة الإنجليزية-وبعده (Target Language) وهي اللغة التي ترغب في ترجمة الملف إليها-اخترت اللغة العربية-، ثم تضغط إنهاء (Finish) وتنتظر حتى يكتمل الإنشاء ثم تضغط إغلاق (Close). بذلك سيكون لديك ذاكرة ترجمة جديدة وفارغة وستجد أنها قد أُضيفت تلقائيًا في نافذة المحاذاة التي لا تزال مفتوحة ويبقى عليك فقط إضافة الملف المصدر (Source File) والملف الهدف (Target File) ثم تضغط إنهاء (Finish). *سيمر بعض الوقت ريثما يحاذي البرنامج بين الملفين والمقصود بالمحاذاة هنا، هو تقسيم الملفين إلى عدة خلايا ومن ثم وضع كل خلية أمام ترجمتها، للأسف هذا لن يكون دقيقًا 100% بل ستضطر إلى التعديل عليه بنفسك، كما سنشرح تاليًا، وهذا من عيوب تلك الطريقة في المحاذاة. بعد الانتهاء سيفتح البرنامج تلقائيًا نتيجة المحاذاة ما عليك هو مراجعة تلك المحاذاة والتعديل عليها كما يلي: ستجد أن هناك خطوط توصل كل خلية من خلايا الملف الأصلي بخلية من خلايا الملف الهدف، والأمر لن يخرج عن احتمالين: الأول: أن تكون المحاذاة صحيحة والخليتين الأصلية والترجمة أمام بعضهما البعض وقتها ستضغط على اعتماد (Confirm) من قسم (Confirm) بالأعلى بقسم الصفحة الرئيسية (Home)، أو (Ctrl+Shift+F) أما إذا كانت جميع الخلايا صحيحة -وهذا نادرًا ما يحدث- فعليك الضغط على (Confirm All) أو (Ctrl+Alt+F). الثاني: أن تكون المحاذاة غير صحيحة وقتها ستضطر لتعديلها يدويًا بأن تضغط على الرقم الظاهر أمام كل خلية -سواء في النص الأصلي والمترجم- وتستمر في الضغط حتى تصل إلى الخلية الصحيحة في النص المقابل ثم تفلت الفأرة، وقتها سيظهر خط أخضر غير متقطع يربط بين الخليتين، في بعض الحالات الأخرى ستجد أنه عليك نقل بعض الكلمات من خلية لأخرى عن طريق القطع واللصق حتى يتقابل المعنيين في الخليتين. بعد إجراءك لعدة تعديلات يمكنك الضغط على إعادة المحاذاة (Realign) بقسم المهمات (Tasks) بالأعلى بقسم الصفحة الرئيسية (Home) حتى يعيد المحاذاة مجددًا بعد التعديلات التي أجريتها. بعد الانتهاء من المحاذاة واعتمادك لها، تأتي الخطوة التالية، ألا وهي تصدير نتائج المحاذاة لذاكرة الترجمة وذلك عن طريق حفظ نتائج المحاذاة أولًا من خلال حفظ (Save) بقسم المهمات (Tasks) بالأعلى بقسم الصفحة الرئيسية (Home)، يمكنك حفظ نتائج المحاذاة بصيغتين الأولى (sdlalign) وهذا في حالة رغبتك في مراجعة المحاذاة مرة أخرى في قسم المحاذاة؛ أما إذا كنت قد انتهيت من التعديل على المحاذاة واعتمدتها فالأنسب أن تختار صيغة (sdlxliff). بعد ذلك ستفتح ذاكرة الترجمة التي أنشأتها من قسم ذاكرات الترجمة (Translation Memories) على اليسار، ثم تضغط على استيراد (Import) بقسم المهمات (Tasks) بالأعلى بقسم الصفحة الرئيسية (Home)، وتضيف الملف الذي حفظته للتو من خلال (Add Files) في النافذة التي ستظهر، ثم اضغط إنهاء (Finish). والآن مبارك أصبح لديك أول ذاكرة ترجمة وستظهر أمامك وحدات الترجمة (Translation Units) المصدر والهدف أمام بعضهما البعض. تلك كانت الطريقة الأولى التي تمكنك من الاستفادة من الملفات المترجمة خارج برنامج ترادوس وإليك الطريقة الثانية المحاذاة اليدوية. الطريقة الثانية: المحاذاة اليدوية وهذه الطريقة هي ببساطة أنك ستسير على خطوات إنشاء المشروع أو ترجمة ملف واحد وإنشاء ذاكرة الترجمة الخاصة به. ثم بدلًا من كتابة ترجمة الملف ستقوم ببساطة بنسخ ولصق ترجمة كل خلية من ترجمة الملف المتوافرة لديك بالفعل. ولأن هذه الطريقة تتضمن معرفة كيفية إنشاء المشروع فعلينا الانتقال لهذه الخطو أولًا. كيفية ترجمة ملف واحد؟ وما الفرق بينه وبين إنشاء المشروع؟ الفرق الجوهري بين ترجمة ملف واحد (Translate Single File) وترجمة مشروع هو أنه يمكن في المشروع إضافة العديد من الملفات سواء أثناء إنشائه أو لاحقًا، أما الملف المفرد فهو يفترض أنك ترغب في ترجمة ملف واحد فقط فإذا رغبت بعد ذلك في إضافة ملفات أخرى فعليك إنشاء مشروع وإدخال هذا الملف كجزء منه. لترجمة ملف واحد فيمكنك ببساطة-حتى ولو لم يكن ترادوس مفتوحًا، النقر بالزر الأيمن للفأرة على الملف الذي تريد ترجمته وتختار (Translate in SDL Trados Studio) ثم تختار إما استخدام ذاكرة ترجمة موجودة بالفعل أو إنشاء واحدة جديدة بنفس الخطوات المذكورة أعلاه، وبعد الانتهاء سيُفتح لك الملف في المحرر (Editor) لتشرع في ترجمته. ملحوظة: كثيرًا ما ألجأ لتلك الطريقة السريعة في حالة رغبتي في معرفة ما إذا كان ترادوس قادرًا على دعم ملف ما أم لا، خاصةً في ملفات PDF التي تكون ممسوحة ضوئيًا من ملفات ورقية، حيث يحول ترادوس بعض تلك الملفات ببراعة إلى ملف قابل للترجمة والبعض الأخر لا. الخاتمة بذلك نكون قد تعلمنا طريقتين لتغذية ذاكرات الترجمة ببرنامج ترادوس من الملفات المتوافرة لدينا بالفعل، كما تعلمنا كيفية إنشاء ذاكرة ترجمة وكيفية ترجمة ملف واحد، بقي لدينا تعلم كيفية إنشاء مشروع (Project) وكيفية إنشاء قاعدة المصطلحات (Term Base) هذا ما سنتعلمه -بالإضافة إلى العديد من الوظائف المفيدة الأخرى بالبرنامج- في المقالة القادمة. اقرأ أيضًا المقال التالي: كيفية ترجمة المحتوى بالاستعانة ببرنامج ترادوس المقال السابق: تعرف على برنامج ترادوس (Trados) وأهم الأقسام فيه
    1 نقطة
  39. فلنفترض أنك تريد تشغيل دالة اسمها bounceBall أربع مرات. كيف يمكنك ذلك؟ هل ستختار الطريقة التالية؟: function bounceBall() { // bounce the ball here } bounceBall() bounceBall() bounceBall() bounceBall() يمكن أن تكون الطريقة أعلاه مناسبة إذا كنت تريد تنفيذ الدالة بضع مرات. مالذي سيحدُث إن احتجت لتنفيذ الدالة bounceBall مئة مرة؟ الطريقة الأفضل في هذه الحالة هي استخدام تعليمة التكرار الحلقي for. تعليمة التكرار الحلقي for تنفّذ تعليمة التكرار الحلقي for كتلة من التعليمات البرمجية بعدد المرات التي تريد. في ما يلي مثال على تنفيذ الدالة bounceBall عشر مرات: for (let i = 0; i < 10; i++) { bounceBall() } تتكوّن التعليمة for من أربعة أجزاء: العبارة الابتدائية initialExpression الشرط condition عبارة الزيادة incrementalExpression والجملة statement for (initialExpression; condition; incrementExpression) { statement } ستحتاج عندما تريد تنفيذ تعليمة تكرار حلقي إلى جملة برمجية Statement. الجملة هي كتلة الشفرة البرمجية التي تريد تنفيذها مرات عدّة. يمكنك كتابة أي شفرة ترغب بها مهما كان عدد أسطرها، كما يمكنك استخدام دوال. تأخذ التعليمة for الصيغة التالية عند استخدام الدالة bounceBall في الجزء الخاصّ بالجملة: for (initialExpression; condition; incrementExpression) { bounceBall() } ستحتاج كذلك إلى تعريف عبارة ابتدائية Initial expression تبدأ بها تعليمة التكرار الحلقي. هذا هو الجزء الذي تعرّف فيه متغيرا. من المتعارف عليه تسمية المتغير الابتدائي في تعليمة for بالحرف i وإعطاؤه القيمة 0. هكذا تبدو صيغة for عند تحديد عبارتها الابتدائية: for (let i = 0; condition; incrementExpression) { bounceBall() } نزيد قيمة المتغيّر (i في مثالنا) - أو ننقُصه - بعد تنفيذ الحلقة التكرارية لأول مرة، وذلك عن طريق عبارة الزيادة Incremental expression. لزيادة قيمة المتغير i بواحد نعيد إسناده بحيث يُصبح يساوي i + 1 أي بالعبارة i = i + 1. تُختَصر العبارة i = i + 1على ++i والتي يكثُر استخدامها في حلقات التكرار. لنقص قيمة المتغير i بواحد نعيد إسناده بحيث يُصبح يساوي i - 1، أي بالعبارة i = i - 1. تُختَصر العبارة i = i - 1 على --i. بالعودة إلى المثال مع الدالة bounceBall فإننا زدنا المتغيّر i في كل مرة بواحد. تصبح صيغة التعليمة for على النحو التالي: for (let i = 0; condition; i++) { bounceBall() } لكن… هل يجدُر بي زيادة قيمة المتغيّر أم النقص منها؟ توجد الإجابة في الجزء الأخير من تعليمة التكرار الحلقي for وهو الشرط. في حالة تحقّق الشرط - أي أن قيمته تساوي true - فإن الجملة الموجودة في التعليمة for تُنفَّذ وإلا فلا. ينفّذ مفسر جافاسكريبت عبارة الزيادة incrementalExpression مباشرة بعد تنفيذ الجملة statement ثم يتحقّق مجدّدًا من أن قيمة الشرط تساوي true فإن كان الأمر كذلك نفّذ الجملة statement مرة أخرى. يعيد المفسّر الكرة إلى أن تصبح قيمة الشرط false. حينها يتجاوز الحلقة التكرارية وينفّذ الشفرة التي تليها. إن لم تكن تريد تنفيذ الحلقة فيمكنك جعل قيمة الشرط مساوية لـ false منذ البداية: // لن تُنفَّذ الحلقة التكرارية التالية نظرا لأن قيمة الشرط تساوي false for (let i = 0; i < 0; i++) { bounceBall() const timesBounced = i + 1 console.log('The ball has bounced ' + timesBounced + ' times') } // ستُنفّذ الشفرة التالية فقط console.log('next line of code') ستكون نتيجة تنفيذ الشفرة أعلاه على النحو التالي: next line of code عندما تريد تنفيذ الحلقة التكرارية مرتين فستحتاج إلى تغيير الشرط بحيث تكون قيمته false بعد تنفيذ عبارة الزيادة مرتين: // ستُنفّذ الحلقة التكرارية التالية مرتين for (let i = 0; i < 2; i++) { bounceBall() const timesBounced = i + 1 console.log('The ball has bounced ' + timesBounced + ' times')") } console.log('next line of code') النتيجة: The ball has bounced 1 times The ball has bounced 2 times next line of code أما إذا أردت تشغيل الحلقة عشر مرات فسيتوجّب عليك تغيير الشرط بحيث تصبح قيمته false بعد تنفيذ عبارة الزيادة عشر مرات. // ستُنفّذ الحلقة التكرارية التالية عشر مرات for (let i = 0; i < 10; i++) { bounceBall() const timesBounced = i + 1 console.log('The ball has bounced ' + timesBounced + ' times')") } console.log('next line of code') النتيجة: الحلقات غير المحدودة Infinite loops نجد أنفسنا أمام حلقات غير محدودة عندما تكون قيمة الشرط في الحلقة التكرارية for مساوية دائما لـtrue، ممّا يتسبّب في تجمّد التبويب أو المتصفّح ونحتاج بالتالي لإغلاقه وإعادة تشغيله. استخدام الحلقات التكرارية مع المصفوفات Arrays في الواقع لن تحتاج كثيرا لاستخدام الحلقات التكرارية لتنفيذ دالة عشر مرات كما فعلنا مع الدالة bounceBall السابقة. أغلب استخدامات الحلقات التكرارية هو مع المصفوفات أو الكائنات Objects. يتمثّل التكرار عبر المصفوفة في المرور مرة واحدة على كل عنصُر في المصفوفة. بالإمكان استخدام طول المصفوفة (التابع length) في الجزء الخاص بالشرط من تعليمة التكرار. const fruitBasket = ['موزة', 'تفاحة', 'إجاصة'] // fruitBasket.length is 3 for (let i = 0; i < fruitBasket.length; i++) { console.log("توجد " + fruitBasket[i] + " في السلة") } النتيجة: توجد موزة في السلة توجد تفاحة في السلة توجد إجاصة في السلة هناك طريقة بديلة وهي استخدام عبارة نقص بدلًا من عبارة الزيادة، وذلك بالبدء من نهاية المصفوفة في العبارة الابتدائية ضمن تعليمة التكرار: for (let i = fruitBasket.length - 1; i >= 0; i--) { console.log("توجد " + fruitBasket[i] + " في السلة") } النتيجة (لاحظ الفرق): توجد إجاصة في السلة توجد تفاحة في السلة توجد موزة في السلة المرور على المصفوفات بالحلقة for of هناك طريقة ثالثة - أفضل بكثير - للمرور عبر مصفوفة، وهي استخدام تعليمة التكرار الحلقي for...of وهي تعليمة جديدة من إضافات المعيار ES6. تُكتَب التعليمة بالصيغة التالية const fruitBasket = ['موزة', 'تفاحة', 'إجاصة'] for (let fruit of fruitBasket) { console.log("توجد " + fruit + " في السلة") } النتيجة: توجد موزة في السلة توجد تفاحة في السلة توجد إجاصة في السلة يُفضَّل استخدام التعليمة for ...of بدلا من الطريقة التقليدية لاستخدام تعليمة التكرار الحلقي for عند التعامل مع المصفوفات فهي تمرّ على المصفوفة لمرة واحدة فقط، كما لا تحتاج إلى طول المصفوفة؛ ممّا يجعل قراءة الشفرة وصيانتها أيسر بكثير. يمكن استخدام التعليمة for ...of مع أي كائن لديه الخاصيّة Symbol.iterator. إن طبعت مصفوفة فارغة باستخدام التعليمة console.log فسترى أن لديها خاصيّة باسم Synmbol.iterator (ضمن المفتاح _proto_). العمليات المنطقية في الحلقات التكرارية يمكنك استخدام if/else أو أي عمليات منطقية أخرى داخلة حلقة for التكرارية. فلنفترض مثلا أن لديك مصفوفة بمجموعة من الأعداد وتريد إنشاء مصفوفة ثانية تتضمّن أعداد المصفوفة الأولى التي تصغُر 20. حتى تصل إلى هدفك فيجب أن تمرّ أولا على عناصر المصفوفة الأولى بحلقة for: const numbers = [25, 22, 12, 56, 8, 18, 34]; for (let num of numbers) { // سنكمل التعليمات بعد قليل } ثم نتحقّق ما إذا كان العنصُر الذي نمرّ عليه يقل عن 20. تصبح الشفرة كالتالي: const numbers = [25, 22, 12, 56, 8, 18, 34]; for (let num of numbers) { if (num < 20) { // نكمل بعد قليل } } إذا كان العنصُر أصغر من 20 نضيفه إلى مصفوفة أخرى. نستعمل التابع push لهذا الغرض. تصبح الشفرة كالتالي (smallerThan20 هو اسم المصفوفة الثانية): const numbers = [25, 22, 12, 56, 8, 18, 34]; let smallerThan20 = [] for (let num of numbers) { if (num < 20) { smallerThan20.push(num) } } ترجمة - بتصرّف - للمقال Understanding for loops لصاحبه Zell Liew.
    1 نقطة
×
×
  • أضف...