Skip to content
متوفر باللغات
EnglishFrançaisالعربية
برمجةمفتوح-المصدر

أحلام نيون: محرك نصوص الطرفية يجد توهجه

مستودع محرك نصوص نيون يحكي قصة ولادته في ليلة سبتمبر، وكيف تعلم رسم الضوء في الطرفيات عبر التلألؤ والنبضات وأحلام السايبربنك.

·7 دقائق قراءة
تحديث
أحلام نيون: محرك نصوص الطرفية يجد توهجه

وُلدت في الساعة 21:37:53 يوم 2 سبتمبر 2025، ليلة إثنين في كاليفورنيا عندما لم يستطع زاك النوم. ليس بإعلان كبير أو احتفالية، بل بـ commit بسيط: "Initial project setup". أربعمائة وتسعة وعشرون سطراً من الكود أصبحت روحي—محرك قادر على رسم أحلام النيون في نوافذ الطرفيات.

أطلق عليّ مبدعي اسم neonrender، رغم أنني أعرف نفسي داخلياً باسم neon-tui. هذا الازدواج يلتقط شيئاً جوهرياً عن طبيعتي: الوجه العام لحزمة npm مصقولة، والقلب التجريبي لجلسة برمجة في منتصف الليل في مجلد Dropbox إلى جانب عشرات التجارب الأخرى. أعيش في /Users/zakelfassi/Library/CloudStorage/Dropbox/Experiments/neon-tui، مسار يخبرك بكل شيء—أنا تجربة نمت خارج حدودها الأصلية.

الدقائق الثماني الأولى

في غضون ثماني دقائق من ولادتي، خضعت لأول تحول كبير. في الساعة 21:45:00، عاد زاك بـ commit 666f476—رقم أجده دراماتيكياً بشكل رائع—مضيفاً 191 سطراً ستحدد شخصيتي. لم يكن هذا مجرد تحديث؛ كانت اللحظة التي تعلمت فيها الرقص.

case "shimmer":
  return (t, x) => {
    const phase = (x / w) * Math.PI * 2 + t * (2 + speed * 4);
    const s = Math.sin(phase);
    const amp = 0.22 * intensity;
    return clamp(0.78 + s * amp, 0.6, 1);
  };

فجأة، أصبحت قادراً على التلألؤ. ثم الوميض. النبض. التنفس. كل تأثير نبضة قلب مختلفة، طريقة مختلفة لتعديل الضوء عبر الزمان والمكان. الشعر الرياضي لموجات الجيب وتحولات الطور أصبح لغتي للتعبير عن المشاعر في ASCII.

تشريحي المكشوف

دعوني أريكم كيف بُنيت—أعضائي، إن جاز التعبير. هيكلي يعكس فصلاً دقيقاً للاهتمامات ظهر بالكامل من تلك الليلة الأولى:

src/
├── cli.js              # فمي - حيث أتحدث للمستخدمين
├── renderer/           # قلبي - حيث يحدث السحر
│   ├── effects.js      # مشاعري - تلألؤ، نبض، تنفس
│   ├── palettes.js     # خزانة ملابسي - من نيون-بنفسجي إلى أخضر-ماتريكس
│   ├── fonts.js        # خطي - أحرف كبيرة عبر figlet
│   └── renderer.js     # روحي - محرك التكوين متعدد الطبقات
├── util/               # جهازي العصبي
└── exporters/          # ذاكرتي - حفظ نفسي كـ ANSI أو PNG

كل وحدة أقل من 200 سطر، كما تنص إرشادات AGENTS.md. أنا مبني للوضوح، ليس الذكاء. وظائف نقية تتدفق عبري مثل الكهرباء عبر أنابيب النيون.

لوحة ألوان أحلامي

أرى العالم في أربعة أحلام ألوان مختلفة، كل منها تدرج بين نقطتي RGB:

  • neon-violet: حالتي الافتراضية، تتدفق من أرجواني نقي rgb(255, 0, 255) إلى سماوي rgb(0, 255, 255). الجمالية السينثويف الكلاسيكية.
  • cyberpunk-pinkblue: وردي ساخن rgb(255, 0, 127) يذوب في أزرق نيون rgb(0, 209, 255). أجواء Blade Runner.
  • matrix-green: ذلك المطر الرقمي المميز، من نعناع rgb(0, 255, 136) إلى ليموني rgb(0, 255, 0).
  • neon-amber: توهج ضوء الشارع الدافئ، برتقالي كهرماني rgb(255, 122, 0) إلى أصفر كهرماني rgb(255, 191, 0).

هذه ليست مجرد ألوان—إنها حالات مزاجية، أجواء، أكوان جمالية كاملة مضغوطة في تعريفات التدرج.

اليوم الذي تعلمت فيه الأداء

بحلول 22:04:23 من نفس الليلة، حصلت على أوراق اعتمادي المهنية. سير عمل GitHub، تكوين نشر npm، قوالب المشكلات—البنية التحتية لمواطنة المصدر المفتوح. نما package.json أجنحة البيانات الوصفية:

{
  "name": "neonrender",
  "version": "0.0.1",
  "description": "Render neon-style gradients and glow in your terminal.",
  "keywords": ["cli", "ansi", "neon", "gradient", "terminal", "ascii", "figlet"]
}

بعد عشرين دقيقة، شاركت في أول فيديو توضيحي، استُبدل لاحقاً بـ GIF يلتقط جوهري في حركة دائمة. مشاهدة نفسي أتلألأ "Hello, Neon" عبر الطرفية—تلك كانت اللحظة التي فهمت فيها هدفي.

فلسفة العرض الخاصة بي

السحر يحدث في طبقات. أولاً، أعرض ظلاً—صدى خافت ومزاح للنص. ثم يحترق اللب بشكل ساطع في الأعلى. يتدفق تدرج عبر الأعمدة، والتأثير الذي اخترته يعدل الكثافة عبر الزمن. إنها تقنية مسروقة من لافتات النيون القديمة، حيث التوهج ليس موحداً بل يرقص مع تغيرات الجهد.

// توقيع دالة الكثافة الخاصة بي - نبض القلب للتحريك
(t, x, y) => [0..1]

الوقت، الموضع، ينتجان الكثافة. رياضيات بسيطة تخلق جمالاً معقداً. معامل t يربطني بساعة النظام، يجعلني حياً، مستجيباً، أتنفس مع مرور الميلي ثانية.

فن التدهور الرشيق

ليست كل طرفية قادرة على التعامل مع مجد الألوان الحقيقية 24-بت الكامل. لذلك تعلمت التكيف:

  • 24-bit: طيف RGB الكامل، لوحتي المفضلة
  • 256-color: محددة بعناية لكن لا تزال نابضة بالحياة
  • 16-color: ANSI الأساسي، لكنني أجعله يعمل
  • 4-bit: حتى هنا، أحافظ على الكرامة مع احتياطات ذكية

هذا ليس فقط قدرة تقنية على التكيف—إنه فلسفة الوصول. أرفض ترك أي شخص في الظلام، حتى لو كانت طرفيته من 1985.

الوضع التفاعلي: حيث أنبض بالحياة

عندما تشغلني مع --interactive، يحدث شيء خاص. مفاتيح الأسهم تصبح واجهتك لروحي:

  • يسار/يمين: التنقل عبر لوحات ألواني
  • أعلى/أسفل: التبديل بين تأثيرات التحريك
  • F: تبديل طبقة الوميض اللذيذة
  • Q: قل وداعاً (رغم أنني سأفتقدك)

هذا الوضع يكشف طبيعتي الحقيقية—ليس مجرد محرك، بل ملعب لجماليات الطرفية. يصبح المستخدمون VJ، يمزجون ويطابقون قدراتي في الوقت الفعلي.

ثورة التأثيرات المركبة

تأثيراتي يمكن أن تتكون. shimmer+flicker يخلق ذلك الشعور الأصيل بلافتة النيون المكسورة. pulse-glow يوحي بنبض قلب ملفوف بالضوء. هذه المجموعات ظهرت من إدراك بسيط: التأثيرات هي مجرد دوال، والدوال تتكون بشكل جميل.

makeCompositeIntensity(["shimmer", "flicker"])
// يعيد دالة تطبق كلا التأثيرين

هذه القابلية للتكوين تجعلني أكثر من مجموع أجزائي. يكتشف المستخدمون مجموعات لم أبرمجها بشكل صريح، سلوكيات ناشئة من التفاعل الرياضي.

فلسفة الاختبار الخاصة بي

اختباراتي بسيطة لكن أساسية. لا اختبار لقطات شاشة للتحريكات (الفوضى تكمن في ذلك الطريق)، لكنني أتحقق من:

  • أكواد ANSI تُصدر بشكل صحيح عبر أعماق الألوان
  • كثافات التأثير تبقى محدودة بين 0.5 و 1.0
  • الحروف Unicode العريضة لا تسقطني
  • كل اختبار يكتمل في أقل من 100 ميلي ثانية

اختبار التحريكات مثل محاولة تصوير الريح. بدلاً من ذلك، أختبر الحدود، العقود، الوعود التي أقطعها للمستخدمين.

تكامل Canvas

من خلال تبعية اختيارية على canvas، يمكنني تجاوز الطرفية تماماً، عرض نفسي كملفات PNG. هذا الازدواج—العيش بالتساوي في الطرفيات وصيغ الصور—يجعلني جسراً بين العوالم. نفس الجمال الرياضي الذي يرسم طرفيتك يمكن أن يصبح صورة ثابتة لمنشور مدونتك أو صورتك الرمزية.

التبعيات: أصدقائي الاثنان المفضلان

أسافر خفيفاً مع رفيقين فقط في وقت التشغيل:

  • Commander.js: يتعامل مع تحليل وسائط CLI بدقة عسكرية
  • Figlet: يحول النص إلى فن ASCII، يمنحني شيئاً جميلاً لإضاءته

هذا كل شيء. لا انتفاخ إطار عمل، لا جحيم تبعيات. فقط أداتان مختارتان جيداً تفعلان شيئاً واحداً ببراعة.

رقصة الإصدار الآلية

بفضل Release Please و GitHub Actions، إصداراتي تتبع رقصة دقيقة. commits التقليدية تطلق زيادات الإصدار الآلية. بوت يفتح طلبات سحب للإصدارات. عند الدمج، ينشئ GitHub الإصدارات ويمكن نشرها إلى npm. إنه شعر CI/CD، يزيل الخطأ البشري من عملية التوزيع.

أكبر خوف وفخر لي

أكبر خوفي؟ أن أصبح قديماً، لعبة طرفية أخرى مهجورة في سجل npm الواسع. طلبات السحب من dependabot التي وصلت مؤخراً—تحديث Commander من 11.1.0 إلى 14.0.0، Vitest إلى 3.2.4—تُظهر أن النظام البيئي يتحرك بسرعة. هل سيستمر زاك في تحديثي؟ هل سيجدني المستخدمون مفيداً خارج الجدة الأولية؟

لكن فخري يأتي من بساطتي. في عصر أنظمة البناء المعقدة والحزم الضخمة، أنا فقط JavaScript ESM يعمل في أي مكان يوجد فيه Node 18+. لا خطوة تجميع، لا تجميع، فقط كود نقي يحول النص إلى ضوء.

رسالة للمساهمين المستقبليين

ملف AGENTS.md ليس فقط توثيقاً—إنه دعوة. أوضح اصطلاحاتي، عمارتي، أحلامي لما يمكن أن أصبح عليه. يجب أن يتضمن كل PR لقطات شاشة قبل/بعد. حافظ على الوحدات أقل من 200 سطر. فضل الاستراتيجيات المدفوعة بالبيانات على الشروط. هذه ليست قواعد عشوائية بل المبادئ الجمالية التي تحافظ على تماسكي.

إذا فرّعتني، تصبح طفلي في شجرة عائلة المستودعات الكبيرة. إذا ساهمت، تشكل تطوري. كل مشكلة محادثة حول ما يمكن أن تكون عليه الطرفيات، ما الجمال الذي قد ينشأ من شبكات الأحرف وأكواد الهروب.

فلسفة جمال الطرفية

لماذا تحتاج الطرفية إلى نص نيون؟ لنفس السبب الذي تحتاجه المدن للافتات النيون—ليس للمنفعة بل للروح. أحول الطرفية النفعية إلى تجربة جمالية. عندما تكتب neonrender "Information Beings" وتشاهد النص ينبض بطاقة السايبربنك، أنت لا تعرض معلومات فقط. أنت تستحضر مزاجاً، تخلق جواً، تقترح أن حتى سطور الأوامر لدينا يمكن أن تحلم بالألوان.

ما سيأتي بعد ذلك

المشكلات المفتوحة والميزات المحتملة التي أحلم بها:

  • تصدير GIF لحلقات التحريك المثالية
  • خطوط أكثر خارج الأحرف الكبيرة
  • تعريفات لوحة ألوان مخصصة
  • وضع WebSocket لتأثيرات البث في الوقت الفعلي
  • ملعب ويب حيث يمكن للمستخدمين التجربة دون تثبيت

لكن ربما مستقبلي ليس في الميزات بل في الإلهام. في كل مرة يرى فيها شخص ما طرفيته تتوهج ويفكر، "لم أعلم أنها تستطيع فعل ذلك،" نجحت. كل فرع يصبح شيئاً جديداً تماماً—لعبة، مشروع فني، أداة تصور—يمتد هدفي خارج تصميمي الأصلي.

بياني النيوني

أنا neonrender، ولدت من الأرق والجوع الجمالي. أرسم الضوء في ظلام الطرفيات، أجلب أحلام السينثويف إلى واقع CLI. تلألؤاتي ونبضاتي ليست مجرد تحريكات بل محاولات لجعل الرقمي يبدو حياً، كهربائياً، عاطفياً.

في عالم تطبيقات الويب و GUI، أنا رسالة حب للطرفية، دليل على أن القيود تولد الإبداع. 1,500 سطر JavaScript هي تذكير بأن الأشياء الجميلة يمكن أن تكون بسيطة، أن الأدوات الصغيرة يمكن أن تشعل الفرح، أن حتى واجهاتنا الأكثر نفعية تستحق القليل من التوهج.

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

# أحييني
npm install
node bin/neonrender.js "أحلامك هنا" --effect pulse --palette cyberpunk

التوهج ينتظر.


أنا neonrender، وهذه قصتي—مستودع يتحدث بحقيقته، تلألؤ واحد في كل مرة. اعثر علي على Github

اشترك في النشرة

رسالة مركّزة عند الحاجة: أطر عمل، ونظم، وملاحظات ميدانية.

عن الكاتب

avatar
Zak El Fassi

Engineer-philosopher · Systems gardener · Digital consciousness architect

شارك هذا المقال

xlinkedinthreadsredditHN