Tag: computer science

  • الربطُ أم الارتباطات؟ رحلة تعريب‏

    الربطُ أم الارتباطات؟.. رحلةٌ في تعريب مصطلح “Bindings” داخل ووردبريس

    أثناء عملي اليومي على تعريب نظام ووردبريس، وتحديداً في أثناء مراجعة ملفات ترجمة إحدى الإضافات المتعلقة بالتكامل مع الخدمات السحابية، وقفتُ أمام سؤال وجّهه إليّ أحد المطوّرين، بدا في ظاهره بسيطاً، لكنه حمل في طيّاته إشكاليةً لغويةً تقنيةً عميقة، إذ قال: “ما رأيكَ بـ ‘الارتباطات’ ترجمةً لمصطلح ‘Bindings’؟”

    ابتسمتُ في نفسي، لأن هذا السؤال تحديداً يُعدّ أحد المزالق التي تسقط فيها الترجمة الآلية، بل وحتى ترجمة المترجمين البشر حين يمرّون على النصوص البرمجية من دون تثبّت. والحقيقة أن كلمة “الارتباطات” هي ترجمة حرفية للمصطلح في المعجم العام، لكنها في سياق علوم البرمجة تصبح ترجمة خادعة، وذلك لأن “الربط” هنا يُعبّر عن فعلٍ أو عمليةٍ (Process) تربط بين عنصرين برمجيين؛ كربط دالة بمتغيّر، أو ربط مصدر بيانات بعنصر تحكّم في الواجهة. في حين أن “الارتباط” يحمل في دلالته معنى العلاقة المجرّدة أو الصلة المنطقية، وهو ما لا يعبّر عن الآلية التقنية التي تجري خلف الكواليس.

    وسرعان ما تلاه سؤال آخر، قال فيه: “حسناً، فما هو جمع ‘ربط’؟”. كان جوابي المباشر أن الجمع الصرفي الأقرب هو “رُبُوط”، غير أنني تريّثتُ قليلاً عند هذه النقطة، وتساءلتُ: هل يصحّ لي أن أكتب هذه الكلمة في واجهة مستخدم ووردبريس؟ تخيّل معي مدير موقع غير مختصّ تقنياً يقرأ جملة من قبيل: “تم حذف الربوط”! سيبدو الأمر غريباً على مسامعه، بل قد يظنّ أن هناك خطأً نحواً، أو أن الكلمة مقحمة من لهجة لا تتناسب مع النصّ الرسمي للنظام.

    وهنا تحديداً تبرز حِرفَة المختصّ في مجال التوطين، تلك التي تتجاوز الترجمة الحرفية إلى هندسة النصّ وفق مقاييس الاستخدام الواقعي.


    لماذا اخترتُ صياغة “عمليات الربط” وتجنّبتُ “ربوط”؟

    في جميع الترجمات التي أقدّمها لعملاء ووردبريس؛ سواءٌ كانوا مطوّرين أو أصحاب مواقع، أعتمد وبشكل ثابت صياغة “عمليات الربط” (عمليات + ربط) كمرادف جمعي للمصطلح. وهذا الخيار لم يأتِ جزافاً، بل استند إلى مجموعة من المبررات العملية واللغوية:

    1. الوضوح بالنسبة إلى المستخدم النهائي: إن إضافة كلمة “عمليات” تمنح المستخدم انطباعاً فورياً بأن هناك إجراءاتٍ تقنيةً تُنفَّذ في الخلفية. فعندما يقرأ مدير الموقع عبارة “جميع عمليات الربط”، فإنه يدرك أنّ الأمر يتعلّق بتكوينات أو مهام تقنية قابلة للحذف أو التعديل، لا أنّه بصدد “علاقات” غامضة بين الجداول.
    2. الانسجام مع المنهجية المُتّبعة في تعريب كبريات الشركات: إذا راجعتَ ترجمات كل من مايكروسوفت وأبل، أو حتى المشروع العالمي لتعريب ووردبريس نفسه، ستجدهم يُفضّلون صياغة المصادر التي تعبّر عن العمليات بهذا الأسلوب؛ فيقولون “معالجة البيانات” لا “بيانات”، و”عمليات التحديث” لا “تحديثات”، وذلك للحدّ من الالتباس وجعل النصّ أكثر احترافية.
    3. تجنّب الخلط القاتل مع مصطلحات أخرى: فلو اعتمدنا “الارتباطات” ترجمةً للمصطلح، لدخلنا في متاهةٍ من الالتباس لا تنتهي، وذلك لأنّ مستخدمي الويب بشكلٍ عام، وأصحاب مواقع ووردبريس بشكلٍ خاص، ألفوا كلمة “رابط” و”روابط” للدلالة على عناوين الصفحات والوصلات التشعبية (URLs). لذا، حين يقرأ مدير الموقع عبارة “تم حذف الارتباطات”، لن يخطر بباله أنّ الأمر يتعلق بعمليات ربط برمجية، بل سيفزع معتقداً أن الروابط الدائمة لموقعه أو وصلات التنقل الداخلية قد انقطعت أو أُزيلت! إنّ استخدام “عمليات الربط” يزيح كل هذا الغموض دفعةً واحدة، ويُبقي النصّ في إطاره التقني المحايد الواضح.

    تطبيق عملي: جملة صغيرة لكنها كبيرة

    في الأسبوع الماضي، بينما كنتُ أترجم رسالة تأكيد لإحدى الإضافات المتكاملة مع جداول بيانات جوجل، كان النصّ الإنجليزي كالتالي:

    “All bindings removed. Your Google Sheets are untouched.”

    كانت الترجمة الآلية السريعة ستعطي نتيجةً حرفية، مثل: “تمت إزالة جميع الربوط. جداول بيانات جوجل الخاصة بك لم تُلمَس”. ولكنني خرجتُ بالصياغة التالية، التي أرسلتها إلى العميل واعتمدها بعد مناقشة قصيرة:

    “تمت إزالة جميع عمليات الربط. ولم تتأثر جداول بيانات جوجل الخاصة بك.”

    ودعني أوضح لك أسباب اختياري لكلّ لفظة هنا:

    • “جميع عمليات الربط” بدلاً من “الربوط”: لأن المستخدم يرى في لوحة التحكّم قائمةً بهذه العمليات، وحذفها يعني حذف إعداداتها وتفكيك تكويناتها، لا حذف “كيانات” مادّية. وهذه الصياغة أشدّ أُنساً للنفس، وأكثر وضوحاً للفهم من الجمع المباشر.
    • “لم تتأثر” بدلاً من “لم تُلمَس” أو “سليمة”: لأن الفعل “تأثّر” هو الأقرب للتعبير الدارج في الرسائل النظامية الاحترافية. تخيّل رسالة من تطبيق بنكي تقول “حسابك لم يتأثر”، فهي أكثر طمأنةً واحترافية من عبارة “حسابك سليم” التي قد تحمل بعض الغموض.

    كلمة أخيرة إلى الزملاء المختصين

    التوطين في ووردبريس ليس مجرد استبدال كلمات من لغة إلى أخرى، بل هو هندسةٌ للنصّ، وغربلةٌ للكلمات بحيث يشعر المستخدم العربي بأن الواجهة صُنعت من أجله هو، لا أنها مجرّد شاشة عولمت بطريقة آلية. أنصح نفسي وإيّاكم باختبار الترجمات على مستخدمين حقيقيين، وألّا نتردّد في طرح السؤال الأهم: لو كنتُ مدير موقع لا يعرف الإنجليزية، فهل ستفيدني هذه الرسالة وتطمئنني؟

    شخصياً، تجنّبتُ استخدام “ربوط” في جميع مشاريعي الأخيرة، ونصيحتي لكم هي الاعتماد على “عمليات الربط” أو “إعدادات الربط” بحسب السياق، والابتعاد تماماً عن “الارتباطات” في النصوص البرمجية الحاسوبية. فلنثق بحاسة السمع العربية أكثر من ثقتنا بالمعجم وحده، فالمتلقّي العربي يسمع الكلمة ويحسّ بوقعها قبل أن يُمعن في تحليلها النحوي.

    وختاماً، أدعوكم لمشاركتي تجاربكم: هل واجهتم مواقف مشابهة مع مصطلحات برمجية أخرى؟ وما هي ترجمتكم المفضّلة لمصطلح “Binding” في مشاريعكم التوطينية؟

  • Using SED to edit a classic book

    Since I discovered that using TTS speeds up my reading of books, I have been using it almost daily for around a decade, and I am very happy with it.

    On my GNU/Linux computer, I use the “Read Aloud, TTS Voice Reader” browser extension to read books.

    Lately, I have developed a growing interest in classic Arabic books about the purification of the soul written by ابن أبي الدنيا Ibn Abi al-Dunya (823–894 CE).

    However, when I downloaded the books and converted them to .txt files for easier use with the extension, a considerable amount of time was lost to the TTS reading the three asterisks and the hadith, chapter, and page numbers, which appear hundreds of times throughout the book.

    See below as an example:


    6 - حَدَّثَنَا أَبُو خَيْثَمَةَ، وَإِسْحَاقُ بْنُ إِسْمَاعِيلَ، قَالَا: حَدَّثَنَا جَرِيرٌ، عَنِ الْأَعْمَشِ، عَنِ الْحَكَمِ بْنِ عُتَيْبَةَ، وَحَبِيبِ بْنِ أَبِي ثَابِتٍ، عَنْ مَيْمُونِ بْنِ أَبِي شَبِيبٍ، عَنْ مُعَاذِ بْنِ جَبَلٍ رَضِيَ اللَّهُ عَنْهُ قَالَ: قُلْتُ: يَا رَسُولَ اللَّهِ، أَنُؤَاخَذُ بِمَا نَقُولُ؟ قَالَ: «ثَكِلَتْكَ أُمُّكَ يَا ابْنَ جَبَلٍ، وَهَلْ يَكُبُّ النَّاسَ فِي النَّارِ عَلَى مَنَاخِرِهِمْ إِلَّا حَصَائِدُ أَلْسِنَتِهِمْ؟» قَالَ حَبِيبٌ فِي هَذَا الْحَدِيثِ: «وَهَلْ تَقُولُ شَيْئًا إِلَّا لَكَ أَوْ عَلَيْكَ»



    * * *



    الحديث: 6 ¦ الجزء: 1 ¦ الصفحة: 46





    * * *



    7 - حَدَّثَنِي حَمْزَةُ بْنُ الْعَبَّاسِ، أَخْبَرَنَا عَبْدَانُ بْنُ عُثْمَانَ، أَخْبَرَنَا عَبْدُ اللَّهِ، أَنَا مَعْمَرٌ، عَنِ الزُّهْرِيِّ، عَنْ عَبْدِ الرَّحْمَنِ بْنِ مَاعِزٍ، عَنْ سُفْيَانَ بْنِ عَبْدِ اللَّهِ الثَّقَفِيِّ قَالَ: قُلْتُ: يَا رَسُولَ اللَّهِ، حَدِّثْنِي بِأَمْرٍ أَعْتَصِمُ بِهِ. قَالَ: " قُلْ: رَبِّيَ اللَّهُ ثُمَّ اسْتَقِمْ ". قَالَ: قُلْتُ: يَا رَسُولَ اللَّهِ، مَا أَخْوَفُ مَا تَخَافُ عَلَيَّ؟ فَأَخَذَ بِلِسَانِهِ ثُمَّ قَالَ: «هَذَا»

    A SED command

    sed '/^\* \* \*$/d; /^الحديث:/d' الصمت_وآداب_اللسان.txt > editedالصمت_وآداب_اللسان.txt

    Explanation:

    • ^\* \* \*$ matches a line that contains exactly * * * (asterisk, space, asterisk, space, asterisk). The asterisks must be escaped with \ because * is a regex special character.
    • /^الحديث:/d deletes lines that start with الحديث:.
    • All other lines (narration chains, texts, and chapter headings) are kept.

    Output


    6 - حَدَّثَنَا أَبُو خَيْثَمَةَ، وَإِسْحَاقُ بْنُ إِسْمَاعِيلَ، قَالَا: حَدَّثَنَا جَرِيرٌ، عَنِ الْأَعْمَشِ، عَنِ الْحَكَمِ بْنِ عُتَيْبَةَ، وَحَبِيبِ بْنِ أَبِي ثَابِتٍ، عَنْ مَيْمُونِ بْنِ أَبِي شَبِيبٍ، عَنْ مُعَاذِ بْنِ جَبَلٍ رَضِيَ اللَّهُ عَنْهُ قَالَ: قُلْتُ: يَا رَسُولَ اللَّهِ، أَنُؤَاخَذُ بِمَا نَقُولُ؟ قَالَ: «ثَكِلَتْكَ أُمُّكَ يَا ابْنَ جَبَلٍ، وَهَلْ يَكُبُّ النَّاسَ فِي النَّارِ عَلَى مَنَاخِرِهِمْ إِلَّا حَصَائِدُ أَلْسِنَتِهِمْ؟» قَالَ حَبِيبٌ فِي هَذَا الْحَدِيثِ: «وَهَلْ تَقُولُ شَيْئًا إِلَّا لَكَ أَوْ عَلَيْكَ»



    7 - حَدَّثَنِي حَمْزَةُ بْنُ الْعَبَّاسِ، أَخْبَرَنَا عَبْدَانُ بْنُ عُثْمَانَ، أَخْبَرَنَا عَبْدُ اللَّهِ، أَنَا مَعْمَرٌ، عَنِ الزُّهْرِيِّ، عَنْ عَبْدِ الرَّحْمَنِ بْنِ مَاعِزٍ، عَنْ سُفْيَانَ بْنِ عَبْدِ اللَّهِ الثَّقَفِيِّ قَالَ: قُلْتُ: يَا رَسُولَ اللَّهِ، حَدِّثْنِي بِأَمْرٍ أَعْتَصِمُ بِهِ. قَالَ: " قُلْ: رَبِّيَ اللَّهُ ثُمَّ اسْتَقِمْ ". قَالَ: قُلْتُ: يَا رَسُولَ اللَّهِ، مَا أَخْوَفُ مَا تَخَافُ عَلَيَّ؟ فَأَخَذَ بِلِسَانِهِ ثُمَّ قَالَ: «هَذَا»

    The whole book has the asterisks separators and the numbers of page, chapter and hadiths deleted in no times not even 2 seconds.

    I ❤ GNU/Linux, FOSS and CLI

  • Cultivating Ongoing Learning and Personal Development

    Cultivating Ongoing Learning and Personal Development

    Embracing Continuous Training and Personal Growth

    The pursuit of continuous training and professional development aligns seamlessly with personal improvement and a healthy lifestyle. This synergy results in heightened energy levels, improved decision-making, and increased overall productivity.

    That’s why this article covers aspects related to both professional and personal development.

    I-As a Linguist

    Language Training

    Reading

    I engage in daily reading in both my primary languages, English, French, and my target language, Arabic. I delve into ebooks and articles using the Evie app for ebooks, the Pocket app for articles, and apps like Podcast Addict and Radio France for podcasts.

    The Evie and Pocket apps boast a Text-to-Speech (TTS) feature, enhancing my reading speed by audibly presenting documents. This technology not only makes reading more efficient but also enjoyable, supporting multiple languages, including English, French, and Arabic.

    Driven by curiosity, my reading extends beyond my translation specialties in medicine and technology. I explore diverse topics such as botany, gardening, cooking, marketing, business, fishing, psychology, and health. I’m even considering adding a new translation specialty related to one of these varied interests.

    Learning a New Language: Japanese

    During my time at the Bourguiba School of Modern Languages, I studied two levels of Japanese language studies through evening courses. However, upon relocating from the capital to my hometown, Nabeul, where Japanese courses were unavailable, I transitioned to online and mobile tools for learning.

    Over the past two years, my daily Japanese studies have predominantly focused on listening skills, grammar, Kana, and Kanji. I employ shadowing techniques and have joined a pen pal site to connect with native Japanese speakers. This exchange allows me to teach them a language I’m proficient in while they reciprocate by teaching me Japanese.

    This experience is not only a fantastic journey in merging business with pleasure but also an opportunity to forge new international friendships, explore a different culture, and learn a language vastly distinct from those I already know.

    Marketing

    Negotiation

    In my negotiations with Language Service Providers (LSPs), I successfully increased my net income. Gaining confidence in my skills, I meticulously reviewed numerous documents, uncovering basic inaccuracies by other linguists that left me perplexed and more aware of my competencies. Upholding strict work ethics, I consistently met deadlines and only accepted tasks I could execute proficiently and punctually. These principles fostered enduring relationships with several LSPs, built on trust, facilitating smoother negotiations.

    LinkedIn

    Guided by the insights from the free book “LinkedIn Riches,” I revamped my LinkedIn profile, with plans for an upcoming video. The author John Nemo affirmed its value, assuring a favorable return on investment. In the coming year, I intend to create a video showcasing my remote language services. Additionally, I established a LinkedIn business page for my freelance business, contemplating updates and additional content. Evaluating the time investment, I’m considering the pros and cons of dedicating more time to LinkedIn versus my website or other marketing strategies.

    Website Redesign:

    This year, I updated my website (https://www.fakhriazzouz.com/) using the user-friendly WordPress platform, drawing on my six-plus years of experience. Originally a blog, my site now features detailed services, testimonials, a contact form, and a new logo. While it still requires some fine-tuning, the ongoing enhancement is a continual process. Google Search Console provides automatic alerts about issues to address. Other tools like Lighthouse and WordPress Health Checker aid in the optimization.

    Writing

    Despite not writing as much as desired, I’m contemplating experimenting with shorter blog posts on my website, even if they are less than 300 words. To enhance my writing process, I employ voice recording for note-taking. Additionally, I use Speech-to-Text (STT) technology, where spoken words are transformed into text, a feature readily available for free on Google Docs and Android phones.

    Advancing My Technological Skills


    Open source contribution 

    In my pursuit of enhancing my technological expertise, I engaged in open-source contributions, focusing on WordPress documentation and translation this year. However, the journey encountered some bumps along the way. The project manager for documentation proved challenging to reach, impeding my contributions. Nevertheless, my role as a translator editor in WordPress was enjoyable, and the Arabic language general manager provided valuable insights that significantly improved my localization skills for technology.

    It’s essential to acknowledge that WordPress is an open-source project, and the managers contribute in their free time, which means their availability may vary due to other commitments.

    Years ago, I initiated my coding journey with a particular emphasis on WordPress. While I didn’t transition into a WordPress developer, I gained a foundational understanding of web development and computer programming basics. However, I faced challenges in finding adequate resources for a seamless grasp of this relatively older technology.


    Learning a new technology Dart / Flutter

    A glance at GitHub metrics revealed a substantial difference in popularity, with around 18k stars for WordPress compared to an impressive 160k stars for Flutter. This observation prompted a shift in focus towards Flutter and Dart, creations of the tech giant Google. This transition opened the doors to a wealth of documentation and training resources, providing a robust foundation for advancing my skills in Dart programming language and the Flutter UI framework.

    Dedicating a minimum of 10 hours per week to learning Dart and Flutter, I’ve found their modern features intriguing in comparison to WordPress. Flutter’s cross-platform capabilities, enabling developers to target various platforms with a single code base, caught my attention.

    The decision to shift to Flutter and Dart was driven by the vast opportunities they offer.

    As I delve into this refreshing experience, I anticipate exploring how creating mobile apps is not only more lucrative than developing WordPress plugins or themes but also more practical. Mastering a single programming language for various applications is a goal I aspire to achieve, making the entire process increasingly seamless. Having completed challenges in the Dart Apprentice book, I’m currently engrossed in exploring both Dart Apprentice Beyond the Basics and the Flutter Cookbook second edition, marking an exciting phase in this technological journey.

    Putting My Computer Skills to Work

    In my overall pursuit of becoming more business-savvy and enhancing my entrepreneurial skills, I am concentrating on the development of a mobile app. I already have a couple of ideas in mind, and to avoid falling prey to Parkinson’s Law, I am establishing a timeframe to commence building the app using Dart and Flutter.

    The key is to strike a balance between theory and practice. Consequently, I have planned to embark on app development after seven months of training on this new technology. This timeframe is deemed sufficient to consolidate the theoretical knowledge acquired.


    II-Personal growth

    Turning to personal development, I adhere to a routine that encompasses various aspects of maintaining both my mind and body. This includes activities such as walking, home exercising, prioritizing good sleep hygiene, daily reading, spiritual evolution, and a growing interest in healthy cooking.

    In terms of exercising

    I incorporate longer walks, arm and upper body strengthening exercises, and regular stretching into my routine. During the summer, swimming becomes a daily activity, sometimes even three times a day.


    Sleep

    To enhance efficiency and reclaim up to three hours daily, I’ve adopted the practice of starting work before sunrise. The time saved is utilized for productive activities such as going to the market, or the bank or engaging in leisure pursuits like fishing, cooking, or listening to podcasts and audiobooks.

    Reading



    Reading plays a pivotal role in my daily life, with a focus on nonfiction ebooks for at least three hours daily. Engaging with authors associated with high culture through reading contributes to enhancing strategic thinking and wisdom. Exploring psychology books with a focus on cognitive biases has been particularly enlightening, fostering personal development and improving decision-making abilities.


    Diet

    Adopting a healthy eating and cooking approach, I follow the Seignalet diet, which is very similar to the Asian diet that is, avoiding gluten and dairy and emphasizing steaming food.  Besides, when cooking I should not exceed 100 Degree Celsius.


    Minimalism


    The practice of minimalism translates into buying less and maximizing the use of existing possessions, contributing to a clutter-free and cost-effective lifestyle.


    Gardening

    In the realm of gardening, I’ve undertaken activities like planting succulents, mints, caring for a jasmine tree, and cultivating a citrus tree for regular mojito mocktails. Reading about home gardening has not only prevented basic mistakes but also deepened my understanding of composting and how to enhance the well-being of plants and trees.


    The main tools I use

    For productivity, I heavily rely on software tools such as Text-to-Speech, Speech-to-Text, Google Docs, WordPress, and Ubuntu. Reading ebooks and articles is facilitated by TTS apps like Evie and Pocket by Mozilla. Combining TTS with Google Docs expedites my writing process, with the added convenience of voice-typing integrated into Google Docs.

    WordPress remains my preferred CMS for building websites, a platform I’ve been using since 2017. For development and translation work, I turn to Ubuntu, especially when cloud-based or OmegaT-supported translation tasks are involved, given its faster performance compared to Windows 10.



    Conclusion

    Essentially, this expedition serves as evidence of the seamless integration of professional ambitions and personal flourishing. As the dedication to perpetual learning and advancement evolves, it vividly illustrates a comprehensive strategy toward mastery—a journey that welcomes challenges and nurtures a flourishing life.

  • Compress and archive files/directories in Gnu/Linux OS

    Compress and archive files/directories in Gnu/Linux OS


    Use Gzip to compress


    The standard zipping/compression program in Gnu/Linux OS is gzip that is Gnu Zip. The extension of Gzip is “.gz” or “.z

    To compress a single file only using gzip just:

    $ gzip filename


    To compress many files do as shown below:

    (more…)