COMPΞZ 🧬
الذهاب إلى القناة على Telegram
متخصص کامپیوتر و نرمافزار • سازنده • هنرمند و طراح • مجموعهدار • نویسنده • تحلیلگر • مشاور استارتاپی و ایدهپرداز 𐎲𐎴𐎠𐎼𐎴𐎫𐎹 𐏃𐎢𐎶𐎠𐎫𐎹 We create because the world deserves better code. https://linktr.ee/compez
إظهار المزيدلم يتم تحديد البلدالفئة غير محددة
369
المشتركون
+424 ساعات
+237 أيام
+3930 أيام
أرشيف المشاركات
369
+1
در مورد نحوهٔ انتقال فرامتن روی محتوای صفحههات سوألی بود که که بد نیست بدونید این CMS دارای یک ویرایشگر درون برنامهای هست به نام TGEditor به علاوهٔ پشتیبانی از Markdown.
ولی از سه نوع ویرایشگر دیگه مثل Quill و TinyMCE و CKEditor هم به صورت نصب از نوع افزونه پشتیبانی میکنه.
قدیما من با CKEditor زیاد کار کردم، گزینهٔ خوبیه.
در واقع کاربر میتونه هر نوع ویرایشگری که باهاش راحته رو انتخاب کنه.
البته تمرکز من این خواهد بود که TGEditor رو به دو حالت Compact و Pro توسعه بدم.
ولی خب از اونجایی که خیلیها روی سیستمهای دیگه با امثال TinyMCE و یا به سبک مارکدان گیتهاب هم عادت دارن اینارو هم پشتیبانی میکنیم.
369
اینطور که میبینم داریم باز قطع میشیم نه؟ توف تو قبرتون بیاد. تقی به توقی سریع خرخره ملت رو هدف بگیرید از صبح دو تا صفحه نتونستم باز کنم با این وضعیت نت شخمی! اینبار قطع بشیم من دیگه حوصله ندارم سرور بگیرم سرویس بسازم پول بدم به اون آروان دزدتر از خودتون.
369
یه زمانی مد شده بود هرچی اسکریپت یا سیستم میساختن میگفتن Non Blocking I/O هست خیلی خفنه! شعار تبلیغاتیشون شده بود این بخ خصوص اون اوایل وب ۳ که هرچی سایت میساختن با ریاکت و راست ترکیبش میکردن میگفتن ببین چقدر سریع و خفنه!
خب سریعترین CMS ای که توی عمرتون دیدین رو برای من معرفی کنید! تگرارو با همون مقایسه خواهم کرد. 🫡
369
خیلی چیزها از داخل کتابها میتونی پیدا کنی که تا به چشم نبینی، تا نخونی هیچ هوش مصنوعیای بهش اشاره نمیکنه و رعایتش هم نمیدمنه.
همین مثال ساده داخل همین کتاب
Software architecture with C++
میگه: خودت رو تکرار نکن!
یعنی چی؟ منظورش این نیست کد تکراری ننویس! میگه باید یک دانش، قانون، منطق یا تصمیم در پس زمینه یک منبع اصلی داشته باشه.
یعنی اگه فردا قانون تغییر کرد، مجبور مشی صد تا فایل رو تغییر بدی فقط به خاطر یه باگ یا یه ویژگی!
اینارو باید توی عمل ببینی و انجام بدی، و اگرنه خیلی جاها درکش به شدت نا مفهومه.
369
در خصوص برنامهنویس و مهندسی نرمافزار هم من خودم این کتابها رو خوندم یا PDF اشو و یا بعضیهاشونم دادم چاپ کردن فیزیکی خوندم.
📘 Effective Modern C++
📘 C++ Concurrency in Action
📘 Professional C++
📘 Programming: Principles and Practice Using C++
📘 A Tour of C++
📘 The C++ Programming Language
📘 Clean Architecture
📘 Clean Code
📘 Professional CMAKE A practical guide
📘 Software architecture with C++
اینا از واجبات درک برنامهنویسیه! نه فقط برای خصوص برنامهنویسی سطح پیشرفته، اصلاً برای درک معماری و نرمافزار باید خونده بشن.
مثلاً بعضیها مثل Domain-Driven Design و Clean Architecture یا Clean Architecture اینارو دیگه هر برنامهنویسی باید بخونه با هر زبانی که کار میکنه لازمش میشه.
ولی خب برای سطوح پیشرفته ساخت مخصولات خفن، قبل از ورود باید مباحث مربوط به Computer Organization and Design رو بخونی! چند جلد کتابن که همشون یکی از یکی پر از محتوای عالی. سخته اما آقا اگه میخوای مهندسی فکر کنی و متخصص باشی اینارو باید بخونی نه اینکه ۲ دو ۲ تا چهارتا رو کد نویسی کنی بعد با AI بگی من خفنم! هیچم خفن نیستی! منم بعد نزدیک به ۲۰ سال زحمتی که توی این تخصص کشیدم هنوز میگم هیچ کوفتی نیستم بعد چطور شما ادعا داری تو ۲ سال شدی پروفسور؟! سر در نمیارم! 😖
369
منظور از سیعنی Cache locality یعنی دادههایی که CPU لازم دارد، تا حد ممکن نزدیک هم و پشتسرهم در حافظه باشند تا پردازنده سریعتر به آنها برسد.
369
اصلاً بیا برات یه تیر خلاص بزنم اگه چپی هستی یا راستی برو بوق بزن برا خودت!
یکی از دلایلی که ++C رو هیچ زبانی نمیتونه جایگزینش باشه نه C و نه Rust داشتن همین سطح از کنترلشه؛ چیزی مثل
placement new الکی نیست که! کتاب معماری رو بخون سیستمعامل رو درک کن ساختار حافظه رو بفهم بعد بیا ببین کدوم زبان چه دسترسیای بهت میده.
این یعنی، وقتی حافظه را جدا مدیریت میکنی و بعد با placement new شیء رو دقیقاً در همان آدرس میسازی، میتونی هزینهٔ تخصیص حافظههای تکراری رو کم کنی، دادهها رو کنار هم و منظمتر در حافظه بچینی، cache locality بهتری بگیری و فشار روی تخصیصِ عمومی سیستمعامل را کاهش بدهی.
این رو تو از کجا میخوای بفهمی وقتی هیچ آشناییای با معماری نداری؟ والا شوخی بردار نیست این چیزا خیلی سطحی میبینید شماها خیلی به شدت سطحینگر هستید و همینطور فکر میکنید سادست. هلو بیا برو تو گلو.369
اون کتابهایی که توی دانشگاههای ایران به خوردتون میدن رو بنداز آشغالدونی! به درد خودت و اساتید عصر هجری میخوره. به هر حال منم پاسشون کردم میدونم چی هستن! درسته مفاهیم مهمی توشون هست اما خیلی قدیمیتر از اونی هستن که فناوری الآن بهش نیاز داره.
این کتابها که میگم همشون مربوط به معماری کامپیوتر هستن! یعنی درک درست از معماری و رابطهٔ بین سختافزار و نرمافزار.
📘 Computer Organization and Design: MIPS Edition
📘 Computer Organization and Design: RISC-V Edition
📘 Computer Organization and Design: ARM Edition
📘 Computer Architecture: A Quantitative Approach
📘 Modern Processor Design: Fundamentals of Superscalar Processors
📘 ARM System Developer’s Guide
📘 RISC-V Assembly Language
📘 x86-64 Assembly Language Programming with Ubuntu
فقط همین کتاب Computer Organization and Design - MIPS Edition رو بخوای درست بخونی و واقعاً بفهمی، خودش چند ماه تا یک سال وقت میبره؛ نه اینکه فقط ورق بزنی و بگی خوندمش. البته پیشنهاد من ARM Edition هست! چون این معماری واقعاً محشره.
بعد تازه میفهمی کامپیوتر واقعاً چطوری کار میکنه؛
سیستمعامل چیکار میکنه؛ مثلاً گوشی اندروید چطوری رفتار میکنه وقتی به کد شما میرسه!
کامپایلر کدت رو چطوری تبدیل میکنه یا پردازنده چطوری دستورها رو اجرا میکنه؛
حافظه، کش، رجیستر، پایپلاین و وقفه یعنی چی و هزاران مورد دیگه!
برنامهنویسی فقط تایپ کردن کد نیست که عزیز من!
پشت هر خط کدی که مینویسی، یه دنیای کامل از سختافزار، سیستمعامل، کامپایلر و معماری کامپیوتر خوابیده.
واسه همینه که ادعاهای بزرگ فقط با چندتا پروژه و چندتا ویدئو جور درنمیاد اصلاً باید عمرتو به پاش بریزی و غیر از این ممکن نیست که بتونی درکش کنی.
اتفاقاً همین کتابها رو دادن به خورد AI ولی هیچوقت نمیاد از داخل این کتاب یک معماری رو توی پروژه شما اجرا کنه چون قوائد کار با هوش مصنوعی اینه که شما باید آگاه باشی که چه چیزی رو بهش دستور میدی! اینجا باید شما اگه این کتابها رو خوندنی بیای بهش اشاره کنی که بگی مثلاً:
فلان مدل طراحی رو میخوام یا مثلاً ساختار حافظه رو با این روش پیادهسازی کن! و اگرن تمام دستورات اجرایی AI فقط یک سری نمونههای به شدت مقدماتی هستن که به درد مهندسی شدن نمیخوره.
شما اگه در خصوص برنامههای خاصتر تجربه داشته باشی و این کتابها رو خونده باشی میفهمی که سیستمعامل چطوری حافظه رو مدیریت میکنه و اینجاست که میای میگی من خودم یک تخصیصدهنده (allocator) مینویسم که متناسب با نیازم عمل کنه.
چون میدونی دقیقاً چه چیزی لازم داری و چرا allocator عمومی سیستم همیشه بهترین انتخاب نیست. برای همین چیزاست که برنامهنویسی سطح پایین همیشه ارزشمند بوده و خواهد ماند.
حالا تو بیا بگو من فلان برنامهٔ خفن رو مینویسم اما فقط نوشتمش! دادم به هوش مصنوعی نوشت! :)) بدون یه ذره درک این که توی برنامه حافظه رو چطوری داری مدیریت میکنی.
نکنه واقعاً فکر کردی چهارتا پرامپت این شکلی بدی حله؟
برنامهای نویس که ایمنی داشته باشد، از اشارهگرهای هوشمند برای جلوگیری از نشت حافظه استفاده کند، بهینه باشد و ...بعد هوش مصنوعی هم برداره با همین مدل کدت رو بنویسه توام بگی حله دیگه همینه! ایول. 😁 من شدم یه متخصص تمام عیار با صد سال سابقه! کی به کیه برو تو رزومتم بنویس!
369
یه ادعاهایی این روزها میبینم که شاخ در میارم! طرف تا دیروز فرق گاو و خر رو نمیدونست الآن چنان دماغشو بالا گرفته میگه سیستمعامل مینویسم، مرور گر مینویسم، بلاکچین مینویسم!
هرکی ندونه فکر میکنه طرف ۳۰ سال فقط درس علوم کامپیوتر توی دانشگاه آمریکایی پاس کرده! والا ما اندازهٔ سن خیلیهاتون فقط تجربه کردیم اونم نه الکی هم درسشو خوندیم هم عمل کردیم بعد تو پروژههای خودمون هنوز موندیم! هنوزم عناوین مختلف از معماریهای کامپیوتر مثل Computer Organization and Design سر گیجم میکنه! بخوام لیست کنم بیش از ۱۰۰ کتاب برات معرفی میکنم که خوندن و درک کردن هر کدومشون ماهها و سالها زمان میبره.
چی شد تا وقتی هوش مصنوعی چهارتا خروجی نمیداد همتون خفه خون گرفته بودین حتی یه کد CSS یا HTML رو هم درست درک نمیکردین حالا برا من فاز دانشمند گرفتین؟ این تفکرات میدونم از کجا آب میخوره! هر کدومشونم محک زدم دیدم یا خرزشی بود یا چپی! همونایی که میگفتن ما سیستمعامل بومی نوشتیم! یادتونه که... یا همونایی که تو رسانه میگفتن سیستمعامل رو با HTML نوشتن... همونان اینا.
شماها مغزتون واقعاً ایراد داره من فکر میکردم فقط توی سیاست نفهمید اما توی مباحث علمی هم واقعاً نفهم تشریف دارید! همون اندازه که توی سیاست گندهگوز هستین و همیشه پیروز صد برابر بدتر از اون رو توی مباحث علمی هم هستید. 😒
یاد اون بنده خدایی افتادم که با ۲۰-۲۵ سال سن متخصص و جراح مغز و اعصاب خودشو جا زده بود! توی صنف ماهم همینه! طرف طوری حرف میزنه طوری دماغشو بالا میگیره هرکی نبینه میگه این ۳۰ سال فقط کتاب خونده، عملی تجربه کرده! کشف کرده، خون دماغ شده از شدت مطالعه! دیسک کمر و گردن گرفته از شدت تلاش!
جمع کنید بابا کم گندهگوزی کنید آدم حالش از خودش بهم میخوره. 😐 همین کتاب Computer Organization and Design با چند جلدش رو روی هم بذاری چند ده هزار صفحست که سالها طول میکشه درکش کنی (تازه اونم اگه بخونی و در عمل انجامش بدی) که فقط تفاوت برنامهنویسی بین x86 با arm یا risc توی چیه! برای هر معماری یه کتاب کلفت دارن اینا بعد شماها انقدر نفهمید که فکر میکنید کد نویسی یعنی فقط اجرا شدن!
هرچقدر هم گندهگوزی میکنی بکن ولی برنامهنویسی اونی نیست که با چهارتا اسکریپت یا چهارتا الگوریتم جستجو به کار میبری. برنامهنویسی یعنی درک این که یه پردازندهٔ کامپیوتر با فلان معماری چطور کد شما رو درک خواهد کرد که پشت صحنهٔ اینها هم حسابی داستان داره از کامپایلر بگیر تا مفسر و ... این چیزارو هم تا تو نفهمی نمیتونی به هوش مصنوعی بفهمونی نادان.
فکر کردین واقعاً الکیه؟ یه مثال سادش! همین GenyConnect رو ازم خواستن پورت کنم روی چند تا سیستمعامل دیگه! میخوام برای نسخهٔ freeBSD براش نسخه بدم بیرون نشستم دارم معماری BSD رو میخونم که فقط بتونم کیوت رو روش کامپایل کنم که تازه شاید بتونم به عنوان یه پلتفرم مقصد کدم رو بهینه کنم روی معماری مخصوص این سیستمعامل چون هیچ کتابخانهٔ پیشفرضی به صورت رسمی از سمت کیوت براش منتشر نمیشه!
همین یه موضوع تازه به کمک هوش مصنوعی به شدت سخته! بعد طرف نشسته میگه من سیستمعامل مینویسم! بابا خفه شو آبرو ریزی نکن! آدم شو بسه دیگه توی هر چیزی پیروزید شماها آدم کیف میکنه از شدت پیروزی.
369
هیچکس بیدلیل از ظلم، فساد و تباهی دفاع نمیکند. یا جیرهای میگیرد، یا سهمی دارد، یا از حقیقت میترسد، یا آنقدر خودش را با دروغ آرام کرده که زنجیر را نه نشانهٔ اسارت، بلکه مدال افتخار میبیند. 👊🏼
369
+1
حالا فهمیدی فارکستر رو از کدوم پلتفرم کپی کرده بودن؟
چند روز پیش اتفاقی توی bsky یه حساب ساختم دیدم عه!!! این همه چیزش کپی فارکستره! فقط با تفاوت این که فارکستر بر مبنای بلاکچین کار میکنه.
369
هجوم به حافظهٔ پنهان یا Cache Stampede چیست؟
در دنیای مهندسی نرمافزار، به خصوص در وب، «کش» یعنی ذخیرهٔ موقت دادهها یا خروجیهای پرمصرف؛ مثلاً صفحهٔ اصلی سایت، منوها، قالبها یا پرسجوهای سنگین بانکاطلاعاتی.
فرض کنید صفحهٔ اصلی یک وبسایت برای ۵ دقیقه کش شده باشد. همهچیز سریع است؛ تا لحظهای که اعتبار کش تمام میشود. اگر در همان لحظه هزاران درخواست برسد، همهٔ درخواستها در لحظه میبینند کش معتبر نیست و به جای استفاده از کش به یکباره همزمان به دیتابیس، رندرر یا سرویسهای داخلی فشار میآورند.
بهجای اینکه فقط یک درخواست کش را دوباره بسازد، همه با هم حمله میکنند. یعنی در همین حالت است که شما شاهد کند شدن به شدت بالای وبسایتتون میشید.
به این اتفاق میگن Cache Stampede.
راه حل در CMS من اینه که یک درخواست رو بازسازی کند، بقیه نسخهٔ قبلی را بگیرند، زمان انقضاها همزمان نباشد، و مسیرهای مهم از قبل گرم شوند. یعنی لایهای در نظر گرفتم که کش فقط محل ذخیرهٔ موقت نیست؛ یک لایهٔ هوشمند در معماری سیستم است که فشار ناگهانی را کنترل میکند، پایداری را بالا نگه میدارد و در ترافیک بالا از هجوم درخواستها به بکاند جلوگیری میکند.
#معماری_نرمافزار #مهندسی_نرمافزار #طراحی_سیستم #کش
#SystemDesign #Architecture #Cache
#CacheStampede
369
بوده که میگمها! مشتری داشتم طرف ده بار بهش تماس هم گرفتم گفتم آقا وقت دامینت تموم داره میشه! در جریان باش.
انداخته پشت گوشش بعد اینکه منقضی شده، اومده میگه وای یادم رفت!
بعد من که میرم درخواست میدم برای تمدید، به خاطر قوانین ثبت کننده، جریمه شاملش میشه! حتی ممکنه چند ده برابر هزینهٔ خود تمدید ازش هزینه بخوان! وقتی اینو به مشتری میگی شاخ در میاره که چراااا چه خبره! اینجاست که فکر میکنه شما داری گوشش رو میبری! ولی خب این قانون ناگفتست که بهش نگفتی...
برای خیلی از دامنههای عمومی بعد از انقضا معمولاً اول یک فرصت تمدید وجود داره؛ اما اگر از اون مرحله رد بشه و دامنه حذف/وارد وضعیت بازیابی بشه، وارد Redemption Grace Period میشه. طبق سیاست ICANN و برای دامنههای داخلی NIC (ایرنیک)، این دوره معمولاً ۳۰ روزه و دامنه فقط از طریق همان ثبتکننده قبلی قابل بازیابی است، نه با یک تمدید سادهٔ معمولی.
به هر حال قانونیه که هست؛ جریمه میگیرن و ثبت کننده هم مقصرش نیست.
به خصوص با این تورم، شما باید همه چیرو از پیش به مشتریت گفته باشی. به هر حال یکی یادش میره، یکی همون لحظه دستش تنگه... کارتو تمیز انجام بده بذار مشکلی پیش نیاد.
369
بوده موردهایی که دیدم به خاطر همین عدم مالکیت، طرف روی ثبت کننده شکایت کرده! چون اعتبار برند و کسب و کارش رفته زیر سوأل!
ممکنه جاهایی اتفاق بیفته که طرف پول نداشته باشه یا وضعش خراب باشه یا اصلاً مشکلی پیش اومده باشه و به خاطر همین صاحب اختیار بودن دامنه به طرز وحشتناکی مشتری رو اذیت کرده! ازشون اخاذی کرده! بابا اینا شوخی بردار نیست همه وجدان ندارن خودتون صاحب دارایی خودتون باشین! به هر برنامهنویسی به هر نه نه قمری که کد مینویسه اعتماد نکنید.
به خصوص از این به بعد که به لطف AI هر احمقی قراره بشه طراح وبسایت.
369
امروز یه تماسی داشتم که متوجه شدم یه سری قوانین جدیتر شده که در مراحل ثبت شرکتها و معرفی کسبوکارها نامدامین و آدرس ایمیل سازمانی ظاهراً ضروری هست.
یادآوری کنم برای هم صنفهای خودم؛ وقتی برای مشتری سایت یا دامنه بالا میارید، اینقدر شرف داشته باشید که مالکیتش رو به اسم خودتون ثبت نکنید.
این دقیقاً مثل اینه که من برم ماشین بخرم، پولشم کامل بدم، ولی سند ماشین بخوره به اسم فروشنده!
همین که مسئول فنی کار باشید کافیه.
مسئول فنی یعنی کارای فنی، تنظیمات، پشتیبانی و نگهداری؛ نه اینکه صاحب مال مردم بشید.
این رو هم به آدمهای کمتجربه بگید:
دامنه شوخی نیست. هر کسی دامنه رو با شناسهٔ خودش ثبت کنه، عملاً صاحب امتیاز همونه، مگر اینکه اطلاعات مالک واقعی درست وارد شده باشه.
توی ثبت دامنه معمولاً چندتا نقش جدا داریم:
یکی صاحب امتیازه؛ یعنی مالک واقعی دامنه.
یکی رابط مالیه؛ یعنی کسی که پرداخت و تمدید رو پیگیری میکنه.
یکی رابط فنیه؛ یعنی کسی که تنظیمات و کارای فنی رو انجام میده.
یکی هم رابط اداریه؛ یعنی پیگیریهای ثبتی و اداری.
پس اگه برای مشتری دامنه ثبت میکنید، درست و شفاف بهش بگید مالک کیه، رابط فنی کیه، رابط مالی کیه.
خیلی دیدم آدمهایی رو که از ناآگاهی مشتری سوءاستفاده کردن؛ دامنهٔ طرف رو به اسم خودشون ثبت کردن به بهونهٔ این که خب من برات ثبت کردم، بعداً هم با همون چیزی که مال خود مشتری بوده، ازش پول اضافه خواستن یا روش فشار آوردن.
این دیگه اسمش زرنگی نیست.
اسمش دزدیه.
اگه مال مردم رو به اسم خودتون ثبت میکنید و بهش نمیگید، شما طراح سایت یا مسئول فنی نیستید؛ دزدید!
دیدم که میگمها... چند صد تا دامین طی اینهمه سال برای مشتریام ثبت کردم همیشه هم بهشون گفتم ببین بیا به اسم خودت ثبت کنم! حتی طرف حوصله نداشته میگفته من بلد نیستم تو برام ردیفش کن! همینجاست که بنده خدا نمیدونه همین حرفش یعنی دو دستی اختیار دامینش رو به یکی دیگه دادن.
شاید توی کارها یا وبسایتهای ساده مهم نباشه بگیم خب بابا چیزی نداره که! اما من دیدم طرف دامین ۳ هزار تومنی رو ۱۰ سال پیش چطور به قیمت اون موقع ۱ میلیون گرفت و کرد تو پاچهٔ مشتریش که فقط تمدید ازش میخواست!
این پولها خوردن نداره... همون شخص احتمالاً الآن داره هندونه میفروشه به جای طراحی وبسایت.
آدم باشیم! اعتبار اونطوری که شما فکر میکنید به دست نمیاد.
369
سوأل جالبی بود!
خب جنی بر پایهٔ شبکهٔ Base هست (با کمترین کارمزد و سریعترین تراکنش) و کاملاً غیر متمرکزه!
هیچ وابستگیای هم به فارکستر نداره (فارکستر فقط یه شبکه اجتماعی غیرمتمرکزه که تمام سعیمون اینه که باهاش ادغام بشه).
هر پلتفرمی که غیرمتمرکز باشه اینو پشتیبانی میکنه.
https://basescan.org/address/0x2a3d6f8c1fc4AcDcf3A75d19b445bae02F03676B
استخرش رو اون زمان روی Uniswap v4 بالا آوردم.
https://app.uniswap.org/explore/tokens/base/0x2a3d6f8c1fc4AcDcf3A75d19b445bae02F03676B
قبل از هر چیز باید روی صرافی coingecko لیستش کنم به وقتش.
369
این هم نمونهای از نحوهی ادغام دادههای بکاند با قالبهای فرانتاند در Tegra CMS.
سعی کردم سینتکس قالبنویسی چیزی شبیه Django باشد؛ ساده، قابل فهم و تمیز.
ایده اینه که بکاند دادهها را آماده میکند، سپس Template Engine آن دادهها را با HTML ترکیب میکند و خروجی نهایی صفحه ساخته میشود.
در این مدل میتوانیم فایلهای جداگانه مثل header یا footer را include کنیم، شرط بگذاریم، روی لیستها loop بزنیم، متغیرها را داخل HTML نمایش دهیم و حتی کامنتهای مخصوص template داشته باشیم که در خروجی نهایی HTML ظاهر نمیشوند.
هدفم این بوده که لایهٔ قالبنویسی هم ساده باشد، هم امن، هم قابل نگهداری؛ بدون اینکه تبدیل به یک زبان برنامهنویسی کامل و پیچیده داخل HTML شود.
به زبان ساده یعنی:
۱) بکاند سمت ++C داده را میسازد.
۲) قالب (موتور قالبسازی سمت ++C) آن را نمایش میدهد.
۳) خروجی نهایی، HTML تمیز و قابل کنترل است.
برای CMS این بخش پایهٔ یک سیستم رندرینگ سبک، قابل توسعه و شبیه Django-style template engine هست هرچند من به دنبال یک مدل قویتر نسبت به نمونههایی هستم که قبلاً تجربش کردم.
