<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"><channel><title>نوشته های نوید فریدی</title><link>https://virgool.ir/feed/@navid.faridi</link><description>مشاور، معمار، طراح و برنامه نویس سیستم های نرم افزاری</description><language>fa</language><pubDate>2026-11-10 21:31:27</pubDate><image><url>https://files.virgool.ir/upload/users/1498713/avatar/obhkiX.jpeg</url><title>نوید فریدی</title><link>https://virgool.ir/@navid.faridi</link></image><item><title>اشتراک‌گذاری داده‌ها در معماری میکروسرویس‌ها</title><link>https://virgool.ir/@navid.faridi/اشتراک-گذاری-داده-ها-در-معماری-میکروسرویس-ها-yl6cfyflwau7</link><description>مدتی است که در خصوص معماری میکروسرویس ها، ضمن انجام پروژه ها و کارهای مربوطه، سعی می کنم که بیشتر عمیق شوم و به مفاهیم مربوطه نیز بیشتر توجه کنم، از این رو یک موضوع در این خصوص را برای این نوشته در نظر گرفتم. معماری میکروسرویس ها به دلیل انعطاف پذیری و مقیاس پذیری که به ارمغان می آورد، شهرت زیادی پیدا کرده است. یکی از اصول اساسی در این رویکرد، استقلال سرویس‌ها است - یعنی هر میکروسرویس بتواند داده های خود را مدیریت کرده و بدون وابستگی به سرویس‌های دیگر فعالیت کند. هر چند این اصل ساده به نظر می رسد، پیاده سازی آن نیاز به برنامه ریزی دقیقی دارد، به ویژه در زمینه اشتراک گذاری داده‌ها و تعاملات سرویس‌ها.یکی از اصول کلیدی در میکروسرویس ها، استقلال سرویس ها است.دراین نوشته به چالش ها و راه حل هایی برای دستیابی به استقلال سرویس‌ها می پردازیم و بر تعادل بین سازگاری (Consistency) و مقیاس پذیری (Scalability) در محیط میکروسرویس‌ها تمرکز می کنیم.موضوع اصلی، تعادل بین سازگاری داده‌ها (Consistency) و مقیاس‌پذیری (Scalability) است که در میکروسرویس‌ها اهمیت بسیار زیادی دارد.داشتن پایگاه داده مجزا برای هر سرویس در معماری میکروسرویس ها مزایایی چون حفظ حریم داده ها، کاهش وابستگی و افزایش تاب آوری سیستم را به همراه دارد.کاهش وابستگی یکی از ویژگی های کلیدی معماری میکرو سرویس هاست، به همین دلیل، هر میکروسرویس باید اطلاعات خود را در پایگاه داده مخصوص به خود ذخیره و از آن بازیابی کند.این الگو انعطاف پذیری لازم برای انتخاب پایگاه داده مناسب، اعم از پایگاه داده های رابطه یی یا غیر رابطه یی، متناسب با نیازهای کاربردی و تجاری شما را فراهم می کند.بر اساس این الگو، میکروسرویس ها پایگاه داده مشترک ندارند و تغییرات در پایگاه داده اختصاصی یک سرویس، تاثیری بر سایر میکروسرویس ها ندارد. داده های ذخیه شده توسط یک میکروسرویس به طور مستقیم توسط سایر میکروسرویس ها قابل دسترسی نیست و تنها از طریق APIها می توان به آن دسترسی داشت.داشتن پایگاه داده اختصاصی برای هر سرویس، تاب آوری، امنیت و حریم خصوصی برنامه شما را بهبود می بخشد. همچنین این الگو احتمال وجود نقطه شکست واحد (Single Point of Failure) را از بین می برد.each microservice can have their own databaseدر زیر مروری به سرفصل های زیر خواهیم داشت: اصل استقلال سرویس و مالکیت داده‌هادرک تفاوت بین اشتراک‌گذاری داده و اشتراک‌گذاری منبع دادهچالش‌های درخواست‌های همزمان (Synchronous Requests) در میکروسرویس‌هاسازگاری نهایی (Eventual Consistency): یک رویکرد مقیاس پذیر برای اشتراک گذاری داده پیاده سازی عملی سازگاری در سرویسهای مختلفبهترین شیوه ها برای دستیابی به استقلال سرویس در میکروسرویس‌ها۱. اصل استقلال سرویس و مالکیت داده‌هادر معماری مناسب میکروسرویس‌ها، هر سرویس تنها مالک داده‌های خود است و مسئولیت مدیریت آن را به صورت مستقل بر عهده دارد. به این معنا که هیچ دو سرویسی نباید از یک پایگاه داده مشترک استفاده کنند. در عوض، هر سرویس باید پایگاه داده یا راهکار ذخیره‌سازی داده مختص خود را داشته باشد تا بتواند به صورت مستقل و بدون تاثیر بر سایر سرویس‌ها تکامل یابد.نکات کلیدی:مالکیت مستقل داده به هر سرویس اجازه می‌دهد که داده‌های خود را کنترل کند و به روزرسانی‌ها را به دلخواه انجام دهد.این استقلال باعث کاهش وابستگی بین سرویس‌ها شده و نگهداری، مقیاس‌پذیری و استقرار هر سرویس را آسان‌تر می‌کند.۲. درک تفاوت بین اشتراک‌گذاری داده و اشتراک‌گذاری منبع دادهاگرچه داشتن مالکیت مستقل داده ایده‌آل است، بسیاری از سرویس‌ها همچنان به اطلاعات دیگر سرویس‌ها نیاز دارند. به عنوان مثال، سرویس سفرها (Trips) ممکن است به اطلاعات مسافران از سرویس مسافران (Passenger) یا اطلاعات رانندگان از سرویس رانندگان (Driver) نیاز داشته باشد.گاهی ممکن است تمایل به استفاده از پایگاه داده مشترک یا درخواست‌های همزمان برای دسترسی لحظه‌ای به داده‌ها وجود داشته باشد. اما اشتراک‌گذاری یک منبع داده به‌طور مشترک معمولاً وابستگی‌هایی ایجاد می‌کند که به پیچیدگی و کاهش مقیاس‌پذیری سیستم منجر می‌شود. در عوض، باید تفاوت بین اشتراک‌گذاری منبع داده و اشتراک‌گذاری داده‌ها را در نظر بگیریم.راه‌حل: پیاده‌سازی مکانیزم‌های تکرار داده و ذخیره‌سازی محلی (Local Caching) تا هر سرویس بتواند یک کپی مستقل و به‌روز از داده‌های مورد نیاز خود را نگهداری کند.۳. چالش‌های درخواست‌های همزمان (Synchronous Requests) در میکروسرویس‌هادرخواست‌های همزمان (مثل API‌های RESTful) معمولاً برای بازیابی داده از سایر سرویس‌ها استفاده می‌شوند، اما در یک محیط مقیاس‌پذیر، این روش چالش‌های بسیاری دارد:زنجیره وابستگی: وقتی سرویس‌ها برای دریافت داده به صورت همزمان از سرویس‌های دیگر استفاده می‌کنند، زنجیره‌های پیچیده‌ای از وابستگی‌ها به وجود می‌آید. به عنوان مثال، سرویس Leaderboard ممکن است به سرویس کاربران (User) وابسته باشد تا نام و آواتار کاربران را نمایش دهد. این وابستگی‌ها هم سیستم را کندتر می‌کنند و هم بازیابی از خطاها را پیچیده می‌کنند.نقطه شکست واحد (SPOF): وابستگی به یک سرویس خاص برای داده‌ها می‌تواند باعث شود که آن سرویس به یک گلوگاه (Bottleneck) تبدیل شود. اگر سرویس کاربران دچار مشکل شود، سرویس‌هایی که به آن وابسته هستند نیز تحت تاثیر قرار می‌گیرند و سیستم کلی دچار اختلال می‌شود.افزایش تأخیر: هر درخواست همزمان اضافی باعث افزایش تأخیر کلی می‌شود و می‌تواند تجربه کاربری را تحت تأثیر قرار دهد.راه‌حل: به جای درخواست‌های همزمان، از ارتباطات غیرهمزمان (Asynchronous Communication) و معماری‌های رویداد محور (Event-Driven Architecture) استفاده کنید تا این ریسک‌ها کاهش یابند.۴. سازگاری نهایی (Eventual Consistency): یک رویکرد مقیاس‌پذیر برای اشتراک‌گذاری دادهبرای حل مشکلات درخواست‌های همزمان، بسیاری از سیستم‌های میکروسرویس‌ها از سازگاری نهایی (Eventual Consistency) استفاده می‌کنند. در این رویکرد، هر سرویس یک کپی محلی از داده‌های مورد نیاز خود را نگهداری می‌کند و این داده‌ها را از طریق رویدادها به‌روزرسانی می‌کند.مزایای سازگاری نهایی:بهبود مقیاس‌پذیری: سرویس‌ها می‌توانند به‌طور مستقل عمل کنند و نیازی به داده‌های لحظه‌ای ندارند.کاهش SPOF: ذخیره داده‌های محلی به سرویس‌ها امکان می‌دهد بدون وابستگی به سرویس‌های دیگر کار کنند.عملکرد بهتر: چون هر سرویس به داده‌های ضروری خود دسترسی محلی دارد، نیازی به درخواست‌های همزمان برای آن داده‌ها ندارد و زمان پاسخ‌دهی بهبود می‌یابد.مثال: سرویس Leaderboard می‌تواند یک نسخه کش شده از نام و آواتار هر کاربر را ذخیره کند و به صورت دوره‌ای از طریق رویدادها آن را به‌روزرسانی کند. هرچند این داده‌ها ممکن است کمی قدیمی باشند، اما این تاخیر معمولاً برای داده‌های غیرحیاتی قابل قبول است.۵. پیاده‌سازی عملی سازگاری در سرویس‌های مختلفهر میکروسرویس ممکن است به سازگاری خاص خود نیاز داشته باشد، بسته به نقش و حساسیت داده‌هایی که استفاده می‌کند. در اینجا چند مثال آورده شده است:سرویس Leaderboard: این سرویس به اطلاعات کاربران نیاز دارد، اما می‌تواند تاخیرهای کوتاهی را در به‌روزرسانی داده‌ها تحمل کند. ذخیره نسخه‌ای محلی از داده‌های کاربران و به‌روزرسانی دوره‌ای آن می‌تواند راه‌حل مناسبی باشد.سرویس Notification: این سرویس به اطلاعات تماس کاربران نیاز دارد تا پیام‌ها را به درستی ارسال کند. در اینجا، نیاز به همگام‌سازی دقیق‌تر و به‌روزرسانی‌های به‌موقع دارد.با تنظیم استراتژی‌های سازگاری بر اساس نیازهای هر سرویس، می‌توان تعادل خوبی بین استقلال و دقت داده‌ها برقرار کرد.۶. بهترین شیوه‌ها برای دستیابی به استقلال سرویس در میکروسرویس‌هابرای دستیابی به استقلال سرویس در معماری میکروسرویس‌ها، باید ترکیبی از انتخاب‌های معماری و شیوه‌های عملی را به کار گرفت:استفاده از ارتباطات غیرهمزمان: ترجیحاً از پیام‌های رویداد محور به جای درخواست‌های همزمان استفاده کنید.پیاده‌سازی ذخیره‌سازی محلی: نسخه‌ای از داده‌های موردنیاز را به صورت محلی ذخیره کنید تا از درخواست‌های متوالی به سرویس‌های دیگر جلوگیری شود.پذیرش سازگاری نهایی در موارد غیرحیاتی: از سازگاری نهایی برای داده‌های غیرحیاتی استفاده کنید تا مقیاس‌پذیری و تاب‌آوری سیستم بهبود یابد.نظارت و بهینه‌سازی مداوم: زنجیره‌های وابستگی و عملکرد سیستم را به‌طور مداوم بررسی و بهینه کنید.نتیجه‌گیریاستقلال سرویس‌ها در معماری میکروسرویس‌ها برای دستیابی به یک سیستم مقیاس‌پذیر، مقاوم و قابل نگهداری حیاتی است. با مدیریت مناسب اشتراک‌گذاری داده‌ها، استفاده از ارتباطات غیرهمزمان و پیاده‌سازی سازگاری نهایی، می‌توان میکروسرویس‌هایی مستقل و کارآمد ایجاد کرد.با پذیرش این اصول، تیم‌ها می‌توانند از مزایای واقعی میکروسرویس‌ها بهره‌مند شوند: مقیاس‌پذیری مستقل، استقرار سریع‌تر و تحمل بالا در برابر خطاها.</description><category>نوید فریدی</category><author>نوید فریدی</author><pubDate>Tue, 12 Nov 2024 15:46:30 +0330</pubDate></item><item><title>راه اندازی gitlab ee روی سرور ubuntu با استفاده از docker</title><link>https://virgool.ir/@navid.faridi/راه-اندازی-gitlab-ee-روی-سرور-ubuntu-با-استفاده-از-docker-fkq41pnjq41u</link><description>ابتدا یک سرور ubuntu راه اندازی می کنیم، در زمانی که من این یادداشت را می نویسم، نسخه ی به روز و متداول ورژن 24 است.با توجه به اینکه گیت لب، نیاز به پورت های 80، 443 و 22 دارد، پورت ssh پیشفرض سرور را از 22 به 2022 تغییر میدهیم.برای تغییر پورت ssh، باید یه نگاهی به فایل sshd_config  که در مسیر /etc/ssh قرار دارد بیندازیم.cat /etc/ssh/sshd_configدر فایل sshd_config باید خط مربوط به port را که در تصویر فوق با فلش قرمز مشخص شده را از حالت کامنت با حذف # خارج کنیم و سپس پورت مورد نظر را به جای عدد 22 بنویسیم.اگر فایروال فعال است باید پورت جدید را در فایروال باز کنیم و سپس سرویس ssh را ریستارت کنیم. مثلا اگر پورت جدید 2022 باشد، دستورات به شکل زیر خواهند بود.sudo ufw allow 2022/tcp&#xA;sudo systemctl restart sshبعد از این عمل، میتونید سرور را هم یکبار ریستارت کنیدsudo rebootخب حالا دیگه باید با پورت جدید به سرور متصل شوید.باید برای اینکه نصب را شروع کنیم، ابتدا docker engine را روی سرور نصب کنیم، اگر سرور شما در ایران باشد، با توجه به حال و روز اینترنت احتمالا در دانلود برخی پکیج ها یا توجه یه تحریم ها مشکل داشته باشید. لذا بهتر هست که قبل از ادامه ی کار، یک وی پی ان راه اندازی کنید، یا با تغییر dns به یکی از dns های مخصوص رفع تحریم مانند شکن shecan.ir کار را کمی راحت تر کنید.تغییر dns را احتمالا باید به کمک netplan انجام دهید.برای این موضوع در جاهای مختلف راهنما قرار دارد.در ادامه باید داکر رو نصب کنیدحالا که داکر را راه اندازی کرده اید باید یک فایل داکر کامپوز در یک مسیر مناسب درست کنید برای گیت لببه جای localhost اسم دامنه یا زیردامنه مورد نظر خود را بگذارید و آی پی آن زیر دامنه را به سرور خود تنظیم کنید.version: &#39;3.6&#39;&#xA;services:&#xA;  web:    &#xA;     image: &#39;gitlab/gitlab-ee:latest&#39;    &#xA;     restart: always    &#xA;     hostname: &#39;localhost&#39;&#xA;    environment:&#xA;      GITLAB_OMNIBUS_CONFIG: |&#xA;        external_url &#39;https://localhost&#39;&#xA;        # Add any other gitlab.rb configuration here, each on its own line&#xA;    ports:&#xA;      - &#39;80:80&#39;&#xA;      - &#39;443:443&#39;&#xA;      - &#39;22:22&#39;&#xA;    volumes:&#xA;      - &#39;$GITLAB_HOME/config:/etc/gitlab&#39;&#xA;      - &#39;$GITLAB_HOME/logs:/var/log/gitlab&#39;&#xA;      - &#39;$GITLAB_HOME/data:/var/opt/gitlab&#39;&#xA;    shm_size: &#39;256m&#39;با توجه به اینکه اینجا محتوای فایل درست نمایش داده نمی شود، می توانید محتوای دقیق آن را از لینک گیت هاب من  بردارید = در گیت هاب navidfaridi را جستجو کنید و از ریپوزیتوری DockerCompose-Samples یک کپی برای خودتون برداریدهمچنین کاربر خود رو به گروه کاربران داکر با دستور زیر اضافه کنیدsudo usermod -aG docker $USERقبل از اینکه این فایل را با استفاده از داکر کامپوز اجرا کنید، باید پارامتر GITLAB_HOME را در متغیرهای محیطی (environment) تعریف کنید و برای آن یک مسیر تعیین کنید.برای این منظور یک فایل .env در کنار فایل داکر کامپوز بسازید و محتوای آن را برابر زیر قراردهیدGITLAB_HOME=/srv/gitlabحالا در محلی که فایل داکر کامپوز را قرار داده اید، با دستور زیر کار نصب را آغاز کنیدsudo docker compose up -dبعد از راه اندازی گیت لب با استفاده از دستور زیر می توانید رمز کاربر root را بدست بیاوریدsudo docker exec -it gitlab grep &#39;Password:&#39; /etc/gitlab/initial_root_passwordالبته به جای gitlab در دستور فوق باید نام کانتینر یا کد آن را جایگزین کنید تا دستور به درستی کار کنددر آدرسی که برای GITLAB_HOME در نظر گرفته اید، پس از راه اندازی تعدادی فولدر و فایل قرار خواهد گرفت، یک فولدر config خواهد بود که در آن فایلی به نام gitlab.rb وجود دارد، چنانچه مایل باشید که گیت لب با استفاده از Lets Encrypt وضعیت ssl  را به روز رسانی کند، کلمه Lets را در آن جستجو کنید و خطوط مربوط به آن را از کامنت خارج کنید، مطابق تصویر زیر </description><category>نوید فریدی</category><author>نوید فریدی</author><pubDate>Sun, 01 Sep 2024 23:21:04 +0330</pubDate></item><item><title>سئوالات متداول مصاحبه برنامه نویس سی شارپ دات نت</title><link>https://virgool.ir/@navid.faridi/سئوالات-متداول-مصاحبه-برنامه-نویس-سی-شارپ-دات-نت-h8zpmfjtxcbo</link><description>dotnet interview questionsدر این پست به بیان سئوالات متداول و پرکاربرد می پردازم.به عنوان یک برنامه نویس در ابتدا باید اطلاعات مناسبی از دیتابیس ها داشته باشید، به همین جهت معمولا در مصاحبه های فنی برنامه نویسی، چند سئوال در خصوص دیتابیس ها پرسیده می شود :1- در زمان تعریف ایندکس در دیتابیس برای یک جدول، بر چه اساسی باید ایندکس تعریف کرد؟2-عبارت dead lock چیست و چه مفهومی داره و چه زمانی اتفاق می افتد؟3- سطوح مختلف transaction isolation level را در دیتابیس بگویید؟4- تفاوت SQL database و No-SQL database ها را بگویید؟5- انواع ایندکس گذاری در دیتابیس ها را بگویید؟ تفاوت clustered index  و non-clustered index ها را بگویید.6- برای اضافه کردن یک رکورد با کوئری به جدولی که کلید اصلی آن identity هست و می خواهیم عدد مورد نظر را به عنوان کلید اصلی تعیین کنیم، باید چه کار کرد؟اگر به عنوان برنامه نویس ارشد در حال مصاحبه باشید، ممکن است سئوالات سخت تری نیز از شما پرسیده شود، مانند :7- مفاهیم ACID را توضیح بدهید.8- در خصوص window function ها در SQL Server توضیح دهید.9- در خصوص CTE توضیح دهید.10- یک کوئری بنویسید که سومین رکورد از یک لیست 10 تایی محصولات که به ترتیب قیمت مرتب شده را بر گرداند.11 - یک کوئری بنویسید که یک لیست ده تایی از محصولات را که بر اساس قیمت مرتب شده را برگرداند و یک ستون به عنوان ردیف داشته باشد و همچنین یک ستون به عنوان جمع تجمیعی قیمت هر ردیف با ردیف قبلی داشته باشد.12-  آیا در یک function  در sql server می توان از یک store procedure استفاده کرد؟پس از این سئوالات، نوبت به سئوالات پایه یی در خصوص برنامه نویسی سی شارپ میرسه:1-  تفاوت struct و class در چیست ؟ توضیح دهید.2- کلمه pointer یعنی چی ؟ آیا در سی شارپ pointer داریم؟ 3- انواع Stack و Queue در سی شارپ را توضیح دهید؟ تفاوت آنها با Array و List را بگویید.4- کاربرد Multi-Threading را در برنامه نویسی توضیح دهید؟ در خصوص Thread و Task  توضیح دهید.5- درباره Lockو Mutex و Semaphore توضیح دهید.6- در مورد حافظه Stack و Heap توضیح دهید و تفاوت و کاربرد آنها را بگویید.7- انواع کلی data type ها در سی شارپ را بگویید. چند مثال در خصوص آنها بزنید.8- در خصوص Middleware در دات نت توضیح دهید.9- در خصوص Dependency Injection پیشفرض در دات نت کور توضیح دهید و انواع حالت های آن را بیان کنید و توضیح دهید.10- در خصوص انواع Filter attribute که در سی شارت دات نت کور وجود دارد توضیح دهید. وقتی که چندین فیلتر بر روی یک اکشن داریم، اولویت اجرا برای فیلترها با کدام فیلتر است ؟11- در خصوص پروتکل http و انواع message های این پروتکل توضیح دهید.12- در خصوص انواع متدها یا verb های پروتکل http توضیح دهید.13- در خصوص exception handling و بلاک های catch و final توضیح دهید.پس از این مدل سئوالات، در صورتی که تا اینجا پاسخ های مناسبی داده باشید، ممکن است چند تا سئوال در خصوص اصول و الگوهای برنامه نویسی پرسیده شود، مانند :1- اصول SOLID  را توضیح دهید.2- تفاوت DIP و IoC و DI  را بگویید.3- روش پیاده سازی دیزان پترن Singleton را بیان کنید.4- تفاوت دیزاین پترن Factory را با Simple Factory بگویید.5-دو تا از پرکاربرد ترین دیزان پترن ها را در برنامه هایی که تاکنون نوشته اید را بیان کنید و در خصوص آنها توضیح دهید.6- در خصوص Domain Driven Design توضیح دهید؟ DDD چیست ؟7- مفاهیم اصلی DDD را  بیان کنید.همچنین قبل از پایان مصاحبه ممکن است که یک مسئله به شما بدهند و بخواهند که آن را بنویسید، مانند این مسئله : /*&#xA;write c# code : &#xA;Given a list of words and a string, finds and returns the word in the list that is scrambled up inside the string. &#xA;There will be at most one matching word. &#xA;The letters don&#39;t need to be in order or next to each other.&#xA;The letters cannot be reused.&#xA;Example:&#xA;words = [&#34;cat&#34;, &#34;baby&#34;, &#34;dog&#34;, &#34;bird&#34;, &#34;car&#34;, &#34;ax&#34;]&#xA;string1 = &#34;tcabnihjs&#34;&#xA;FindEmbeddedWord(words, string1) -&gt; cat (the letters do not have to be in order)&#xA;*/</description><category>نوید فریدی</category><author>نوید فریدی</author><pubDate>Fri, 08 Dec 2023 00:56:50 +0330</pubDate></item><item><title>معمار نرم افزار کیست؟ Who is Software Architecture</title><link>https://virgool.ir/@navid.faridi/معمار-نرم-افزار-کیست-who-is-software-architecture-lidz0lxxyq7f</link><description>در صنعت نرم افزار، مفهوم معماری کاملاً شناخته شده و به طور گسترده یی پذیرفته شده است، تا جایی که شرکت ها در فرآیندهای خود هر روز از معماران نرم افزار، بیشتر استفاده می کنند و به احتمال بسیار زیاد در حال حاضر حداقل یک معمار نرم افزار در شرکت شما  یا در پروژه ای که روی آن کار می کنید، وجود دارد.اما در حالی که ممکن است در مورد این نقش بدانید و با آن آشنایی داشته باشید، ممکن است تعجب کنید که بدانید هیچ تعریف استاندارد شده ی دقیقی از معنای معمار نرم افزار بودن وجود ندارد.می توانید از 10 معمار نرم افزار در خصوص شرح کار و وظایف آنها بپرسید و 10 پاسخ مختلف دریافت کنید.البته، این بدان معنی است که با توجه به حوزه کاری، پروژه هایی که روی آنها کار می کنند و حتی فرهنگ سازمانی هر شرکت، تفاوت زیادی در نقش معمار نرم افزار بین شرکت ها خواهید یافت.اغلب افرادی را در ترکیبی از نقش‌ها می‌بینید که ممکن است شامل مدیر، توسعه‌دهنده، مهندس یا مدیر پروژه باشند.این سردرگمی فضایی برای تفسیر نادرست ایجاد می‌کند و باعث می‌شود بسیاری از افراد و شرکت‌ها این ترکیب‌ها را به‌گونه‌ای اتخاذ کنند که گویی واقعاً به نقش معمار نرم‌افزار تعلق دارند و جنبه‌های مهم نقش را کنار گذاشته و شیوه‌های بد را اتخاذ کنند. اگرچه اغلب در عمل با آن مواجه می‌شویم، یک معمار نرم افزار، لزوما برنامه نویس ارشد نیست.معمار شدن لزوماً سطح بعدی برای یک توسعه دهنده نیست، مهم نیست که چقدر در برنامه نویسی خوب هستید.مهارت‌های هر موقعیت بسیار متفاوت است و به راحتی می‌توان این مورد را داشت که یک توسعه‌دهنده بزرگ در صورت نداشتن یا توسعه ندادن مهارت‌های مناسب که فراتر از قابلیت‌های فنی است، به یک معمار متوسط تبدیل شود.معمار نرم افزار بودن نیز مترادف با پیشرو بودن در فناوری نیست.اگرچه هر دو نقش استفاده از مهارت های نرم و رهبری مشترک دارند، تمرکز آنها بر زمینه های بسیار متفاوت است.در حالی که یک رهبر فناوری باید بر بهبود تیم خود تمرکز کند، یک معمار تلاش خود را بر بهتر کردن محصول متمرکز می کند.در این مرحله، بسیار واضح است که تعریف معماری نرم افزار دشوار است، شاید به این دلیل که این تعریف بر اساس فناوری های موجود و نیازهای مشتری دائما در حال تغییر است.یک توصیف عالی برای معمار نرم افزار در سال 1990 عملاً هیچ ارتباطی با کاری که امروز انجام می دهد ندارد و اگر تعریف فعلی را در یک یا دو دهه آینده اعمال کنیم، به احتمال زیاد همین امر صادق خواهد بود.به همین دلیل است که یکی از تعاریف مورد علاقه من از رالف جانسون، نویسنده یکی از محبوب ترین کتاب ها در زمینه طراحی الگوی نرم افزار است که در مهندسی و معماری باید بخوانید.جانسون می‌گوید که معماری نرم‌افزار درباره چیزهای مهم است، هر چه که باشد، و او کاملاً درست می‌گوید، زیرا آنچه ما چیزهای مهم می‌نامیم، چیزهایی هستند که بسته به محیط، زمینه و منابع فناوری تغییر می‌کنند.بر اساس این مفهوم، معماری تصمیماتی را در بر می گیرد که تأثیر و پیامدهای بلندمدتی بر یک نرم افزار دارد.معمار علاوه بر داشتن چشم انداز عالی، نیاز به داشتن تخصص فنی و دانش بالایی همراه با مهارت های نرم، از جمله نفوذ، مشارکت و به ویژه رهبری دارد.</description><category>نوید فریدی</category><author>نوید فریدی</author><pubDate>Fri, 24 Nov 2023 23:02:00 +0330</pubDate></item><item><title>نصب sql server 2022 با داکر روی ubuntu</title><link>https://virgool.ir/@navid.faridi/شروع-کار-با-ubuntu-cks2rlyxz8kk</link><description>معمولا هر از گاهی لازم میشه که یه سیستم لینوکسی مبتنی بر ubuntu نصب کنیم و برای کاری اون رو آماده کنیم.این کار برای خیلی ها متداول نیست و شاید سالی یکی دو بار لازم بشه که برای کارهای خودشون، مثلا نصب یه سروری، دیتابیس سروری، یا چیزی تو این مایه ها، لازم شون بشه.برای همین به احتمال زیاد، خیلی از دستورات و کارها، یادمون نیست و هر دفعه باید در خصوص شیوه ی درست انجام آنها یه سرچی بزنیم.تو این مطلب من یه سرور مجازی اوبونتو روی vmware esx خودم که در یک دیتاسنتر هست نصب کردم و میخوام که گام به گام اون رو تنظیم کنم تا با داکر روی اون یه sql server 2022 نصب کنم.اگر از ویندوز 11 استفاده می کنید، احتمالا میدونید که روی ویندوز 11 ، یه ترمینال خیلی خوب هست به نام windows terminal تقریبا با استفاده از این ترمینال، دیگه نیازی به برنامه هایی مانند putty و غیره برای اینکه به لینوکس ssh بزنیم نداریماگر پورت ssh به صورت پیش فرض روی همون 22 تنظیم شده باشه، خیلی راحت با دستور زیر می تونیم به لینوکس خودمون وصل بشیم:ssh &lt;your username&gt;@&lt;your server ip&gt;&#xA;for example, my username is navid and my server ip is 192.168.50.147&#xA;ssh navid@192.168.50.147اگر هم پورت ssh تغییر داده شده باشه، که برای امنیت بیشتر برخی اوقات بهتره که تغییر بدیم، با دستور زیر به لینوکس وصل می شویم: (در مثال زیر ، پورت به 2022 تغییر داده شده است.)ssh navid@192.168.50.147 -p 2022در ابتدا یه نگاهی می اندازیم ببینیم که ورژن لینوکس ما چی هست :cat  /etc/os-releasecat  /etc/os-releaseخب تا اینجا متوجه شدیم که یه نسخه ی اوبونتو با ورژن 22.04.2 داریم.ابتدا با چند تا دستور سعی می کنیم که اگر به روز رسانی برای ماژول های نصب شده، موجود هست، آنها را به روز رسانی کنیم.sudo apt update&#xA;sudo apt-get update&#xA;sudo apt upgradeهمچنین با دستور زیر یه نگاهی به وضعیت کارت های شبکه و تنظیمات شبکه سیستم می اندازیم:ifconfigاگر احیانا دستور فوق با خطا روبرو شد و محتوای خطا بیان کننده ی این بود که این دستور را نمی شناسد، می توانیم با دستور زیر ابزارهای مربوط به شبکه را نصب کنیم تا بتوانیم از دستور فوق استفاده کنیم.sudo apt install net-toolsifconfigبا دستور ifconfig تنظیمات شبکه را مشاهده می کنیم. با توجه به اینکه ورژن اوبونتو 22 بود، اگر بخواهیم تغییری در تنظیمات شبکه بدهیم باید از netplan استفاده کنیم.تنظیمات مربوط به netplan معمولا در فایل های yml و در فولدر /etc/netplan ذخیره میشه. ابتدا نگاه می کنیم که اسم فایل موجود در این مسیر چی هست و سپس محتوای آن را مشاهده می کنیم:cd /etc/netplan&#xA;ls&#xA;cat 00-installer-config.yamlnetplanاگر نیاز شد که محتوای فایل را تغییر دهیم میتوانیم با دستور vi آن را ویرایش کنیم و سپس با دستورات زیر تغییرات را اعمال کنیم sudo vi 00-installer-config.yaml&#xA;sudo netplan generate&#xA;sudo netplan apply&#xA;پس از این مراحل، اگر بخواهیم داکر را روی سیستم نصب کنیم، میتوانیم با توجه به راهنمایی که در این سایت قرارداده شده، آن را به راحتی انجام دهیم.https://www.digitalocean.com/community/tutorials/how-to-install-and-use-docker-on-ubuntu-22-04بعد از نصب داکر، اگر بخواهیم mssql server 2022 را روی داکر راه اندازی کنیم، می توانیم ابتدا فایل داکر کامپوز زیر را آماده کنیم:version: &#39;3.7&#39;services:  MsSqlDb:    image: mcr.microsoft.com/mssql/server:2022-latest    container_name: MsSql2022Db    user: root    environment:        SA_PASSWORD: 123456        ACCEPT_EULA: &#34;Y&#34;    restart: always    ports:        - 1433:1433    volumes:      - sqldb:/var/opt/mssql/datavolumes:  sqldb:</description><category>نوید فریدی</category><author>نوید فریدی</author><pubDate>Fri, 30 Jun 2023 17:16:38 +0330</pubDate></item><item><title>راه اندازی جیرا روی داکر نسخه 9.9</title><link>https://virgool.ir/@navid.faridi/راه-اندازی-جیرا-روی-داکر-نسخه-99-c8la1btkst2e</link><description>Setup Jira version 9.9 on docker with docker-composeSetup Jira 9.x on dockerبرای اینکه از این مطلب بتونید استفاده کنید، باید اهل کامپیوتر باشید، اهل نصب نرم افزارهای مختلف مانند دیتابیس و وب سرور باشید، همچنین باید با داکر و داکر کامپوز آشنایی داشته باشید.#docker #docker-compose #MsSql #MySql #Jira Software به عنوان کسی که می خواهد بستری را برای کار تیمی آماده کند، همچنین اکثر افراد تیم در کشور ایران حضور دارند، در بین ابزارهای مدیریت پروژه مروری کردم و سعی کردم چیزی غیر از جیرا را انتخاب کنم، ولی وقتی چند تا از آنها را تست کردم، دیدم باید برگردم سراغ جیرا و به قول معروف در این زمینه جیرا تقریبا میشه گفت که بهترین هست.میخواستم از نسخه ی کلود جیرا استفاده کنم، چون اعضای تیم کمتر از ده نفر هستند و فعلا داریم یه پروژه ی استارت آپی رو شروع می کنیم ، ولی دیدم که متاسفانه با اینترنت ایران، نسخه ی کلود جیرا خوب کار نمی کنه!خلاصه دیدم مجبورم نسخه ی date center جیرا رو برای خودمون روی سرور نصب کنم، امروز که این پست رو می نویسم، آخرین نسخه ی جیرا 9.9.1 هست.از توی سایت های ایرانی کرک برای نسخه های 8 جیرا پیدا کردم ولی برای نسخه 9 چیز خوبی ندیدم، ضمن اینکه بعد از تست نصب روی سیستم شخصی، دیدم که اگر بشه جیرا رو روی داکر بیارم بالا بهتر هست، بنا بر این گشتم تا مطالب مفید برای این موضوع رو پیدا کنم.خلاصه پس از گشت و گذار فراوان و تست بسیاری مطالب به یه چیزی که کار بکنه و تقریبا آخرین ورژن باشه رسیدم.بقیه ش رو می تونید از توی لینک این گیت هاب ببینید، همه چیز روشن و واضح هست و به راحتی می تونید کار رو باهاش پیش ببرید.https://github.com/haxqer/jiraبخش مختصر و اصلی محتوای موجود در لینک فوق رو در زیر می نویسم:برای دریافت فایل های مورد نیاز جهت داکر کامپوز، دستور زیر رو اجرا کنید git clone https://github.com/haxqer/jira.git \        &#xA;     &amp;&amp; cd jira \        &#xA;    &amp;&amp; git checkout rm \        &#xA;    &amp;&amp; docker-compose pull \&#xA;    &amp;&amp; docker-compose upو همچنین برای کرک کردن جیرا، در زمانی که پنل وب آن را برای اولین بار باز کرده اید و به مرحله ی ورود لایسنس رسیدید، دستور زیر را اجرا کنیدdocker exec jira-srv java -jar /var/agent/atlassian-agent.jar \    &#xA;    -p jira \&#xA;    -m Hello@world.com \&#xA;    -n Hello@world.com \&#xA;    -o your-org \&#xA;    -s you-server-id-xxxxجزییات بیشتر از لینک گیت هابی که ارائه کردم می تونید ببینید.</description><category>نوید فریدی</category><author>نوید فریدی</author><pubDate>Fri, 30 Jun 2023 03:07:36 +0330</pubDate></item><item><title>راه اندازی MySQL روی CentOS</title><link>https://virgool.ir/@navid.faridi/راه-اندازی-mysql-روی-centos-skdvfqnzjm9x</link><description>MySQL and MariaDbیه لینوکس نصب شده با ورژن CentOS 7میخواهیم MySql رو روی اون راه اندازی کنیم، گام های مختلف و تست های مختلف و تنظیمات مختلفی که ممکنه لازم بشه رو اینجا ثبت می کنم، ممکنه برای همه افراد همه ی این مراحل لازم نباشه ولی ممکنه بیشترش مفید باشد.1 - تست می کنیم که چه سرویس هایی در حال حاضر روی سیستم فعال هستند:دستورات مختلفی ممکنه برای این موضوع باشه، که برخی از اونها به صورت کلی به این شکل هستند:service  --status-all&#xA;chkconfig --list&#xA;systemctl list-units --type serice --all | grep -i mysql&#xA;systemctl list-units | grep -i mysql&#xA;2- اگر روی ماشین مجازی دارید کار انجام میدهید، شاید لازم باشد که آی پی ماشین مجازی رو بدانید تا بتوانید از سیستم اصلی به آن وصل شوید:ip address show&#xA;ip a s &#xA;حالا بریم سراغ نصب Installing MySQL on Linux Using the MySQL Yum Repository:اگر قصد راه اندازی نسخه ی پیشفرض را داشته باشیم فقط کافی است از دستور زیر استفاده کنیم :yum install mysqlدستور فوق در واقع MariaDb را نصب می کندولی اگر نسخه ی خاصی را مد نظر داشته باشیم، باید با توجه به نکات لینک زیر کارهای لازم را انجام دهیم https://dev.mysql.com/doc/refman/8.0/en/linux-installation.html همچنین برای اینکه دقیقا mariadb را نصب کنیم از دستورات زیر می توانیم استفاده کنیم sudo yum install mariadb-server&#xA;این دستور ورژن پیش فرض را نصب میکند ولی با استفاده از دستورات زیر می توانیم ورژن های جدیدتر را نصب کنیم&#xA; sudo yum install wget&#xA; wget https://downloads.mariadb.com/MariaDB/mariadb_repo_setup&#xA; chmod +x mariadb_repo_setup&#xA; sudo ./mariadb_repo_setup&#xA;sudo yum install MariaDB-serverتا اینجا فرض می کنیم که نصب اولیه انجام شد با دستور yum install mysqlحالا فعال سازی و اتصال به آن از مسیرهای مختلفابتدا با دستور زیر می توانید مطمئن شوید که نسخه ی نصب شده است:mysql --version&#xA;sudo systemctl start mariadb.service&#xA;sudo systemctl start mysqlبرای فعال سازی رمز اتصال به دیتابیس از دستور زیر استفاده می کنیم، این دستور تنظیمات پیشفرض امنیتی را با توجه به پاسخ هایی که ما به سئوالات آن می دهیم انجام میدهد:sudo mysql_secure_installation&#xA;sudo mariadb-secure-installation*نکته : اگر mariadb نصب کرده باشیم، از دستور دوم به جای دستور اول استفاده باید شود.اکنون اگر همه چیز درست انجام شده باشد، و دستور مربوط به فعال سازی سرویس را زده باشید باید سرویس را در لیست سرویس های فعال مشاهده کنید.systemctl list-units | grep -i maria&#xA;systemctl list-units | grep -i mysql&#xA;برای اتصال از یک سیستم دیگه به mysql حالا باید ابتدا وضعیت فایروال را بررسی کنیم :systemctl status firewalld&#xA;sudo firewall-cmd --stateاگر فایروال فعال بود، باید پورت مربوط به mysql را باز کنیم - پورت 3306firewall-cmd --list-services&#xA;friewall-cmd --add-service=mysql&#xA;با دستور فوق پورت را باز می کنیم، حال دسترسی به کاربر root را در mysql یا mariadb باید فعال کنیم mysql -u root -h localhost -p  &#xA;&#xA;mysql&gt; GRANT ALL PRIVILEGES ON *.* TO &#39;root&#39;@&#39;localhost&#39;;&#xA;mysql&gt; UPDATE mysql.user SET host=&#39;%&#39; WHERE user=&#39;root&#39;;&#xA;&#xA;Grant All Privileges ON *.* to &#39;USER_NAME&#39;@&#39;%&#39; Identified By &#39;YOUR_PASSWORD&#39;; &#xA;FLUSH PRIVILEGES;&#xA;&#xA;sudo systemctl restart mysql</description><category>نوید فریدی</category><author>نوید فریدی</author><pubDate>Sat, 06 Aug 2022 19:42:47 +0430</pubDate></item><item><title>Passive Learning Vs Active Learning</title><link>https://virgool.ir/@navid.faridi/passive-learning-vs-active-learning-wueete1fu0ws</link><description>در دنیای امروز، سرعت پیشرفت در همه ی زمینه ها بسیار زیاد است، به همین دلیل اگر قصد داشته باشید که در حوزه ی کاری جایگاهی مناسب با حقوق و مزایای بهتر داشته باشید، باید سرعت یادگیری خود را افزایش دهید تا فرصت ها را از دست ندهید. مخصوصا این موضوع در دنیای IT بسیار مورد توجه است، چراکه سرعت پیشرفت در این صنف از بقیه صنوف کاری بیشتر و تکنولوژی ها به طرز وحشتناکی در حال تغییر و تحول می باشند.لذا اگر ما بتوانیم کاری کنیم که در زمان یادگیری سرعت بالایی داشته باشیم، قطعا هم خودمان لذت های بیشتری از دنیای IT را لمس خواهیم کرد، هم در حوزه ی کاری جایگاه و مزایای خوبی خواهیم یافت.سئوال : وقتی می خواهیم یک موضوع جدید را یادبگیریم، چه کار می کنیم؟ سناریوی ما برای یادگیری یک مطلب جدید چیست؟ممکن است خیلی ها از مسیر زیر یادگیری را شروع کنند:1- در یکی دو کنفرانس در زمینه آن تکنولوژی شرکت کنیم2- چند وبلاگ در زمینه آن تکنولوژی را بررسی کنیم.3- دو سه دوره ی آموزشی در آن زمینه را به صورت کامل دوره و بررسی کنیم.4- چند ویدیوی آموزشی مربوط به آن زمینه را ببینیم.با این کارها، برای خود یک ابر تاریک از آنچه بررسی شده در مغز ایجاد می کنیم، ولی همچنان کاری نکردیم و روی هوا هستیم. کم کم این وسط ها گک شده و یک پیاده سازی درست را حتی نمی توانیم شروع کنیم.یک سری موضوعات آزار دهنده یا کند کننده یا نا امید کننده همیشه وجود دارند:1- زمینه مورد بررسی بسیار کسل کننده و خواب آور شده و دیگر هیچ هیجانی برای ادامه و عمیق شدن در آن وجود ندارد.2- احساس احمق بودن می کنیم. حس می کنیم آنهایی که الان به صورت حرفه یی در حال استفاده از آن تکنولوژی هستند، یک سری غول و نابغه هستند و فقط ما هستیم که شوت می زنیم.3- خودمان را با دیگران مقایسه می کنیم. سرعت یادگیری و پیشرفت خودمان را با دیگران مقایسه می کنیم و لحظه نا امید و خسته تر می شویم.4- یادگیری را ول می کنیم. این یکی از بدترین آفت های یادگیری است. یک مبحث را شروع می کنیم و به دلایل بالا و ... یک دفعه بیخیال می شویم.5- وقت کشی می کنیم. مطلبی را یادمی گیریم ولی پیاده سازی را شروع نمی کنیم و آن علم را کاربردی نمی کنیم تا فراموش شود و برگردیم در نقطه صفر یادگیری و همان جایی که اول بودیم.</description><category>نوید فریدی</category><author>نوید فریدی</author><pubDate>Sat, 06 Aug 2022 18:38:56 +0430</pubDate></item><item><title>Top .Net Interview Questions - Part 1</title><link>https://virgool.ir/@navid.faridi/top-net-interview-questions-part-1-pte34srn66tc</link><description>Explain about major components of the .NET framework..Net major componentsThe major components .NET framework are given below:Common Language Runtime(CLR):It is an execution engine that runs the code and provides services that make the development process easier.Services provided by CLR are memory management, garbage collection,  type safety, exception handling, security, and thread management. It  also makes it easier for designing the applications and components whose  objects interact across the languages.The programs written for the .NET Framework are executed by the CLR  regardless of programming language. Every .NET Framework version is  having CLR.Framework Class Library(FCL):It has pre-defined methods and properties to implement common and  complex functions that can be used by .NET applications. It will also  provide types for dates, strings, numbers, etc.This class library includes APIs for database connection, file reading and writing, drawing, etc.Base Class Library(BCL):The Base Class Library(BCL) has a huge collection of libraries  features and functions that are helpful in implementing various  programming languages such as C#, F#, Visual C++, etc., in the .NET  Framework.BCL is divided into two parts. They are:User-defined class library: It includes Assemblies.Assembly: A .NET assembly is considered as the major building  block of the .NET Framework. An assembly in the CLI(Common Language  Infrastructure) is a logical unit of code, which is used for security,  deployment, and versioning. Assembly can be defined in two forms namely  Dynamic Link Library(.dll) and executable(.exe) files.When  compilation of the .NET program takes place, metadata with Microsoft  Intermediate Language(MSIL) will be generated and will be stored in a  file called Assembly.Predefined class library: It contains namespace.Namespace: It is the collection of pre-defined methods and  classes that are present in the .Net Framework. A namespace can be added  to a .NET program with the help of “using system”, where using  represents a keyword and system represents a namespace.Common Type System(CTS):CTS specifies a standard that will mention which type of data and value can be defined and managed in memory during runtime.It will make sure that programming data defined in different  languages should interact with each other for sharing the information.  For example, in VB.NET we define datatype as integer, while in C# we  define int as a data type.It can be used to prevent data loss when you are trying to transfer  data from a type in one language to its equivalent type in another  language.Common Language Specification (CLS):Common Language Specification (CLS) is a subset of CTS and defines a  set of rules and regulations to be followed by every .NET Framework’s  language.A CLS will support inter-operability or cross-language integration,  which means it provides a common platform for interacting and sharing  information. For example, every programming language(C#, F#, VB .Net,  etc.) under the .NET framework has its own syntax. So when statements  belonging to different languages get executed, a common platform will be  provided by the CLS to interact and share the information.</description><category>نوید فریدی</category><author>نوید فریدی</author><pubDate>Wed, 20 Apr 2022 00:15:58 +0430</pubDate></item><item><title>ده سایت برتر یافتن شغل 2022</title><link>https://virgool.ir/@navid.faridi/ده-سایت-برتر-یافتن-شغل-2022-ovwmxn9nppdm</link><description>10  سایت برتر برای یافتن شغل در سال 2022:(Top 10 sites for your career in 2022)1)     Linkedin 2)     Indeed 3)     Naukri 4)     Monster 5)     JobBait 6)     Careercloud 7)     Dice 8)     CareerBuilder 9)     Jibberjobber 10)   Glassdoor 10  مهارت فنی مورد تقاضا در سال 2022:(Top 10 Teach skills in demand in 2022)1)     Machine Learning 2)    Mobile Development 3)    SEO/SEM Marketing 4)    Data Visualization 5)    Data Engineering 6)    UI/UX Design 7)    Cyber Security 8)    Cloud Computing/AWS 9)    Blockchain 10)  IOT 10 سایت برای آموزش آنلاین رایگان در سال 2022:(Top 10 sites for free online education in 2022)1)     Coursera 2)     edX 3)     Khan Academy 4)     Udemy 5)     iTunesU Free Courses 6)     MIT OpenCourseWare 7)     Stanford Online 8)     Codecademy 9)     ict iitr 10)   ict iitk   10  سایت برای بررسی رایگان رزومه در سال 2022:(Top 10 sites to review your resume for free in 2022)1)     Zety Resume Builder 2)     Resumonk 3)     Resume dot com 4)     VisualCV 5)     Cvmaker 6)     ResumUP 7)     Resume Genius 8)     Resume builder 9)     Resume Baking 10)   Enhance  10 سایت برای آماده سازی مصاحبه در سال 2022:(Top 10 sites for interview Preparation in 2022)1)    Ambitionbox 2)    AceThelnterview 3)    Geeksforgeeks 4)    Leetcode 5)    Gainlo 6)    Careercup 7)    Codercareer 8)    InterviewUp 9)    InterviewBest 10)  Indiabix </description><category>نوید فریدی</category><author>نوید فریدی</author><pubDate>Tue, 05 Apr 2022 15:42:34 +0430</pubDate></item></channel></rss>