مقالات للمطورين

شرح لصيغ الترميز والعمل مع JSON ومواضيع أخرى مفيدة للمطورين، مع روابط إلى أدوات tulzy المقابلة عبر الإنترنت.

الترميز

Base64: ما فائدة الترميز وكيف يعمل

كيف يحوّل Base64 البيانات الثنائية إلى نص ASCII، ومتى نحتاج ذلك فعلاً.

Base32: ما الفرق بينه وبين Base64 ومتى يكون أنسب

أبجدية Base32 التي لا تميّز بين حالة الأحرف، والحالات التي تكون فيها أنسب من Base64.

URL Encode/Decode: الترميز بالنسبة المئوية في الروابط

كيف تتحول الأحرف الخاصة في العناوين والمعاملات إلى تسلسلات %XX.

HTML Entities: كيف تعرض الأحرف الخاصة بأمان

لماذا يجب الهروب من الأحرف < > & وكيف يمنع ذلك تعطّل الترميز.

JWT: بنية الرمز وماذا يعني "فك ترميز" JWT

الأجزاء الثلاثة لرمز JWT، ولماذا فك الترميز ليس نفس التحقق من التوقيع.

Unicode Escape: ماذا تعني تسلسلات \uXXXX

من أين تأتي تسلسلات مثل \u0041 في JSON وسلاسل جافاسكريبت، وماذا تعني.

ROT13 وشيفرة قيصر: استبدال بسيط للأحرف

لماذا تجعل إزاحة 13 حرفًا خوارزمية ROT13 عكسية ذاتيًا، ولماذا لا تزال تُستخدم اليوم.

Punycode: كيف تعمل النطاقات الدولية في DNS

كيف يتحول نطاق بأحرف غير لاتينية إلى صيغة ASCII تبدأ بالبادئة xn--.

شيفرة مورس: كيف يتحول النص إلى نقاط وشرطات

مبدأ ترميز الحروف كنقاط وشرطات، وأين لا تزال شيفرة مورس تُستخدم اليوم.

Data URI: متى تُضمَّن الصور مباشرة في الكود

كيف يضمّن Data URI محتوى الملف مباشرة في HTML أو CSS، ومتى يستحق ذلك العناء.

Gzip + Base64: ضغط البيانات لنقلها كنص

لماذا تُرمَّز البيانات الثنائية المضغوطة أيضًا بـ Base64 قبل وضعها في حقل نصي.

XML Entities: الهروب من الأحرف في مستندات XML

الكيانات الخمس الإلزامية في XML التي بدونها يتعطّل المستند أثناء التحليل.

JSON

JSON Formatter: التنسيق والتصغير والتحقق

التنسيق لسهولة القراءة، والتصغير لتقليل الحجم، والتحقق للتأكد من الصحة — ثلاث مهام مختلفة مع JSON.

JSONPath: كيف تبحث في بيانات JSON دون تحليل يدوي

كيف يتيح JSONPath استخراج القيم المطلوبة من JSON كبير بتعبير واحد بدلاً من التصفح اليدوي.

JSON Diff: كيف تختلف المقارنة البنيوية عن النصية

لماذا لا ينبغي أن يؤثر ترتيب المفاتيح على مقارنة مستندي JSON.

JSON Schema: كيف تصف وتتحقق من بنية JSON

كيف يتيح JSON Schema التحقق تلقائيًا مما إذا كانت البيانات تطابق العقد المتوقع.

JSON Flatten: تحويل بنية متداخلة إلى قائمة مسطحة

كيف يتحول JSON متداخل بعمق إلى قائمة مسطحة من المفاتيح مثل user.address.city.

JSON Sort Keys: لماذا نرتب مفاتيح الكائن

لماذا لا يُحدَّد ترتيب مفاتيح JSON رسميًا، لكن الترتيب يبقى مفيدًا عمليًا.

JSON Repair: لماذا يتعطّل JSON وكيف يُصلَح

الأسباب الشائعة لـ JSON «المعطّل» وما يمكن للإصلاح التلقائي تصحيحه وما لا يمكنه.

Mock JSON Generator: ما فائدة البيانات الوهمية

كيف تتيح البيانات الوهمية بدء بناء الواجهة قبل أن تكون الخلفية جاهزة.

JSON ↔ YAML/CSV/XML/TOML: متى ولماذا نحوّل

ما البيانات التي تُفقَد عند تحويل JSON إلى CSV، ولماذا يشيع YAML وTOML في ملفات الإعداد.

النص

camelCase وsnake_case وkebab-case: متى نستخدم كل صيغة

لماذا يوجد camelCase وsnake_case وkebab-case، وأين يُستخدم كل منها عادة.

Text Diff: كيف تعمل خوارزمية إيجاد الفروقات بين النصوص

كيف تجد خوارزمية الديف أصغر مجموعة تغييرات بين نسختين من نص.

التعبيرات النمطية: الأساسيات وفخّ المطابقة الجشعة

الفرق بين المطابقة الجشعة والكسولة في التعبيرات النمطية ولماذا يهم ذلك عمليًا.

فرز الأسطر: لماذا يختلف الفرز الأبجدي عن العددي

لماذا يعامل الفرز الأبجدي الأرقام كنص، وكيف يختلف ذلك عن الفرز العددي.

الهروب بالأحرف: لماذا يختلف حسب السياق (JS وJSON والشِل والريجكس)

لماذا لا توجد قاعدة هروب واحدة تصلح لكل السياقات: JS وJSON والشِل والريجكس.

CRLF وLF: لماذا لا تزال نهايات الأسطر تسبّب مشاكل

من أين جاء الفرق بين CRLF وLF، ولماذا لا يزال يسبب مشاكل مع git والسكربتات.

عدّ الأحرف والكلمات: لماذا يعتمد على يونيكود

لماذا يمكن أن يتكون رمز تعبيري واحد ظاهريًا من عدة نقاط ترميز في يونيكود.

Lorem Ipsum: من أين جاء نص الحشو ولماذا لا معنى له

من أين جاء نص Lorem Ipsum فعليًا، ولماذا يُستخدم نص بلا معنى بدلاً من نص حقيقي.

Slugify: كيف يتحول العنوان إلى رابط صالح

كيف يتحول عنوان مقالة إلى رابط نظيف وقابل للقراءة بشرطات.

Markdown: لماذا أصبح معيار التوثيق

لماذا يظل Markdown مقروءًا حتى في صورته الخام، بخلاف HTML.

المسافات غير المرئية: لماذا تفشل مقارنة نصين متطابقين ظاهريًا

كيف يمكن لمسافة غير مرئية أن تجعل مقارنة نصين متطابقين ظاهريًا تفشل.

عكس النص: لماذا يفشل مع الرموز التعبيرية

لماذا يكسر عكس النص الساذج الرموز التعبيرية المركّبة من عدة نقاط ترميز.

تحليل تكرار النص: من سحابة الكلمات إلى كسر الشيفرات

كيف ساعد تحليل تكرار الحروف تاريخيًا في كسر شيفرات الاستبدال البسيطة.

التجزئة/التشفير

Hash Generator: ما الفرق بين MD5 وSHA-1 وSHA-256

لماذا لا تزال MD5 تُستخدم للتحقق من سلامة الملفات، لكن ليس لكلمات المرور.

Checksum Verifier: كيف تتحقق من أن الملف غير تالف

لماذا يؤكد تطابق المجموع الاختباري سلامة الملف، لكن ليس من أنشأه.

HMAC: كيف تختلف التجزئة بمفتاح عن التجزئة العادية

لماذا لا يحمي SHA-256 العادي من التلاعب برسالة، بينما يحمي HMAC.

Bcrypt: لماذا تُجزَّأ كلمات المرور ببطء لا بسرعة

لماذا يُعدّ SHA-256 السريع خيارًا سيئًا لكلمات المرور، وbcrypt البطيء هو الخيار الصحيح.

UUID: كيف تُولَّد معرّفات لا تتكرر تقريبًا أبدًا

لماذا يمكن توليد UUID v4 بشكل مستقل على ملايين الأجهزة دون خطر التصادم.

مولّد كلمات المرور: ما الذي يجعل كلمة المرور قوية فعلًا

لماذا تكون كلمة مرور طويلة من كلمات القاموس أقوى من كلمة قصيرة برموز وأرقام.

AES: كيف يعمل التشفير المتماثل

لماذا يشفّر نفس المفتاح البيانات ويفكّ تشفيرها في AES، وكيف يختلف ذلك عن التشفير غير المتماثل.

Argon2: لماذا فازت هذه الخوارزمية بمسابقة تجزئة كلمات المرور

كيف تدافع Argon2 بشكل أفضل ضد الهجمات باستخدام بطاقات الرسوميات مقارنة بخوارزميات تجزئة كلمات المرور الأقدم.

Scrypt: لماذا تحتاج الخوارزمية إلى كل هذه الذاكرة

لماذا تتطلب scrypt عمدًا ذاكرة كبيرة لتصعيب الكسر على أجهزة ASIC.

TOTP: كيف تعمل الرموز أحادية الاستخدام في تطبيقات المصادقة

لماذا يعمل رمز Google Authenticator دون إنترنت ويتزامن مع الخادم عبر الوقت فقط.

PBKDF2: أقدم معيار لتمديد المفاتيح

لماذا يتزايد عدد تكرارات PBKDF2 الموصى به كل عام.

X.509: ماذا يوجد داخل شهادة SSL

ما الذي يتحقق منه المتصفح بالضبط في شهادة موقع قبل عرض القفل الأخضر.

PGP: كيف يعمل التشفير بمفتاح عام وخاص

لماذا يمكن مشاركة المفتاح العام لـ PGP بحرية، لكن ليس المفتاح الخاص أبدًا.

الوقت/الأرقام

وقت يونكس: لماذا تحسب الحواسيب الوقت منذ 1970

لماذا أصبح 1 يناير 1970 نقطة مرجعية للوقت في معظم أنظمة الحاسوب.

تعبيرات Cron: كيف تفكّ جدولة المهام

كيف تفكّ تعبيرًا مثل */15 * * * * وتعرف بالضبط متى ستُشغَّل المهمة.

أنظمة العد: لماذا توجد الأنظمة الثنائية والثمانية والسداسية عشرية

لماذا يُكتب اللون #FF5733 في CSS بأرقام سداسية عشرية لا عشرية.

العمليات على البتات: كيف تعمل AND وOR وXOR على مستوى البت

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

الفرق بين التواريخ: لماذا عدّ الأيام أعقد مما يبدو

لماذا قد يعطي طرح التواريخ ببساطة نتيجة خاطئة بسبب السنوات الكبيسة.

حساب العمر: لماذا ليس مجرد طرح سنوات

لماذا قد يعطي طرح سنة الميلاد ببساطة عمرًا أكبر بسنة من العمر الحقيقي.

المناطق الزمنية: لماذا لا يعني UTC نفس معنى GMT

لماذا لا يتغيّر UTC أبدًا مرتين في السنة، بينما يتغيّر توقيت لندن (GMT/BST).

حاسبة المدة: كيف تجمع الساعات والدقائق والثواني بشكل صحيح

لماذا يجب "ترحيل" الباقي إلى الخانة التالية عند جمع الدقائق والثواني، تمامًا كما في الجمع العشري.

ISO 8601 Duration: كيف تكتب مدة بصيغة قياسية

لماذا تعني الصيغة PT1H30M «ساعة و30 دقيقة»، لا «دقيقة و30 ساعة».

رقم الأسبوع: لماذا تحسب دول مختلفة الأسابيع بطرق مختلفة

لماذا ينتمي 1 يناير أحيانًا إلى الأسبوع 52 أو 53 من العام السابق وفق معيار ISO 8601.

الأرقام الرومانية: كيف يعمل نظام بلا صفر وبلا منازل

لماذا يعني IV الرقم 4 لا 6، وكيف تعمل قاعدة الطرح في الأرقام الرومانية.

IEEE 754: لماذا لا يساوي 0.1 + 0.2 القيمة 0.3 في الكود

لماذا تعرض تقريبًا كل لغات البرمجة نتيجة 0.1 + 0.2 كـ0.30000000000000004.

الرقم كتابةً: لماذا نحوّل الأرقام إلى كلمات

لماذا تكتب المستندات المصرفية المبلغ بالأرقام والحروف معًا.

الشبكة/HTTP

تحليل URL: من أي أجزاء يتكوّن عنوان الويب

لماذا يحتوي URL على جزء بعد رمز # لا يستقبله الخادم إطلاقًا.

Query String مقابل JSON: لماذا معاملات GET محدودة جدًا

لماذا تمرير مصفوفة أو كائن متداخل عبر سلسلة استعلام URL ليس بسهولة تمريره عبر JSON.

User-Agent: لماذا هذه السلسلة فوضوية إلى هذا الحد

لماذا تحتوي Chrome وSafari وEdge جميعها على كلمتَي "Mozilla" و"Safari" في User-Agent في آنٍ واحد.

Basic Authentication: كيف تعمل أبسط طريقة لحماية مورد HTTP

لماذا يتطلب Basic Auth بالضرورة HTTPS، لأن Base64 ترميز لا تشفير.

ترويسات HTTP: ما المخفي في كل طلب واستجابة

لماذا تحدّد ترويسة Content-Type كيفية تفسير المتصفح لجسم استجابة الخادم.

ملفات تعريف الارتباط: كيف يحفظ نص صغير حالة الجلسة

لماذا تحمي سمة HttpOnly ملف تعريف الارتباط من السرقة عبر كود JavaScript خبيث.

CORS: لماذا يحظر المتصفح طلبات "عادية" إلى نطاق آخر

لماذا يحدث خطأ CORS في المتصفح لا في الخادم، ومن الذي يحظر الطلب فعليًا.

ترويسات البريد الإلكتروني: كيف تتبع مسار رسالة من المرسل إليك

لماذا يجب قراءة ترويسات Received من الأسفل إلى الأعلى لتتبع مسار رسالة.

تطوير الويب

HEX وRGB وHSL: لماذا توجد طرق عديدة لكتابة اللون

لماذا يفضّل المصممون غالبًا HSL على HEX عند اختيار درجة لون يدويًا.

تصغير CSS: ما الذي يُحذَف فعليًا من الملف ولماذا

لماذا يعمل CSS المصغّر بنفس الطريقة تمامًا في المتصفح رغم أنه يصبح غير قابل للقراءة للإنسان.

تصغير JavaScript: الفرق بين التصغير والتعتيم

لماذا يمكن قراءة الكود المصغّر إذا أراد أحد ذلك، بينما لا يمكن قراءة الكود المعتّم.

تصغير HTML: لماذا تهم المسافات في الترميز أصلًا

لماذا يمكن أن يكسر حذف المسافات داخل <pre> أو textarea مظهر الصفحة، بخلاف أي مكان آخر تقريبًا.

تدرجات CSS: كيف يختلف linear عن radial وconic

لماذا يناسب conic-gradient الرسوم البيانية الدائرية بينما يعطي radial-gradient تأثير بقعة ضوء.

خوارزمية لون: كيف يُتحقَّق من صحة رقم البطاقة

لماذا لا يعني رقم بطاقة يجتاز فحص لون أن هذه البطاقة موجودة فعلًا.

IBAN: كيف يُبنى رقم الحساب المصرفي الدولي

لماذا الحرفان الأولان في IBAN هما رمز الدولة، لا جزءًا من رقم الحساب نفسه.

رموز QR: كيف يتّسع رابط داخل مربع من البكسلات

لماذا يظل رمز QR بشعار في المنتصف قابلًا للمسح رغم تغطية جزء من النمط.

الباركود: كيف يختلف Code 128 عن EAN-13

لماذا تستخدم المنتجات على أرفف المتاجر EAN-13 دائمًا تقريبًا بدلًا من Code 128.

صور Placeholder: لماذا تهم الصور الوهمية أثناء التطوير

لماذا يضع المطورون عمدًا مستطيلات رمادية بدلًا من صور حقيقية بينما التخطيط لا يزال قيد البناء.