<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
    <channel>
        <title>نوشته های Hamid Reza</title>
        <link>https://virgool.io/feed/@hamidinjas</link>
        <description>Android and Flutter developer</description>
        <language>fa</language>
        <pubDate>2026-06-17 05:57:20</pubDate>
        <image>
            <url>https://files.virgool.io/upload/users/172414/avatar/RGECD3.jpg?height=120&amp;width=120</url>
            <title>Hamid Reza</title>
            <link>https://virgool.io/@hamidinjas</link>
        </image>

                    <item>
                <title>کانفیگ سرور برای اجرای پروژه لاراول</title>
                <link>https://virgool.io/@hamidinjas/%DA%A9%D8%A7%D9%86%D9%81%DB%8C%DA%AF-%D8%B3%D8%B1%D9%88%D8%B1-%D8%A8%D8%B1%D8%A7%DB%8C-%D8%A7%D8%AC%D8%B1%D8%A7%DB%8C-%D9%BE%D8%B1%D9%88%DA%98%D9%87-%D9%84%D8%A7%D8%B1%D8%A7%D9%88%D9%84-imfdmqhcxjc8</link>
                <description>برای کسایی که زیاد از مفاهیم سرور و لینوکس چیزی نمیدونن (مثل خودم) کانفیگ سرور یکی از کارهای نسبتا سخت و پر دردسره، چند وقت پیش شروع کردم و با یک سرور تست مراحل کانفیگ سرور رو یکی یکی پیش رفتم و امروز توی این مقاله سعی میکنم قدم به قدم کار هایی که باید انجام بشه رو توضیح بدم تا آدم های دیگه مثل خودم بتونن یه سرور رو کانفیگ کنن تا در حد نیازشون جوابگو باشه. نکته ای که داره اینه این آموزش صرفا یه راه اندازی ساده است و قطعا بعد از انجام این کار ها به تمام اصول سرور مسلط نخواهید شد.خب من میخوام توی سرور خودم از NginX استفاده کنم و برای مدیریت سرور در آینده هم از Webmin و VirtualMin کمک بگیرم.نکته ای که هست اینه که یکی از مهم ترین و تقریبا سخت ترین کار هایی که باید انجام بشه تنظیم Dns هاست که من این کار رو با کمک CDN آروان انجام دادم. که خیلی راحته انجامش.برای شروع اول بهتره که تمام پکیج های روی سرور خودتون رو آپدیت کنید، پس اولین دستوری که توی ترمینال خودتون مینویسد دستور زیر هستش: sudo apt update بعد دستور: sudo apt upgrade -y اینکه این دستورات دقیقا چیکار میکنن مورد بحث ما نیست :)توی قدم بعدی باید virtualmin رو نصب کنیم، برای اینکار از نصب خودکار استفاده میکنیم، برای اینکار اولی باید اسکریپت نصب رو دانلود کنیم با دستور زیر: wget https://software.virtualmin.com/gpl/scripts/install.shبعد از اینکه دانلود شد ما با کمک دستور زیر عملیات نصب رو شروع میکنیم اینجا یه نکته داره اونم اینکه به طور پیشفرض برای شما Apache فعال میشه ولی ما میخوایم از NginX استفاده کنیم، پس پارامتر LEMP رو به همراه دستور ارسال میکنیم:sudo /bin/sh install.sh --bundle LEMPبعد از اجرای دستور یک سوال از شما پرسیده میشه که Y رو بزنید. بعدش از شما میخواد دامنه ای که میخواید به سرور خودتون وصل کنید رو وارد کنید.بعد از انجام این مراحل زمانی که IP سرور خودتون رو داخل مرورگر باز کنید باید پیام زیر رو ببینید:اگه این پیام رو دیدید تا اینجا همه چی درست پیش رفته، حالا توی مرورگرتون ip سرور رو با پورت 10000 وارد کنید به عنوان مثال : 123.123.123.123:10000اینجا وارد پنل VirtualMin میشید که با یوزر نیم و پسورد سرور میتونید وارد پنل بشید.محیط VirtualMinاول Wizard رو تا مرحله اخر برید، توی مرحله آخر مجدد دامنه ای که میخواید سرورتون بهش وصل باشه رو وارد کنید. زمانی که دکمه return to virtualmin برای شما فعال شد یعنی کارتون تمومه و برمیگردید به پنل.روی گزینه Create Virtual Server کلیک کنید تا صفحه ایجاد سرور براتون بیاد. توی این صفحه مقدار Domain Name رو همون دامنه بگذارید به عنوان مثال : example.com ، قسمت password هم که رمز دلخواه خودتون رو بزارید (این رمز برای ورود کاربران به این دامنه نیاز میشه) و حواستون باشه تیک گزینه enable mariaDB Database خورده باشه. روی گزینه Create کلیک کنیدو صبر کنید تا تمام مراحل کامل انجام بشه ( ممکنه یکم زمان ببره ، عجله نکنید). بعد از اتمام مراحل گزینه Return to Server List بهتون نمایش داده میشه روی اون کلیک کنید و میبیند که سرور شما با موفقیت ساخته شد.حالا اگه توی مرورگر دامنه خودتون رو وارد کنید باید صفحه زیر رو مشاهده کنید: حالا اگه برگردید به پنل گزینه FileManager رو انتخاب کنید میتونید فایل های خودتون رو به راحتی اپلود کنید و تمام.تو مقاله بعدی تنظیمات خود لاراول رو روی سرورمون توضیح میدم.ممنون که همراهی کردید.</description>
                <category>Hamid Reza</category>
                <author>Hamid Reza</author>
                <pubDate>Sun, 29 Sep 2024 12:40:04 +0330</pubDate>
            </item>
                    <item>
                <title>DevOps چیست؟</title>
                <link>https://virgool.io/@hamidinjas/devops-%DA%86%DB%8C%D8%B3%D8%AA-vdhs3irhqhwu</link>
                <description>تو این مقاله سعی میکنم خیلی ساده و روان در مورد اینکه DevOps چیه و کاری که انجام میده توضیح میدیم ولی قبل از اینکه به مفهوم DevOps بپردازیم بهتره مفاهیم پایه رو متوجه بشیم.چرخه حیات برنامه یا Application Life Cycleبه طور کلی به زمانی گفته میشود که ایده اولیه برنامه به ذهن ما میرسد تا زمانی که برنامه را پیاده سازی میکنیم که طی چندین مرحله انجام میشود.به طور کلی یک Application Life Cycle توسط دو تیم مجزا اجرا میشود:Development TeamOperation Teamمراحل یک Application Life Cycle به شرح زیر میباشد:مرحله اول Discovery یا نیاز سنجی: در این مرحله ما نیاز های مشتری یا کارفرما شناسایی میکنیم.مرحله دوم  Analyse: نیاز هایی که در مرحله قبل شناسایی شدن رو آنالیز میکنیم.مرحله سوم Plan: برنامه ریزی برای Application.مرحله چهارم Design: طراحی Application.مرحله پنجم Code: کد نویسی برنامه که خود از دو بخش Build و Develop تشکیل میشود.مرحله ششم Testمرحله هفتم Deploy: برنامه برای استفاده قرار میگیرد و وارد Production Environment میگردد.مرحله هشتم Monitor: این مرحله شامل دو بخش Evaluation و Develop میشود، در این مرحله بازخورد های برنامه در استفاده گرفته میشود و برنامه توسعه پیدا میکند.مراحل 1 تا 5 وظایف تیم Development هستند و مراحل 6 تا 8 توسط تیم Operation انجام میشود.مفهوم CI/CDمفهوم CD/CD را می‌توان روشی خودکار برای ارائه مستمر نرم‌افزار در حال توسعه به کاربران نهایی دانست. درک این تعریف در ابتدای کار سخت است اما پس از آشنا شدن با مفاهیمی مانند continuous integration، continuous delivery و continuous deployment بسیار راحت‌تر از قبل می‌توانید بُعدهای مختلف این روش را درک کنید.به طور کل CI فرایندی است که در آن نرم‌افزار ما build شده و تست‌های نرم‌افزاری اعم از unit و integration test ها به‌صورت خودکار اجرا می‌شوند.پس از CI، نوبت به Continuous delivery (CD) می‌رسد. طی این فرایند، release نرم‌افزار نهایی به‌صورت خودکار انجام می‌شود. هدف از continuous delivery این است که همیشه کدهایی داشته باشیم که قابلیت استقرار در حالت Production را داشته باشند.حالا در این فرایند چه نیازی به DevOps هست؟ طی این فرایند ها یک سری مشکلات عمده وجود دارن که باعث اختلال در عملکرد برنامه میشن و ممکنه برنامه برای ساعاتی به طور کل Down بشه. عمده مشکل ارتباط بین تیم Development و تیم Operation هستش، چرا که تیم Development بیشتر به فکر توسعه برنامه هستن ولی تیم Operation هدفشون یک برنامه بدون ایراد و Uptime خوبه. یکی دیگه از مشکلات اینه که زمانی که تیم Operation در مرحله CD قرار داشته باشن و بخوان برنامه رو به محیط Production ببرن و تست رو انجام بدن ممکنه زمان زیادی رو صرف این کار بکنن و به همین خاطر تو این زمان ممکنه تیم Develop فقط منتظر نتیجه باشه.همین مشکلات و مسائل دیگه باعث به وجود اومدن یک پوزیشن در شرکت ها به اسم DevOps شده که کار اصلیش ارتباط و هماهنگی بین دو تیم Develop و Operation هستش.هدف نهایی یک مهندس DevOps کوتاه کردن چرخه توسعه نرم‌افزار، افزایش دفعات به‌روزرسانی‌ها و برنامه‌ریزی برای دستیابی به نسخه‌های قابل اعتمادتر استدوآپس در مورد یکسان‌سازی و اتوماسیون فرایندها است و مهندسان داوپس در ترکیب کد، نگهداری برنامه‌ها و مدیریت برنامه‌ها نقش اساسی دارند. همه این وظایف به درک چرخه‌های عمر توسعه، فرهنگ DevOps و فلسفه، شیوه‌ها و ابزارهای آن متکی هستند. بنابراین یک مهندس دواپس نه‌تنها باید بر تمام این موارد تسلط داشته باشد بلکه باید مهارت‌های بین‌فردی داشته باشد تا بتواند دو تیم توسعه و عملیات را در یک محیط مشارکتی، مدیریت کند.</description>
                <category>Hamid Reza</category>
                <author>Hamid Reza</author>
                <pubDate>Wed, 17 Jan 2024 13:10:05 +0330</pubDate>
            </item>
                    <item>
                <title>دریافت اطلاعات از اینترنت در فلاتر</title>
                <link>https://virgool.io/@hamidinjas/%D8%AF%D8%B1%DB%8C%D8%A7%D9%81%D8%AA-%D8%A7%D8%B7%D9%84%D8%A7%D8%B9%D8%A7%D8%AA-%D8%A7%D8%B2-%D8%A7%DB%8C%D9%86%D8%AA%D8%B1%D9%86%D8%AA-%D8%AF%D8%B1-%D9%81%D9%84%D8%A7%D8%AA%D8%B1-cdhk8pfhirwa</link>
                <description>سلام یکی از اساسی ترین نیاز های هر برنامه نویس موبایل کار با اینترنت هستش یعنی شما بتونید اطلاعات رو از اینترنت یا Api بگیرید و بر اساس اون کاری رو انجام بدید.اما توی فلاتر چطور میشه این کار رو انجام داد؟ توی این نوشته از صفر تا صد این کار رو باهم انجام میدیم.خوشبختانه فلاتر ابزار هایی رو برای دریافت اطلاعات از اینترنت فراهم کرده که یکی از اونها پکیج http هستش. برای این کار شما باید مراحل زیر رو قدم به قدم انجام بدید:  اضافه کردن پکیج http به پروژهایجاد یک رکوئست با کمک پکیج httpدریافت اطلاعات از اینترنت و تبدیل به نوعی که میخواید نمایش و استفاده از اطلاعاتاضافه کردن پکیج به پروژهپکیج http یک راه سادس برای دریافت اطلاعات از اینترنت. برای اضافه کردن این پکیج به پروژتون کافیه وارد اندروید استودیو بشید و داخل ترمینال خودتون دستور زیر رو وارد کنید: flutter pub add httpتوجه داشته باشید موقع اجرای دستور حتما از ابزار های رفع تحریم استفاده کنید. بعد از اجرای این دستور پکیج http به پروژه شما اضافه میشه. قدم بعد اینه که مجوز اینترنت رو به برنامتون اضافه کنید( برای اپ اندروید) برای این کار هم کافیه وارد فایل manifest بشید و کد زیر رو به تگ manifest اضافه کنید: &lt;uses-permission android:name=&amp;quotandroid.permission.INTERNET&amp;quot /&gt;
در نهایت هر جایی که خواستید از این پکیج استفاده کنید کافیه اونو import کنید تا دارت بتونه پکیج رو تشخیص بده. به عنوان مثال اگر یک فایل تحت عنوان main.dart داشته باشیم خط کد زیر رو به اول فایلمون اضافه میکنیم: import &#039;package:http/http.dart&#039; ;ایجاد رکوئستحالا که پکیج رو با موفقیت به پروژمون اضافه کردیم وقتشه تا یک درخواست ایجاد کنیم که اطلاعات رو از Api بگیریم. برای مثال من یک درخواست به سایت openWeather ارسال میکنم تا اطلاعات آب و هوا رو برای یک نقطه جغرافیایی خاص بگیرم.برای این کار من یک متد رو مینویسم تا هر موقع اون رو فراخوانی کردم یک درخواست به Api بزنه و اطلاعات رو به من بده، متدی که برای این کار مینویسیم به این شکله: Future getData() async {
  String url = https://api.openweathermap.org/data/2.5/weather?lat=86.56&amp;lon=135.02&#039;;
  Response response =await get(Uri.parse(url));
  String data = response.body; 
  return data;
} قطعه کد بالا یک متد async هستش (چون نمیخوایم برنامه متوقف بشه تا جواب درخواستمون بیاد ) به اسم getData که یک خروجی از نوع Future به ما میده، حالا این که  Future چیه و جه کاربردی داره رو میتونید از داکیومنت خود فلاتر بخونید.داخل بدنه این متد ما یک متغییر به اسم url داریم که آدرسی هستش که میخوایم به اون درخواست بزنیم و در خط بعد هم با استفاده از متد get (که از پکیج http میاد) درخواستمون رو ارسال میکنیم و در نهایت وقتی که جواب درخواستمون اومد اون رو داخل یک متغییر از نوع Response میریزیم که بتونیم ازش استفاده کنیم.متغییر response دارای یک سری ویژگی هایی هست که به درد ما میخوره به عنوان مثال response.statusCodeبا کمک این ویژگی شما میتونید کدی که سرور به شما برمیگردونه رو داشته باشید و چک کنید آیا درخواستتون درست انجام شده یا نه.به طور معمول اگر کد 200 رو به شما بده یعنی درخواستتون با موفقیت انجام شده و مشکلی ندارید.در نهایت متد getData یک متغییر String رو برمیگردونه که شما میتونید هرکاری خواستید باهاش انجام بدید :)امیدوارم که این نوشته به دردتون خورده باشه.شاد باشید :)</description>
                <category>Hamid Reza</category>
                <author>Hamid Reza</author>
                <pubDate>Sun, 26 Mar 2023 20:18:51 +0330</pubDate>
            </item>
            </channel>
</rss>