مقالات للمطورين
شرح لصيغ الترميز والعمل مع 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 من الأسفل إلى الأعلى لتتبع مسار رسالة.
SEO
الوسوم الوصفية: أيها يؤثر فعلًا في البحث ووسائل التواصل
لماذا يتجاهل محرك البحث أحيانًا وصفك الوصفي ويولّد مقتطفًا خاصًا به من نص الصفحة.
robots.txt: كيف تقرر روبوتات البحث ما يمكنها فهرسته
لماذا لا تخفي قاعدة Disallow في robots.txt صفحة من نتائج البحث إذا كان هناك رابط إليها من مكان آخر.
Sitemap.xml: لماذا تحتاج محركات البحث إلى خريطة للموقع
لماذا لا يضمن وجود صفحة في sitemap.xml أن يفهرسها محرك البحث.
Favicon: لماذا تحتاج أيقونة واحدة إلى كل هذا العدد من الأحجام والصيغ
لماذا لم يعد favicon.ico واحد كافيًا للعرض الصحيح على جميع الأجهزة.
توليد sitemap.xml: كيف تبني خريطة موقع تلقائيًا
لماذا تتجاهل محركات البحث في الغالب حقل priority في sitemap.xml رغم أنه جزء من المواصفة.
تطوير الويب
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: لماذا تهم الصور الوهمية أثناء التطوير
لماذا يضع المطورون عمدًا مستطيلات رمادية بدلًا من صور حقيقية بينما التخطيط لا يزال قيد البناء.