<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
    <channel>
        <title>نوشته های هیمن حسین پنا</title>
        <link>https://virgool.io/feed/@devmasters</link>
        <description>برنامه نویس و معمار نرم افزار</description>
        <language>fa</language>
        <pubDate>2026-04-14 19:56:53</pubDate>
        <image>
            <url>https://files.virgool.io/upload/users/11776/avatar/9N74dq.jpg?height=120&amp;width=120</url>
            <title>هیمن حسین پنا</title>
            <link>https://virgool.io/@devmasters</link>
        </image>

                    <item>
                <title>مرجع کامل سلکتورهای CSS</title>
                <link>https://virgool.io/@devmasters/%D9%85%D8%B1%D8%AC%D8%B9-%DA%A9%D8%A7%D9%85%D9%84-%D8%B3%D9%84%DA%A9%D8%AA%D9%88%D8%B1%D9%87%D8%A7%DB%8C-css-f4lu8znal11j</link>
                <description>برای مسلط شدن بر CSS اولین گام درک کامل سلکتورهای آن است.  در پلی لیست مرجع کامل سلکتورهای CSS  سعی کردم تمام آنچه را برای درک این سلکتورها را مطرح کنم و در ادمه CSS را از منظر برنامه نویسان بررسی و آموزش بدم.سلکتورهایی که در سطح اول CSS وجود داشتند:سلکتورهایی که در سطح دوم CSS وجود داشتند:سلکتورهایی که در سطح سوم CSS وجود داشتند:سلکتورهایی که در سطح چهارم CSS وجود دارد:</description>
                <category>هیمن حسین پنا</category>
                <author>هیمن حسین پنا</author>
                <pubDate>Sat, 27 May 2023 15:15:17 +0330</pubDate>
            </item>
                    <item>
                <title>PyScript چیست؟</title>
                <link>https://virgool.io/Rocket/pyscript-%DA%86%DB%8C%D8%B3%D8%AA-bdz0pvsov2nw</link>
                <description>در این ویدیو خیلی مختصر به این سوال پاسخ داده شد که PyScript چیست؟ پای اسکریپت به ما اجازه می‌دهد که در بروزر به زبان python برنامه بنویسیم که در واقع مبتنی بر وب اسمبلی و تکنولوژی های مرتبط آن است. pyscript  از pyodide و emscripten برای تبدیل کدهای پایتون به webassembly استفاده می‌کند. https://youtu.be/LK_ZOd-87Uc </description>
                <category>هیمن حسین پنا</category>
                <author>هیمن حسین پنا</author>
                <pubDate>Fri, 27 May 2022 22:01:04 +0430</pubDate>
            </item>
                    <item>
                <title>نوع داده boolean  در TypeScript</title>
                <link>https://virgool.io/@devmasters/%D9%86%D9%88%D8%B9-%D8%AF%D8%A7%D8%AF%D9%87-boolean-%D8%AF%D8%B1-typescript-v5uwpwditnzl</link>
                <description>به چهارمین پست و ویدیو آموزش TypeScript از کانال یوتیوب میکروفرانت اند خوش آمدید. در ویدیو قبلی که در این پست هم آمده توضیح دادیم که اعداد در زبان جاوا اسکریپت چگونه ذخیره و ارزیابی می‌شود و خطای rounding را مطرح کردیم. https://youtu.be/bBo5MnTlbEA. در هر زبان برنامه نویسی نیاز به نوع داده‌ای که بتواند دو حالت را مدل کند بسیار حیاتی خواهد بود. در بعضی زبان‌ها یک نوع داده مشخص برای این حالت وجود دارد و در بعضی از زبان‌ها نیز از مقادیر عددی برای مدل کردن دو حالت بهره گرفته می‌شود که معمولا صفر را به عنوان false و سایر اعداد را true در نظر می‌گیرند. در جاوا اسکریپت و تایپ اسکریپت نیز یک نوع مشخص تحت عنوان boolean وجود دارد که دو مقدار true و false  را به برنامه نویس ارایه می‌دهد.این مطلب برداشتی از فصل دوم کتاب Programming with type نوشته Vlad Riscutia است که منبع اصلی این دوره آموزشی است.برای مشاهده این دوره به صورت کامل می ‌توانید به پلی لیست آموزش برنامه ‌نویسی typescript در کانال یوتیوب میکروفرانت‌اند مراجعه کنید.</description>
                <category>هیمن حسین پنا</category>
                <author>هیمن حسین پنا</author>
                <pubDate>Wed, 18 May 2022 11:03:14 +0430</pubDate>
            </item>
                    <item>
                <title>آموزش TypeScript - کار با اعداد</title>
                <link>https://virgool.io/@devmasters/%D8%A2%D9%85%D9%88%D8%B2%D8%B4-typescript-%DA%A9%D8%A7%D8%B1-%D8%A8%D8%A7-%D8%A7%D8%B9%D8%AF%D8%A7%D8%AF-ekk4x1nrp9bk</link>
                <description>به سومین پست و ویدیو آموزش TypeScript از کانال یوتیوب میکروفرانت اند خوش آمدید. در ویدیو قبلی که در این پست هم آمده توضیح دادیم که چرا برنامه نویسی مبتنی بر Type می‌تواند جلوی بسیاری از باگ های مهم در نرم افزار را بگیرد. https://youtu.be/tlpbs0MGYS0 در سومین ویدیو از پلی لیست تایپ اسکریپت، نوع داده عدد را در این زبان بررسی کردیم. با این پرسش آغاز کردیم که چرا 0.1+0.1+0.1 برابر 0.3 نمی‌شود. سپس به بررسی ویژگی‌های کلی نوع عدد در زبان‌های برنامه نویسی پرداختیم و width و encoding را بررسی کردیم و مفاهیم overflow و underflow راه‌های کنترل آن را معرفی کردیم.در نهایت فرمت binary64 از انکدینگ IEEE 754 که برای اعداد در جاوا اسکریپت و بسیاری از زبان‌های برنامه نویسی استفاده می‌شود را توضیح و راه‌های مقایسه مطمن اعداد اعشاری و صحیح را در جاوا اسکریپت شرح دادیماعداد به صورت کلی در زبان‌های برنامه نویسی به صورت یک یا چند نوع اصلی مطرح می‌شوند. نکات مهمی وجود دارد که در هنگام کار با اعداد بایستی مد نظر داشته باشید. به عنوان مثال حاصل 0.1 + 0.1 + 0.1  برابر با 0.3 نخواهد شد و عدم در نظر داشتن موارد این‌چنینی منجر به بروز باگ های خطرناک در نرم افزار خواهد شد. برای درک بهتر این موارد بایستی ابتدا شیوه ذخیره اعداد در کامپیوتر را بررسی نماییم. دو مشخصه مهم  Width و  Encoding ساختار کلی نوع عدد را تعیین می‌کند. Width تعداد بیت‌هایی که برای نمایش عدد لازم است را مشخص می‌کند که بسیار وابسته به معماری سخت افزاری است و Encoding ساختار این ذخیره سازی را مشخص می‌کند که معمولا به صورت باینری بدون علامت، مکمل دو یا IEEE754 خواهد بود. اعداد صحیح در TypeScriptدر حالت باینری بدون علامت همه بیت‌های در نظر گرفته شده برای عدد رزرو می‌شد. این روش فقط مناسب اعداد صحیح است و اگر نیاز به ذخیره اعداد علامت دار داشته باشیم بایستی از روش مکمل دو استفاده کنیم در این روش یک بیت برای علامت رزرو می‌شود و ۱ به معنی منفی و ۰ به معنی مثبت است. اگر عدد مثبت باشد به همان روش باینری ذخیره می‌شود و اگر منفی باشد مکمل دو آن عدد ذخیره می‌شود.چالش زمانی بوجود می‌آید که نتیجه محاسبات بزرگتر یا کوچکتر از width شود که به آن به ترتیب  overflow و underflow  می‌گوییم. برای حل این معضل سه روش معمولا در زبان‌های برنامه نویسی به کار گرفته می‌شود:روش Wrap Around که در واقع بیت های اضافی حذف می‌شوند به عنوان مثال اگر نتیجه محاسبه ای ۱۰۰۰۰ شود که بیت آخر اضافی باشد ۱ حذف می‌شود و عملا عدد صفر می‌شود. این روش پر استفاده ترین و خطرناک ترین روش است.روش اشباع یا saturation که در آن به مانند فیزیک یک مقدار به عنوان حداقل و حداکثر تعیین می‌شود و اگر نتیجه محاسبات از آن ها عبور کند حداقل یا حداکثر به جای آن در نظر گرفته می‌شود.روش خطا یا error out مطمن ترین و پرهزینه ترین روش است. در این حالت اگر مقدار از حداکثر یا حداقل فراتر رود خطا اعلام می‌شود. هزینه این رویکرد در آن است که به ازای هر محاسبه این چک باید انجام شود.اعداد اعشاری در TypeScriptاستاندارد و انکودینگ IEEE 754 برای ذخیره اعداد به صورت ممیز شناور معرفی شده است و در جاوا اسکریپت و به طبع آن در TypeScript از فرمت binary64 این encoding برای همه اعداد استفاده می‌شود که شامل سه مولفه اصلی یک بیت علامت، ۱۱ بیت نما و ۵۲ بیت مانتیس است. نکته مهمی که باید در مورد این فرمت بخاطر داشت این است که چون یک الگوریتم فشرده سازی نیز هست، هدف ذخیره تا حد امکان عدد برزگتر در فضای محدود است و سعی می‌کند قسمت اعشار را round کند بر این اساس ممکن است بخشی از دقت بدلیل خطای rounding  از بین برود.در چنین شرایطی اگر نیاز به دقت بالا در محاسبات داشته باشیم بهتر است که قسمت اعشار و قسمت صحیح را جداگانه به‌صورت صحیح ذخیره کنیم. در مورد اعداد صحیح چنانچه عدد بسیار بزرگ شود نیز ممکن است rounding اتفاق بیافتد که با متد Number.isSafeInteger برای چک کردن این مورد استفاده می‌شودمقایسه اعداد ممیز شناوربدلیل خطای rounding، به شکل کلی مقایسه برابری اعداد ممیز شناور یا اعشاری ممکن است ایده خوبی نباشد، راه بهتر این است که بگویم دو مقدار تقریبا یکی هستند. برای این کار بایستی حداکثر خطای ممکن در rounding را که مرتبط به encoding است و آن را machine epsilon می‌گویند بدانیم و آن را به عنوان حد آستانه تقریب در نظر بگیرم. برای دسترسی به این مقدار در JavaScript از Number.EPSILON استفاده میکنیم که کوچکترین عدد بزرگتر از یک تفسیر می‌شود. با این اوصاف می‌توان از کد زیر برای مقایسه اعداد ممیز شناور استفاده کرد.function epsilonEqual(a: number, b: number): boolean {
    return Math.abs(a - b) &lt;= Number.EPSILON;
}
console.log(0.1 + 0.1 + 0.1 == 0.3);  //false
console.log(epsilonEqual(0.1 + 0.1 + 0.1, 0.3));این مطلب برداشتی از فصل دوم کتاب Programming with type نوشته Vlad Riscutia است که منبع اصلی این دوره آموزشی است.برای مشاهده این دوره به صورت کامل می ‌توانید به پلی لیست آموزش برنامه ‌نویسی typescript در کانال یوتیوب میکروفرانت‌اند مراجعه کنید.</description>
                <category>هیمن حسین پنا</category>
                <author>هیمن حسین پنا</author>
                <pubDate>Sat, 14 May 2022 12:53:06 +0430</pubDate>
            </item>
                    <item>
                <title>آموزش TypeScript و برنامه‌نویسی مبتنی بر Type - ناجی برنامه‌نویسان از فجایع</title>
                <link>https://virgool.io/@devmasters/%D8%A2%D9%85%D9%88%D8%B2%D8%B4-%D8%AA%D8%A7%DB%8C%D9%BE-%D8%A7%D8%B3%DA%A9%D8%B1%DB%8C%D9%BE%D8%AA-hkjdifo9z5bt</link>
                <description>به دومین پست و ویدیو آموزش TypeScript از کانال یوتیوب میکروفرانت اند خوش آمدید. در ویدیو قبلی که در این پست هم آمده توضیح دادیم که TypeScript چیست و چرا به آن نیاز داریم همچنین تاریخچه و زمینه‌های شکل گیری آن را مفصل بررسی کردیم. https://www.youtube.com/watch?v=zCeDfPQuE9s مدارگرد اقلیمی مریخ در مسیر حرکت خودش  به دلیل ناسازگاری واحدهای اندازه گیری بین مولفه هایش نابود شد و یک پروژه عظیم فضایی را به فنا داد.، زیرا یک مولفه آن که ساخت شرکت لاکهید بود از واحد پوند نیرو برای اندازه گیری حرکت استفاده می‌کرد و سایر مولفه‌هایش که توسط ناسا ساخته شده بود از واحد نیوتون ثانیه استفاده می‌کردند. یک فاجعه تمام عیار!در این دوره آموزشی خواهیم دید که Type Checker چگونه از بروز چنین فاجعه‌هایی جلوگیری می‌کند و به شما امکان نوشتن برنامه‌هایی با صحت و دقت بالا می‌دهد. به شکل کلی Type اثبات می‌کند که کد شما آنگونه که از آن انتظار می‌رود عمل می کند. اگرچه این دوره با عنوان آموزش TypeScript معرفی شده است و از این زبان برای مثال‌ها استفاده می‌شود اما هدف این است که مستقل از زبان‌های برنامه نویسی با مفاهیم کلی برنامه نویسی مبتنی بر Type  مانند ADT، lambda، generics و monad و توابع صحبت کنیم. در سال‌های اخیر تلاش‌های زیادی در زمینه Type System انجام شده است. زبان‌هایی مانند Elm یا Idris و Haskell مطرح شده اند. در کنار آن برای زبان‌های دینامیک هم ابزارهایی برای ارائه چک زمان کامپایل مطرح شده‌اند. به عنوان مثلا در پایتون از Type hint استفاده می‌شود و TypeScript قدرت زیادی به اکوسیستم جاوا اسکریپت اضافه کرده است.چرا Type وجود دارد؟در پایین‌ترین سطح سخت افزار و زبان ماشین، دستورات، داده‌ها و عملیات‌ها به شکل بیت تفسیر می‌شوند و فرقی بین کد و دیتا وجود ندارد و سیستم به راحتی می‌تواند به دلیل اشکال در هر کدام از آن‌ها، با مشکل مواجه شود. این مشکل می‌تواند به صورت کرش برنامه و یا آسیب پذیری های امنیتی، که مهاجم سعی می‌کند داده‌های ورودی خود را به عنوان دستور اجرا کند، خود را نشان دهد. به عنوان مثال دستور eval در جاوا اسکریپت را در نظر بگیرید. این دستور مقدار رشته ای را به عنوان ورودی می‌گیرد و اجرا می‌کند. اگر در داده‌ها اشکالی وجود داشته باشد منجر به خطاهای زمان اجرا می‌شود.در کنار تفاوت داده و کد، ما بایستی بتوانیم مقادیر را هم تفسیر کنیم. به عنوان مثال دنباله ۱۶ بیتی 1100001010100011 هم می‌تواند عدد بدون علامت 49827 باشد، هم می‌تواند عدد علامت دار -15709 و یا یک کاراکتر یونیکد باشد. پس بایستی یک لایه دیگر داشته باشیم که این داده‌ها را برای ما با معنی کند. تایپ به این داده‌ها معنی می‌دهد و در کنار آن امکان کنترل بیشتری روی مقادیر قابل قبول آن، سطوح دسترسی و قابلیت تغییر مقدار را ارایه می‌دهد تا بتوان جلوی بسیاری از خطاهای زمان اجرا را بگیریم.تعریف Type و Type System چیست؟هدف کلی این دوره آموزشی برنامه نویسی مبتنی بر Type است لذا قبل از شروع تعریف مشخصی از این واژگان را ارایه می‌کنیم.یک Type در واقع یک طبقه‌بندی داده است که معنی و مقادیر قابل قبول یک داده و همچنین عملیاتی که بر روی آن قابل انجام است را مشخص می‌کند. این Type می‌تواند در زمان کامپایل و یا زمان اجرا به منظور بررسی صحت و کنترل دسترسی داده‌ها چک شود.یک Type Systemمجموعه از قواعدی است که به المان‌های برنامه نویسی اختصاص داده می‌شود و ارزیابی می‌گردد. این المان‌ها می‌توانند متغیرها، توابع و یا سایر ساختارهای سطح بالای برنامه نویسی مانند کلاس‌ها باشند. تایپ می‌تواند به صورت صریح توسط دستورات زبان‌های برنامه نویسی مشخص شود و یا از طریق استنتاج به صورت ضمنی استنباط گردد.به شکل کلی سورس کد ما توسط کامپایلر یا مفسر به دستورات زبان ماشین و یا دستورالعمل‌های یک runtime مشخص تبدیل می‌شود. runtime می‌تواند خودش یک کامپیوتر فیزیکی باشد که در این صورت دستورالعمل‌های CPU خواهد بود و یا یک ماشین مجازی باشد که در این صورت نیز دستورالعمل‌های خاص آن ماشین مجازی است.در فرایند Type Checking پایبندی برنامه نوشته شده به قواعد تعیین شده بررسی می‌شود که معمولا توسط کامپایلر در زمان کامپایل و یا توسط runtime در زمان اجرا انجام می‌شود. مولفه‌ای که این کار را انجام می‌دهد را Type Checker می‌نامیم.در این دوره هدف این است که کمتر به مباحث ریاضی  Type System بپردازیم و در عوض بر روی برنامه نویسی مبتنی Type متمرکز شویم. با این وجود ذکر این نکته ضروری است که بدانیم نظریه  Type System بسیار از نظر علمی مستحکم و قابل اتکا است و رابطه زیادی با مفاهیم اثبات در ریاضیات گسسته دارد. به عنوان مثال و مطالعه بیشتر میتوانید Proof as Program را مشاهده کنید.مزایای Type Systemبدیهی است که Type System کمک شایانی به برنامه نویسی می‌کند اما به شکل کلی مزایای Type System را می‌توان در 5 گروه دسته بندی کنیم که در ادامه هریک از آنها را بررسی می‌کنیم.Correctnessصحت کد به این معنی است که کد ما بر اساس آنچه که برایش مشخص کرده‌ایم عمل کند و خروجی قابل انتظاری را بدون بروز خطا یا کرش در زمان اجرا تولید کند. Type به ما اجازه می‌دهد سختگیری بیشتری بر روی اجرای کد داشته باشیم. مثلا اگر برای تابعی انتظار داریم مقدار رشته‌ای ارسال شود، امکان ارسال  چیزی غیر از آن وجود نداشته باشد. این اتفاق در زمان کامپایل و پیش از اجرای کد قابل پیشگیری است.Immutabilityتغییر ناپذیری به این معنی است که اگر مقدار ما به اصطلاح در State خوبی است، دیگر اجازه تغییر نداشته باشد. مگر اساسا State جدیدی ایجاد کنیم. البته چالشی که در این صورت وجود دارد ایجاد کپی‌های فراوان از یک متغیر است. در برخی از زبان‌های functional به شکل کلی همه چیز تغییر ناپذیر و ثابت است.  از نظر حافظه تفاوتی بین متغیر immutable و mutable وجود ندارد و این Type System است که شرایط تغییر ناپذیری را برای کامپایلر مهیا می‌کند.Encapsulationکپسوله سازی در واقع توانایی مخفی کردن داده‌های داخلی یک تابع، کلاس یا ماژول از دید سایر مولفه‌های سیستم است.  Readabilityهمه می‌دانیم که کد بیش از آنکه نوشته شود خوانده می‌شود. استفاده از Type کد را بسیار خواناتر و تمیزتر می‌کند. وقتی در تعریف یک تابع ‌آیتم‌های ورودی و خروجی  نوعشان صریحا مشخص باشد به راحتی می‌توان کارکرد و هدف تابع را فهمید. در بسیاری از زبان‌ها شما بایستی بیشتر به مستندات متوصل شوید تا خود کد.Composabilityبدون شکستن کد به واحدهای کوچکتر و متصل کردن آن‌ها به هم نمی‌توان نرم‌افزارهای بزرگ و پیچیده را مدیریت کرد. مکانیزم‌های مبتنی بر تایپ امکان نوشتن کدهای ماژولار و مستقلی را می‌دهند که می‌توانند با هم ارتباط داشته باشند. برنامه نویسی مبتنی بر Generic ویژگی ‌های فراوانی برای این کار به ما ارایه می‌دهد.برای هرکدام از موارد فوق مثال‌هایی در ویدیو مطرح شده است.انواع Type System هاامروزه اغلب زبان‌های برنامه‌نویسی و runtime ها امکاناتی برای برنامه‌نویسی مبتنی بر Type و کار با آن را ارایه می‌کنند. تفاوت عمده آن‌ها در زمان چک کردن و شدت سختگیری آن‌هاست. به شکل کلی می‌توان این امکانات را از دو منظر بررسی کرد:Dynamic and static typingدر زبان‌های Dynamic type هیچ محدودیتی در زمان کامپایل در نظر گرفته نمی‌شود. احتمالا عبارت duck typing را هم شنیده باشید که از آنجا آمده است که اگر کسی مثل اردک راه می‌رود و صدای اردک دارد می‌توان به آن اردک گفت. در زبان‌های دینامیک این فرض استوار است و کد ‌می‌تواند آزادانه همه کار کند و همه چک و تیک‌ها به زمان اجرا موکول می‌شود.از دیگر سو در زبان‌های static تمام چک و تیک‌ها در زمان کامپایل انجام می‌شود و ایراد در نوع‌ها موجب بروز خطای کامپایلری می‌شود و برنامه قابل اجرا نیست و این مهمترین ویژکی و مزیت Static Typing است. زبان javascript یک زبان دینامیک و typescript یک زبان استاتیک است. در واقع تایپ اسکریپت به این منظور ساخته شد که استاتیک تایپ چک را به جاوا اسکریپت  اضافه کند و جلوی برخی از خطاهای زمان اجرا در فاز کامپایل بگیرد. Weak and strong typingاین سوال را در نظر بگیرید. آیا شیر با سفیدی برابر است؟ اگر بخواهیم Strong جواب بدهیم باید بگویم خیر. شیر یک مایع است و نمی‌توان آن را با رنگ مقایسه کرد. اما اگر بخواهیم Weak جواب بدهیم خواهیم گفت. بله چون رنگ شیر سفید می‌توان آن را با سفیدی برابر دانست. در حالت اول ما باید شیر را اول به رنگ تبدیل و بعد مقایسه کنیم اما در حالت دوم به این تبدیل نیازی نیست. در سیستم‌های Weak تبدیل نوع عموما به شکل ضمنی توسط خود کامپایلر انجام می‌پذیرد مثلا شما می‌توانید عددی را با رشته مقایسه کنید. در این سناریو بسته به نوع زبان ممکن است ابتدا عدد به رشته یا رشته به عدد تبدیل شود و بعد با هم مقایسه ‌می‌شوند. این امر به ظاهر ممکن است خوب باشد اما در برخی سناریوها تبدیل های ناخواسته ممکن است موجب بروز خطا و باگ در برنامه شود. اما در سیستم های Strong معمولا تا شما به صورت صریح اعلام نکنید چنین تبدیلی اتفاق نمی‌افتد. یکی از ویژگی های مهم کامپایلرهای مدرن Type Inference یا استتناج نوع به شکل خودکار اتفاق می‌افتد. به عنوان مثال وقتی متغیری تعریف و مقدار 50 را در آن ذخیره می‌کنید، کامپایلر متوجه می‌شود که نوع مقدار عددی است و دیگر نیازی نیست صریحا آن را مشخص کنید.  اگر چه اعلان آن خوانایی کد را بالا می‌برد.این مطلب برداشتی از فصل اول کتاب Programming with type نوشته Vlad Riscutia است که منبع اصلی این دوره آموزشی است.برای مشاهده این دوره به صورت کامل می ‌توانید به پلی لیست آموزش برنامه ‌نویسی typescript  در  کانال یوتیوب میکروفرانت‌اند مراجعه کنید.</description>
                <category>هیمن حسین پنا</category>
                <author>هیمن حسین پنا</author>
                <pubDate>Tue, 10 May 2022 09:49:00 +0430</pubDate>
            </item>
                    <item>
                <title>تفاوت npm و yarn و pnpm - مقایسه Node Package Managers</title>
                <link>https://virgool.io/@devmasters/%D8%AA%D9%81%D8%A7%D9%88%D8%AA-npm-%D9%88-yarn-%D9%88-pnpm-%D9%85%D9%82%D8%A7%DB%8C%D8%B3%D9%87-node-package-managers-xzkqyr0hg0te</link>
                <description>در این ویدیو به مقایسه Node Package Managers پرداختیم و  تفاوت npm و yarn و pnpm را از منظر ساختاری و فنی بررسی کردیم.  ابتدا به معرفی مفهوم پکیج و ماژول پرداختیم و چالش هایی که یک پکیج منیجر با آن سروکار دارد را معرفی کردیم. سپس به تاریخچه و مکانیزم npm و yarn classic و yarn berry و pnpm  پرداختیم. گفتیم که npm و yarn classic از رویکرد flatten برای ذخیره و بازیابی پکیج ها استفاده می‌کنند و pnpm از رویکرد content addressable storage برای این کار بهره میبرد و همچنین yarn berry  از روش Plug&#x27;n&#x27;Play استفاده میکند. در نهایت برای هرکدام یک نمونه ساده ساختیم و مطالب گفته شده را بررسی کردیم https://youtu.be/fqMLtuMBPAc </description>
                <category>هیمن حسین پنا</category>
                <author>هیمن حسین پنا</author>
                <pubDate>Thu, 28 Apr 2022 12:08:43 +0430</pubDate>
            </item>
                    <item>
                <title>نصب و مدیریت نسخه های Node.js  با NVM یا Volta</title>
                <link>https://virgool.io/@devmasters/%D9%86%D8%B5%D8%A8-%D9%88-%D9%85%D8%AF%DB%8C%D8%B1%DB%8C%D8%AA-%D9%86%D8%B3%D8%AE%D9%87-%D9%87%D8%A7%DB%8C-nodejs-%D8%A8%D8%A7-nvm-%DB%8C%D8%A7-volta-rwihdxv2r0av</link>
                <description>اگر برنامه نویس node.js  توسعه دهنده front-end  هستید قاعدتا هر روز در حال استفاده از نود جی اس  در پروژه های مختلف هستید. مدیریت نسخه های Node.js  با NVM یا Volta  به شما این امکان را می‌دهد که به ازای هر پروژه و یا به صورت دستی نسخه node و ابزارهای دیگر جاوا اسکریپت را مشخص کنید.  در این ویدیو ابتدا فرایند نسخه دهی در Node.js  را بررسی و ضرورت استفاده از ابزارهای مدیریت نسخه را مطرح و سپس دو ابزار شناخته شده در این محیط را بررسی و مقایسه کردیم. ابتدا از NVM و کاربردهای آن صحبت کردیم و سپس از ابزار Volta  استفاده کردیم و مزیت های آن را شرح دادیم.     https://youtu.be/MbYIAEB_or0 هر نسخه ماژور نود برای ۶ ماه وارد وضعیت Current می‌شود تا برنامه نویسان امکان افزودن پیشتیبانی به برنامه ها و کتابخانه‌ها داده شود. پس از ۶ ماه نسخه های فرد از پشتیبانی خارج و نسخه های زوج وارد وضعیت LTS  می شوند. LTS  تضمین می‌دهد که تا ۳۰ ماه‌ها باگ های آن برطرف و به روزسانی انجام شود. در محیط پروداکشن همواره بایستی از نسخه های LTS  استفاده کرد.</description>
                <category>هیمن حسین پنا</category>
                <author>هیمن حسین پنا</author>
                <pubDate>Mon, 25 Apr 2022 13:22:40 +0430</pubDate>
            </item>
                    <item>
                <title>WebAssembly چیست؟</title>
                <link>https://virgool.io/@devmasters/webassembly-%DA%86%DB%8C%D8%B3%D8%AA-ue5jftegogxh</link>
                <description>در این وبدیو به این سوال پاسخ می‌دهیم که WebAssembly چیست؟ و کجا کاربرد دارد. وب اسمبلی نتیجه تلاشی است چند ساله برای اجرای چیزی غیر از جاوا اسکریپت در مرورگر و در حال حاضر به صورت استاندارد در همه مرورگرهای مدرن قابل استفاده است. ابتدا به معرفی تکنولوژی و مزیت های آن پرداختیم و گفتیم که اتودسک، گوگل و فیگما چگونه از وب اسمبلی برای پروژه های خود استفاده میکنند و در نهایت تلاش های قبل از WebAssembly  را معرفی کردیم و گفتیم google native client و asm.js چگونه مسیر را برای وب اسمبلی هموار کردند. https://youtu.be/BjMJAXQmCic </description>
                <category>هیمن حسین پنا</category>
                <author>هیمن حسین پنا</author>
                <pubDate>Fri, 22 Apr 2022 18:13:04 +0430</pubDate>
            </item>
                    <item>
                <title>TypeScript چیست؟ چرا تایپ اسکریپت‌ ؟</title>
                <link>https://virgool.io/@devmasters/typescript-%DA%86%DB%8C%D8%B3%D8%AA-%DA%86%D8%B1%D8%A7-%D8%AA%D8%A7%DB%8C%D9%BE-%D8%A7%D8%B3%DA%A9%D8%B1%DB%8C%D9%BE%D8%AA-epblnvnyedyw</link>
                <description>در اولین ویدیو از سری آموزش TypeScript  به این سوال پاسخ دادیم که TypeScript چیست و چرا تایپ اسکریپت تکنولوژی مهمی است و أینده شغلی برنامه نویس را تضمین می‌کند. در آغاز به معرفی تاریخچه‌ای مختصر از جاوا اسکریپت و زمینه‌های شکل گیری آن صحبت کردیم معضلات آن برای برنامه نویسی پرداختیم. سپس به تحول و اوج گیری وب و به طبع آن جنگ مرورگرها را مطرح کردیم. در ادامه به زمینه های پیدایش TypeScript  و مسایلی که حل کرده پرداختیم و در نهایت مولفه های دیگری که سعی کرده‌اند کارکردی مشابه TypeScript  داشته باشند را بررسی کردیم. https://youtu.be/X9lsmXq5Ie4 </description>
                <category>هیمن حسین پنا</category>
                <author>هیمن حسین پنا</author>
                <pubDate>Fri, 22 Apr 2022 18:07:45 +0430</pubDate>
            </item>
                    <item>
                <title>پیاده سازی کامپوننت سطح بالاتر در انگولار به کمک Ivy</title>
                <link>https://virgool.io/@devmasters/%D9%BE%DB%8C%D8%A7%D8%AF%D9%87-%D8%B3%D8%A7%D8%B2%DB%8C-%DA%A9%D8%A7%D9%85%D9%BE%D9%88%D9%86%D9%86%D8%AA-%D8%B3%D8%B7%D8%AD-%D8%A8%D8%A7%D9%84%D8%A7%D8%AA%D8%B1-%D8%AF%D8%B1-%D8%A7%D9%86%DA%AF%D9%88%D9%84%D8%A7%D8%B1-%D8%A8%D9%87-%DA%A9%D9%85%DA%A9-ivy-q1oti9uqdrmz</link>
                <description>در تفکر کامپوننت، بویژه کامپوننت های فانکشنال، کامپوننت سطح بالاتر یا Higher Order Component جایگاه بسیار ویژه ای دارد. اگر از توسعه دهندگان قدیمی واسط کاربری هستید یادتان هست که در گذشته اغلب فریمورک ها از مفهوم وراثت برای ساخت UI استفاده می‌کردند. بدین معنی که یک کلاس پایه، مثلا TextBox تعریف شده بود و معمولا شما به فراخور نیاز کلاسی می ساختید تا از آن ارث بگیرد و کارکردهای جدید به آن اضافه می شد. این شیوه مبتنی بر اولویت وراثت بر ترکیب بود. اما امروزه این شیوه معکوس شده است. با تغییر رویکرد، مفهوم استفاده مجدد دستخوش تغییراتی شده است. یکی از راه های استفاده مجدد در رویکرد اولویت ترکیب بر وراثت، بهره گیری از کامپوننت سطح بالاتر است که در این ویدیو شیوه ساخت این کامپوننت در فریمورک انگولار را بررسی میکنیم.این مطلب از وبلاگ میکرو فرانت اند برداشت شده است. https://www.aparat.com/v/DdptX </description>
                <category>هیمن حسین پنا</category>
                <author>هیمن حسین پنا</author>
                <pubDate>Fri, 20 Nov 2020 23:09:58 +0330</pubDate>
            </item>
                    <item>
                <title>برنامه نویسی به زبان Dart - بررسی انواع داده های اولیه در دارت</title>
                <link>https://virgool.io/coderlife/%D8%A8%D8%B1%D9%86%D8%A7%D9%85%D9%87-%D9%86%D9%88%DB%8C%D8%B3%DB%8C-%D8%A8%D9%87-%D8%B2%D8%A8%D8%A7%D9%86-dart-%D8%A8%D8%B1%D8%B1%D8%B3%DB%8C-%D8%A7%D9%86%D9%88%D8%A7%D8%B9-%D8%AF%D8%A7%D8%AF%D9%87-%D9%87%D8%A7%DB%8C-%D8%A7%D9%88%D9%84%DB%8C%D9%87-%D8%AF%D8%B1-%D8%AF%D8%A7%D8%B1%D8%AA-nuizagw4pqqn</link>
                <description> https://www.aparat.com/v/Pk9Gl نکات مهمدو نوع داده برای کار با اعداد صحیح وجود داره، int برای اعداد صحیح و double برای اعداد ممیز شناور استفاده میشه.از bool برای انواع بولی استفاده میشه.در دارت عبارت غیر بولی، به صورت بولی ارزیابی نمیشه.از string برای تعریف متغیر استفاده میشه.مفهوم لیست و شیوه استفاده از اون.مفهوم مجموعه و شیوه استفاده از اون برای لیست های بدون آیتم تکراری مفهوم مپ و شیوه استفاده از اون برای تعریف جفت key/value در دارت.این ویدیو بخش پنجم از آموزش Dart ه که پیش نیاز برنامه نویسی با Flutter ه. با فلاتر شما میتونید برنامه های موبایل نایتیو برای iOS و Android بنویسید.</description>
                <category>هیمن حسین پنا</category>
                <author>هیمن حسین پنا</author>
                <pubDate>Fri, 31 May 2019 18:50:18 +0430</pubDate>
            </item>
                    <item>
                <title>برنامه نویسی به زبان Dart - انواع شیوه های تعریف متغیر در دارت</title>
                <link>https://virgool.io/coderlife/%D8%A8%D8%B1%D9%86%D8%A7%D9%85%D9%87-%D9%86%D9%88%DB%8C%D8%B3%DB%8C-%D8%A8%D9%87-%D8%B2%D8%A8%D8%A7%D9%86-dart-%D8%A7%D9%86%D9%88%D8%A7%D8%B9-%D8%B4%DB%8C%D9%88%D9%87-%D9%87%D8%A7%DB%8C-%D8%AA%D8%B9%D8%B1%DB%8C%D9%81-%D9%85%D8%AA%D8%BA%DB%8C%D8%B1-%D8%AF%D8%B1-%D8%AF%D8%A7%D8%B1%D8%AA-wcg0xsbpjhvo</link>
                <description> https://www.aparat.com/v/irEkj نکات مهمهرچیزی در دارت از Object به صورت ضمنی ارث میگیره و همه چی در دارت آبجکته.مفهوم نال در دارت.تعریف متغیر دینامیک در دارت و استفاده از اون.تفاوت const و final  در دارت.این ویدیو بخش چهارم از آموزش Dart ه که پیش نیاز برنامه نویسی با Flutter ه. با فلاتر شما میتونید برنامه های موبایل نایتیو برای iOS و Android بنویسید.</description>
                <category>هیمن حسین پنا</category>
                <author>هیمن حسین پنا</author>
                <pubDate>Fri, 31 May 2019 18:35:41 +0430</pubDate>
            </item>
                    <item>
                <title>برنامه نویسی به زبان Dart - مقدمات تعریف متغیر</title>
                <link>https://virgool.io/@devmasters/%D8%A8%D8%B1%D9%86%D8%A7%D9%85%D9%87-%D9%86%D9%88%DB%8C%D8%B3%DB%8C-%D8%A8%D9%87-%D8%B2%D8%A8%D8%A7%D9%86-dart-%D9%85%D9%82%D8%AF%D9%85%D8%A7%D8%AA-%D8%AA%D8%B9%D8%B1%DB%8C%D9%81-%D9%85%D8%AA%D8%BA%DB%8C%D8%B1-ujhc3ymfpuqd</link>
                <description> https://www.aparat.com/v/1VZEf نکات مهمپارامترهای خط فرمان و چگونگی ارسال و دریافت اون.مفهوم Soundness در دارت.تعریف متغیر با استفاده از کلمه کلیدی var و استنتاج نوع در دارت.شیوه استفاده از تمپلیت لیترال برای نمایش مقادیر متغیر در رشته ها.معرفی const و final  برای تعریف ثابت در دارتاین ویدیو بخش سوم از آموزش Dart ه که پیش نیاز برنامه نویسی با Flutter ه. با فلاتر شما میتونید برنامه های موبایل نایتیو برای iOS و Android بنویسید.</description>
                <category>هیمن حسین پنا</category>
                <author>هیمن حسین پنا</author>
                <pubDate>Fri, 31 May 2019 18:27:56 +0430</pubDate>
            </item>
                    <item>
                <title>برنامه نویسی به زبان Dart - اجرای نخستین برنامه</title>
                <link>https://virgool.io/@devmasters/%D8%A8%D8%B1%D9%86%D8%A7%D9%85%D9%87-%D9%86%D9%88%DB%8C%D8%B3%DB%8C-%D8%A8%D9%87-%D8%B2%D8%A8%D8%A7%D9%86-dart-%D8%A7%D8%AC%D8%B1%D8%A7%DB%8C-%D9%86%D8%AE%D8%B3%D8%AA%DB%8C%D9%86-%D8%A8%D8%B1%D9%86%D8%A7%D9%85%D9%87-colbr6vr3wdr</link>
                <description> https://www.aparat.com/v/h8p4X نکات مهمنوشتن یک برنامه ساده به زبان دات و اجرای اون.ساختار یک پروژه به زبان دارت و فایل هاش در محیط Intellij Idea.ایجاد یک ریپوزیتوری و پوش کردن سورس در ورژن کنترل.این ویدیو بخش دوم از آموزش Dart ه که پیش نیاز برنامه نویسی با Flutter ه. با فلاتر شما میتونید برنامه های موبایل نایتیو برای iOS و Android بنویسید.</description>
                <category>هیمن حسین پنا</category>
                <author>هیمن حسین پنا</author>
                <pubDate>Fri, 31 May 2019 18:09:11 +0430</pubDate>
            </item>
                    <item>
                <title>برنامه نویسی به زبان Dart - تاریخچه و مقدمه</title>
                <link>https://virgool.io/@devmasters/%D8%A8%D8%B1%D9%86%D8%A7%D9%85%D9%87-%D9%86%D9%88%DB%8C%D8%B3%DB%8C-%D8%A8%D9%87-%D8%B2%D8%A8%D8%A7%D9%86-dart-%D8%AA%D8%A7%D8%B1%DB%8C%D8%AE%DA%86%D9%87-%D9%88-%D9%85%D9%82%D8%AF%D9%85%D9%87-p5kcnex6nm9f</link>
                <description> https://www.aparat.com/v/zrXxy نکات مهم تاریخچه زبان جاوا اسکریپت و ویژگی ها و معایبش.معرفی مولفه های یک مرورگر و بررسی موتورهای جاوا اسکریپت.پیش زمینه ها و ایده طراحی زبان دارت.مجموعه دارت که شامل ماشین مجازی، ابزار تبدیل به جاوا اسکریپت و کتابخانه هاست.ابزارهای قابل استفاده برای برنامه نویسی.معرفی pub  مرکز بسته ها و کتابخانه های دارت.این ویدیو بخش اول از آموزش Dart ه که  پیش زمینه برنامه نویسی با Flutter ه. با فلاتر شما میتونید برنامه های موبایل نایتیو برای iOS و Android بنویسید.</description>
                <category>هیمن حسین پنا</category>
                <author>هیمن حسین پنا</author>
                <pubDate>Fri, 31 May 2019 17:57:33 +0430</pubDate>
            </item>
                    <item>
                <title>برنامه نویسی به زبان کاتلین - یک مثال ساده از آرایه ها</title>
                <link>https://virgool.io/@devmasters/%D8%A8%D8%B1%D9%86%D8%A7%D9%85%D9%87-%D9%86%D9%88%DB%8C%D8%B3%DB%8C-%D8%A8%D9%87-%D8%B2%D8%A8%D8%A7%D9%86-%DA%A9%D8%A7%D8%AA%D9%84%DB%8C%D9%86-%DB%8C%DA%A9-%D9%85%D8%AB%D8%A7%D9%84-%D8%B3%D8%A7%D8%AF%D9%87-%D8%A7%D8%B2-%D8%A2%D8%B1%D8%A7%DB%8C%D9%87-%D9%87%D8%A7-zpxveuxyavtj</link>
                <description> https://www.aparat.com/v/B5n3x نکات مهمآرایه چطوری تعریف میشه و چطوری ازش استفاده میشه.استفاده از تمپلیت لیترال برای نمایش مقادیر در رشته هااستفاده از توابع جی وی ام در برنامه کاتلین.کاتلین چطوری متغیرها رو به هم تبدیل میکنه.دیباگ برنامه در محیط برنامه نویسی.</description>
                <category>هیمن حسین پنا</category>
                <author>هیمن حسین پنا</author>
                <pubDate>Fri, 31 May 2019 16:24:40 +0430</pubDate>
            </item>
                    <item>
                <title>برنامه نویسی به زبان کاتلین - انواع داده در کاتلین - بخش دوم</title>
                <link>https://virgool.io/coderlife/%D8%A8%D8%B1%D9%86%D8%A7%D9%85%D9%87-%D9%86%D9%88%DB%8C%D8%B3%DB%8C-%D8%A8%D9%87-%D8%B2%D8%A8%D8%A7%D9%86-%DA%A9%D8%A7%D8%AA%D9%84%DB%8C%D9%86-%D8%A7%D9%86%D9%88%D8%A7%D8%B9-%D8%AF%D8%A7%D8%AF%D9%87-%D8%AF%D8%B1-%DA%A9%D8%A7%D8%AA%D9%84%DB%8C%D9%86-%D8%A8%D8%AE%D8%B4-%D8%AF%D9%88%D9%85-iec9zgkpfjta</link>
                <description> https://www.aparat.com/v/wgDGn نکات مهمنوع داده های Float و Double برای اعداد اعشاری استفاده میشه.نوع داده ‌Boolean برای کار داده های بولی استفاده میشه.نوع داده های Char , String برای رشته ها و کاراکترها استفاده میشه.نوع های دیگری مثل Nothing , Void هم برای کار با تابع ها وجود داره</description>
                <category>هیمن حسین پنا</category>
                <author>هیمن حسین پنا</author>
                <pubDate>Fri, 31 May 2019 16:10:54 +0430</pubDate>
            </item>
                    <item>
                <title>برنامه نویسی به زبان کاتلین - انواع داده در کاتلین - بخش اول</title>
                <link>https://virgool.io/@devmasters/%D8%A8%D8%B1%D9%86%D8%A7%D9%85%D9%87-%D9%86%D9%88%DB%8C%D8%B3%DB%8C-%D8%A8%D9%87-%D8%B2%D8%A8%D8%A7%D9%86-%DA%A9%D8%A7%D8%AA%D9%84%DB%8C%D9%86-%D8%A7%D9%86%D9%88%D8%A7%D8%B9-%D8%AF%D8%A7%D8%AF%D9%87-%D8%AF%D8%B1-%DA%A9%D8%A7%D8%AA%D9%84%DB%8C%D9%86-%D8%A8%D8%AE%D8%B4-%D8%A7%D9%88%D9%84-euxyrdg1gmar</link>
                <description> https://www.aparat.com/v/qvGK8 نکات مهم:هرچیزی که در کاتلین هست آبجکته.همه کلاس ها در کاتلین از Any به صورت ضمنی ارث میگیرن.برای تعریف متغیر معمولا به این سوالات پاسخ داده میشه. اسم متغیر چیه؟ رفرنس متغیر و یا مقدار آن امکان تغییر داره؟  نوع متغیر چیه؟ و آیا مقداردهی اولیه لازم داره؟از val برای متغیرهای ثابت و از var برای متغیرهایی که امکان تغییر دارند استفاده میشه.کاتلین نوع های Byte, Short, Int, Long برای کار با عددهای صحیح ارایه کرده.کاتلین از استتاج نوع بهره میگیره، یعنی خودش میتونه نوع متغیر رو بفهمه.</description>
                <category>هیمن حسین پنا</category>
                <author>هیمن حسین پنا</author>
                <pubDate>Fri, 31 May 2019 15:15:34 +0430</pubDate>
            </item>
                    <item>
                <title>برنامه نویسی به زبان کاتلین - بررسی کاتلین از نظر نوع های داده</title>
                <link>https://virgool.io/@devmasters/%D8%A8%D8%B1%D9%86%D8%A7%D9%85%D9%87-%D9%86%D9%88%DB%8C%D8%B3%DB%8C-%D8%A8%D9%87-%D8%B2%D8%A8%D8%A7%D9%86-%DA%A9%D8%A7%D8%AA%D9%84%DB%8C%D9%86-%D8%A8%D8%B1%D8%B1%D8%B3%DB%8C-%DA%A9%D8%A7%D8%AA%D9%84%DB%8C%D9%86-%D8%A7%D8%B2-%D9%86%D8%B8%D8%B1-%D9%86%D9%88%D8%B9-%D9%87%D8%A7%DB%8C-%D8%AF%D8%A7%D8%AF%D9%87-qh9pnyzen9km</link>
                <description> https://www.aparat.com/v/riP8L نکات مهم :نقطه شروع برنامه کجاست و چطوری تعریف میشه.پارامترهای خط فرمان و چگونگی استفاده از اون.بررسی زبان از منظر استاتیک یا دینامیک بودن۰بررسی زبان از منظر Strong  و Weak بودن.کاتلین یک زبان استاتیک و Weakly است.</description>
                <category>هیمن حسین پنا</category>
                <author>هیمن حسین پنا</author>
                <pubDate>Fri, 31 May 2019 14:57:10 +0430</pubDate>
            </item>
                    <item>
                <title>برنامه نویسی به زبان کاتلین - اجرای نخستین برنامه</title>
                <link>https://virgool.io/@devmasters/%D8%A8%D8%B1%D9%86%D8%A7%D9%85%D9%87-%D9%86%D9%88%DB%8C%D8%B3%DB%8C-%D8%A8%D9%87-%D8%B2%D8%A8%D8%A7%D9%86-%DA%A9%D8%A7%D8%AA%D9%84%DB%8C%D9%86-%D8%A7%D8%AC%D8%B1%D8%A7%DB%8C-%D9%86%D8%AE%D8%B3%D8%AA%DB%8C%D9%86-%D8%A8%D8%B1%D9%86%D8%A7%D9%85%D9%87-kdcrxknnaq4o</link>
                <description> https://www.aparat.com/v/hfTQ7 نکات مهم کامپایل اولین برنامه و اجرا از طریق خط فرمان.کاتلین با خودش یک ران تایم داره که کتابخانه های اصلیش اونجا قرار داره.کامپایل و اجرای برنامه توسط Intellij Idea.ایجاد یک ریپوزیتوری در گیت هاب و پوش کردن پروژه.</description>
                <category>هیمن حسین پنا</category>
                <author>هیمن حسین پنا</author>
                <pubDate>Fri, 31 May 2019 14:29:51 +0430</pubDate>
            </item>
            </channel>
</rss>