<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
    <channel>
        <title>نوشته های پرهام درویشی</title>
        <link>https://virgool.io/feed/@Parhamdarvishi</link>
        <description>دانشجو،برنامه نویس</description>
        <language>fa</language>
        <pubDate>2026-04-15 06:10:51</pubDate>
        <image>
            <url>https://files.virgool.io/upload/users/376566/avatar/cFH5fR.png?height=120&amp;width=120</url>
            <title>پرهام درویشی</title>
            <link>https://virgool.io/@Parhamdarvishi</link>
        </image>

                    <item>
                <title>نحوه مدیریت چند پروژه انگولار با ورژن‌های متفاوت</title>
                <link>https://virgool.io/@Parhamdarvishi/%D9%86%D8%AD%D9%88%D9%87-%D9%85%D8%AF%DB%8C%D8%B1%DB%8C%D8%AA-%DA%86%D9%86%D8%AF-%D9%BE%D8%B1%D9%88%DA%98%D9%87-%D8%A7%D9%86%DA%AF%D9%88%D9%84%D8%A7%D8%B1-%D8%A8%D8%A7-%D9%88%D8%B1%DA%98%D9%86-%D9%87%D8%A7%DB%8C-%D9%85%D8%AA%D9%81%D8%A7%D9%88%D8%AA-icnkijpkgec1</link>
                <description>سلام، امیدوارم حالتون خوب باشه..بریم سر اصل مطلباگه شما هم مثل من مجبور بودید چند پروژه انگولاری که هر کدون از یک ورژن خاص استفاده میکنند پشتیبانی کنید به خطاهایی از قبیل : (node:12364) [DEP0111] DeprecationWarning: Access to process.binding(&#x27;http_parser&#x27;) is deprecatedبرمیخورید که ذاتا به خاطر تفاوت ورژن است. یک راه عالی و سریع برای این مدیریت این موضوع نصب nvm است.کارایی nvm در مدیریت ورژن های متفاوت node است.مراحل حل موضوع:ابتدا nvm را دانلود کنید. از لینک  می تونید نسخه مناسب خودتون را پیدا کنید و نصب کنید.حواستون باشه که اگه نسخه ای از node را قبل از nvm دارید در هنگام نصب یک پنجره میاد و اونو هم اضافه کنید به nvmتون.مرحله دوم اینه که روی پروژه ای که این خطا رو دریافت میکنید: فایلهای &quot;package-lock.json&quot; و &quot;node_modules&quot; را پاک کنید.مرحله سوم نصب ورژن node مورد نظرتون به وسیله دستور زیر است:nvm install [required node version]برای مثال من ورژن 14.20.1 رو که ورژن قدیمی هم هست نیاز داشتم نصب کنم پس فقط نوشتم nvm install 14.20.1.تذکر: ممکن هست که سیستم شما nvm را بعد از نصب نشانسه که برای حل این موضوع راه آسون این هست که cmd یا terminalتون رو به صورت administrator باز کنید.بعد از نصب ورژن خاص حالا وقت این میرسه که از nvm برای مدیریت node استفاده کنید که الان کافی هستش بنویسید nvm use [required node version].حالا شما میتونید روی اون ورژن هر کاری که قبلا روش خطا میگرفتید رو انجام بدید. این کار شامل npm install یا ng serve یا ng build یا هر دستور دیگه ای میتونه باشه و بستگی داره شما بخوای چه کار کنی..</description>
                <category>پرهام درویشی</category>
                <author>پرهام درویشی</author>
                <pubDate>Wed, 15 Nov 2023 00:17:32 +0330</pubDate>
            </item>
                    <item>
                <title>Deadlock در SqlServer</title>
                <link>https://virgool.io/@Parhamdarvishi/deadlock-in-sqlserver-dtkryhxsnv2t</link>
                <description>خوب در مرحله اول ببینیم deadlock چیه ؟مفهوم deadlock یکی از مباحثی هستش که بچه های کامپیوتر زیاد میشنون و البته از اون دست کلمه هاست که شاید سایر توی سایر علوم هم زیاد به کار بیاد برای مثال ما این مفهوم رو هم در سیستم عامل و هم در دیتابیس و .. داریم اما تعریفی که الان از بنده می شنوید با تمرکز و دید SQL یی گفته میشه و شاید این عبارت در جاهای دیگه به صورت عمومی درست باشه اما به صورت تخصصی قابل دفاع نیست..در SQL SERVER این مفهوم(یعنی deadlock) یک مشکل همزمانی خاص تلقی میشه وقتی که دو تراکنش (transaction) عملیات های همدیگر رو بلاک میکنن حالا این بلاک شدن یعنی چی ؟ یعنی برای مثال تراکنش اول یکی از آبجکت های دیتابیس رو لاک میکنه و در همین حال تراکنش دوم میخواد به این آبجکت لاک شده دسترسی داشته باشه و برعکس ..انتخاب نحوه برخورد SQL با deadlock رو شما میتونید با دستور DEADLOCK_PRIORITY مشخص کنید که الویت شما با کدام تراکنش هستش اما اگر این موضع رو بزارید به عهده دیتابیس بمونه دیتابیس اون تراکنشی که در حلقه درخواست ها باعث این اتفاق شده رو انتخاب میکنه و اون رو اصطلاحا Rollback میکنه(منظور از rollback به این معنی هست که به حالت ابتدایی برمیگردونه .. البته خود این مفهوم یک مفهوم خیلی مهم هست که در بخش تراکنش ها میتونید اون رو دسته بندی کنید و راجع بهش بخونید ..) و عملیات تراکنش دیگر رو انجام میده ..حالا که مفهموم deadlockرو فهمیدیم باید بدونیم چه کارهایی باید کنیم که deadlock صورت نگیره و در مرحله بعد اگر صورت گرفت چطور اون رو حل کنیم ..یکسری کارا هست که اگر انجام بدید احتمال اینکه کمتر به deadlock بخورید بیشتر میشه:نرمال سازی درست دیتابیستوسعه نرم فزار به صورتی که دسترسی به آبجکت های دیتابیس با ترتیب درست صورت بگیرهکاربر اجازه وارد کردن دیتا در هنگام تراکنش را نداشته باشهاز دستور cursors استفاده نکنیدتراکنش ها رو تا جایی که امکان داره کوتاه در نظر بگیریدتعداد بارهایی که یه دیتایی رو میخونید کم کنید. برای مثال در داخل یه پراسیجر به جای این که چن بار بخونید یکبار بخونیدش و در داخل متغیر یا جدول موقت یا .. بریزیدرفت آمد بین برنامه شما و دیتابیس هزینه بر است پس سعی کنید با استفاده از پراسیجر ها این کار رو به حداقل برسونیدتا اینجا میشه تیترهای کلی را گفتیم..میشه گفت اولین توصیه یا بهتر بگیم پایه ای ترین توصیه که به برنامه نویسان SQL SERVER گفته میشه اینه که در بیشتر select هایی که میزنید دستور nolock داشته باشه ..البته موضوعی که بالا گفتم یک مقدار ابهام داره(چون گفتم بیشتر select ها) حالا چه select هایی ؟ بستگی به شرایط داره و ان هم اینه که در سیستمی که میخوایم روش عملیات select رو بزنیم کدوم بدتره :deadlockwrong valueاگر برای سیستم شما در گزارش گیری عملیات deadlock مهم تر است که اتفاق نیافند پس حتما از nolock استفاده میکنیم اما اگر صحت اطلاعات اهمیت داره ترجیحا nolock نزنید. حالا اینکه کدوم برای شما مهم تره دیگه بستگی به ساختار دیتابیس و نیازمندی و شکل دیتا و حجم دیتاتون داره ..اما اگر بخوام به صورت کلی بگم باید خدمتتون عرض کنم که در دیتابیس های مالی ( یا حتی جداول مالی) deadlock اصلا مفهوم و موضوع قابل قبولی نیست پس بهتره از nolock استفاده کنید.تا ایتجا تکلیفمون با select و تراکنش ها  مشخص شد حالا اگر پراسیجری داشته باشید که در داخل اون ممکن هست که کارهایی دیگه ای هم صورت بدیم ولی شک داریم یا میترسیم که اون تیکه کد به deadlock بخوره باید چه کار کنیم ؟ تیکه کد زیر دقیقا برای رفع این مشکل یا شک یا ترس هستش..DECLARE @RetryNo Int = 1,@RetryMaxNo Int = 5;    WHILE @RetryNo &lt; @RetryMaxNo      BEGIN         BEGIN TRY 	--در این قسمت تیکه کدی که ممکن است دچار deadlock شود را مینویسیم ..            SELECT @RetryNo = @RetryMaxNo;         END TRY         BEGIN CATCH            IF ERROR_NUMBER() IN (1204, 1205, 1222)               BEGIN                  SET @RetryNo += 1;--در این قسمت 10 ثانیه صبر میکنیم و سپس سعی در انجام عملیات میکنیم..                  WAITFOR DELAY &#x27;00:00:10&#x27;;               END             ELSE               THROW;         END CATCH      END </description>
                <category>پرهام درویشی</category>
                <author>پرهام درویشی</author>
                <pubDate>Tue, 01 Dec 2020 15:45:08 +0330</pubDate>
            </item>
                    <item>
                <title>طریقه ساخت یک ویندوز سرویس و همچنین debug کردن آن</title>
                <link>https://virgool.io/@Parhamdarvishi/%D8%B7%D8%B1%DB%8C%D9%82%D9%87-%D8%B3%D8%A7%D8%AE%D8%AA-%DB%8C%DA%A9-%D9%88%DB%8C%D9%86%D8%AF%D9%88%D8%B2-%D8%B3%D8%B1%D9%88%DB%8C%D8%B3-%D9%88-%D9%87%D9%85%DA%86%D9%86%DB%8C%D9%86-debug-%DA%A9%D8%B1%D8%AF%D9%86-%D8%A2%D9%86-igds7fcdzi3k</link>
                <description>سلام امروز میخوام طریقه ساختن یه پروژه ویندوز سرویسی رو براتون توضیح بدم . اینکه چه موقع ما باید به سراغ ویندوز سرویس ها بیایم خودش خیلی بحث گسترده ای هستش و من نمیخوام زیاد راجع به مزایا و معایب یا چالش هایی که این نوع پروژه ها دارن صحبت کنم و بیشتر میخوام به مباحث پیاده سازی اون (بخش فنی مبحث)تمرکز کنم و سعی میکنم در یک مطلب جداگانه راجع به این نوع پروژه ها با هم حرف بزنیم .بریم سراغ اصل مطلب..من از ویژوال استدیو 2017 برای ساخت این پروژه استفاده کردم و در ورژن های دیگه شاید جای گزینه ها متفاوت باشه و ذات کار یکی هستش . ویژوال استدیو را به صورت Run as administrator باز میکنیم .در مسیر :File -&gt; new -&gt; projectزبان مورد نظر خود را انتخاب کنید (من از سی شارپ استفاده میکنم معمولا اما شما میتونید vb.net یا .. رو هم به عنوان زبان ویندوز سرویستون انتخاب کنید).در سربرگ windows desktop به دنبال نوع پروژه Windows Service باشید .نام پروژه – نام سولوشن و محل پروژه را تعیین کنید .حال یک پروژه برای شما ساخته میشود و به صورت دیفالت Service1.vb[defualt]  به شما نشان داده میشود . شما با زدن f7 میتوانید به کد های خود دسترسی داشته باشید .سرویس ها دو متد مهم دارند یکی  و دیگیری که در اصل میشه گفت این ها Event های ما هستند یعنی با Run شدن سرویس به صورت  خود کار داخل   می افتیم . پس ادامه کار ما در متد  میباشد .صفحه ای که بالافاصله بعد از ساخت پروژه با آن روبرو میشویم .بدیهی است که برای اجرا گرفتن از ویندوز سرویس باید آن را نصب کنید . برای این کار باید برای ویدوز سرویس خود installer نصب کنید .برای اضافه کردن installer بر روی service1.vb [designer] کلیک راست کنید . و گزینه Add Installer کلیک کنید .بعد از ساخت یک فایل با ProjectInstaller.vb  ساخته میشود .برای تعیین نام سرویس فایل initialize component() را باز میکنیم . و پراپرتی ServiceName را مقدار دهی میکنیم .حال دیگر بنا به نیاز مندی کد های خود را بنویسید .در اینجا شما باید به فانکشنالیتی که برای اون به سراغ ویندوز سرویس اومدید بپردازید.برای تست ویندوز سرویس :ویندوز سرویس مورد نظر خود را set as start up project  کنید .حالت پروژه را بر روی debug  بزارید .در  خود کد Debugger.Launch() را بگذارید.پروژه را build کنید .تذکر: به شدت دقت کنید که پوشه debug شما در ابتدا clean شده . دارید کدهای درست را build  و نصب میکنید .حال برای نصب باید اقدام کنید .فایل ها درون یک پوشه در یک مسیر دلخواه بریزید .Cmd را حتما به صورت Run as administator  ران کنید .حال دستور زیر را میزنیم&quot;C:\Windows\Microsoft.NET\Framework\v4.0.30319\installutil.exe&quot; &quot;c:\myservice.exe&quot;بخش اول مسیر اصلی نصب کننده است که به آن دست نمیزنیم .بخش دوم مسیر exe ما ( همان ویندوز سرویس ) ماست .سپس پنجره ای تحت عنوان Set winows service login میآید که باید username و password را وارد نماییمبرای مثال : ./p.darvishi به عنوان usernameسپس در قسمت services ها اقدام به start کردن آن کنید بافاصله بعد از این حرکت پروژه در داخل ویژوال استدیو باز و بالای خط debugger.luachاستاپ میشود و حال شما میتوانید trace  خود را اغاز کنید .چگونه ویندوز سرویس را استاپ کنیم ?Cmd را به صورت run as administartor ران کنید .sc queryex &quot;نام سرویس&quot;با اجرای این دستور یک سری اطلاعات سرویس به دست می آورید یکی از آنها  PIDاست .حال دستور زیر را اجرا نمایید .taskkill /F /PID [شماره ای که به دست می آورید]تمامپاییز 99</description>
                <category>پرهام درویشی</category>
                <author>پرهام درویشی</author>
                <pubDate>Tue, 24 Nov 2020 10:54:40 +0330</pubDate>
            </item>
                    <item>
                <title>تفاوت بین F5 و CTRL + R و CTRL + SHIFT + R و CTRL + F5</title>
                <link>https://virgool.io/@Parhamdarvishi/%D8%AA%D9%81%D8%A7%D9%88%D8%AA-%D8%A8%DB%8C%D9%86-f5-%D9%88-ctrl-r-%D9%88-ctrl-shift-r-%D9%88-ctrl-f5-b6ya4dovgbfq</link>
                <description>سلام من پرهام درویشی هستم و امروز میخوام راجع به تفاوت این دکمه های ترکیبی براتون بگم ..نکته اول اینکه من این موضوع رو توی مرورگر کروم بررسی کردم و ممکن هستش که در سایر مرورگرها یه مقدار قضیه متفاوت باشهشاید توی متن پیش رو با کلمات انگلیسی بربخورید که خوب هم برای این هست که شما با سرچ اون کلید واژه ها سریع تر به سایر منابع برسید و هم اینکه به نظرم بعضی کلمات برای اینکه معنی خودشون رو بتونن حفظ کنن و دقیقا اون چیزی که توی ذهن من هست رو به شما انتقال بدن باید ترجمه نشن و اصل کلمه استفاده بشه..احتمالا بعضی مواقع توی وب احساس کردین که چیزی درست لود نشده و وقتی با پشتیان تماس میگیرید بهتون میگه که رفرش کردی ؟ یا خیلی موارد این چنینی ..این عملیات رفرش که ما ازش حرف زدیم با روش های مختلفی انجام پذیر هست اما خوب این روش ها با هم چه فرقی دارن ؟!یکی از این روش ها کلید F5 کیبوردتون هست که با زدن اون صفحه رفرش میشه . در این روش مرورگر از هر طریق ممکن از cache استفاده میکنه . عملیات CTRL + R دقیقا مشابه با F5 هستش و چیزهایی که برای F5 گفتم و میگم راجع به F5 نیز صادق هست ..در واقع روش F5 صفحه جاری شما رو فقط رفرش میکنه و به این روش Normal Reload هم گفته میشه. این دو عملیات با انتقال cursor بر روی آدرس URL و زدن enter فرقی نداره ..پس تا اینجا سه تا روش برای Normal Reload  گفته شد ولی بیاید راجع به Hard Reload یا به قولی دیگه راجع به Force Reload صحبت کنیم ..عملیات Hard Reload هم باز چند روش داره : F5 + CTRL / SHIFT + F5 / CTRL + SHIFT +R روش هایی هستند که در اون مرورگر صفحه رو رفرش میکنه اما این بار دیگه خبری از cache نیست . خیلی از cache صحبت کردیم و شاید میشه گفت حالا بحث پیش میاد که اصن خود این cache که گفتیم چی هست ولی این اجازه رو بدید که این موضوع رو که به نظرم یکی از اساسی ترین مفاهیم وب هست رو توی یک محتوای دیگه بررسی کنیم ..امیدوارم این متن مفید بوده باشه..ارادت                                                                                                                                                                                پرهام درویشی</description>
                <category>پرهام درویشی</category>
                <author>پرهام درویشی</author>
                <pubDate>Fri, 13 Nov 2020 13:07:22 +0330</pubDate>
            </item>
            </channel>
</rss>