<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
    <channel>
        <title>نوشته های سعید حمزه نژاد</title>
        <link>https://virgool.io/feed/@uncodev</link>
        <description>مهندس نرم افزار در اسنپ اکسپرس و سابقا در زرین‌پال</description>
        <language>fa</language>
        <pubDate>2026-04-15 10:23:26</pubDate>
        <image>
            <url>https://files.virgool.io/upload/users/1724092/avatar/CTOdlf.jpg?height=120&amp;width=120</url>
            <title>سعید حمزه نژاد</title>
            <link>https://virgool.io/@uncodev</link>
        </image>

                    <item>
                <title>نصب گرافانا و پرومتئوس روی سرور اختصاصی</title>
                <link>https://virgool.io/@uncodev/%D9%86%D8%B5%D8%A8-%DA%AF%D8%B1%D8%A7%D9%81%D8%A7%D9%86%D8%A7-%D9%88-%D9%BE%D8%B1%D9%88%D9%85%D8%AA%D8%A6%D9%88%D8%B3-%D8%B1%D9%88%DB%8C-%D8%B3%D8%B1%D9%88%D8%B1-%D8%A7%D8%AE%D8%AA%D8%B5%D8%A7%D8%B5%DB%8C-rl3q8vrsutcx</link>
                <description>خب قبل از چیزی باید داکر رو روی سرور نصب کنید و قبلشم سرور رو اپدیت کنید ، سروری که من دارم سیستم عاملش ابونتو هستش sudo apt update 
sudo apt install docker.io docker-composeبعد برای نصب Prometheus قبلش باید فایل prometheus.yml رو برای جاب‌های Prometheus ایجاد کنیم mkdir -p /etc/prometheus
nano /etc/prometheus/prometheus.ymlحالا میتوینم جاب هایی که میخوایم اجرا بشن رو اینجا وارد کنیم , محتوای اولیه فایل prometheus.yml به شکل زیر است. این تنظیمات ابتدایی به Prometheus می‌گوید که خودش (خود سرور Prometheus) و هر سرویسی که در پورت 9090 اجرا می‌شود را نظارت کندglobal:
   scrape_interval: 15s # هر 15 ثانیه داده‌ها را جمع‌آوری کن
scrape_configs:
   - job_name: &#039;prometheus&#039;
     static_configs:
       - targets: [&#039;localhost:9090&#039;]حالا نوبت نصب Prometheus با داکر هستشdocker run -d \
   --name prometheus \
   -p 9090:9090 \ 
  -v /etc/prometheus/prometheus.yml:/etc/prometheus/prometheus.yml \
   -e PROMETHEUS_CONFIG_FILE=/etc/prometheus/prometheus.yml \
   prom/prometheusو در اخر هم نصب گرافانا :docker run -d \
 --name grafana \
 -p 3000:3000 \
 grafana/grafanaیوزرینم و پسورد اولیه برای ورود به گرافانا هم admin هستش .</description>
                <category>سعید حمزه نژاد</category>
                <author>سعید حمزه نژاد</author>
                <pubDate>Tue, 23 Jul 2024 09:51:30 +0330</pubDate>
            </item>
                    <item>
                <title>پیاده سازی سرویس لایو لوکیشن با قابلیت تحمل ۲۰۰ هزار ریکوست در ثانیه</title>
                <link>https://virgool.io/@uncodev/%D9%BE%DB%8C%D8%A7%D8%AF%D9%87-%D8%B3%D8%A7%D8%B2%DB%8C-%D8%B3%D8%B1%D9%88%DB%8C%D8%B3-%D9%84%D8%A7%DB%8C%D9%88-%D9%84%D9%88%DA%A9%DB%8C%D8%B4%D9%86-%D8%A8%D8%A7-%D9%82%D8%A7%D8%A8%D9%84%DB%8C%D8%AA-%D8%AA%D8%AD%D9%85%D9%84-%DB%B2%DB%B0%DB%B0-%D9%87%D8%B2%D8%A7%D8%B1-%D8%B1%DB%8C%DA%A9%D9%88%D8%B3%D8%AA-%D8%AF%D8%B1-%D8%AB%D8%A7%D9%86%DB%8C%D9%87-e1um1uwn0vpq</link>
                <description>فرض کنید  قرار هستش که یک پروژه تاکسی اینترنتی رو با معماری مایکروسرویس انجام بدیم. این پروژه از سرویس‌های مختلفی تشکیل شده که یکی از این سرویس ها که اتفاقا باید بار و ریکوست زیادی رو تحمل کنه،  سرویس لوکیشنه . وظیفه این سرویس اینکه بیاد و اطلاعات لحظه ای موقعیت مکانی کلاینت رو بگیره و توی دیتابیس ذخیره کنه تا سایر سرویس‌ها و تیم‌ها بتونن از این اطلاعات استفاده کنن . تو مرحله اول این سرویس فقط وظیف رایت کردن و نوشتن دیتا توی دیتابیس رو داره . ما قرار هستش که از ساده ترین سیستم دیزاین و کدنویسی  شروع کنیم و با افزایش دادن لود سیستم و ماینتور کردنش، بیایم و این سیستم دیزاین   رو تغییرش بدیم و از قابلیت های  زبان برنامه نویسی گولنگ مثل کانکارنسی استفاده کنیم  تا ببینیم چقدر میتونیم با این تغییرات از هزینه های یک شرکت برای تهیه ریسورس مصرفی مثل سرور رو کاهش بدیم و کاری کنیم که این پروژه مقیاس پذیر بشه ، یعنی بتونه اسکیل کنه و پاسخگوی ۲۰۰ هزار ریکسوت در ثانیه باشه . قطعا ما با یک سرور با ۴ گیگ رم و ۲ کور سی پی یو و یک دیتابیس پستگرس نمیتونیم پاسخگوی این تعداد ریکوست باشیم و باید کاری کنیم که این سرویس مقیاس پذیر باشه و ما  در آینده با کمک یکی از شرکت‌ها که قرار هستش اسپانسر ما بشه یک کلاستر کوبر برای تست خودمون خواهیم داشت و اونجا که اوج هیجان ما شروع میشه :)وقتی ما تعداد ریکوست رو افزایش بدیم قطعا این سرور پاسخگو نیستش و باید بریم از بهینه ترین ابزار برای این کار استفاده کنیم ، مثلا برای دیتابیس میتونیم از دیتابیس کاساندرا که  دسترس پذیری و مقیاس پذیری خیلی بالایی داره و میتونه حجم زیادی از داده ها را در چندین Node به راحتی مدیریت کنه استفاده کنیم و همچنین بیایم از کافکا استفاده کنیم و اول این دیتا رو بریزیم تو کافکا و بعدش کانزیومشون کنیم . کلی کار باید انجام بدیم و همه این مراحل میتونن جذاب باشن . من برای شروع کار یک سرور با سیستم عامل ابونتو، ۴ گیگ رم و دو کور cpu تهیه کردم و روش یه سری ابزار مثل داکر، گرافانا، پروموتیوسو پستگرس رو نصب کردم، بعدش یه سرویس رو با گولنگ پیاده سازی کردم که دیتای لوکیشن رو دریافت میکنه و توی دیتابیس پسترگرس ذخیره میکنه . همزمان یه سرویس دیگه رو هم به عنوان لود تست با گولینگ پیاده سازی کردم که میتونه تا ۲۰۰ هزار ریکوست در ثانیه ایجاد کنه و دیتای مورد نیاز رو سمت سرویس لوکیشن بفرسته اما فعلا تنظیمش کردنم که حداکثر تا ۴۰ ریکوست رو سمت این سرویس بفرسته . با این وجود میبنیم که حدود ۱۳ درصد از ۴ گیگ رم و همچنین حدود ۲۳ درصد از توان cpu با دو کور هسته داره استفاده میشه .ریسپانس تایم هم با حدود ۲.۵ میلیون لوکیشن ایجاد شده روی تقریبا ۲۵۰ میلی ثانیست .توی قسمت بعدی میریم سراغ نصب ابزارهای مورد نیازمون و شروع کد نویسی و یک تجربه هیجان انگیز.شما میتونید اموزش ها رو در : کانال تلگرام : @uncodevکانال یوتیوب : https://www.youtube.com/@uncodevدنبال کنید ...</description>
                <category>سعید حمزه نژاد</category>
                <author>سعید حمزه نژاد</author>
                <pubDate>Mon, 22 Jul 2024 10:29:10 +0330</pubDate>
            </item>
                    <item>
                <title>آماده سازی برای مصاحبه با شرکت‌های بزرگ به عنوان یک مهندس نر‌م‌افزار</title>
                <link>https://virgool.io/@uncodev/%D8%A2%D9%85%D8%A7%D8%AF%D9%87-%D8%B3%D8%A7%D8%B2%DB%8C-%D8%A8%D8%B1%D8%A7%DB%8C-%D9%85%D8%B5%D8%A7%D8%AD%D8%A8%D9%87-%D8%A8%D8%A7-%D8%B4%D8%B1%DA%A9%D8%AA-%D9%87%D8%A7%DB%8C-%D8%A8%D8%B2%D8%B1%DA%AF-%D8%A8%D9%87-%D8%B9%D9%86%D9%88%D8%A7%D9%86-%DB%8C%DA%A9-%D9%85%D9%87%D9%86%D8%AF%D8%B3-%D9%86%D8%B1-%D9%85-%D8%A7%D9%81%D8%B2%D8%A7%D8%B1-bguaejnrxbrb</link>
                <description>معمولا سطح سوالاتی که از شما پرسیده میشه به پوزیشنی که براش اپلای کردید هم بستگی داره، مثلا اگر سطح شما مید یا جونیور باشه قطعا سطح سوالات ساده‌تر خواهد بود اما اگر به عنوان یه نیروی سینیور اپلای کرده باشی چالش بیشتری در انتظارت خواهد بود و توقعات بالاتر میره.اما خب معمولا توی مصاحبه ها چندین نوع از شما سوال پرسیده میشه، از سیستم دیزاین گرفته تا سوالاتی در رابطه با اون استکی که قراره باهاش کار کنی، که سعی میکنم بررسیشون کنم.*** نکته‌ای که خیلیییی مهم هستش اینکه وقتی میخوای برای یه شرکت رزومه بفرستی و اپلای کنی متن و توضیحات کاملشو بخون و ببین اصلا اون شرایط رو داری یا نه، بعد به چیزایی که تو رزومت نوشتی هم خیلی دقت کن چون قطعا ازشون یه سری سوال در میاره و میپرسه ازت.مرحله اول : اولین چیزی که احتمالا میپرسن از خودتونه، این که کی هستید و چه کارهایی تو زندگیتون انجام دادید مسیر کاریتون به چه صورت بوده، معمولا مصاحبه کننده خوب دنبال خلاقیت شما میگرده اینکه چه چالش‌هایی رو خودت پیدا کردی و تونستی حل کنی . سعی کن قبل مصاحبه یه بار خودت یه متن رو اماده کنی و بنویسی که چی شد که اومدی سمت برنامه نویسی و تا الان چه تجربه‌هایی به دست آوردی، اونایی که مهمتر هستن رو حتما بیار جز اولویتای اول خودت. سعی کن تو چند دقیقه بر اساس تایمی که داری توضیح بدی و خودتو خیلیییی خوب پرزنت کنی. مرحله دوم : توی مرحله بعد به احتمال خیلی زیاد میره سراغ سوالات سیستم دیزاین، که باز هم با توجه به سطحی که اپلای کردی متفاوته، مثلا ممکنه که بگه مفهوم تئوری Cap و مفهوم ACID در پایگاه داده چیست؟ من حتما در قسمت بعدی سعی میکنم بیشتری سوالات سیستم دیزاین رو اماده کنم و توضیح بدمشون.مرحله سوم : معمولا تو مرحله بعدی میرن سراغ سوالات الگوریتم و دیتا استراکچر که باز هم بیشتر میان از سایت leetcode.com استفاده میکنن ، یه سری اگوریتم و دیتا استراکچر معروف هم هستن که خیلی وقتا فقط همونا رو میپرسن اینا رو هم توضیح خواهم داد در قسمت‌های بعدی.مرحله چهارم : ممکنه اون پوزیشنی که براش اپلای کرده مخصوص یه دولوپر گولنگ باشه در نتیجه بازم بسته به سطح مورد نیاز میاد و شما رو به چالش میکشه تا ببینه چقدر از مفاهیم اون استک رو بلدی. چون استاک اصلی خود من گولنگ هستش اموزش‌هاش رو دارم منتشر میکنم و میتونی دنبال کنی.مراحل بعدشم میرن سراغ سوالات منابع انسانی و ... که توی یه مقاله جدا این بخش رو بررسی میکنم برات.در جلسه بعد میریم سراغ سوالات سیستم دیزاین کانال تلگرام ما رو دنبال کن @uncodev</description>
                <category>سعید حمزه نژاد</category>
                <author>سعید حمزه نژاد</author>
                <pubDate>Fri, 19 Jul 2024 18:25:43 +0330</pubDate>
            </item>
                    <item>
                <title>تفاوت دیتابیس‌های MySql,PostgreSQL,Cassandra,Mongo</title>
                <link>https://virgool.io/uncodev/%D8%AA%D9%81%D8%A7%D9%88%D8%AA-%D8%AF%DB%8C%D8%AA%D8%A7%D8%A8%DB%8C%D8%B3-%D9%87%D8%A7%DB%8C-mysqlpostgresqlcassandramongo-wgypi0mf7pxg</link>
                <description>هدف من از این مقاله هستش که تا حدی ۴تا دیتابیس محبوب رو با هم دیگه مقایسه کنم که دوتا از این دیتابیس‌ها NoSql و دوتای دیگر Sql هستند . دیتابیس PostgreSQL : این دیتابیس از نوع RDBMS هستش و به خوبی از خواص ACID که توی این پست قبلا توضیح دادم پشتیبانی میکنه همچنین برای جاهایی که نیاز به ترانزاکشن داریم خیلی عالیه و یا جاهایی که نیاز به کوئری‌های پیچیده و عملیات Read سنگین وجود داره هم خیلی خوب جواب میده. پستگرس اوپن سورس هستش و کامینیوتی خیلی قوی ای داره .پسترگرس از فول تکست سرچ و json هم به خوبی پشتیبانی میکنه.  اسکیل کردن عمودی (افزایش قدرت سرور) خیلی راحت انجام میشه اما برای اسکیل افقی باید از ابزار خاصی مثل Citus استفاده کرد.پستگرسبرای  برنامه‌های پیچیده‌تری که نیاز به پشتیبانی از انواع داده‌های پیچیده دارند، تحلیل داده‌ها، سیستم‌های مالی و بانکی، برنامه‌های GIS و نقشه‌برداری بسیار مناسب است.دیتابیس MySql : این دیتابیس هم از نوع RDBMS هستش و بازم از ACID پشتیبانی میکنه اما پستگرس قویتره، البته Mysql انجین های مختلفی مثل InnoDB و یا MyISAM دارد که تو این پست توضیح دادم . نکته ای که وجود پشتیبانی از ترنزاکشن ها و خواص ACID با انجین InnoDB پشتیبانی میشه همچنین لاک شدن در سطح row انجام میشه و از ورژن ۵.۵ به بعد دیفالت همین InnoDB هستش و همچنین این انجین حافظه بیشتری هم استفاده میکنه . ولی برای عملیات خواندن سریع میتونیم از انجین MyISAM استفاده کنیم که توی این حالت از فول تکست سرچ هم پشتبانی میشه و لاک در سطح table انجام میشه .هدف ما این هستش که سیستم فروشگاه ساز پیشرفته رو با گولنگ پیاده سازی کنیم و در نهایت روی کوبرنتیز دیپلوی اجرا کنیم یعنی ۰ تا ۱۰۰ یه پروژه گولنگی . به زودی ویدیوی این آموزش ها در وبسایت uncodev منتشر خواهند شد.دیتابیس Cassandra : این دیتابیس از نوع Nosql هستش و خوراکش write سریعهه :) ، کاساندرا در دسترس بودن و مقیاس پذیری خیلی بالایی داره و حجم زیادی از داده ها را در چندین Node به راحتی مدیریت میکنه    . ( اگر در مورد  مفهوم تئوری Cap نیاز دارید بیشتر بخونید به این پست مراجعه کنید) .کاساندرا برای داده‌های بزرگ و سیستم‌های real-time با نیاز به دسترس‌پذیری و مقیاس‌پذیری بالا مناسب است.دیتابیس Mongo : این دیتابیس از نوع Nosql هستش ، مقیاس‌پذیری افقی خوب، انعطاف‌پذیری بالا در مدل داده‌ای، قابلیت Indexing قوی، پشتیبانی از داده‌های بدون ساختار از ویژگی های مونگ، هستش. مونگو برای برنامه‌هایی که نیاز به انعطاف‌پذیری بالای مدل داده‌ای دارند، اپلیکیشن‌های موبایل و وب، سیستم‌های مدیریت محتوا، تحلیل داده‌های بزر مناسب است.</description>
                <category>سعید حمزه نژاد</category>
                <author>سعید حمزه نژاد</author>
                <pubDate>Tue, 16 Jul 2024 12:23:49 +0330</pubDate>
            </item>
                    <item>
                <title>تفاوت انجین  MySQL InnoDB و MySQL MyISAM</title>
                <link>https://virgool.io/uncodev/%D8%AA%D9%81%D8%A7%D9%88%D8%AA-%D8%A7%D9%86%D8%AC%DB%8C%D9%86-mysql-innodb-%D9%88-mysql-myisam-xy9bvistm8ir</link>
                <description>مقایسه بین MySQL InnoDB و MySQL MyISAM می‌تواند در جنبه‌های مختلف انجام شود. این دو موتور ذخیره‌سازی در MySQL تفاوت‌های زیادی دارند که می‌تواند بر عملکرد، قابلیت اطمینان، و قابلیت مدیریت پایگاه داده تأثیر بگذارد و از نسخه ۵.۵ به بعد انجین دیفالت InnoDB میباشد. در زیر به مهم‌ترین تفاوت‌های آن‌ها می‌پردازیم:1. پشتیبانی از تراکنش‌ها (Transactions)انجین InnoDB: از تراکنش‌ها پشتیبانی می‌کند و ویژگی‌هایی مانند ACID (Atomicity, Consistency, Isolation, Durability) را ارائه می‌دهد. این بدان معناست که عملیات‌ها می‌توانند به صورت ایمن و با قابلیت بازگشت (rollback) انجام شوند.انجین MyISAM: از تراکنش‌ها پشتیبانی نمی‌کند. بنابراین، نمی‌توانید مجموعه‌ای از عملیات‌ها را به صورت یک واحد انجام دهید که یا به طور کامل موفق شوند یا به طور کامل شکست بخورند.2. قفل‌گذاری (Locking)انجین InnoDB: از قفل‌گذاری سطح رکورد (row-level locking) استفاده می‌کند. این نوع قفل‌گذاری به عملکرد بالاتر و همزمانی بهتر در دسترسی به داده‌ها منجر می‌شود.انجین MyISAM: از قفل‌گذاری سطح جدول (table-level locking) استفاده می‌کند. این نوع قفل‌گذاری می‌تواند باعث شود که در صورت انجام عملیات نوشتن، کل جدول قفل شود و دسترسی سایر کاربران به آن محدود گردد.هدف ما این هستش که سیستم فروشگاه ساز پیشرفته رو با گولنگ پیاده سازی کنیم و در نهایت روی کوبرنتیز دیپلوی اجرا کنیم یعنی ۰ تا ۱۰۰ یه پروژه گولنگی . به زودی ویدیوی این آموزش ها در وبسایت uncodev منتشر خواهند شد.3. یکپارچگی داده‌ها (Data Integrity)انجین InnoDB: از قیود کلید خارجی (foreign key constraints) پشتیبانی می‌کند، که به تضمین یکپارچگی داده‌ها کمک می‌کند.انجین MyISAM: از قیود کلید خارجی پشتیبانی نمی‌کند. بنابراین، تضمین یکپارچگی داده‌ها به عهده برنامه‌نویس است.4. بازیابی خرابی (Crash Recovery)انجین InnoDB: دارای ویژگی بازیابی خودکار در صورت خرابی است. به کمک فایل لاگ (log files)، می‌تواند به حالت پیش از خرابی بازگردد.انجین MyISAM: فاقد قابلیت بازیابی خودکار است. در صورت خرابی، نیاز به تعمیر جدول به صورت دستی دارید.5. عملکرد (Performance)انجین InnoDB: در عملیات‌هایی که نیاز به قفل‌گذاری دقیق و تراکنش‌ها دارند، عملکرد بهتری دارد.انجین MyISAM: در عملیات‌های خواندن و نوشتن ساده و بدون نیاز به تراکنش‌ها، ممکن است عملکرد بهتری داشته باشد.6. حجم ذخیره‌سازی (Storage Size)انجین InnoDB: به دلیل ویژگی‌های اضافی مانند تراکنش‌ها و قفل‌گذاری سطح رکورد، ممکن است فضای بیشتری مصرف کند.انجین MyISAM: معمولاً حجم کمتری نسبت به InnoDB مصرف می‌کند، زیرا فاقد ویژگی‌های پیشرفته است.7. پشتیبانی از Full-text Searchانجین InnoDB: در نسخه‌های قدیمی‌تر از MySQL، پشتیبانی محدودی از Full-text Search داشت. اما در نسخه‌های جدیدتر، این قابلیت بهبود یافته است.انجین MyISAM: پشتیبانی کامل و قوی از Full-text Search دارد.با توجه به این تفاوت‌ها، انتخاب بین InnoDB و MyISAM باید بر اساس نیازهای خاص پروژه و اولویت‌های عملکرد، اطمینان، و مدیریت داده‌ها انجام شود.</description>
                <category>سعید حمزه نژاد</category>
                <author>سعید حمزه نژاد</author>
                <pubDate>Tue, 16 Jul 2024 10:48:52 +0330</pubDate>
            </item>
                    <item>
                <title>الگوی Saga چیست؟</title>
                <link>https://virgool.io/uncodev/%D8%A7%D9%84%DA%AF%D9%88%DB%8C-saga-%DA%86%DB%8C%D8%B3%D8%AA-tt76dm0zcphv</link>
                <description>الگوی Saga چیستتوی سیستم‌های میکروسرویس معمولا هر سرویس دیتابیس مجزای خودش را داره و فرض کنید میخواین عملیاتی رو انجام بدید که نیاز به ترانزاکشن داره، مثلا چنتا تیبل باید با هم دیگه اپدیت بشن و اگه این اتفاق نیفته باید کل اون تغییرات رول بک بشن، وقتی همه این سرویس ها از یک دیتابیس استفاده کنن خب خیلی راحت از امکان ترانزاکشن دیتابیس استفاده میکنیم اما وقتی هر سرویس دیتابیس خودش رو داره و هیچ ارتباطی با هم ندارن چیکار باید کنیم؟ اینجا میایم از این الگوی Saga استفاده میکنیم.الگوی Saga یک الگوی طراحی برای مدیریت تراکنش‌های توزیع‌شده در سیستم‌های میکروسرویس است. این الگو تضمین می‌کند که مجموعه‌ای از عملیات توزیع‌شده یا به طور کامل اجرا شوند یا در صورت شکست به حالت اولیه برگردند، بدون نیاز به یک تراکنش توزیع‌شده و پیچیده.توی دوره اموزشی مایکروسرویس ما از این الگو برای پیاده سازی سرویس Order استفاده کردیم.هدف ما این هستش که سیستم فروشگاه ساز پیشرفته رو با گولنگ پیاده سازی کنیم و در نهایت روی کوبرنتیز دیپلوی اجرا کنیم یعنی ۰ تا ۱۰۰ یه پروژه گولنگی . به زودی ویدیوی این آموزش ها در وبسایت uncodev منتشر خواهند شد.برای پیاده سازی الگوی Saga از دو روش میشه استفاده کرد : روش Events/Choreography : در این روش هیچ هماهنگ کننده مرکزی‌ای وجود نداره و هر سرویس بعد از انجام کارش سرویس بعدی رو با یک ایونت مطلع میسازه که کارش رو شروع کنه، اگر توی یکی از از مراحل و سرویس ها خطایی رخ بده بازم یک ایونت خطا ایجاد میکنه و سایر سرویس‌ها رو خبردار میکنه که رول بک انجام بدن.روش Orchestration : در این روش یک سرویس مرکزی وجود داره که نقش هماهنگ کننده بین سرویس های دیگه رو داره و لاجیک رو کنترل میکنه . کانال تلگرام : UncoDev</description>
                <category>سعید حمزه نژاد</category>
                <author>سعید حمزه نژاد</author>
                <pubDate>Mon, 15 Jul 2024 13:58:04 +0330</pubDate>
            </item>
                    <item>
                <title>الگوی معماری CQRS چیست؟</title>
                <link>https://virgool.io/uncodev/%D8%A7%D9%84%DA%AF%D9%88%DB%8C-%D9%85%D8%B9%D9%85%D8%A7%D8%B1%DB%8C-cqrs-%DA%86%DB%8C%D8%B3%D8%AA-wgzayihewzny</link>
                <description>الگوی CQRS (Command Query Responsibility Segregation) یک الگوی طراحی هستش که عملیات‌های خواندن (Read) و نوشتن (Write) را برای یک پایگاه داده را از هم جدا می‌کند. این الگو به بهبود عملکرد، مقیاس‌پذیری و امنیت برنامه‌ها کمک میکنه و از مدل‌های مختلف برای به‌روزرسانی داده‌ها (دستورات - Command) و خواندن داده‌ها (پرس‌وجوها - Query) استفاده می‌کند.دستورات - Command : عملیات‌هایی که حالت برنامه را تغییر می‌دهند، مانند عملیات‌های ایجاد، به‌روزرسانی یا حذفپرس‌وجوها - Query : عملیات‌هایی که داده‌ها را بدون تغییر آن‌ها بازیابی می‌کنند (دریافت اطلاعات)هدف ما این هستش که سیستم فروشگاه ساز پیشرفته رو با گولنگ پیاده سازی کنیم و در نهایت روی کوبرنتیز دیپلوی اجرا کنیم یعنی ۰ تا ۱۰۰ یه پروژه گولنگی . به زودی ویدیوی این آموزش ها در وبسایت uncodev منتشر خواهند شد.مزایای CQRSمقیاس‌پذیری: جدا کردن عملیات‌های خواندن و نوشتن اجازه می‌دهد هر کدام به طور مستقل مقیاس‌پذیر شوند مثلا اگر واسه عملیات خواندن از الستیک استفاده میکنیم و لود سنگینی روی خواندن دیتا داریم الستیک رو ارتقا میدیم. عملکرد: عملیات‌های خواندن می‌توانند بهینه شوند بدون تأثیر بر عملیات‌های نوشتن و برعکس.انعطاف‌پذیری: مدل‌های داده‌های مختلف می‌توانند برای خواندن و نوشتن استفاده شوند و این امکان را می‌دهد که داده‌ها به طور مؤثرتری مدیریت شوند.امنیت: الگوهای دسترسی و مجوزهای مختلف می‌توانند برای عملیات‌های خواندن و نوشتن اعمال شوند.چالش‌هاپیچیدگی: معماری سیستم پیچیده‌تر می‌شود و نیاز به مدیریت دقیق سازگاری و همگام‌سازی داده‌ها دارد.تأخیر:  سازگاری نهایی (eventual consistency) می‌توانند تأخیر در دسترس بودن داده‌های به‌روزرسانی شده در طرف پرس‌وجو را ایجاد کند.بار توسعه: پیاده‌سازی و نگهداری مدل‌ها و مکانیزم‌های همگام‌سازی جداگانه می‌تواند باعث افزایش هزینه شود.اگه بخوام یه مثال ساده برای الگوی CQRS بزنم این هستش که بیام یه فروشگاه رو مثال بزنم با کلی محصول. شما فرض کنید یه فروشگاه مثل دیجیکالا کلی محصول داره و این محصولات باید مدام اپدیت بشه اطلاعاتشون ، حالا ما میخوایم بیایم و از این الگو استفاده کنیم و برای اطلاعات محصولات یه دیتابیس مثل  mysql در نظر بگیریم و به عنوان دیتابیس Write ازش استفاده کنیم، بعد یه سرویس ایندکسر با یه مسیج بروکر پیاده سازی میکنیم که میاد و این اطلاعات رو با هر فرمتی که میخوایم میریزیم توی الستیک سرچ و از الستیک به عنوان دیتابیس Read استفاده میکنیم. این وسط ممکنه یه تاخیر توی بروزرسانی اطلاعات به وجود بیاد (سازگاری نهایی - eventual consistency) و وقتی یه دیتا میخواد خونده بشه دیرتر با نسخه اصلی دیتا که توی mysql هستش یکی بشه و به ثبات برسه. اما مزیتش چیه؟ ما میتونیم به صورت مستقل الستیک رو ارتقا بدیم تا لود بیشتری رو تحمل کنه برای قسمت Read . کلیت این CQRS همینه.</description>
                <category>سعید حمزه نژاد</category>
                <author>سعید حمزه نژاد</author>
                <pubDate>Mon, 15 Jul 2024 13:29:57 +0330</pubDate>
            </item>
                    <item>
                <title>مفهوم تئوری Cap و مفهوم ACID در پایگاه داده چیست؟</title>
                <link>https://virgool.io/uncodev/%D9%85%D9%81%D9%87%D9%88%D9%85-%D8%AA%D8%A6%D9%88%D8%B1%DB%8C-cap-%D9%88-%D9%85%D9%81%D9%87%D9%88%D9%85-acid-%D8%AF%D8%B1-%D9%BE%D8%A7%DB%8C%DA%AF%D8%A7%D9%87-%D8%AF%D8%A7%D8%AF%D9%87-%DA%86%DB%8C%D8%B3%D8%AA-j32s7gkpos7e</link>
                <description>تئوری CAP (که به عنوان قضیه CAP نیز شناخته می‌شود) توسط اریک بروئر در سال 2000 معرفی شد. این تئوری سه ویژگی اساسی سیستم‌های توزیع‌شده را تعریف می‌کند که شامل Consistency (یکپارچگی)، Availability (دسترسی‌پذیری) و Partition Tolerance (تحمل پارتیشن) است. طبق تئوری CAP، در یک سیستم توزیع‌شده، تنها می‌توان به دو مورد از این سه ویژگی به طور همزمان دست یافت. به عبارت دیگر، نمی‌توان هر سه ویژگی را به صورت همزمان به طور کامل در یک سیستم داشت. این سه ویژگی به شرح زیر هستند:یکپارچگی (Consistency) :  همه کاربران و یا تراکنش‌ها نسخه یکسانی از داده‌ها را داشته باشند.دسترسی‌پذیری (Availability) : سیستم همیشه برای خواندن و نوشتن در دسترس هستش، حتی اگر یک یا چند node از سیستم از کار بیفتد .تحمل پارتیشن (Partition Tolerance) : در سیستمهای توزیع شده پارتیشن یک قطع ارتباط است . در صورت خرابی شبکه سیستم می‌تواند همچنان به کار خود ادامه دهد و داده‌ها را مدیریت کند، حتی اگر برخی nodeها نتوانند با هم ارتباط برقرار کنند.هدف ما این هستش که سیستم فروشگاه ساز پیشرفته رو با گولنگ پیاده سازی کنیم و در نهایت روی کوبرنتیز دیپلوی اجرا کنیم یعنی ۰ تا ۱۰۰ یه پروژه گولنگی . به زودی ویدیوی این آموزش ها در وبسایت uncodev منتشر خواهند شد.تئوری CAP بیان می‌کند که در یک سیستم توزیع‌شده، تنها می‌توان دو مورد از این سه ویژگی را به صورت همزمان داشت :یکپارچگی - دسترسی‌پذیری (CA) : اگر سیستم شما بخواهد یکپارچگی و دسترسی‌پذیری را حفظ کند، باید از تحمل پارتیشن‌بندی شبکه صرف‌نظر کند. در این حالت، سیستم در صورت وقوع قطعی شبکه قادر به ادامه کار نخواهد بود.یکپارچگی - تحمل پارتیشن (CP) : اگر سیستم شما بخواهد یکپارچگی و تحمل پارتیشن را حفظ کند، باید از دسترسی‌پذیری صرف‌نظر کند. در این حالت، در صورت وقوع قطعی شبکه، برخی از nodeها ممکن است در دسترس نباشند.دسترسی‌پذیری - تحمل پارتیشن (AP) : اگر سیستم شما بخواهد دسترسی‌پذیری و تحمل پارتیشن را حفظ کند، باید از یکپارچگی صرف‌نظر کند. در این حالت، در صورت وقوع قطعی شبکه، داده‌ها ممکن است ناسازگار باشند.مفهوم تئوری Cap و مفهوم ACID در پایگاه داده چیستکلمه ACID در پایگاه داده از حروف اول چهار کلمه تشکیل شده است که تعریفشون به صورت زیر میباشد : اتمی بودن (Atomicity) : به معنای این است که هر تراکنش یا باید به طور کامل انجام شود یا به طور کامل شکست بخورد. به عبارت دیگر، اگر بخشی از تراکنش ناموفق باشد، تمام تراکنش باید لغو شود و داده‌ها به حالت قبل از تراکنش بازگردند.یکپارچگی (Consistency) : این خاصیت تضمین می‌کند که یک تراکنش باید داده‌ها را از یک حالت معتبر به حالت معتبر دیگری منتقل کند. یعنی پس از اجرای تراکنش، تمام قوانین جامعیت (constraints) باید برقرار باشند.ایزوله بوده (Isolation) : ایزولاسیون تضمین می‌کند که اجرای همزمان تراکنش‌ها به گونه‌ای انجام شود که انگار هر تراکنش به تنهایی و بدون تأثیر از تراکنش‌های دیگر اجرا شده است. این خاصیت از تأثیرات منفی تراکنش‌های همزمان بر یکدیگر جلوگیری می‌کند.پایداری (Durability) : پایداری تضمین می‌کند که وقتی یک تراکنش با موفقیت کامل شد، تغییرات آن به صورت دائمی ذخیره شوند، حتی اگر سیستم دچار خرابی شود.این خواص با هم تضمین می‌کنند که تراکنش‌های پایگاه‌ داده‌ها به صورت ایمن و قابل اعتماد انجام شوند و داده‌ها همیشه در یک حالت صحیح و قابل پیش‌بینی باقی بمانند.</description>
                <category>سعید حمزه نژاد</category>
                <author>سعید حمزه نژاد</author>
                <pubDate>Mon, 15 Jul 2024 10:32:38 +0330</pubDate>
            </item>
                    <item>
                <title>دوره آموزشی گولنگ (Golang) از مقدماتی تا پیشرفته: ورود به بازار کار</title>
                <link>https://virgool.io/uncodev/%D8%AF%D9%88%D8%B1%D9%87-%D8%A2%D9%85%D9%88%D8%B2%D8%B4%DB%8C-%DA%AF%D9%88%D9%84%D9%86%DA%AF-golang-%D8%A7%D8%B2-%D9%85%D9%82%D8%AF%D9%85%D8%A7%D8%AA%DB%8C-%D8%AA%D8%A7-%D9%BE%DB%8C%D8%B4%D8%B1%D9%81%D8%AA%D9%87-%D9%88%D8%B1%D9%88%D8%AF-%D8%A8%D9%87-%D8%A8%D8%A7%D8%B2%D8%A7%D8%B1-%DA%A9%D8%A7%D8%B1-wgvx4lsjrsbl</link>
                <description>گولنگ یک زبان برنامه‌نویسی خاص و با ویژگی‌های منحصر به فرد است که در سال ۲۰۰۷ توسط گوگل به منظور سهولت در توسعه و افزایش بهره‌وری در محیط‌های چند هسته‌ای و رایانش ابری طراحی شده است و در سال ۲۰۰۹ به صورت عمومی  و open source منتشر شد.هدف ما این هستش که سیستم فروشگاه ساز پیشرفته رو با گولنگ پیاده سازی کنیم و در نهایت روی کوبرنتیز دیپلوی اجرا کنیم یعنی ۰ تا ۱۰۰ یه پروژه گولنگی . به زودی ویدیوی این آموزش ها در وبسایت uncodev منتشر خواهند شد. https://virgool.io/p/wgvx4lsjrsbl/%F0%9F%93%B7%D8%A7%D9%85%D9%88%D8%B2%D8%B4%D9%85%D9%82%D8%AF%D9%85%D8%A7%D8%AA%DB%8C%D8%AA%D8%A7%D9%BE%DB%8C%D8%B4%D8%B1%D9%81%D8%AA%D9%87%DA%AF%D9%88%D9%84%D9%86%DA%AF%D9%BE%D8%B1%D9%88%DA%98%D9%87%D9%85%D8%AD%D9%88%D8%B1 به دلیل پرفورمنس بالا و کاربردی بودن زبان برنامه نویسی گولنگ شرکت‌ها و پروژه‌های بزرگ زیادی هستن که از گولنگ برای توسعه نرم افزارهاشون استفاده کردن من جمله خود گوگل https://virgool.io/p/wgvx4lsjrsbl/%F0%9F%93%B7 توی تصویر بالا لیست از شرکت‌های بزرگ رو میبینید که از زبان برنامه نویسی گولنگ استفاده کردن، بع عنوان مثال توی این یوزکیس یکی از جاهای که گوگل از گولنگ اومده استفاده کرده رو میتونید مشاهده کنید ، لینک این یوزکیس که گوگل استفاده کرده ، و توی این لینک هم شما میتونید سایر یوزکیسا رو تو سایت گولنگ ببنید.In 2015, to keep up with Google’s scale, our team needed to rewrite our indexing stack from a single monolithic binary written in C++ to multiple components in a microservices architecture. We decided to rewrite many indexing services in Go, which we now use to power the majority of our architecture.توی سال ۲۰۱۵ گوگل اومده سرویس‌های ایندکس گذاریشو با زبان برنامه نویسی گولنگ و معماری مایکروسرویس ریرایت کرده.بازار کار گولنگ (Golang) :تقریبا شرکت‌های زیادی رو توی ایران میشناسم که یا رفتن سمت گولنگ و یا دارن مهاجرت میکنن به سمت استفاده از گولنگ هم به خاطر اینکه معماریشون رو به مایکروسرویس یا SOA تغییر دادن و هم قابلیت‌های گولنگ باعث شده که بازار کار گولنگ خوب بشه  . من خودم در اسنپ گروسری (اسنپ مارکت + اسنپ اکسپرس) مشغول به کارم و تقریبا اکثر سرویس‌ها با گولنگ ریرایت شدن و میدونم اکثر ونچرهای اسنپ هم از گولنگ استفاده میکنن در سرویس‌هاشون و کلا به دلیل اینکه برنامه نویس گولنگ کم هستش و در عین حال شرکت‌ها هم نیاز به برنامه نویس گولنگ دارن بازار کار خوبی وجود داره برای برنامه نویس کاردرست گولنگ. کافه بازار، دیوار، صبا ایده ، پاسارگاد الکترونیک، مبنا و  ... هم دیدم که اگهی جذب برنامه نویس گولنگ رو دارن.مزایای گولنگ (Golang) :سادگی و خوانا بودن کد ، در طی انجام پروژه که بیشتر با گولنگ اشنا میشوید متوجه خواهید شد که چقدر کد نویسی با گولنگ ساده و قابل فهم هستش.مدیریت حافظه ، گولنگGolang دارای یک مدیر حافظه خودکار (Garbage Collector) است که نگرانی‌های مربوط به مدیریت حافظه را از بین می‌برد و خطاهای مربوط به حافظه را کاهش می‌دهد.این مطلب رو چند وقت پیش در رابطه با مدیریت حافظه هیپ و استک نوشتم که خوندنش خالی از لطف نیست.کارایی بالا ، باینری‌های اجرایی تولید شده توسط Go به صورت مستقیم وابسته به سیستم عامل نیستند و به عنوان یک فایل اجرایی ساده قابل اجرا هستند اون سیستم عامل میتونه ویندوز یا لینوکس  یا ... باشه فقط مهم این هستش که براش خروجی گرفته باشه تا به راحتی اجرا بشه. این موضوع منجر به اجرای سریع‌تر برنامه‌ها می‌شود.پشتیبانی از همزمانی (Concurrency) ، یکی از بهترین و مهمترین ویژگی های گولنگ همزمانی به صورت (built-in) هستش. معنیش اینکه که قابلیت همزمانی به طور مستقیم در گولنگ تعبیه شده است و برنامه‌نویسان می‌توانند از این قابلیت به صورت مستقیم و بدون نیاز به افزودن کتابخانه‌ها یا ابزارهای خارجی، از Concurrency استفاده کنند. در مورد گوروتین‌ها،چنل‌ها و ... به صورت کامل در اینده توضیح خواهم داد و زیاد مورد استفاده قرار خواهند گرفت.یوزکیس‌های گولنگ :۱ . استفاده از گولنگ در  Cloud &amp; Network Services :به دلیل پشتیبانی گولنگ از همزمانی (Concurrency) و قدرتمند بودنش در این این زمینه برای استفاده در Cloud &amp; Network به شدت کارایی بالایی داره ، بیش از ۷۵ درصد  پروژه های Cloud Native با استفاده گولنگ توسعه پیدا کردن، پروژه‌هایی مثل داکر، کوبرنتیز و ... از طرایق این لینک میتونی کاملتر در موردش بخونی۲. استفاده از گولنگ در Command-line Interfaces (CLIs)فرض کنید شما بعد از نصب گیت توی ترمینال کلمه git رو مینویسید و بعدش یه سری کارها رو میتونید انجام بدید.این دقیقا یه برنامه cli هستش، حالا چرا پیاده سازی یه برنامه cli با گولنگ بهتر هستش؟ چون وقتی دولوپر یه برنامه cli پیاده‌سازی میکنه هدفش احتمالا یک جامعه بزرگ هستش که ممکنه هر کدوم سیستم عامل‌های مختلف داشته باشن، بنابراین بهترین گزینه گولنگ هستش که بتونه برنامش رو توی هر سیستم عاملی اجرا کنه. نکته بعدی این هستش که استارت آپ تایم برنامه گولنگی خیلی کم و نزدیک به صفر هستش. از طریق این لینک میتونی بیشتر در موردش بخونی. github-cli هم با گولنگ پیاده سازی شده است.۳. استفاده از گولنگ در Web Development :یجورایی میشه گفت گولنگ خوراک پروژه‌های مایکروسرویسی و اسکیل بالا هستش و همین الانم تو بزرگترین شرکتای دینا مخصوصا اونا که لود بالا و ترافیک بالا دارن به خوب جوابشو پس داده، مثلا کاری که خودم من بعد از ریرایت یه پروژه از php به گولنگ انجام دادم کاهش ۴۰۰ درصدی ریسپانس تایم‌ها بود به دلیل اینکه اومدم از کانکارنسی و یه سری قابلیت‌های گولنگ استفاده کردم . برای پیاده سازی یک وب اپلیکیشن با گولنگ به هیچ گونه وب فریمورکی نیاز نیست ! از ایجاد سرور گرفته تا ... رو میشه بدون نیاز به هیچ پکیجی پیاده سازی کرد البته پکیج‌های زیادی هست که تو این زمینه میتونن کمک کنن . از طریق این لینک میتونی بیشتر در موردش بخونی.۴. استفاده از گولنگ در Development Operations &amp; Site Reliability Engineering (SRE) :وقتی خود کوبرنتیز و داکر با گولنگ توسعه پیدا کردن قطعا خیلی کارها میشه با گولنگ براش انجام داد، یا توسعه برنامه‌هایی که نیاز به پردازش همزمان دارند (مانند ابزارهای مانیتورینگ و logging ) خیلی قدرتمند و کاربردیه، گولنگ ابزارهای خودکارسازی تست (تست‌های واحد، تست‌های ادغام، و ...) را بهبود داده است که در محیط DevOps کمک می‌کند تا فرآیند ادغام مستمر (CI) بهتری داشته باشیم.گولنگ دارای ابزارها و کتابخانه‌های متعددی است که می‌توانند در توسعه ابزارها و اسکریپت‌های مدیریتی مورد استفاده قرار گیرند..توی قسمت بعد میریم سراغ کد نویسی و قسمت‌های جذاب</description>
                <category>سعید حمزه نژاد</category>
                <author>سعید حمزه نژاد</author>
                <pubDate>Fri, 15 Dec 2023 23:36:20 +0330</pubDate>
            </item>
                    <item>
                <title>سوالات مصاحبه استخدامی برنامه نویس گولنگ golang</title>
                <link>https://virgool.io/uncodev/%D8%B3%D9%88%D8%A7%D9%84%D8%A7%D8%AA-%D9%85%D8%B5%D8%A7%D8%AD%D8%A8%D9%87-%D8%A7%D8%B3%D8%AA%D8%AE%D8%AF%D8%A7%D9%85%DB%8C-%D8%A8%D8%B1%D9%86%D8%A7%D9%85%D9%87-%D9%86%D9%88%DB%8C%D8%B3-%DA%AF%D9%88%D9%84%D9%86%DA%AF-golang-dbln6zloppim</link>
                <description>توی مقاله ای که لینکشو در پایینتر قرار میدم سعی میکنم سوالاتی که بیشتر در مصاحبه‌ها استخدامی در رابطه با برنامه نویسی گولنگ golang پرسیده میشه رو همراه با جوابشون قرار بدم تا بیشتر اشنا بشید و خودتونو محک بزنید.البته فقط در مورد گولنگ سوال پرسیده نمیشه توی مصاحبه های استخدامی گولنگ بلکه در مورد سیستم دیزاین، الگوریتم و دیتا استراکچر، مباحث دیتابیس ، بستگی به سطحی که دارید مصاحبه میدید ممکنه در مورد کوبرنتیز هم سوالاتی بپرسن که من سعی میکنم از همه این مباحث سوالاتشو قرار بدم و بتونید استفاده کنید.سولات معمولشون که چرا گولنگ رو انتخاب کردی؟تفاوت گورتین با ترد چی هستش؟مدیریت حافظه در گولنگ golang چجوری انجام میشه و ...لیست کاملشونو در مقاله زیر میتونی بخونی همراه با جوابشون البته این لیست به صورت مداوم بروز رسانی و کاملتر میشه.لینک مقاله سولات مصاحبه استخدامی گولنگ گولنگ golang</description>
                <category>سعید حمزه نژاد</category>
                <author>سعید حمزه نژاد</author>
                <pubDate>Fri, 15 Dec 2023 12:45:19 +0330</pubDate>
            </item>
                    <item>
                <title>کار با صفر و یک‌های دنیای کامپیوتر و انواع دیتا تایپ در گولنگ</title>
                <link>https://virgool.io/uncodev/%DA%A9%D8%A7%D8%B1-%D8%A8%D8%A7-%D8%B5%D9%81%D8%B1-%D9%88-%DB%8C%DA%A9-%D9%87%D8%A7%DB%8C-%D8%AF%D9%86%DB%8C%D8%A7%DB%8C-%DA%A9%D8%A7%D9%85%D9%BE%DB%8C%D9%88%D8%AA%D8%B1-%D9%88-%D8%A7%D9%86%D9%88%D8%A7%D8%B9-%D8%AF%DB%8C%D8%AA%D8%A7-%D8%AA%D8%A7%DB%8C%D9%BE-%D8%AF%D8%B1-%DA%AF%D9%88%D9%84%D9%86%DA%AF-noj8oupeh3xi</link>
                <description>دنیای کامپیوتر یعین دنیای صفر و یک‌ها ، هر نوع اطلاعاتی رو ما میتونیم با استفاده از همین ۰ و ۱ ها در کامیپوتر ذخیره و استفاده کنیم. و مثلا یه ویدیو یا یه عکس یا هر چیزی دقیقا از کنار هم قرار گرفتن همین ۰ و ۱ ها تشکیل شدن .کوچیکترین واحد دنیای کامپیوتر بیت bit  هستش که یا مقدار ۰  یا ۱ داره و  بعدیش میشه بایت byte که هر بایت معادل ۸ بیت هستش یعنی ۸ تا از این ۰ یا ۱ها .سمت چپ‌ترین بیت با ارزشترین بیت هسش یعنی ۲ به توان ۷  معادل ۱۲۸ و سمت راستترین معادل بی ارزشترین یعنی ۲ به توان ۰ معادل ۱هر بایت میتونه ۲۵۵ حالت داشته باشه یعنی هر بیتش میتونه ۰ یا ۱ بشه مثلاBYTE  [   1        0       1       0       1       0      0      0   ]بعدا که بریم سراغ پوینترها زیاد با خونه‌های مموری کار داریم و بیشتر در موردشون توضیح میدم.package main
import &amp;quotfmt&amp;quot
func main(){
        var testByte byte = 65
        fmt.Println(fmt.Sprintf(&amp;quot%8b&amp;quot,testByte))
        fmt.Println(&amp;quotwww.uncodev.ir&amp;quot)
}من اومدم با گولنگ یه برنامه نوشتم که میاد ۶۵  رو به بیت تبدیل میکنه و معادل بیتیشو به ما میده و بعدشم گفتم که string اش رو هم به من بگو که میشه معادل کاراکتر A .bite =&gt; 10000001
string : Aیا این مثال رو ببینیداومده گفته که ۱۷۰ بایت معدل بیتیش به این صورت میشه ، کدوم بیت‌ها صفر هستن و کدوم‌ها یک . اونایی که مقدار بیتشون یک هست رو با هم جمع زده و جمعشون شده ۱۷۰ یعنییی ۲ + ۸ + ۳۲ + ۱۲۸ = ۱۷۰حالا اگه همین رو بخوایم ببینیم معادل چه کارکتری هستش میشه معادل کاراکتر &#x60;ªکد تبدیلش به بیت و stringنتیجشتو قسمت بعد میریم سراغ دیتا‌ تایپ‌ها در گولنگ &#x60;</description>
                <category>سعید حمزه نژاد</category>
                <author>سعید حمزه نژاد</author>
                <pubDate>Sat, 09 Dec 2023 00:35:34 +0330</pubDate>
            </item>
                    <item>
                <title>انواع دیتا استراکچر در گولنگ golang</title>
                <link>https://virgool.io/uncodev/%D8%A7%D9%86%D9%88%D8%A7%D8%B9-%D8%AF%DB%8C%D8%AA%D8%A7-%D8%A7%D8%B3%D8%AA%D8%B1%D8%A7%DA%A9%DA%86%D8%B1-%D8%AF%D8%B1-%DA%AF%D9%88%D9%84%D9%86%DA%AF-golang-yljtarch64zo</link>
                <description>در برنامه‌نویسی، دیتا استراکچرها برای نمایش و سازماندهی داده‌ها به صورت منطقی و ساختاری استفاده میشه. این ساختارها می‌توانند شامل یک یا چندین نوع داده باشن و به برنامه‌نویسان امکان مدیریت بهتر داده‌ها را بدهند.آرایه‌ها (Arrays): دیتا استراکچری با طول ثابت که مجموعه‌ای از عناصر از یک نوع داده را نگهداری می‌کند و داده های پشت سر هم قرار میگیرند.var numbers [5]intاسلایس‌ها (Slices): دیتا استراکچری مشابه آرایه با این تفاوت که طول آن متغیر است.var sliceOfNumbers []intنقشه‌ها (Maps): دیتا استراکچری که از یک مجموعه از جفت‌های کلید و مقدار برای نگهداری داده‌ها استفاده میکنه.var person = map[string]string{&amp;quotname&amp;quot: &amp;quotuncodev&amp;quot, &amp;quotage&amp;quot: &amp;quottwo&amp;quot}ساختارها (Structs): دیتا استراکچری که یک گروه از فیلدها را با نوع مشخص نگه میداره.type Person struct { 
    Name string 
    Age  int 
} 
var john Personکانال‌ها (Channels) :  کانال‌ها در گولانگ برای ارتباط و تبادل داده بین گوروتین‌ها (goroutines) استفاده می‌شوند. گوروتین‌ها از کانال‌ها برای ارسال و دریافت داده به صورت همروند استفاده می‌کنند. کانال‌ها می‌توانند برای جلوگیری از مشکلات همروندی مانند deadlock استفاده شوند و اطمینان حاصل کنند که داده‌ها به ترتیب صحیح ارسال و دریافت می‌شوند.ch := make(chan int)اشاره‌گرها (Pointers) : اشاره‌گرها در برنامه‌نویسی یک نوع داده هستند که آدرس حافظه یک متغیر را نگهداری می‌کنند. به جای ذخیره مستقیم مقدار یک متغیر، اشاره‌گر به محلی در حافظه اشاره می‌کند که مقدار متغیر ذخیره شده است. این اشاره به امکان انجام عملیات مستقیم بر روی حافظه و به اشتراک گذاری داده‌ها بین توابع کمک می‌کند.var x int = 42 
var pointerToX *int = &amp;x 
fmt.Println(&amp;quotValue of x:&amp;quot, x) 
fmt.Println(&amp;quotAddress of x:&amp;quot, &amp;x) 
fmt.Println(&amp;quotValue through pointer:&amp;quot, *pointerToX)لیست‌ها (Lists): دیتا استراکچری که داده‌ها را به ترتیب خطی نگهداری میکنه. در زبان برنامه‌نویسی گولنگ مفهوم لیست (List) به صورت مستقیم به یک دیتا استراکچر خاص نمیپردازه. به جای لیست‌ها، اغلب از دیتا استراکچرهای دیگر مانند آرایه‌ها یا اسلایس‌ها برای نگهداری داده‌ها استفاده میشه.numbers := []int{1, 2, 3, 4, 5} 
fmt.Println(&amp;quotList of numbers:&amp;quot, numbers)صف‌ها (Queues): دیتا استراکچری که عناصر را به ترتیب وارد شدن (enqueue) و خروجی شدن (dequeue) نگهداری میکنه.در زبان golang ، مفهوم صف (Queue) معمولاً با استفاده از اسلایس‌ها (Slices) یا کانال‌ها (Channels) پیاده‌سازی میشه. پشته‌ها (Stacks): دیتا استراکچری که عناصر را به ترتیب وارد شدن (push) و خروجی شدن (pop) نگهداری می‌کند.در زبان برنامه‌نویسی گولنگ می‌توانید مفهوم پشته (Stack) را با استفاده از اسلایس‌ها (Slices) یا اشاره‌گرها (Pointers) پیاده‌سازی کنید. پشته یک دیتا استراکچر است که اعضای آن به صورت Last In, First Out (LIFO) مدیریت میشن، به این معنا که آخرین عنصری که اضافه می‌شود، اولین عنصری است که خارج می‌شود.</description>
                <category>سعید حمزه نژاد</category>
                <author>سعید حمزه نژاد</author>
                <pubDate>Mon, 04 Dec 2023 22:57:30 +0330</pubDate>
            </item>
                    <item>
                <title>نصب گیتلب gitlab اختصاصی روی سرور با سیستم عامل اوبونتو</title>
                <link>https://virgool.io/uncodev/%D9%86%D8%B5%D8%A8-%DA%AF%DB%8C%D8%AA%D9%84%D8%A8-gitlab-%D8%A7%D8%AE%D8%AA%D8%B5%D8%A7%D8%B5%DB%8C-%D8%B1%D9%88%DB%8C-%D8%B3%D8%B1%D9%88%D8%B1-%D8%A8%D8%A7-%D8%B3%DB%8C%D8%B3%D8%AA%D9%85-%D8%B9%D8%A7%D9%85%D9%84-%D8%A7%D9%88%D8%A8%D9%88%D9%86%D8%AA%D9%88-uid5hveakomk</link>
                <description>برای آموزش دوره مایکروسرویس و اسقرار روی کوبرننیز نیاز به داشتن گیت لب اختصاصی روی سرور خودم داشتم تا عملیات ci/cd و ... رو انجام بدم. در نتیجه یه سرور با ۲ هسته cpu و ۸ گیگ رم تهیه کردم. البته خب سرور جوری هستش که بشه افزایش داد میزان مورد نیازمون ریسورس رو.نصب گیت لب روی سرور اختصاصیاول کاری که باید بکنیم قطعا اپدیت سرور هستش و بعد نصب داکر و داکر کامپوزsudo apt update
sudo apt upgrade -y
sudo apt install apt-transport-https ca-certificates curl software-properties-common -y
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg
echo &#039;deb [arch=amd64 signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/ubuntu jammy stable&#039; | sudo tee /etc/apt/sources.list.d/docker.list &gt; /dev/null
sudo apt update
sudo apt install docker-ce -y
sudo systemctl status dockerمرحله بعد نصب داکر کامپوز هستش :VERSION=$(curl -s https://api.github.com/repos/docker/compose/releases/latest | grep &#039;tag_name&#039; | cut -d\&amp;quot -f4)
sudo curl -L &amp;quothttps://github.com/docker/compose/releases/download/${VERSION}/docker-compose-$(uname -s)-$(uname -m)&amp;quot -o /usr/local/bin/docker-compose
sudo chmod +x /usr/local/bin/docker-compose
sudo ln -s /usr/local/bin/docker-compose /usr/bin/docker-compose
docker-compose --versionمرحله بعد با دستور زیر میایم و یوزر docker رو به گروه sudo اضافه میکنیم که به شما امکان اجرای دستورات Docker را بدون استفاده از sudo می‌دهد.sudo usermod -aG docker $USERو سپس یه سری دایرکتوری باید ایجاد کنیم برای کانفیگ گیت لبsudo mkdir -p /srv/gitlab/config /srv/gitlab/logs /srv/gitlab/data /srv/registry/dataحالا میام یه دایرکتور واسه داکر کامپوزی که قرار اجرا بشه ایجاد میکنم و فایل داکر کامپوز رو هم ایجادش میکنم.mkdir /usr/local/bin/gitlab
cd  /usr/local/bin/gitlab
sudo nano docker-compose.ymlخب حالا توی این فایل باید بیام این محتوا رو داخل فایل داکر کامپوز رو قرار بدمversion: &#039;3&#039;
services:
    gitlab:
        image: &#039;gitlab/gitlab-ce:latest&#039;
        container_name: gitlab
        restart: always
        hostname: &#039;gitlab.uncodev.com&#039;
        environment:
           GITLAB_OMNIBUS_CONFIG: |
              external_url &#039;https://gitlab.uncodev.com&#039;
              gitlab_rails[&#039;gitlab_shell_ssh_port&#039;] = 2222
              nginx[&#039;redirect_http_to_https&#039;] = true
              # Container Registry configuration 
              registry_external_url &#039;https://registry.uncodev.com&#039; 
              gitlab_rails[&#039;registry_enabled&#039;] = true 
              registry[&#039;enable&#039;] = true 
              registry[&#039;username&#039;] = &#039;registry&#039;
              registry[&#039;group&#039;] = &#039;registry&#039;
              registry[&#039;dir&#039;] = &#039;/var/opt/gitlab/registry &#039;
              registry[&#039;registry_http_addr&#039;] = &#039;0.0.0.0:6060&#039;
              registry[&#039;debug_addr&#039;] = &#039;0.0.0.0:6061&#039;
              registry[&#039;log_directory&#039;] = &#039;/var/log/gitlab/registry&#039;
              registry[&#039;log_level&#039;] = &#039;info&#039;
              registry_nginx[&#039;enable&#039;] = false
        ports:
            - &#039;443:443&#039;
            - &#039;2222:22&#039;
            - &#039;6060:6060&#039;
        volumes:
             - &#039;/srv/gitlab/config:/etc/gitlab&#039;
             - &#039;/srv/gitlab/logs:/var/log/gitlab&#039;
             - &#039;/srv/gitlab/data:/var/opt/gitlab&#039;
networks:
    default:
        external:
            name: gitlab_networkحالا با دستور زیر میایم و شبکه gitlab_network رو ایجاد میکنیمdocker network create gitlab_networkو در نهایت با اجرا دستور زیر داکر کامپوز رو اجرا میکنیم تاااا گیت لب روی سرور ما بالا بیاااااد .docker-compose up -dوقتی این دستور رو اجرا میکنید و کارش تموم میشه بازم باید چند دقیقه صبر کنید تا گیت لب اماده بشه و بتونید بهش دسترسی پیدا کنید، تو فیلیمی که تا چند روز دیگه منتشر میکنم کاملتر توضیح میدم خواهم داد.یوزرنیم دیفالت گیت لب root هستش و پسورد رو هم با دستور زیر میتونید بگیریدش docker-compose exec gitlab cat /etc/gitlab/initial_root_password</description>
                <category>سعید حمزه نژاد</category>
                <author>سعید حمزه نژاد</author>
                <pubDate>Mon, 04 Dec 2023 21:45:31 +0330</pubDate>
            </item>
                    <item>
                <title>اموزش مقدماتی تا پیشرفته گولنگ پروژه محور : ورود به بازار کار(قسمت دوم)</title>
                <link>https://virgool.io/uncodev/%D8%A7%D9%85%D9%88%D8%B2%D8%B4-%D9%85%D9%82%D8%AF%D9%85%D8%A7%D8%AA%DB%8C-%D8%AA%D8%A7-%D9%BE%DB%8C%D8%B4%D8%B1%D9%81%D8%AA%D9%87-%DA%AF%D9%88%D9%84%D9%86%DA%AF-%D9%BE%D8%B1%D9%88%DA%98%D9%87-%D9%85%D8%AD%D9%88%D8%B1-%D9%88%D8%B1%D9%88%D8%AF-%D8%A8%D9%87-%D8%A8%D8%A7%D8%B2%D8%A7%D8%B1-%DA%A9%D8%A7%D8%B1%D9%82%D8%B3%D9%85%D8%AA-%D8%AF%D9%88%D9%85-e2owwh2dvdmi</link>
                <description>توی قسمت قبل در رابطه با مزایای و ویژگی‌های گولنگ صحبت کردم و از این جلسه به بعد میریم سراغ نصب گولنگ (Golang) و شروع کد نویسی از پایه هدف ما این هستش که سیستم فروشگاه ساز پیشرفته رو با گولنگ پیاده سازی کنیم و در نهایت روی کوبرنتیز دیپلوی اجرا کنیم یعنی ۰ تا ۱۰۰ یه پروژه گولنگی . به زودی ویدیوی این آموزش ها در وبسایت uncodev منتشر خواهند شد. اموزش مقدماتی تا پیشرفته گولنگ (پروژه محور)
خب اولین کاری که باید انجام بدیم قطعا نصب گولنگ هستش، برای نصب گولنگ کافیه که به این سایت مراجعه کنید و با توجه به سیستم عاملتون نسخه مورد نیاز رو دانلود و نصب کنید، نصبش خیلی سادت و تنها با چند کلیک میتونید نصبش کنید.در حال حاضر اخرین نسخه ۱.۲۱.۴ هستش که بهتره که اخرین نسخه رو نصب کنید. بعد از نصب کافیه که فقط دستور زیر را اجرا کنید که از درستی نصب گولنگ روی سیستمتون مطمین بشید.go versionخروجی نسخه نصب شده هستش : خب مرحله بعد نصب ادیتور مناسب برای کارکردن با گولنگ هستش که خود من همیشه از vscode استفاده میکنم ولی از Goland هم میتونید استفاده کنید البته نیاز با لایسنس داره .برای نصب vscode به این لینک مراجعه، دانلود و نصبش کنید.حتما اکسنشن Go رو هم واسش نصب کنید.خب بریم سراغ ایجاد اولین برنامه گولنگ Golang :پسوند فایل‌های گولنگ .go هستش، پس وقتی یه فایل جدید ایجاد میکند پسوندش .go باید باشه.اینو یادتون باشه که توی گولنگ نقطه شروع برنامه گولنگ فایل main.go با پکیج main و فانکشن main هستش . به زودی بیشتر در مورد پکیج و فانکشنا برتون توضیح خواهم داد.من یه فایل به اسم main.go ایجاد کردم، بعد اسم پکیج این فایل رو هم main قرار دادم، در مورد ایمپورت fmt هم تو جلسات بعد توضیح میدم اما در همین حد بگم که اینجا صرفا کار پرینت یه جمله در ترمینال رو برای ما انجام میده ، بعد فانکشن main  رو ایجاد کردم که نقطه شروع تمام برنامه های گولنگ همین فانکشن main هستش. داخلشم گفتم بیا این جمله رو واسم چاپ کن.خب اما برای اجرا برنامه های گولنگ چیکار باید کنیم؟ فقط کافیه که دستور go run main.go رو صدا بزنیم تا اون فایل اجرا بشه، البته تو جلسات بعد با بیلد گرفتن از پروژه و ایچاد باینری و ... هم اشنا خواهید شد . صبور باشید چون قرار یه پروژه خفن سیستم فروشگاه ساز رو با گولنگ پیاده سازی کنیم .</description>
                <category>سعید حمزه نژاد</category>
                <author>سعید حمزه نژاد</author>
                <pubDate>Mon, 27 Nov 2023 21:24:15 +0330</pubDate>
            </item>
                    <item>
                <title>اموزش مقدماتی تا پیشرفته گولنگ پروژه محور(قسمت اول)</title>
                <link>https://virgool.io/uncodev/%D8%A7%D9%85%D9%88%D8%B2%D8%B4-%D9%85%D9%82%D8%AF%D9%85%D8%A7%D8%AA%DB%8C-%D8%AA%D8%A7-%D9%BE%DB%8C%D8%B4%D8%B1%D9%81%D8%AA%D9%87-%DA%AF%D9%88%D9%84%D9%86%DA%AF-%D9%BE%D8%B1%D9%88%DA%98%D9%87-%D9%85%D8%AD%D9%88%D8%B1%D9%82%D8%B3%D9%85%D8%AA-%D8%A7%D9%88%D9%84-fw0o2wqbs6s4</link>
                <description>گولنگ یک زبان برنامه‌نویسی خاص و با ویژگی‌های منحصر به فرد است که در سال ۲۰۰۷ توسط گوگل به منظور سهولت در توسعه و افزایش بهره‌وری در محیط‌های چند هسته‌ای و رایانش ابری طراحی شده است و در سال ۲۰۰۹ به صورت عمومی  و open source منتشر شد. هدف ما این هستش که سیستم فروشگاه ساز پیشرفته رو با گولنگ پیاده سازی کنیم و در نهایت روی کوبرنتیز دیپلوی اجرا کنیم یعنی ۰ تا ۱۰۰ یه پروژه گولنگی . به زودی ویدیوی این آموزش ها در وبسایت uncodev منتشر خواهند شد.اموزش مقدماتی تا پیشرفته گولنگ پروژه محور
به دلیل پرفورمنس بالا و کاربردی بودن زبان برنامه نویسی گولنگ شرکت‌ها و پروژه‌های بزرگ زیادی هستن که از گولنگ برای توسعه نرم افزارهاشون استفاده کردن من جمله خود گوگل توی تصویر بالا لیست از شرکت‌های بزرگ رو میبینید که از زبان برنامه نویسی گولنگ استفاده کردن، بع عنوان مثال توی این یوزکیس یکی از جاهای که گوگل از گولنگ اومده استفاده کرده رو میتونید مشاهده کنید ، لینک این یوزکیس که گوگل استفاده کرده ، و توی این لینک هم شما میتونید سایر یوزکیسا رو تو سایت گولنگ ببنید.In 2015, to keep up with Google’s scale, our team needed to rewrite our indexing stack from a single monolithic binary written in C++ to multiple components in a microservices architecture. We decided to rewrite many indexing services in Go, which we now use to power the majority of our architecture.توی سال ۲۰۱۵ گوگل اومده سرویس‌های ایندکس گذاریشو با زبان برنامه نویسی گولنگ و معماری مایکروسرویس ریرایت کرده.بازار کار گولنگ (Golang) : تقریبا شرکت‌های زیادی رو توی ایران میشناسم که یا رفتن سمت گولنگ و یا دارن مهاجرت میکنن به سمت استفاده از گولنگ هم به خاطر اینکه معماریشون رو به مایکروسرویس یا SOA تغییر دادن و هم قابلیت‌های گولنگ باعث شده که بازار کار گولنگ خوب بشه  . من خودم در اسنپ گروسری (اسنپ مارکت + اسنپ اکسپرس) مشغول به کارم و تقریبا اکثر سرویس‌ها با گولنگ ریرایت شدن و میدونم اکثر ونچرهای اسنپ هم از گولنگ استفاده میکنن در سرویس‌هاشون و کلا به دلیل اینکه برنامه نویس گولنگ کم هستش و در عین حال شرکت‌ها هم نیاز به برنامه نویس گولنگ دارن بازار کار خوبی وجود داره برای برنامه نویس کاردرست گولنگ. کافه بازار، دیوار، صبا ایده ، پاسارگاد الکترونیک، مبنا و  ... هم دیدم که اگهی جذب برنامه نویس گولنگ رو دارن.مزایای گولنگ (Golang) : سادگی و خوانا بودن کد ، در طی انجام پروژه که بیشتر با گولنگ اشنا میشوید متوجه خواهید شد که چقدر کد نویسی با گولنگ ساده و قابل فهم هستش.مدیریت حافظه ، گولنگGolang دارای یک مدیر حافظه خودکار (Garbage Collector) است که نگرانی‌های مربوط به مدیریت حافظه را از بین می‌برد و خطاهای مربوط به حافظه را کاهش می‌دهد.این مطلب رو چند وقت پیش در رابطه با مدیریت حافظه هیپ و استک نوشتم که خوندنش خالی از لطف نیست.کارایی بالا ، باینری‌های اجرایی تولید شده توسط Go به صورت مستقیم وابسته به سیستم عامل نیستند و به عنوان یک فایل اجرایی ساده قابل اجرا هستند اون سیستم عامل میتونه ویندوز یا لینوکس  یا ... باشه فقط مهم این هستش که براش خروجی گرفته باشه تا به راحتی اجرا بشه. این موضوع منجر به اجرای سریع‌تر برنامه‌ها می‌شود.پشتیبانی از همزمانی (Concurrency) ، یکی از بهترین و مهمترین ویژگی های گولنگ همزمانی به صورت (built-in) هستش. معنیش اینکه که قابلیت همزمانی به طور مستقیم در گولنگ تعبیه شده است و برنامه‌نویسان می‌توانند از این قابلیت به صورت مستقیم و بدون نیاز به افزودن کتابخانه‌ها یا ابزارهای خارجی، از Concurrency استفاده کنند. در مورد گوروتین‌ها،چنل‌ها و ... به صورت کامل در اینده توضیح خواهم داد و زیاد مورد استفاده قرار خواهند گرفت.یوزکیس‌های گولنگ :۱ . استفاده از گولنگ در  Cloud &amp; Network Services : به دلیل پشتیبانی گولنگ از همزمانی (Concurrency) و قدرتمند بودنش در این این زمینه برای استفاده در Cloud &amp; Network به شدت کارایی بالایی داره ، بیش از ۷۵ درصد  پروژه های Cloud Native با استفاده گولنگ توسعه پیدا کردن، پروژه‌هایی مثل داکر، کوبرنتیز و ... از طرایق این لینک میتونی کاملتر در موردش بخونی۲. استفاده از گولنگ در Command-line Interfaces (CLIs)فرض کنید شما بعد از نصب گیت توی ترمینال کلمه git رو مینویسید و بعدش یه سری کارها رو میتونید انجام بدید.این دقیقا یه برنامه cli هستش، حالا چرا پیاده سازی یه برنامه cli با گولنگ بهتر هستش؟ چون وقتی دولوپر یه برنامه cli پیاده‌سازی میکنه هدفش احتمالا یک جامعه بزرگ هستش که ممکنه هر کدوم سیستم عامل‌های مختلف داشته باشن، بنابراین بهترین گزینه گولنگ هستش که بتونه برنامش رو توی هر سیستم عاملی اجرا کنه. نکته بعدی این هستش که استارت آپ تایم برنامه گولنگی خیلی کم و نزدیک به صفر هستش. از طریق این لینک میتونی بیشتر در موردش بخونی. github-cli هم با گولنگ پیاده سازی شده است.۳. استفاده از گولنگ در Web Development :یجورایی میشه گفت گولنگ خوراک پروژه‌های مایکروسرویسی و اسکیل بالا هستش و همین الانم تو بزرگترین شرکتای دینا مخصوصا اونا که لود بالا و ترافیک بالا دارن به خوب جوابشو پس داده، مثلا کاری که خودم من بعد از ریرایت یه پروژه از php به گولنگ انجام دادم کاهش ۴۰۰ درصدی ریسپانس تایم‌ها بود به دلیل اینکه اومدم از کانکارنسی و یه سری قابلیت‌های گولنگ استفاده کردم . برای پیاده سازی یک وب اپلیکیشن با گولنگ به هیچ گونه وب فریمورکی نیاز نیست ! از ایجاد سرور گرفته تا ... رو میشه بدون نیاز به هیچ پکیجی پیاده سازی کرد البته پکیج‌های زیادی هست که تو این زمینه میتونن کمک کنن . از طریق این لینک میتونی بیشتر در موردش بخونی.۴. استفاده از گولنگ در Development Operations &amp; Site Reliability Engineering (SRE) :وقتی خود کوبرنتیز و داکر با گولنگ توسعه پیدا کردن قطعا خیلی کارها میشه با گولنگ براش انجام داد، یا توسعه برنامه‌هایی که نیاز به پردازش همزمان دارند (مانند ابزارهای مانیتورینگ و logging ) خیلی قدرتمند و کاربردیه، گولنگ ابزارهای خودکارسازی تست (تست‌های واحد، تست‌های ادغام، و ...) را بهبود داده است که در محیط DevOps کمک می‌کند تا فرآیند ادغام مستمر (CI) بهتری داشته باشیم.گولنگ دارای ابزارها و کتابخانه‌های متعددی است که می‌توانند در توسعه ابزارها و اسکریپت‌های مدیریتی مورد استفاده قرار گیرند..توی قسمت بعد میریم سراغ کد نویسی و قسمت‌های جذاب </description>
                <category>سعید حمزه نژاد</category>
                <author>سعید حمزه نژاد</author>
                <pubDate>Mon, 27 Nov 2023 10:15:13 +0330</pubDate>
            </item>
                    <item>
                <title>شِل shell و بَش bash در لینوکس چیست؟</title>
                <link>https://virgool.io/uncodev/%D8%A8%D9%8E%D8%B4-bash-%D9%88-%D8%B4%D9%90%D9%84-shell-%DA%86%DB%8C%D8%B3%D8%AA-gyl1lpiccww6</link>
                <description>شِل Shell مثل یک مترجم است که کاربر با استفاده از آن می‌تواند با سیستم عامل لینوکس یا یونیکس ارتباط برقرار کند. به عبارت دیگر، شل یک واسط بین کاربر و هسته(Kernel) سیستم عامل است. شما دستورات را به زبان شل می‌دهید و shell این دستورات را تفسیر و به سیستم عامل می‌فهماند. shell مسئول اجرای دستورات کاربر و مدیریت جریان ورودی و خروجی است. مثال‌هایی از شل‌ها عبارت‌اند از Bash، Zsh، Fish و دیگرها.بَش یا همون Bash یک محیط خط فرمان (Shell) است که در سیستم‌عامل‌های مبتنی بر یونیکس و لینوکس استفاده می‌شود. Bash دارای ویژگی‌های پیشرفته‌تر و قابلیت‌های بیشتری نسبت به بسیاری از shellها را دارد و بسیاری از سیستم‌عامل‌های لینوکس از bash  به عنوان shell پیش‌فرض استفاده می‌کنند. برای مثال، وقتی شما در یک خط فرمان (Command Line) دستوری را وارد می‌کنید (مثلاً &quot;ls&quot; برای لیست کردن فایل‌ها)، این دستور به زبان شل نوشته شده و شل آن را تفسیر می‌کند و به سیستم عامل می‌فهماند که چه کاری انجام دهد.ترمینال (Terminal)  یا کنسول یک نرم‌افزار است که امکان برقراری ارتباط با سیستم‌عامل و اجرای دستورات را فراهم می‌کند. واسط گرافیکی می‌تواند یک ترمینال گرافیکی یا ترمینال متنی باشد. در ترمینال متنی، کاربر با وارد کردن دستورات متنی با سیستم‌عامل تعامل دارد.</description>
                <category>سعید حمزه نژاد</category>
                <author>سعید حمزه نژاد</author>
                <pubDate>Sat, 25 Nov 2023 23:23:29 +0330</pubDate>
            </item>
                    <item>
                <title>آموزش لینوکس از پایه به صورت کاربردی روی سرور (اوبونتو | ubuntu) قسمت اول</title>
                <link>https://virgool.io/uncodev/%D8%A2%D9%85%D9%88%D8%B2%D8%B4-%D9%84%DB%8C%D9%86%D9%88%DA%A9%D8%B3-%D8%A7%D8%B2-%D9%BE%D8%A7%DB%8C%D9%87-%D8%A8%D9%87-%D8%B5%D9%88%D8%B1%D8%AA-%DA%A9%D8%A7%D8%B1%D8%A8%D8%B1%D8%AF%DB%8C-%D8%B1%D9%88%DB%8C-%D8%B3%D8%B1%D9%88%D8%B1-%D8%A7%D9%88%D8%A8%D9%88%D9%86%D8%AA%D9%88-ubuntu-%D9%82%D8%B3%D9%85%D8%AA-%D8%A7%D9%88%D9%84-g5a2x44e3pzc</link>
                <description>لینوکس یک سیستم‌عامل مبتنی بر یونیکس است که از نظر عملکردی به سیستم‌عامل‌های یونیکس شباهت دارد. این سیستم‌عامل به صورت متن باز (Open Source) و رایگان در دسترس است، به این معنا که کد منبع آن برای استفاده، توسعه، و تغییر توسط هر کسی که مایل به انجام این کارها باشد، قابل دسترس است.لینوکس ابتدا توسط لینوس توروالدز (Linus Torvalds) در دهه 1990 ایجاد شد. او یک هسته (kernel) لینوکس ایجاد کرد که به عنوان قسمت اصلی سیستم‌عامل شناخته می‌شود. سپس با اضافه شدن نرم‌افزارها و ابزارهای مختلف، یک سیستم‌عامل کامل با نام لینوکس شکل گرفت.لینوکس در حال حاضر در انواع مختلف، از جمله توزیع‌های محبوب مانند Ubuntu، Fedora، Debian، CentOS و ... استفاده می‌شود.ابونتو یکی از توزیع‌های محبوب لینوکس است. این توزیع بر اساس دبیان (Debian) ساخته شده و تحت مجوز متن‌باز GPL (GNU General Public License) قرار دارد.ابونتو به طور منظم نسخه‌های LTS (Long Term Support) را منتشر می‌کند که برخی از آنها حداقل 5 سال پشتیبانی امنیتی و به‌روزرسانی‌های نرم‌افزاری را فراهم می‌کنند. این نسخه‌ها برای کاربران و سازمان‌ها که به دنبال پایداری بیشتر هستند، مناسب هستند. ابونتو همچنین از انواع معماری‌ها و پلتفرم‌ها پشتیبانی می‌کند، از جمله x86، x64، ARM، و ...ساختار دایرکتوری در لینوکسساختار دایرکتوری در لینوکس بر اساس استاندارد سلسله مراتبی (Hierarchical File System) سازماندهی شده است. در لینوکس، دایرکتوری‌ها (همان فولدرها) به صورت درختی وارد ساخته می‌شوند. در اینجا توضیحاتی در مورد ساختار دایرکتوری‌ها در لینوکس آورده شده است:دایرکتوری  : / (Root Directory) : این دایرکتوری به عنوان دایرکتوری اصلی و ریشه (Root) نامیده می‌شود. همه‌ی سایر دایرکتوری‌ها و فایل‌ها در سیستم، زیردرخت این دایرکتوری هستند.دایرکتوری  : /bin (Binary) : در این دایرکتوری، برنامه‌ها و دستورات اساسی برای اجرای سیستم قرار دارند. این دستورات عمدتاً برای استفاده کاربران و سیستم عامل هستند.دایرکتوری  : /etc (Etcetera) : اطلاعات تنظیمات سیستم و فایل‌های پیکربندی در این دایرکتوری قرار دارند. فایل‌هایی مانند /etc/passwd و /etc/network ممکن است در اینجا قرار داشته باشند.دایرکتوری : /home : این دایرکتوری برای هر کاربر جداگانه ایجاد می‌شود و داده‌های کاربران (مانند اسناد، عکس‌ها، و ...) در اینجا قرار دارند.دایرکتوری : /lib (Library) : کتابخانه‌های اساسی برنامه‌ها در این دایرکتوری قرار دارند.دایرکتوری : /usr (Unix System Resources) : در این دایرکتوری، فایل‌ها و برنامه‌های سیستمی برای کاربران قرار دارند. به عنوان مثال، برنامه‌های نصب شده و فایل‌های داده ممکن است در /usr/bin یا /usr/share قرار داشته باشند.دایرکتوری : /var (Variable) : داده‌های متغیری مانند فایل‌های لاگ، پایگاه داده‌ها، و سایر داده‌هایی که در طول زمان تغییر می‌کنند، در این دایرکتوری قرار می‌گیرند.دایرکتوری : /tmp (Temporary): این دایرکتوری برای ذخیره فایل‌های موقت استفاده می‌شود.دایرکتوری : /dev (Device): در این دایرکتوری، فایل‌های نمایشی برای دستگاه‌های سخت‌افزاری در سیستم قرار دارند.دایرکتوری : /mnt (Mount): این دایرکتوری برای اتصال دستگاه‌های ذخیره‌سازی جانبی مانند USB  (mount) می‌شود.دایرکتوری : /boot: فایل‌های مورد نیاز برای بارگذاری سیستم عامل در زمان راه‌اندازی در این دایرکتوری قرار دارند.</description>
                <category>سعید حمزه نژاد</category>
                <author>سعید حمزه نژاد</author>
                <pubDate>Sat, 25 Nov 2023 22:52:26 +0330</pubDate>
            </item>
                    <item>
                <title>گولنگ Golang مستقیماً بر روی سخت‌افزار اجرا می‌شود</title>
                <link>https://virgool.io/uncodev/%DA%AF%D9%88%D9%84%D9%86%DA%AF-golang-%D9%85%D8%B3%D8%AA%D9%82%DB%8C%D9%85%D8%A7%D9%8B-%D8%A8%D8%B1-%D8%B1%D9%88%DB%8C-%D8%B3%D8%AE%D8%AA-%D8%A7%D9%81%D8%B2%D8%A7%D8%B1-%D8%A7%D8%AC%D8%B1%D8%A7-%D9%85%DB%8C-%D8%B4%D9%88%D8%AF-q2kpkszej4wz</link>
                <description>گولنگ توسط یک فرآیند کامپایل مستقیماً بر روی سخت‌افزار اجرا می‌شود. در واقع به باینری کد تبدیل میشود و cpuها باینری را می فهمند. این ویژگی یکی از مزایای مهمی است که زبان‌های برنامه‌نویس , Go, C و C++ نسبت به زبان‌های سطح بالاتر مانند جاوا و پایتون دارند. هدف ما این هستش که سیستم فروشگاه ساز پیشرفته رو با گولنگ پیاده سازی کنیم و در نهایت روی کوبرنتیز دیپلوی اجرا کنیم یعنی ۰ تا ۱۰۰ یه پروژه گولنگی . به زودی ویدیوی این آموزش ها در وبسایت uncodev منتشر خواهند شد.برای توضیح این تفاوت بهتر است به عملکرد اجرایی این زبان‌ها بپردازیم. زبان‌هایی مانند جاوا یا زبان‌های مبتنی بر JVM، کد منبع برنامه را با استفاده از کامپایلر به یک مجموعه‌ای از دستورات به نام &quot;بایت‌کد&quot; تبدیل می‌کنند. این بایت‌کد در واقع مانند یک زبان میانی برای ارتباط با ماشین‌های مجازی می‌باشد که در بالای سیستم‌عامل اصلی اجرا می‌شوند. در زمان اجرا، ماشین مجازی (مانند JVM) بایت‌کد را تفسیر و به ماشین‌هایی می‌توانند مفهوم ماشینی برای اجرا ترجمه کنند.این تصویر رو ببیند بهتر متوجه میشیدمثلا توی جاوا اول برنامه کامپایل میشه به بایت کد تبدیل میشه و بعد توسط jvm به باینری کد تبدیل میشه برای فهم cpu.تفاوت گولنگ و c و c++ با زبانهایی مثل جاوا اینه که مستقیما بعد کامپایل به باینری کد تبدیل میشن و یه مرحله حذف میشه.بنابراین، یکی از مزایای اصلی استفاده از زبان‌های برنامه‌نویسی گولنگ، C و C++ نسبت به زبان‌های سطح بالاتر مانند جاوا و پایتون، عملکرد بهتر و سرعت بیشتر در اجرای برنامه‌هاست. این ویژگی می‌تواند برای برنامه‌هایی که نیاز به عملکرد بالا یا پردازش‌های سنگین دارند، بسیار مهم و تاثیرگذار باشد.</description>
                <category>سعید حمزه نژاد</category>
                <author>سعید حمزه نژاد</author>
                <pubDate>Thu, 31 Aug 2023 11:30:24 +0330</pubDate>
            </item>
                    <item>
                <title>تفاوت گوروتین‌ها با Thread وکمی بررسی Process</title>
                <link>https://virgool.io/uncodev/%D8%AA%D9%81%D8%A7%D9%88%D8%AA-%DA%AF%D9%88%D8%B1%D9%88%D8%AA%DB%8C%D9%86-%D9%87%D8%A7-%D8%A8%D8%A7-%D8%AA%D8%B1%D8%AF-%D9%88-%D9%BE%D8%B1%D8%A7%D8%B3%D8%B3-process-thread-goroutine-sjvfw5fstdx6</link>
                <description>وقتی که یه برنامه اجرا میشه یه پراسس ایجاد میشه و یه PID اختصاصی داره مثلا فرض کنید برنامه note رو باز کردید یه پراسس ایجاد میشه و یه PID خواهد داشت.اما داخل هر پراسس Process چیا وجود داره؟ اول این تصویر رو ببینید هدف ما این هستش که سیستم فروشگاه ساز پیشرفته رو با گولنگ پیاده سازی کنیم و در نهایت روی کوبرنتیز دیپلوی اجرا کنیم یعنی ۰ تا ۱۰۰ یه پروژه گولنگی . به زودی ویدیوی این آموزش ها در وبسایت uncodev منتشر خواهند شد.اجزای تشکیل دهنده یک پراسس تو این عکس کاملا مشخصه و اینکه تفاوت مالتی پراسس با سینگل پراسس چی هستش رو هم در ادامه توضیح میدم.۱. هر Process مستقل هستش و میتونه یک یا چند Thread (ترد رو چند خط پاییینتر توضیح میدم) داخل خودش داشته باشه۲. هر Process حافظه اختصاصی خودش رو داره۳. هر Process شامل یک برنامه و PID انحصاری هستش و درواقع یک Task هستش۴. بطور کلی Process توسط CPU کنترل میشه۵. پراسس ریسورس‌های خودش رو با تردها برای اجرا برنامه به اشتراک میذاره.۶. پراسس‌ها در فضای separate memory اجرا میشهاما Threadها چی هستن؟  هر Thread بخشی از یک پراسس هستش و در واقع یک Light wight process میباشد و شامل اطلاعات و دستورالعملهایی هستش که cpu برای اجرای برنامه به آنها نیاز داره. Threadها توسط cpu کنترل میشن و هر ترد stack اختصاصی خودش رو داره تردهای در فضای Shared memory اجرا میشن.در یک زمان  واحد فقط یک Thread میتونه از cpu (یکی از هسته‌هاش) استفاده کنه اما اینکه یه برنامه به صورت کانکارنت یا همروند اجرا میشه چیه پس؟ اگر یک پراسس چندین ترد داشته باشه cpu میاد با فاصله زمانی خیلی کوتاه بین اجرای این تردها سوییچ میکنه ولی کسی چیزی متوجه نمیشه چون خیلی سریع این اتفاق میفته.تا اینجا من نخ‌ها یا Threadهای سطح هسته رو توضیح دادم، اما بریم سراغ نخ‌ها یا Threadهای سمت user که توی گولنگ بهشون میگیم گوروتین Goroutine.گورویتن‌ها خیلی خیلی سبک و کم هزینه هستن و وقتی ایجاد میشن حدود ۲ کیلوبایت حافظه رو اشغال میکنن (که قابل افزایش هستش) و توسط runtime گولنگ مدیریت میشن (درحالی که تردهای سطح هسته مقدار پیش فرض حافظه ای (استک) که بهشون اختصاص داده میشه حدودا یک مگابایت یا بیشتر هست) . توی golang به این تردهای سطح یوزر گوروتین میگن البته با greenthread  ها هم شناخته میشن. یه برنامه نویس میتونه چندین میلیون گوروتین رو ایجاد کنه بدون اینکه مشکلی پیش بیاد. گوروتین ها توسط زمان بند رانتایم گولنگ به thread های سیستم عامل یا هسته map میشن . توی مقاله بعدی بیشتر در مورد همزمانی سطح هسته و گولنگ توضیح میدم.تو این مقاله میتونی در مورد تفاوت‌های حافظه هیپ و استک بیشتر بخونیکانال تگلرامhttps://t.me/uncodev</description>
                <category>سعید حمزه نژاد</category>
                <author>سعید حمزه نژاد</author>
                <pubDate>Thu, 24 Aug 2023 11:29:10 +0330</pubDate>
            </item>
                    <item>
                <title>تفاوت حافظه هیپ Heap و استک Stack و مدیریت این‌ حافظه‌ها توسط گولنگ Golang</title>
                <link>https://virgool.io/uncodev/%D8%AA%D9%81%D8%A7%D9%88%D8%AA-%D8%AD%D8%A7%D9%81%D8%B8%D9%87-%D9%87%DB%8C%D9%BE-heap-%D9%88-%D8%A7%D8%B3%D8%AA%DA%A9-stack-%D9%88-%D9%85%D8%AF%DB%8C%D8%B1%DB%8C%D8%AA-%D8%A7%DB%8C%D9%86-%D8%AD%D8%A7%D9%81%D8%B8%D9%87-%D9%87%D8%A7-%D8%AA%D9%88%D8%B3%D8%B7-%DA%AF%D9%88%D9%84%D9%86%DA%AF-golang-bzgsfrxcprcr</link>
                <description>حافظه Heap برای ذخیره‌سازی داده‌ها به صورت پویا و دسترسی به آن‌ها در زمان اجرا استفاده میشه. همچنین حافظه Heap  برای ذخیره‌سازی داده‌هایی که در زمان اجرا ایجاد میشن و اندازه اونها در زمان کامپایل پیش‌بینی نمیشه، به‌کار میره. این داده‌ها به صورت داینامیک در حافظه Heap ایجاد و مدیریت می‌شوند.در حافظه Heap، داده‌ها به صورت دلخواه ذخیره میشن و ترتیب ذخیره‌سازی اهمیتی نداره. مدیریت حافظه Heap توسط برنامه نویس انجام میشه یعنی برنامه نویسی باید بگه که کدوم قسمت‌های حافظه Heap برای داده‌ها اختصاص داده می‌شود و کدوم قسمت‌ها آزاد بشن. این مدیریت شامل عملیاتی مانند تخصیص حافظه، آزادسازی حافظه، و در صورت لزوم تغییر اندازه حافظه میشه. و البته تو برخی زبان‌های برنامه نویسی مثل گولنگ مدیریت حافظه Heap توسط Garbage Collection خود گولنگ انجام میشه و نیاز نیست برنامه نویس باید و کاری انجام بده.هدف ما این هستش که سیستم فروشگاه ساز پیشرفته رو با گولنگ پیاده سازی کنیم و در نهایت روی کوبرنتیز دیپلوی اجرا کنیم یعنی ۰ تا ۱۰۰ یه پروژه گولنگی . به زودی ویدیوی این آموزش ها در وبسایت uncodev منتشر خواهند شد.حافظه Stack برای ذخیره‌سازی داده‌ها و اطلاعات مربوط به توابع و فرآیندهای فعلی برنامه در زمان اجرا استفاده میشه. حافظه Stack به صورت سطوحی کوچک‌تر در مقایسه با حافظه Heap عمل میکنه و برای مدیریت داده‌ها به ترتیب Last In, First Out (LIFO) استفاده میشه.  آخرین داده‌هایی که وارد Stack میشن، در ابتدا باید خارج بشن.تفاوت‌های حافظه Heap و Stackمدیریت حافظه:حافظه Heap به صورت دستی مدیریت میشه. برنامه‌نویس باید خودش تصمیم بگیرد که کدام بخش‌های حافظه Heap برای ذخیره داده‌ها تخصیص پیدا کنه و کی باید آزاد بشن (البته گفتم که تو یه زبان مثل گولنگ خودکار انجام میشه و ما نباید کاری کنیم ).حافظه Stack به صورت خودکار مدیریت میشه. سیستم به ترتیب LIFO (Last In, First Out) داده‌ها را مدیریت میکنه. زمانی که تابع فراخوانی میشه، اطلاعات مربوط به اون تابع به حافظه Stack اضافه میشه و با پایان تابع، این اطلاعات حذف نمیشن.سرعت دسترسی:دسترسی به حافظه Heap ممکن است کمی کندتر باشه. به خاطر اینکه مکانیزم‌هایی برای جستجوی داده‌ها در حافظه Heap وجود داره.دسترسی به حافظه Stack به طور معمول سریع‌تر هستش. چون داده‌ها به ترتیب LIFO مدیریت میشن و از طریق آدرس‌های ثابت قابل دسترسی خواهند بود.حجم حافظه:· حافظه Heap معمولاً بزرگتر از حافظه Stack هستش. اینم به این دلیله که داده‌ها به صورت دینامیک در حافظه Heap ایجاد می‌شوند و اندازه آن‌ها در زمان اجرا مشخص می‌شود.· حافظه Stack معمولاً کوچک‌تر است و محدود به تعداد توابع و فرآیندهای فعلی برنامست.زمان زنده بودن داده‌ها:داده‌های ذخیره‌شده در حافظه Heap به طور دستی باید آزاد بشن (تو گولنگ خودکار انجام میشه). این به این معناست که برنامه‌نویس باید خودش تصمیم بگیرد که کدام داده‌ها باید آزاد شوند تا جلوی ترکیبی از حافظه‌های نامرتب و هدررفت حافظه و درواقع همون (Memory Leaks) رو بگیره.داده‌های ذخیره‌شده در حافظه Stack به صورت خودکار با اتمام تابع یا فرآیند مرتبط آزاد می‌شوند.نوع داده‌ها:معمولاً برای ذخیره‌سازی شیء‌ها و داده‌هایی که در زمان اجرا ایجاد میشن ( مانند آرایه‌ها و لیست‌ها با اندازه متغیر ) از حافظه Heap استفاده میشه.معمولاً برای ذخیره‌سازی متغیرهای محلی توابع و اطلاعات مربوط به تابع‌ها (مانند آدرس‌های بازگشتی و اطلاعات بازگشتی) از حافظه Stack استفاده می‌شود.کانال تگلرامhttps://t.me/uncodevو امااا مثال‌هایی در مورد گولنگحافظه Stack در Golang:در Go، تابع‌ها با دستور return نتیجه رو برمیگردونن. برای هر تابعی که فراخوانی میشه، یک &quot;stack frame&quot; جدید در حافظه Stack ایجاد میشه. این فریم شامل متغیرهای محلی تابع، آدرس بازگشتی، و سایر اطلاعات مرتبط با تابع هستش. با اتمام تابع، فریم مربوط به آن از حافظه Stack حذف میشه. تخصیص و آزاد‌سازی حافظه در اینجا به صورت خودکار انجام می‌شود.حافظه Heap در Golang :در Golang، مدیریت حافظه Heap با ترکیبی از توابعی مانند new() و make() انجام میشه. تابع new :  این تابع برای ایجاد یک متغیر از نوع اشاره‌گر به نوع مورد نظر و تخصیص حافظه Heap به آن استفاده میشه. مثلاً var x *int = new(int) یک اشاره‌گر به یک متغیر int را ایجاد میکنه که در حافظه Heap تخصیص یافته است.تابع make :  این تابع برای ایجاد و تخصیص حافظه به ساختارهای خاصی مانند  slices، maps  وchannels استفاده میشه. مانند var s []int = make([]int, 10) که یک slice از اعداد int با طول 10 ایجاد میکنه.گوروتین‌ها و چنل ها از کدوم حافظه استفاده میکنن؟هر Goroutine مستقیماً در حافظه Stack تعبیه شده و به طور خودکار مدیریت میشه. این Stack‌ها توسط زبان Go به صورت خودکار مدیریت میشن .داده‌هایی که بین Goroutine‌ها با استفاده از Channels انتقال پیدا میکنن، در حافظه Heap قرار دارند. این باعث می‌شود تا از یک مکان مشترک برای انتقال داده‌ها استفاده شود که بین تمام نخ‌ها به اشتراک گذاشته می‌شود.توی مقالات بعدی در رابطه با زباله جمع کن گولنگ بیشتر توضیح میدم.کانال تگلرامhttps://t.me/uncodev</description>
                <category>سعید حمزه نژاد</category>
                <author>سعید حمزه نژاد</author>
                <pubDate>Fri, 18 Aug 2023 13:51:48 +0330</pubDate>
            </item>
            </channel>
</rss>