<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
    <channel>
        <title>نوشته های امیرحسین امانی</title>
        <link>https://virgool.io/feed/@m_77898233</link>
        <description>سلام به همه رفقا 
من قصد دارم تجربیات چند سال گذشتم رو  در خدمت شما بزارم

#با_هم_پیشرفت_کنیم</description>
        <language>fa</language>
        <pubDate>2026-04-14 10:54:21</pubDate>
        <image>
            <url>https://files.virgool.io/upload/users/3296037/avatar/Py7Tk0.jpg?height=120&amp;width=120</url>
            <title>امیرحسین امانی</title>
            <link>https://virgool.io/@m_77898233</link>
        </image>

                    <item>
                <title>عبور از تحریم های اینترنتی با سرویس شکن</title>
                <link>https://virgool.io/@m_77898233/%D8%B9%D8%A8%D9%88%D8%B1-%D8%A7%D8%B2-%D8%AA%D8%AD%D8%B1%DB%8C%D9%85-%D9%87%D8%A7%DB%8C-%D8%A7%DB%8C%D9%86%D8%AA%D8%B1%D9%86%D8%AA%DB%8C-%D8%A8%D8%A7-%D8%B3%D8%B1%D9%88%DB%8C%D8%B3-%D8%B4%DA%A9%D9%86-%D9%88%D8%A8-%D8%B3%D8%A7%DB%8C%D8%AA-%D8%B4%DA%A9%D9%86-cpa2uf0dyf4o</link>
                <description>تحریم شکنبا سرویس شکن (سایت شکن) می توانید همه سایتهایی که ایران را تحریم کردند باز کنید. این سایت ها حتی می توانند سایت های دانشگاهی، خدماتی و یا هر سایت دیگه ای باشند که دسترسی کاربرای ایرانی را مسدود کردند.چرا نیاز به سرویس هایی مثل “سرویس شکن” دارید که از تحریم های اینترنتی عبور کنند؟یکی از مشکلات اساسی برنامه نویسان و طراحان و در اصل تمامی کسانی که در حوزه IT در ایران فعالیت دارند ، بحث تحریم هاست. به عنوان مثال برنامه نویسان اندروید در ایران از نصب نرم افزار ها گرفته تا افزودن کتابخانه و بیلد کردن پروژه و غیره ، باید حتما از فیلتر شکن ، VPN و ابزار گذر از تحریم استفاده کنند. متاسفانه افراد سودجو از این فرصت سوء استفاده کرده و به صورت غیر قانونی اقدام به فروش ابزار گذر از تحریم می کنند که بعضا بعد از دریافت پول، خدماتی ارائه نمیدهند و پاسخگو نیز نیستند.شرکت های نرم‌افزاری مختلف مثل گوگل، اوراکل، لاراول، ادوب، اپل، جاوا و … مدت‌ زیادی است که با سیاست های خصمانه خودشان، ایران را در لیست تحریم خودشون قرار دادند و به شکل های مختلف اجازه دسترسی کاربران ایرانی را به سایت‌ها و خدماتشان نمی دهند.سایت شکن چیست و چکار می کند؟سایت شکن با همکاری دانشجویان دانشگاه تهران یک سرویس رایگان ایرانی را به صورت کاملا قانونی در اختیار شما عزیزان قرار می دهد که امکان دور زدن تحریم‌ها را به راحتی آب خوردن فراهم می کند.زمانی که وارد وبوبسایت شکن (به آدرس shecan.ir) شدید، با صفحه زیر مواجه می شوید که از منوی راهنما، میتوانید نحوه استفاده از این سرویس را در سیستم عامل های مختلف یاد بگیرید و با خیال راحت بعد از راه اندازی این سرویس بدون استفاده از فیلتر شکن های پولی طراحی و یا کدنویسی کنید.چگونه از سرویس شکن برای رفع محدودیت استفاده از محصولات تحریم شده استفاده کنیم؟برای استفاده از این سرویس فقط کافی است در هر شبکه‌ای، DNS رو روی این IP ها تنظیم کنید : 178.22.122.100 و 185.51.200.2ما در اینجا نحوه تنظیم این سرویس رو روی سیستم عامل ویندوز به شما آموزش می دهیم. در مورد نحوه استفاده در سایر سیستم عامل ها می توانید از راهنمای خود سایت شکن استفاده کنید.مراحل متصل شدن به تحریم شکن در ویندوز:برای تنظیم DNS های ارائه شده در سایت شکن در ویندوز، دکمه های ترکیبی windows+r رو بزنید و در پنجره Run دستور ncpa.cpl رو وارد کرده و Ok کنید.صفحه ای برای شما باز می شود که کانکشن های اتصال به اینترنت را روی سیتم شما نمایش می دهد. روی کانکشن مربوطه که توسط آن به اینترنت متصل شده اید، راست کلیک کرده و گزینه Properties رو انتخاب کنید.سپس گزینه Internet Protocol Version 4 را انتخاب کنید و روی Properties کلیک کنید. مانند شکل زیر گزینه Use the following DNS server address رو انتخاب کرده و از آنجا تنظیمات DNS رو انجام دهید.در آخر سیستم رو ریستارت کنید و حالشو ببرید. حالا می تونید به راحتی آپدیت نرم افزار ها رو انجام دهید و از سرویس ها و خدمات سایت های مختلف که کاربران ایرانی رو تحریم کردند، استفاده کنید.روش اول؛ برای اندروید ۹ و بالاتر:در تنظیمات  (Settings) به بخش Network &amp; Internet -&gt; Advanced -&gt; Private DNS بروید.در قسمت Private DNS provider hostname عبارت free.shecan.ir را وارد کنید و تنظیمات را ذخیره نمایید.روش دوم؛ برای iOS نسخه‌ی ۱۴ و بالاتر:با مرورگر اینترنت گوشی، این تنظیمات را دریافت و نصب کنید: https://shecan.ir/free.mobileconfigاز صفحه خانه آیفون خود، بخش تنظیمات (Settings) را باز کنید.داخل بخش General -&gt; VPN, DNS, &amp; device management -&gt; DNS بروید.یکی از دو گزینه‌ی مربوط به شکن (DNS over TLS یا DNS over HTTPS) را انتخاب نمایید.روش سوم؛ مختص وای‌فای (Wi-Fi):از صفحه خانه آیفون خود، بخش تنظیمات (Settings) را باز کنید.داخل بخش وای‌فای (Wi-Fi) بروید و سپس روی شبکه‌ی مورد نظر خود بزنید و وارد شوید.روی قسمت Configure DNS بزنید و سپس روی گزینه Manual (تنظیمات دستی) بزنید.اگر در آن قسمت گزینه‌ای موجود است روی علامت – بزنید و همه‌ی گزینه‌ها را پاک کنید.حال روی دکمه‌ی «+ Add Server» بزنید و نشانی 178.22.122.100 و 185.51.200.2 را وارد نمایید.روی گزینه Save در گوشه سمت راست بالا بزنیدلازم به ذکر است که نهاد های مرتبط این سایت رو تایید کردند و خدمات سایت شکن قانونی و رایگان می باشد.با سایت شکن می توانید همه سایتهایی که ایران را تحریم کردند باز کنید. این سایت ها حتی می توانند سایت های دانشگاهی، خدماتی و یا هر سایت دیگه ای باشند که دسترسی کاربرای ایرانی را مسدود کردند. حالا برای دور زدن این تحریم ها بگذر بهتون یه DNS می دهد که باید روی کانکشن اینترنت، کامپیوتر شخصی و یا هر دستگاهی مثل تلفن همراه، تبلت و .. تنظیم کنید تا بتوانید همه این سایتها را باز کنید. خیلی راحت بود نه ؟!قابلیت های سرویس شکن :کافی است IP اعلام شده در این صفحه را روی DNS اینترنت خودتون تنظیم کنید.سایت شکن زود به زود آپدیت می شود تا شما بتوانید از سایت های جدیدی که نمی گذارند شما در ایران از سایتشون استفاده کنید، بهره ببرید.با توجه به تکنولوژی هایی جدیدی که در  سرویس شکن در اختیارتان قرار می گیرد، می توانید سایت های مختلف را باز کنید.با ترافیک مصرفی بهینه شده ای می توانید توسط سرویس شکن از سایتهای مورد نظرتون استفاده کنید.و...</description>
                <category>امیرحسین امانی</category>
                <author>امیرحسین امانی</author>
                <pubDate>Sun, 25 Jan 2026 03:02:31 +0330</pubDate>
            </item>
                    <item>
                <title>جایگزین‌های متن‌باز Cursor IDE: مقایسه Kilo Code، Cline، Roo Code، Continue و دیگر ابزارها</title>
                <link>https://virgool.io/@m_77898233/%D8%AC%D8%A7%DB%8C%DA%AF%D8%B2%DB%8C%D9%86-%D9%87%D8%A7%DB%8C-%D9%85%D8%AA%D9%86-%D8%A8%D8%A7%D8%B2-cursor-ide-%D9%85%D9%82%D8%A7%DB%8C%D8%B3%D9%87-kilo-code-cline-roo-code-continue-%D9%88-%D8%AF%DB%8C%DA%AF%D8%B1-%D8%A7%D8%A8%D8%B2%D8%A7%D8%B1%D9%87%D8%A7-c6qctxjlxed3</link>
                <description>معرفیبا ظهور ابزارهای برنامه‌نویسی مبتنی بر هوش مصنوعی، محیط‌های توسعه نیز وارد مرحله‌ای تازه شده‌اند. Cursor IDE یکی از مشهورترین IDEهای AI‑Native است، اما توسعه‌دهندگانی که به متن‌باز بودن، کنترل کامل روی مدل‌ها، حریم خصوصی، یا امکان میزبانی‌ شخصی اهمیت می‌دهند، به دنبال جایگزین‌های آزادی هستند.در این نوشته، مجموعه‌ای از بهترین جایگزین‌های متن‌باز شامل Kilo Code، Cline، Roo Code، Continue و چند ابزار دیگر بررسی می‌شود.چرا باید به دنبال جایگزین Cursor بود؟هرچند Cursor تجربه‌ای یکپارچه و حرفه‌ای ارائه می‌دهد، اما محدودیت‌هایی نیز دارد:قفل‌شدگی در یک پلتفرم و مدل خاصارسال احتمالی کد پروژه به سرورهای خارجیهزینه‌های غیرشفافنداشتن امکان انتخاب آزاد مدل‌ها یا ارائه‌دهندگانمحدودیت در سفارشی‌سازی عامل‌ها (Agents)ابزارهای متن‌باز دقیقاً در همین نقاط قوت پیدا می‌کنند.مقایسه ابزارها۱ - Kilo Codeیک افزونه متن‌باز برای VS Code و IDEهای JetBrains که تمرکز آن بر شفافیت، پشتیبانی از صدها مدل است.ویژگی‌ها:پشتیبانی از بیش از ۴۰۰ مدل ابری و مدل‌های محلیعامل‌های خودکار برای تولید کد، رفع خطا و اجرای وظایفمتن‌باز و بدون قفل پلتفرمیامکان سفارشی‌سازی زیادپشتیبانی از Base URL سازگار با OpenAI: بله — کاملاً پشتیبانی می‌کند.۲ - Clineابزاری عامل‌محور که می‌تواند فایل‌ها را ویرایش کند، دستورات ترمینال را اجرا کند و در پروژه‌های واقعی مانند یک دستیار مستقل عمل کند (با تأیید کاربر).تصویر افزونه Cline برای VSCodeویژگی‌ها:استقلال بالا در اجرای وظایفتأیید انسانی برای امنیتپشتیبانی از APIهای مختلف: OpenAI، Gemini، Anthropic، مدل‌های محلی و…پشتیبانی از MCP برای افزودن ابزارهای جدیدسازگار با VS Code، JetBrains و CLIپشتیبانی از Base URL سازگار با OpenAI: بله —‌ کاملاً پشتیبانی می‌شود.۳- Roo Codeافزونه‌ای برای VS Code که روی چندعامله بودن، تحلیل معماری و اعمال تغییرات هم‌زمان روی چند فایل تمرکز دارد.ویژگی‌هادرک عمیق از کل پروژهعامل‌های متفاوت برای معماری، رفع خطا، تست و…اجرای تدریجی با تأیید کاربرسازگار با مدل‌های ابری و محلیپشتیبانی از Base URL سازگار با OpenAI: بله — به‌طور کامل قابل تنظیم است.۴- Continueابزاری بسیار منعطف که روی VS Code، JetBrains و CLI کار می‌کند و امکان ساخت عامل‌های سفارشی، زنجیره‌سازی وظایف و کار با مدل‌های محلی و ابری را می‌دهد.ویژگی‌ها:انعطاف بسیار بالاپشتیبانی از مدل‌های محلی (Ollama، LM Studio) و مدل‌های ابریامکان تعریف agentهای سفارشیحالت‌های Chat، Edit، Plan و Auto‑Completeکدباز با لایسنس Apache 2.0پشتیبانی از Base URL سازگار با OpenAI: بله ولی لیستی محدود دارد و فقط از ارائه دهنده‌های داخل لیست پشتیبانی می‌کند و بیشتر اولویت بر روی مدل های لوکال روی سیستم است۵- Tabbyدستیار کدنویسی خودمیزبان که برای تیم‌هایی که به حریم خصوصی اهمیت می‌دهند مناسب است.ویژگی‌ها:اجرای کامل روی سرور شخصیسازگار با VS Codeتمرکز بر تکمیل کد و چتپشتیبانی از Base URL سازگار با OpenAI: خیر — کاربرد ندارد؛ خود Tabby سرویس‌دهنده مدل است.جمع‌بندیاگر بخواهیم تجربه‌ای مشابه Cursor اما متن‌باز، قابل سفارشی‌سازی، با پشتیبانی از مدل‌های محلی و APIهای خودتان داشته باشید، گزینه‌های زیر پیشنهاد می‌شوند:Kilo Code برای تجربه‌ای شفاف و بدون هزینه پنهانCline برای تعامل عامل‌محور با قابلیت اجرای دستوراتRoo Code برای پروژه‌های بزرگ و معماری پیچیدهContinue برای بیشترین میزان کنترل و ساخت گردش‌کارهای مخصوص خودTabby برای کسانی که می‌خواهند همه‌چیز را شخصاً میزبانی کنندهمه این ابزارها می‌توانند جایگزین‌های قدرتمند و آزادی‌بخش برای Cursor باشند.</description>
                <category>امیرحسین امانی</category>
                <author>امیرحسین امانی</author>
                <pubDate>Wed, 10 Dec 2025 02:11:53 +0330</pubDate>
            </item>
                    <item>
                <title>مقایسه سه پلتفرم متن باز برای ورک‌فلوهای هوش مصنوعی</title>
                <link>https://virgool.io/@m_77898233/%D9%85%D9%82%D8%A7%DB%8C%D8%B3%D9%87-%D8%B3%D9%87-%D9%BE%D9%84%D8%AA%D9%81%D8%B1%D9%85-%D9%85%D8%AA%D9%86-%D8%A8%D8%A7%D8%B2-%D8%A8%D8%B1%D8%A7%DB%8C-%D9%88%D8%B1%DA%A9-%D9%81%D9%84%D9%88%D9%87%D8%A7%DB%8C-%D9%87%D9%88%D8%B4-%D9%85%D8%B5%D9%86%D9%88%D8%B9%DB%8C-n8n-activepieces-%D9%88-flowise-cpi9snx8brox</link>
                <description>در دنیای اتوماسیون و هوش مصنوعی، ابزارهایی پدید آمده‌اند که با رابط بصری (drag-and-drop / low-code) اجازه می‌دهند بدون نوشتن کد زیاد، جریان کاری خودکار بسازیم — از کارهای سادهٔ اداری تا ساخت “agent”‌های هوشمند مبتنی بر LLM. در این بین n8n، Activepieces و Flowise سه گزینه محبوب هستند. در ادامه این سه ابزار را با هم مقایسه می‌کنیم و توضیح می‌دهیم چگونه با استفاده از API سازگار با OpenAI — مثلاً ارائه‌شده توسط Kakoti — می‌توان آن‌ها را به مدل‌های LLM خصوصی یا جایگزین وصل کرد.n8n ( پلتفرم شماره اول )چی هستn8n یک پلتفرم اتوماسیون/ورک‌فلو است که اجازه می‌دهد با گره (node)‌هایی برای trigger، action، شرط، تبدیل داده و غیره یک گراف جریان کاری بسازید. این ابزار برای کسانی مناسب است که می‌خواهند کنترل دقیق روی جریان داده، APIها و منطق داشته باشند. n8n “source-available” است. یعنی کد منبع در دسترس است، اما لایسنس آن “Fair Code / Sustainable Use” است، نه یک لایسنس آزاد بی‌قید.مزایاانعطاف زیاد و تعداد بالای ادغام‌ها، n8n صدها سرویس، API و اپلیکیشن را پشتیبانی می‌کند و اگر نیاز شدید به یک سیستم خاص دارید، می‌توانید گره سفارشی بنویسید یا با HTTP nodes هر API دلخواهی را فراخوانی کنید.قابلیت نوشتن منطق سفارشی، اگر لازم باشد داده‌ها را پردازش، فیلتر یا تبدیل کنید، با کد (مثلاً JavaScript / HTTP request) این کار ساده است.مناسب برای ترکیب “اتوماسیون سنتی” و هوش مصنوعی، اگر پروژه شما شامل دیتابیس، APIهای سنتی، ارسال ایمیل، وبهوک و گاهی LLM باشد، n8n می‌تواند هستهٔ مرکزی آن باشد.امکان self-hosting و کنترل کامل داده‌ها، می‌توانید n8n را روی زیرساخت خودتان اجرا کنید، که برای حفظ حریم خصوصی یا رعایت الزامات شرکتی مهم است.نکاتی که باید مد نظر داشتیچیدگی رابط در پروژه‌های بزرگ، وقتی پروژه رشد کند و گراف تعداد زیادی node داشته باشد، مدیریت و نگهداری آن می‌تواند دشوار شود.برای پروژه‌های خالص هوش مصنوعی چندان “plug-and-play” نیست، اگر هدف اصلی شما LLM و هوش مصنوعی است، n8n ممکن است نیاز به تنظیمات دستی، API Key، endpoint سفارشی و ساخت wrapper داشته باشد.محدودیت در لایسنس برای برخی کاربردها، چون لایسنس “source-available” است، اگر بخواهید آن را به‌عنوان سرویس SaaS ارائه دهید یا کاملاً آزاد پخش کنید، باید لایسنس و شرایط استفاده را با دقت بررسی کنید.مناسب برای چه سناریوهایی استاگر لازم دارید چند سیستم مختلف مثل دیتابیس، API، سرویس‌های خارجی، ایمیل/پیامک و گاهی LLM، را بهم وصل کنیداگر می‌خواهید منطق پیچیده، تبدیل داده، شرط و پردازش داشته باشیددر صورتی که بخواهید LLM خصوصی یا endpoint سفارشی را استفاده کنید، می‌توانید با HTTP node یا گره مرتبط به API، baseURL را روی آن تنظیم کنید تا درخواست‌ها به آن LLM برود — مشروط به اینکه API مورد نظر سازگار با OpenAI باشد.Activepieces ( پلتفرم شماره دوم )Activepieces یک پلتفرم اتوماسیون/low-code با کاربری آسان است، با رابط بصری step-based (نه گراف پیچیده) و مجموعه‌ای از “pieces” آماده برای trigger و action. Activepieces کاملاً متن‌باز با لایسنس MIT است. ادغام با سرویس‌ها و APIها به‌سادگی امکان‌پذیر است — و در عین حال می‌توان pieces سفارشی نوشت (با TypeScript/npm) برای کارهای خاص.Activepieces به‌طور خاص برای ترکیب automations ساده و هوش مصنوعی طراحی شده است — یعنی اینکه استفاده از LLM و سرویس‌های AI در آن “اولویت” دارد.مزایاکاربری ساده و مناسب برای غیر-توسعه‌دهنده‌ها، رابط ساده‌تر و کمتر تکنیکال نسبت به گراف پیچیده باعث می‌شود تیم‌های غیر فنی (مثل تیم مارکتینگ، عملیات، منابع انسانی) هم بتوانند گردش‌کار بسازند.ادغام آسان با سرویس‌های AI / LLM مثل OpenAI و Anthropicپشتیبانی از مدل های ابری مشهورمتن‌باز با لایسنس MIT، آزادی بیشتر، امکان self-host کردن، تغییر، توزیع یا سفارشی‌سازی بدون دغدغهٔ لایسنس سفت‌سخت.تعادلی خوب بین “بی‌کد / کم‌کد” و امکان توسعه، اگر piece آماده پیدا نکردید، می‌توانید piece سفارشی به‌صورت TypeScript بنویسید و قابلیت‌های بیشتری اضافه کنید.محدودیت‌هاعمق و گستردگی ادغام‌ها کمتر از n8n ممکن است باشد، برای سرویس‌های خیلی پیچیده یا niche احتمال دارد pieces آماده‌ای وجود نداشته باشد، یا نیاز به نوشتن دستی باشد.محدودیت در منطق پیچیده یا Workflowهای بزرگ‌تر، اگر جریان کاری شما پیچیدگی زیاد داشته باشد، branching، شرط‌های پیچیده یا حجم زیاد داده دارد، ممکن است Activepieces به اندازه n8n انعطاف نداشته باشد.متاسفانه به صورت مستقیم Base Url غیر از OpenAI را پشتیبانی نمی‌کند و نیاز به راه اندازی پروکسی استمناسب برای چه سناریوهایی استاگر تیم فنی کم دارد و می‌خواهید افراد غیر توسعه‌دهنده هم بتوانند گردش‌کار بسازنداگر نیاز به راه‌اندازی سریع دارید،automations ساده و AI بدون پیچیدگی زیاداگر حفظ آزادی (لایسنس MIT) و امکان self-host و سفارشی‌سازی برایتان مهم استاگر هدف اصلی استفاده از LLM و سرویس AI است و نه ادغام پیچیده با APIهای متعددFlowise ( پلتفرم شماره سوم )بزار بصری و open-source است که مخصوص “کار با LLM و ساخت اپلیکیشن‌های هوش مصنوعی” طراحی شده، مانند ساخت چت‌بات با حافظه، سیستم‌های RAG (بازیابی + تولید)، ربات‌های چند عاملی، agents هوشمند و غیره. رابط drag-and-drop دارد و برای کسانی که می‌خواهند بدون کدنویسی زیاد، اپلیکیشن LLM بسازند، عالی است.Flowise روی چارچوب‌هایی مانند LangChain یا سیستم‌های مشابه بنا شده، و امکاناتی مثل حافظه مکالمه، پایگاه دانش، vector-store، RAG، tool-calling، multi-agent orchestration و deployment آسان دارد.مزایامناسب برای کاربردهای AI-محور و LLM، اگر می‌خواهید چت‌بات، دستیار مستندات، RAG سیستم، یا agent با هوش بسازید، Flowise به‌طور خاص برای این کار طراحی شده است.شروع سریع بدون کدنویسی، drag-and-drop، قالب‌های آماده، گره‌های Chat/LLM ابزار-ها و امکان تنظیم baseURL/endpoint سازگار با OpenAI به شما اجازه می‌دهد در چند دقیقه شروع کنید.پشتیبانی از مدل‌های محلی / خصوصی — Flowise امکان اتصال به مدل‌هایی با API سازگار با OpenAI (مثل local-LLM یا سرویس proxy) را دارد. مثلاً می‌توانید از سیستم‌هایی استفاده کنید که REST endpoint با ساختار OpenAI ارائه می‌دهندمناسب برای RAG، حافظه، ابزار‌خوانی و multi-agent، اگر پروژه شما نیاز به پایگاه دانش، جستجوی مستندات، agents با حافظه یا تعامل با چند ابزار دارد، Flowise گزینه قدرتمندی است.محدودیت‌هاادغام با سرویس‌های متنوع بیرونی ممکن است محدود باشد، برخلاف n8n که برای چندصد سرویس آماده است، Flowise تمرکز بر LLM و ابزارهای AI دارد؛ اگر بخواهید به CRM، دیتابیس، سرویس SaaS پیچیده وصل شوید، ممکن است محدودیت داشته باشد.کمتر مناسب برای اتوماسیون اداری/تجاری سنتی، اگر هدف شما صرفاً اتوماسیون وظایف اداری یا داده‌ای است، Flowise ممکن است خیلی سنگین یا پیچیده باشد.متاسفانه به صورت مستقیم Base Url غیر از OpenAI را پشتیبانی نمی‌کند و نیاز به راه اندازی پروکسی استمناسب برای چه سناریوهایی است:ساخت چت‌بات، دستیار مستندات، agent هوشمند، سیستم RAG — با کمترین کدنویسیپروژه‌هایی که نیاز به حافظه، یادآوری، agents مستقل، tool-calling یا ترکیب LLM با پایگاه دانش دارند</description>
                <category>امیرحسین امانی</category>
                <author>امیرحسین امانی</author>
                <pubDate>Wed, 10 Dec 2025 02:02:51 +0330</pubDate>
            </item>
                    <item>
                <title>پیام هشدار پدافند غیر عامل Cell Broadcast چیست</title>
                <link>https://virgool.io/@m_77898233/%D9%BE%DB%8C%D8%A7%D9%85-%D9%87%D8%B4%D8%AF%D8%A7%D8%B1-%D9%BE%D8%AF%D8%A7%D9%81%D9%86%D8%AF-%D8%BA%DB%8C%D8%B1-%D8%B9%D8%A7%D9%85%D9%84-cell-broadcast-%DA%86%DB%8C%D8%B3%D8%AA-icvgw8shfdtc</link>
                <description>روز جمعه ۲۳ آبان‌ماه از ساعت ۱۰ تا ۱۲سامانه Cell Broadcast روشی است برای ارسال سریع پیام‌های هشدار به همه تلفن‌های همراه حاضر در یک یا چند سلول (پوشش آنتن) بدون نیاز به ارسال پیامک جداگانه به هر شماره. این روش برای هشدارهای فوری (زلزله، سیل، حوادث عظیم، هشدار ملی، آزمایش‌ها) طراحی شده است و در دنیا تحت استانداردهایی مانند ETWS/CMAS/WEA پیاده‌سازی شده است. اجزای اصلی سامانه و جریان پیام (مرحله‌به‌مرحله)مرجع انتشار (Originator / Authority)نهاد مجاز (مثلاً سازمان پدافند غیرعامل، مدیریت بحران، سازمان هواشناسی، یا دیگر مراجع رسمی) پیام هشدار را آماده می‌کند و درخواست ارسال را ثبت می‌کند. (در ایران این‌گونه رزمایش‌ها از طرف پدافند غیرعامل اعلام می‌شود).سیستم مدیریت هشدار (Alert Management System)پیام به یک سامانهٔ مدیریت هشدار فرستاده می‌شود که متن، سطح هشدار، محدودهٔ جغرافیایی هدف، زمان‌بندی و پارامترهای فنی را تعیین می‌کند.مرکز پخش پیامک سلولی — Cell Broadcast Center (CBC)CBC سامانه‌ای در شبکهٔ اپراتور است که پیام را می‌گیرد و آن را به سلول‌های مشخص ارسال می‌کند. CBC با تجهیزات اپراتور (BSC/MSC/eNodeB/gNodeB و BTS) تعامل می‌کند تا پیام را در سلول‌های هدف پخش کند.  بی‌سیم/ایستگاه پایه (BTS / eNodeB / gNodeB)هر ایستگاه پایه پیام را «بصورت یک پیام پخشی» (broadcast) روی کانال Cell Broadcast منتشر می‌کند. این پیام برای همه گوشی‌هایی که در شعاع آن ایستگاه قرار دارند قابل دریافت است.دستگاه کاربر (گوشی همراه)گوشی‌هایی که قابلیت دریافت Cell Broadcast را فعال و پشتیبانی می‌کنند، پیام را فوراً نمایش می‌دهند—معمولاً با صدای هشدار ویژه و نمایش پیام در بالای صفحه یا پنجرهٔ جدا. این پیام‌ها مستقل از پیامک‌های معمولی (SMS) هستند.بررسی مراحل در یک نگاه ویژگی‌های فنی مهمارسال بر اساس سلول، نه شماره: پیام به سل‌های آنتن ارسال می‌شود؛ بنابراین همهٔ گوشی‌ها در آن منطقه (بدون نیاز به داشتن شمارهٔ خاص) پیام را دریافت می‌کنند. تحمل بار شبکه: Cell Broadcast در شرایط شلوغی شبکه عملکرد بهتری نسبت به SMS انبوه دارد چون بار مربوط به هر کاربر ایجاد نمی‌شود. طول و فرمت پیام: معمولاً پیام‌ها کوتاه و ساخت‌یافته‌اند؛ سیستم‌های استاندارد (3GPP/ETWS/CMAS) از ساختارهای مشخصی برای دسته‌بندی پیام استفاده می‌کنند (مثلاً نوع هشدار، کد، متن). (برای جزئیات پروتکل باید به مستندات 3GPP مراجعه شود). زبان و چندزبانی: اپراتور/مرجع می‌تواند متن را به زبان‌های مختلف ارسال کند، ولی گوشی گیرنده باید آن زبان را پشتیبانی کند یا پیام در قالب متن ساده نشان داده شود.عدم نیاز به ثبت نام: معمولاً کاربران نیاز به ثبت‌نام ندارند؛ پیام‌ها را دریافت می‌کنند مگر اینکه در گوشی‌شان قابلیت را غیرفعال کرده باشند.مراحل عملیاتی در ایران (مثال از رزمایش اخیر)سازمان پدافند غیرعامل پیام آزمایشی را برای اپراتور (مثلاً همراه اول در مرحلهٔ نخست) ارسال کرد. اپراتور پیام را از طریق CBC به سلول‌های منتخب پخش کرد و برخی مشترکان پیام را دریافت کردند. این کار برای «آزمون پوشش، سرعت و دقت» انجام شد. نتایج فنی در حال تحلیل است و دوره‌های بعدی گسترده‌تر خواهد بود.مثال‌های واقعی از عملکرد Cell Broadcast در کشور های دیگر ژاپن - هشدار زلزله: ژاپن یکی از پیشروان استفاده از Cell Broadcast برای هشدارهای زلزله است. این سیستم به محض تشخیص زلزله، پیام‌هایی را به سرعت به تمام دستگاه‌های موبایل در مناطق متاثر ارسال می‌کند، تا مردم بتوانند به موقع اقدام کنند.کره جنوبی - هشدارهای COVID-19: در دوران همه‌گیری COVID-19، دولت کره جنوبی از Cell Broadcast برای ارسال هشدارهای بهداشتی و اطلاعات مربوط به مناطق قرنطینه استفاده کرد. این اقدام به کنترل شیوع ویروس کمک شایانی کرد.هلند - هشدارهای آب و هوا: هلند از این تکنولوژی برای ارسال هشدارهای آب و هوا و اعلام خطرات طوفان و سیلاب استفاده می‌کند. این پیام‌ها به مردم کمک می‌کنند تا برای شرایط بحرانی آماده شوند.نمونه ای پیام های ارسالی مزایای Cell Broadcastسرعت بالا: پیام‌ها به سرعت به تمام دستگاه‌های موجود در محدوده ارسال می‌شوند.پوشش گسترده: تمام دستگاه‌های موبایل در محدوده سلول‌ها پیام را دریافت می‌کنند، حتی اگر شبکه مشغول باشد.قابلیت هدف‌گذاری جغرافیایی: پیام‌ها می‌توانند به مناطق خاصی ارسال شوند بدون نیاز به دانستن شماره تلفن کاربران.نتیجه‌گیریسامانهٔ Cell Broadcast یکی از کارآمدترین روش‌ها برای ارسال پیام‌های گسترده در شرایط اضطراری و اطلاع‌رسانی‌های حیاتی است. این فناوری با قابلیت انتقال سریع پیام به جمعیت بسیار زیاد، نقشی اساسی در افزایش سطح ایمنی و آگاهی مردم دارد. تجربهٔ کشورهای مختلف نیز نشان می‌دهد که استفاده از این سامانه در موقعیت‌های بحرانی می‌تواند به کاهش خسارات و حتی نجات جان افراد کمک کند.</description>
                <category>امیرحسین امانی</category>
                <author>امیرحسین امانی</author>
                <pubDate>Tue, 18 Nov 2025 13:38:49 +0330</pubDate>
            </item>
                    <item>
                <title>چالش‌ها و فرصت‌های فریلنسینگ در ایران امروز</title>
                <link>https://virgool.io/@m_77898233/%DA%86%D8%A7%D9%84%D8%B4-%D9%87%D8%A7-%D9%88-%D9%81%D8%B1%D8%B5%D8%AA-%D9%87%D8%A7%DB%8C-%D9%81%D8%B1%DB%8C%D9%84%D9%86%D8%B3%DB%8C%D9%86%DA%AF-%D8%AF%D8%B1-%D8%A7%DB%8C%D8%B1%D8%A7%D9%86-%D8%A7%D9%85%D8%B1%D9%88%D8%B2-oibfch0dkqe4</link>
                <description>فریلنسینگ در ایران این روزا حسابی سر زبونا افتاده!فریلنسینگ یه مدل کاریه که بهت اجازه می‌ده رئیس خودت باشی، از خونه یا هر جای دیگه کار کنی و ساعت‌های کاریت رو خودت تعیین کنی. فرقی نمی‌کنه برنامه‌نویس باشی، تولید محتوا کنی یا طراح گرافیک، فریلنسینگ در ایران جای خودشو تو دل خیلی‌ها باز کرده و فرصت‌های جذابی رو برای کسب درآمد و رشد حرفه‌ای فراهم می‌کنه. اما مثل هر کار دیگه‌ای، این سبک کاری هم یه سری چالش و فرصت داره که اگه بخوای تو این مسیر موفق شی، باید حسابی باهاشون آشنا باشی. تو این پست می‌خوایم درباره فریلنسینگ تو ایران صحبت داشته باشیم؛ از مزیت‌هاش بگیم و چالش‌هایی که داره رو بررسی کنیم. بزن بریم!فریلنسینگ در ایران یعنی چی؟فریلنسینگ یعنی تو به‌جای اینکه کارمند یه شرکت باشی و هر روز صبح ساعت ۸ بری سر کار، پروژه‌ای کار می‌کنی. یعنی یه کارفرما یا مشتری بهت یه پروژه می‌سپره، تو انجامش می‌دی، پولتو می‌گیری و می‌ری سراغ پروژه بعدی. تو ایران، این مدل کار کردن به‌خصوص با رشد اینترنت و پلتفرم‌های آنلاین حسابی رواج پیدا کرده و از طراحی سایت گرفته تا تولید محتوا، ترجمه، و حتی کارهای تخصصی مثل مشاوره دیجیتال مارکتینگ، همه‌جوره می‌تونی تو این فضا فعالیت کنی.حالا چرا این‌قدر فریلنسینگ در ایران طرفدار پیدا کرده؟ چون خیلیا دنبال آزادی عملن، دوست دارن خودشون برای خودشون تصمیم بگیرن و از اون محیط کارمندی سنتی فاصله بگیرن.البته که این وسط یه سری فرصت و چالش هم هست که لازمه دقیق‌تر بررسی‌شون کنیم.تفاوت کارمندی با فریلنسریفرصت‌های فریلنسینگ در ایران۱. آزادی عمل و انعطاف‌پذیرییکی از بزرگ‌ترین مزیت‌های فریلنسینگ در ایران، آزادی عمل تو انتخاب کار و زمان‌بندیته. تو می‌تونی خودت تصمیم بگیری چه پروژه‌ای رو قبول کنی، کی و کجا کار کنی و تحت چه شرایطی همکاری داشته باشی. این انعطاف‌پذیری بهت اجازه می‌ده بین کار و زندگی شخصيت تعادل بهتری برقرار کنی و نسبت به شکل سنتی فضای کار، از انعطاف‌پذیری به‌مراتب بیشتری برخوردار باشی.۲. درآمد متنوع و حتی دلاری!اگه بتونی یکم خودتو تو بازار بین‌المللی جا بندازی، فریلنسینگ در ایران می‌تونه برات درآمد دلاری به همراه داشته باشه. این‌روزا سایت‌های خارجی زیادی هستن که بهت این امکان رو می‌دن که با مشتری‌های خارجی کار کنی و پول خوبی به جیب بزنی. از طرف دیگه، تو بازار داخلی هم اگه مهارت و ارتباطات خوبی داشته باشی، می‌تونی کلی پروژه‌های خفن بگیری و حسابی درآمدت رو افزایش بدی. تازه، چون پروژه‌ای کار می‌کنی، می‌تونی همزمان با چند تا کارفرما درحال کار باشی و سبد درآمدیت رو متنوع‌تر کنی.۳. فرصت رشد و یادگیریفریلنسینگ در ایران بهت این شانس رو می‌ده که مدام مهارت‌های جدید یاد بگیری. مثلاً اگه تولیدکننده محتوا هستی، می‌تونی به‌مرور مهارت‌های جانبی مثل طراحی گرافیک، سئو یا مدیریت شبکه‌های اجتماعی رو یاد بگیری و خدمات متنوع‌تری ارائه بدی. این رشد پیوسته نه‌تنها بهت کمک می‌کنه تو بازار رقابتی متمایز بشی، بلکه باعث می‌شه همیشه یه قدم جلوتر از بقیه باشی و فرصت‌های شغلی بهتری به دست بیاری.۴. دسترسی آسان به پروژه‌ها از طریق پلتفرم‌های آنلاینحالا که اینترنت همه‌جا در دسترسه، پلتفرم‌های آنلاین ایرانی مثل جابینجا پیدا کردن پروژه رو حسابی راحت کردن. مثلاً جابینجا یه بخش اختصاصی برای فیلتر کردن آگهی‌های دورکاری و فریلنسینگ داره که می‌تونی مستقیم با کارفرما ارتباط بگیری. این پلتفرم‌ها فرصت‌های متنوعی رو در اختیارت می‌ذارن تا بتونی پروژه‌ای که با مهارت‌ها و علاقه‌ت جور درمیاد رو به‌راحتی پیدا و شروع به کار کنی.نمونه هایی از مشاغل محبوب فریلنسرهاچالش‌های فریلنسینگ در ایران۱. بی‌ثباتی درآمدییکی از چالش‌های اصلی فریلنسینگ در ایران، نبود درآمد ثابت و مطمئنه. یه ماه ممکنه پروژه‌های زیادی داشته باشی و درآمدت حسابی بالا بره، ولی ماه بعد شاید هیچ پروژه‌ای گیرت نیاد. این نوسان درآمدی، به‌ویژه برای کسایی که تازه وارد این حوزه شدن و هنوز مشتری ثابت ندارن، می‌تونه خیلی استرس‌زا باشه. برای مدیریت این مشکل، باید مهارت مدیریت مالی رو یاد بگیری و همیشه یه پس‌انداز برای روزهای کم‌کار کنار بذاری.۲. رقابت شدیدبازار فریلنسینگ در ایران به شدت رقابتیه و با افزایش تعداد فریلنسرها، متمایز شدن از بقیه یه ضرورت شده. برای جلب توجه کارفرماها، باید نمونه‌کارهای قوی و حرفه‌ای داشته باشی و برند شخصی خودتو بسازی. مثلاً اگه تو حوزه تولید محتوا کار می‌کنی، حضور فعال تو شبکه‌های اجتماعی، داشتن یه وبلاگ یا وب‌سایت شخصی و به‌روز نگه داشتن مهارت‌هات می‌تونه تو رو از رقبا جلو بندازه و فرصت‌های بهتری برات خلق کنه.۳. مشکلات پرداختیکی از مشکلات اصلی فریلنسینگ در ایران، مسائل مربوط به پرداخته. تو پروژه‌های داخلی، گاهی کارفرماها دیر پرداخت می‌کنن یا حتی بدقولی می‌کنن که این می‌تونه حسابی رو اعصابت بره. تو پروژه‌های بین‌المللی هم که به‌خاطر تحریم‌ها، استفاده از سیستم‌های پرداخت مثل PayPal عملاً غیرممکنه و کلی دردسر داره. هرچند هستن سرویس‌هایی که تا حدی این مشکلات رو برطرف کردن، اما همچنان باید با دقت و برنامه‌ریزی عمل کنی تا از مشکلات مالی در امان بمونی.۴. مدیریت زمان و پروژهفریلنسینگ در ایران یعنی تو همزمان نقش رئیس، حسابدار و مدیر پروژه رو بازی می‌کنی! باید خودت پروژه‌ها رو برنامه‌ریزی کنی، زمان‌بندی‌ها رو تنظیم کنی و مطمئن شی همه‌چیز به موقع تحویل داده می‌شه. اگه تو مدیریت زمان کم بیاری، ممکنه کارها روی هم تلنبار بشن و به دردسر بیفتی. استفاده از ابزارهایی مثل Trello یا Notion می‌تونه بهت کمک کنه تا کارها رو منظم نگه داری، اولویت‌بندی کنی و با خیال راحت پروژه‌ها رو پیش ببری.چطور تو فریلنسینگ در ایران به موفقیت برسیم؟۱. مهارت‌هات رو ارتقا بدهبرای اینکه تو فریلنسینگ در ایران حرفی برای گفتن داشته باشی، باید مهارتت رو مدام به‌روز کنی. دوره‌های آنلاین، کتاب، وبینار و حتی یوتیوب پر از منابع آموزشیه که می‌تونی ازشون استفاده کنی. مثلاً اگه طراح گرافیک هستی، یادگیری نرم‌افزارهای جدید مثل Figma می‌تونه حسابی به کارت بیاد.۲. برند شخصی بسازتو فریلنسینگ ایران، برندینگ شخصی تو موفقیتت نقش کلیدی ایفا می‌کنه. تو این فضا، باید خودتو به‌عنوان یه فرد حرفه‌ای و قابل اعتماد معرفی کنی. یه وب‌سایت یا وبلاگ شخصی راه‌اندازی کن، تو شبکه‌های اجتماعی مثل لینکدین و اینستاگرام فعال باش و نمونه‌کارهای باکیفیتت رو به نمایش بذار. این کار باعث می‌شه کارفرماها راحت‌تر بهت اعتماد کنن و پروژه‌های بهتری به سمتت بیاد.۳. از پلتفرم‌های معتبر استفاده کنبرای پیدا کردن پروژه، پلتفرم‌های معتبری مثل جابینجا می‌تونن خیلی بهت کمک کنن. این سایت‌ها نه‌تنها پروژه‌های متنوعی دارن، بلکه بهت امکان می‌دن با کارفرماهای معتبر ارتباط بگیری و از بابت پرداختی نگرانی کمتری داشته باشی. کافیه تو بخش فرصت‌های شغلی دورکاری این سایت‌ها یه گشتی بزنی و پروژه مناسب خودتو پیدا کنی. همچنین سایت جابینجا یه بخش وبلاگ جابینجا هم داره که توش کلی مقاله باحال راجع به مسیر شغلی و نکات حرفه‌ای می‌شه پیدا کرد.۴. شبکه‌سازی رو جدی بگیرشبکه‌سازی در فریلنسینگ ایران مثل یه سرمایه‌گذاری بلندمدته. با فریلنسرهای دیگه تو انجمن‌های آنلاین، گروه‌های تلگرامی یا رویدادهای حضوری مثل همایش‌های تخصصی ارتباط برقرار کن. گاهی یه دوست یا همکار فریلنسر می‌تونه تو رو به پروژه‌ای وصل کنه که نه‌تنها درآمد خوبی داره، بلکه می‌تونه مسیر حرفه‌ایت رو کاملاً تغییر بده.نکته آخرفریلنسینگ در ایران یه مسیر پر از فرصت و چالشه. اگه عاشق آزادی و استقلال تو کار هستی، این مسیر می‌تونه برات خیلی جذاب باشه. فقط باید صبور باشی، مهارتاتو تقویت کنی و از ابزارها و پلتفرم‌های درست استفاده کنی. علی‌رغم سختی‌های این مسیر، مطمئن باش که با پشتکار و برنامه‌ریزی، می‌تونی تو این مسیر به موفقیت‌های بزرگی برسی.</description>
                <category>امیرحسین امانی</category>
                <author>امیرحسین امانی</author>
                <pubDate>Mon, 08 Sep 2025 21:47:59 +0330</pubDate>
            </item>
                    <item>
                <title>تغییرات و بروزرسانی‌های PHP 8.2 (بسیار حیاتی)</title>
                <link>https://virgool.io/@m_77898233/%D8%AA%D8%BA%DB%8C%DB%8C%D8%B1%D8%A7%D8%AA-%D9%88-%D8%A8%D8%B1%D9%88%D8%B2%D8%B1%D8%B3%D8%A7%D9%86%DB%8C-%D9%87%D8%A7%DB%8C-php-82-neqv1tf8g3rs</link>
                <description>اصلی‌ترین هدف انتشار جدیدترین نسخه php 8.2 آسان‌تر نمودن کار توسعه‌دهندگان وب می‌باشد. PHP 8.2 بر اساس ورژن‌های PHP 8.0 و PHP 8.1 ساخته شده است. در واقع بسیاری از تغییرات ایجاد شده در php 8.2، نه تنها فرآیند برنامه نویسی را ساده‌تر بلکه برخی از توابع قدیمی را نیز منسوخ نموده است. معمولا توصیه می‌کنیم برای به حداکثر رساندن و افزایش امنیت سایت و سازگاری و عادت به نحو جدید، به ورژن پی‌اچ‌پی ۸.۲ ارتقا دهید. چرا باید نسخه‌ی پی‌اچ‌پی خود را به نسخه جدید php 8.2 بروزرسانی کرد؟نسخه‌ی php فعلی و مورد استفاده بر روی وبسایت از اهمیت بسیاری برخوردار است. در واقع، قدیمی یا بروز بودن نسخه‌ی پی‌اچ‌پی بصورت مستقیم بر روی عملکرد وبسایت موثر است که معمولا اغلب دولوپرها از عملکردهای بد و نقاط ضعف ورژن‌های بسیاری قدیمی و منسوخ شده اطلاع دارند و به دنبال رفع آن هستند. در ادامه به بررسی دلایل اصلی بروزرسانی از php 8 به php 8.2 می‌پردازیم. 1- افزایش سرعت سایتاز آنجایی که زبان برنامه‌نویسی php زبان سمت سرور است، تاثیر بسزا و مستقیمی بر روی سرعت و عملکرد سایت دارد.  نسخه‌های قدیمی پی‌اچ‌پی مانند php 7 تا php 7.4 و همچنین نسخه‌های قدیمی‌تر پی‌اچ‌پی باعث کاهش سرعت سایت می‌شوند. جالب است بدانید، طبق بررسی‌های انجام‌شده، نصب نسخه‌های قدیمی پی‌اچ‌پی بر روی سایت وردپرسی، سرعت سایت را بین ۱۰ تا ۴۰۰ درصد (بسته به میزان قدیمی و منسوخ بودن آن) کاهش می‌دهد.2- بهینه‌سازی سئو سایتهر چه در بروز کردن و بهینه‌سازی سرور و زبان برنامه‌نویسی سمت سرور منظم باشیم، سایت خود را از دریافت رتبه‌ی پایین در گوگل و سایر موتورهای جستجوگر نجات داده‌اید.  عدم نصب جدیدترین نسخه php بر روی سایت، اختلالاتی را در سایت به وجود آورده که در نتیجه سئو‌ی سایت ما را نیز به خطر می‌اندازد. پس با انتشار php 8.2  بهتر است هر چه سریع‌تر نسبت به بروزرسانی نسخه‌ی پی‌اچ‌پی سایت خود اقدام نمایید. 3- برطرف کردن باگ‌های نسخه‌ی قبلی پی‌اچ‌پیبه این نکته توجه داشته باشید، با انتشار هر نسخه‌ی جدید PHP، یک سری بروزرسانی‌ها و تغییرات جزئی یا اساسی بر روی آن نسخه انجام می‌شود تا در این صورت، مشکلات و باگ‌های نسخه‌ی قبلی برطرف شود. در واقع، توسعه‌دهندگان زبان برنامه نویسی پی‌اچ‌پی، با بررسی نسخه‌ی اخیرا منتشر شده، عملکرد آن را بر روی وبسایت‌ها مورد بررسی و ارزیابی قرار داده و سعی بر برطرف کردن نقاط ضعف آن می‌کنند.4- افزایش امنیت سایتحفظ و افزایش امنیت سایت بستگی زیادی به نسخه‌ی پی‌اچ‌پی مورد استفاده دارد. هر چه جدیدترین نسخه‌ی PHP را بر روی سایت خود نصب کنید، شاهد افزایش امنیت سایت خود خواهید بود. طبق روندی که طی سال‌های اخیر، در انتشار نسخه‌‌های پی‌اچ‌پی شاهد بودیم، پس از انتشار هر نسخه، پشتیبانی امنیتی بابت حفظ امنیت نسخه‌ی منتشر شده از طرف توسعه دهندگان زبان پی‌اچ‌پی ارائه می‌شود. همچنین یک سری فایل‌های پچ (Patch) امنیتی در طی دوره‌ی آن نسخه از PHP به صورت مجزا منتشر می‌شود که لازم است نسبت به نصب آن‌ها اقدام کرد. 5- جلوگیری از هک شدن سایتیکی از مهم‌ترین نکات در رعایت بروزرسانی منظم نسخه‌ی پی‌اچ‌پی، جلوگیری از هر گونه اقدامات خرابکارانه افراد بر روی سایت ما و حفظ و نگهداری آن از هک شدن توسط هکرهاست. هکرها طی بررسی‌های خود با این حفره‌های امنیتی آشنا بوده و از طریق همین حفره‌ها اقدام به هک کردن وبسایت و سرقت اطلاعات افراد می‌کنند.توجه داشته باشید که امنیت یک پروسه مداوم و همیشگی است. پس اگر قصد حفظ امنیت و جلوگیری از نفوذ هکرها به سایتتان را دارید؛ بهتر است که php 8 را به php 8.2 ارتقا دهید. 6- پشتیبانی از اسکریپت‌ها و پلاگین‌های بروزاکثر وبسایت‌ها برای عملکرد بهتر و چندمنظوره نیاز به اجرای اسکریپت یا نصب پلاگین‌های متعددی دارند. در صورتی که از سایت وردپرسی برای کسب و کار آنلاین خود استفاده می‌کنید، حتما تاکنون پلاگین‌هایی رو بر روی وردپرس خود نصب کرده‌اید. برای اجرای بهتر اسکریپت‌های مورد نظر و پلاگین‌های نصب شده بخصوص پلاگین‌های بروز بر روی سیستم مدیریت محتوا (CMS) خود، لازم است از نسخه‌ی اخیر PHP 8.2 استفاده کرده تا این پلاگین‌ها و اسکریپت‌ها بهترین عملکرد را بر روی سایت داشته باشند.کلاس‌های فقط قابل خواندن – Readonly classesکلاس Read-only که در نسخه ۸.۱ معرفی شد، در نسخه ۸.۲ بروز و استفاده آن ساده‌تر شد. شکل استفاده از کلاس readonly در نسخه پی‌اچ‌پی قبل از ۸.۲class BlogData
{
public readonly string $title;
public readonly Status $status;
public function __construct(string $title, Status $status)
{
$this-&gt;title = $title;
$this-&gt;status = $status;
}
} نحوه استفاده از کلاس readonly در نسخه پی‌اچ‌پی ۸.۲readonly class BlogData
{
public string $title;
public Status $status;
public function __construct(string $title, Status $status)
{
$this-&gt;title = $title;
$this-&gt;status = $status;
}
} همانطور که در بالا مشخص است کل کلاس را می‌توانید به سادگی readonly کنید اما در نظر داشته باشید که موارد زیر قابل readonly شدن نیستند:Enums – چون این فیچر PHP اصلا قابلیت دریافت پراپرتی را ندارد.TraitsInterfaces افزودن امکان استفاده از Allow true, null, and false به عنوان Standalone Typesدر PHP 8 امکان استفاده از Union Types ارائه شد. در نسخه ۸.۲ می‌توانید آن را به صورت‌های مختلف یعنی Null یا False استفاده کنید. با افزودن این قابلیت، زبان پی‌اچ‌پی به زبانی با قابلیت تفسیری جامع‌تر تبدیل شده و می‌توانید به صورت دقیق از تایپ‌های return و parameter و property استفاده کنید. در ادامه نحوه استفاده به عنوان نمونه آورده شده است: قبل از تایپ‌ها در نسخه قبل از PHP 8.2class Falsy
{
public function almostFalse(): bool { /* … / }
public function almostTrue(): bool { /* … / }
public function almostNull(): string|null { /* … / }
} نحوه استفاده از تایپ‌های Null و False و True به صورت مجزا و تنهایی در PHP 8.2class Falsy
{
public function alwaysFalse(): false { /* … / }
public function alwaysTrue(): true { /* … / }
public function alwaysNull(): null { /* … / }
}  اضافه شدن قابلیت SensitiveParameter Valueدر نسخه PHP 8.2 اتریبیوت جدیدی به نام SensitiveParameter معرفی شد. این قابلیت بسیار ارزشمند و مهم آنجایی به کار می‌آید که سایت یا اپلیکیشن با مشکل مواجه شده است و ناخواسته لاگ فعال است یا لاگ را فعال می‌کنید و اطلاعات حساس و محرمانه نمایش و یا در ارور لاگ ذخیره می‌شوند. با این قابلیت دیگر اطلاعات حساس کدهای PHP نمایش داده نمی‌شوند. نحوه استفاده از آن به این صورت است:function passwords(
$publicpassword,
#[\SensitiveParameter] $secretpassword
) {
throw new \Exception(‘Error’);
}
passwords(‘publicpassword’, ‘secretpassword’); معرفی تابع mysqli_execute_query و روش کوئری mysqli::execute_query برای دیتابیس بسیار معروف MySQLدر ورژن PHP 8.2 روش بسیار ساده‌ای برای مدیریت کوئری‌های دارای پارامتر mysqli معرفی شد. با استفاده از تابع mysqli_execute_query($sql, $params) و روش mysqli::execute_query به راحتی می‌‌توانید کوئری‌ها را توسط همین یک تابع به صورت prepare, bound, and execute اجرا کنید. زمانی که کوئری را با موفقیت اجرا کردید، آبجکت mysqli_result را دریافت کنید. برای مثال:execute_query(‘SELECT * FROM user WHERE name LIKE ? AND type_id IN (?, ?)’, [$name, $type1, $type2]) as $row) {
print_r($row);
} امکان استفاده از ثابت‌ها در صفات مختلف – Constants in Traitsتا قبل از نسخه ۸.۲ پی‌اچ‌پی امکان استفاده مجدد از کدها با تعریف methods و properties وجود داشت. حال امکان استفاده از constants in traits نیز فراهم شده است. مثال:trait Foo {
public const FLAG_1 = 1;
protected const FLAG_2 = 2;
private const FLAG_3 = 2;
public function doFoo(int $flags): void {
if ($flags &amp; self::FLAG_1) {
echo ‘Got flag 1’;
}
if ($flags &amp; self::FLAG_2) {
echo ‘Got flag 2’;
}
if ($flags &amp; self::FLAG_3) {
echo ‘Got flag 3’;
}
}
} معرفی تایپ‌های دی‌ان‌اف جدید – New Disjunctive Normal Form (DNF) Typesدر نسخه PHP 8.2 انواع DNF جدید معرفی شده است. DNSهای جدید روش‌های استاندارد و بهینه جدیدی برای استفاده از boolean expressions معرفی می‌کنند. خیلی دقیق و ساده بخواهیم بگوییم تفکیک حروف‌های ربط معرفی شده است – OR و AND های تفکیک شده! یک مثال استاندارد برای استفاده:// Accepts an object that implements both A and B,
// OR an object that implements D.
(A&amp;B)|D
// Accepts an object that implements C,
// OR a child of X that also implements D,
// OR null.
C|(X&amp;D)|null
// Accepts an object that implements all three of A, B, and D,
// OR an int,
// OR null.
(A&amp;B&amp;D)|int|null یک مثال استفاده در PHP نسخه‌ی قدیمی‌تر از ۸.۲trait Foo {
public const FLAG_1 = 1;
protected const FLAG_2 = 2;
private const FLAG_3 = 2;
public function doFoo(int $flags): void {
if ($flags &amp; self::FLAG_1) {
echo ‘Got flag 1’;
}
if ($flags &amp; self::FLAG_2) {
echo ‘Got flag 2’;
}
if ($flags &amp; self::FLAG_3) {
echo ‘Got flag 3’;
}
}
} یک مثال استفاده در ورژن PHP 8.2class Foo {
public function bar((A&amp;B)|null $entity) {
return $entity;
}
} در نسخه پی‌اچ‌پی ۸.۲ استفاده از dynamic variables در کلاس‌ها منقضی شده است. به جای آن یک AllowDynamicProperties معرفی شده است. مثال:class Foo {}
$foo = new Foo;
// Deprecated: Creation of dynamic property Foo::$bar is deprecated
$foo-&gt;bar = 1;
// No deprecation warning: Dynamic property already exists.
$foo-&gt;bar = 2; نحوه بروزرسانی به PHP 8.2جهت نصب نسخه PHP 8.2 در سیستم عامل اوبونتو ۱۸ و ۲۰ و ۲۲ از کامندهای زیر استفاده کنید:sudo dpkg -l | grep php | tee packages.txtsudo add-apt-repository ppa:ondrej/php # Press enter when prompted.sudo apt updatesudo apt install php8.2,php8.2-cli,php-8.2{bz2,curl,mbstring,intl}sudo apt install php8.2-fpmیا# sudo apt install libapache2-mod-php8.2sudo a2enconf php8.2-fpm# When upgrading from older PHP version:sudo a2disconf php8.1-fpm## Remove old packagessudo apt purge php8.1* با استفاده از دستور زیر می‌توانید لیست اکستنشن‌های ارائه شده برای PHP 8.2 را دریافت و در فایلی به نام packages.txt ذخیره و مشاهده کنید:dpkg -l | grep php | tee packages.txt در مرحله بعد ریپازیتوری ppa:ondrej/php را به اوبونتو خود اضافه کنید تا اکستنشن‌های اصلی و همیشه بروز PHP را بتوانید دریافت کنید:sudo add-apt-repository ppa:ondrej/php
sudo apt update در نهایت با دستور زیر می‌توانید نسخه PHP 8.2 و PHP Extension های اصلی را نصب کنید:sudo apt install php8.2 php8.2-cli php8.2{curl,bz2,zip,fpm,mysql,common,xml,bcmath,gd,mbstring,intl} نسخه‌های مختلف در مسیر مشابه /usr/bin/php8.2 مانند /usr/bin/php8.0 ذخیره شده‌اند. با وارد نمودن دستور فوق می‌توانید نسخه PHP را به شرح زیر انتخاب کنید:There are 2 choices for the alternative php (providing /usr/bin/php).Selection    Path             Priority   Status————————————————————* 0            /usr/bin/php8.2   ۸۲        auto mode1            /usr/bin/php8.1   ۸۱        manual mode2            /usr/bin/php8.2   ۸۲        manual mode و یا همچنین می‌توانید با وارد نمودن دستور مسیر نسخه PHP را تعریف کنید:update-alternatives –set php /usr/bin/php8.1 موارد منسوخ‌شده در پی‌اچ‌پی ۸.۲در ادامه به بررسی مواردی می‌پردازیم که در نسخه جدید php یعنی PHP 8.2 منسوخ شده و در پروژه‌ها قابل استفاده نیستند.انقضای توابع utf8_encode و utf8_decode()دو تابع utf8_encode() و utf8_decode() به منظور تبدیل و جابجایی بین استانداردهای کدنویسی ISO-8859 و UTF-8 استفاده می‌شوند. به دلیل عدم ارسال پیام‌های اخطار به موقع و محدودیت پشتیبانی این توابع از encoding یا رمزگذاری، در نسخه‌ی پی‌اچ‌پی ۸.۲ این توابع منسوخ شده است اما مجددا در نسخه‌ی PHP 9.0 آن‌ها را خواهیم داشت. با منسوخ شدن این توابع در نسخه‌ی فعلی، افراد به عنوان توابع جایگزین می‌توانند از اکستنشن‌های iconv یا intl برای جابجایی بین استانداردهای رمزگذاری استفاده کنند. Mbstring: Base64, Uuencode, QPrint, and HTML Entity Encodingsاکستنشن MBstring به منظور جابجایی بین کاراکترهای مختلف استانداردهای رمزگذاری از جمله UTF-8/16/32 و ISO-8859-1 کاربرد دارد. این اکستنشن از Base64، Quoted-Printable، Uuencode و المان‌های HTML پشتیبانی می‌کند.در نظر داشته باشید که این فرمت‌ها، اطلاعات فرآیند بایت‌های خام را بجای بایت‌های متعدد فرمت می‌کند. از این رو، به دلیل اهمیت پایین آن‌ها در رمزگذاری و رمزگشایی این فرمت‌ها، منسوخ شده است. از این رو، در نسخه‌ی جدید پی‌اچ‌پی ۸.۲ این اکستنشن‌های mbstring با لیبل‌های زیر منسوخ شده‌اند:BASE64
UUENCODE
HTML-ENTITIES
html (alias of HTML-ENTITIES)
Quoted-Printable
qprint (alias of Quoted-Printable) Partially-Supported Callablesدر پی‌اچ‌پی ۸.۲ فراخوان‌های نیمه پشتیبانی‌شده که با الگوی $callable() سازگاری ندارند، منسوخ شده اند. لیست فراخوان‌های منسوخ‌شده را در ادامه مشاهده کنید:$callable = “self::method”;
$callable = “parent::method”;
$callable = “static::method”;
$callable = [“self”, “method”];
$callable = [“parent”, “method”];
$callable = [“static”, “method”];
$callable = [“MyClass”, “MyParentClass::myMethod”];
$callable = [new MyClass(), “MyOtherClass::myMethod”]; به منظور عدم دریافت پیام منسوخ‌شده، کاربران می‌توانند تمام کیوردها را به صورت خانواده، تکی و استاتیک به نام کلاس‌های متناظر خود تغییر دهند. ${var} String Interpolationپی‌اچ‌پی به کاربران اجازه می‌دهد تا مقادیر متغیر در یک زنجیره‌ی واقعی را با گیومه جایگزین کند. همانند مثال‌های زیر:“$myname” – directly embedding variables.
“{$myname}” – braces outside the variable.
“${myname}” – braces after the dollar sign.
” ${expr}” – variable variables equivalent to using (string) ${expr} با توجه به بروزرسانی‌های انجام شده در جدیدترین نسخه‌ی php 8.4 دلایل بسیار و پر اهمیتی برای بروزرسانی به این نسخه‌ی جدید از پی‌اچ‌‌پی وجود دارد. از افزایش امنیت و سرعت سایت گرفته تا اکستنشن‌ها و توابع منسوخ شده در PHP 8.2 از مواردی‌ست که تغییر نسخه‌ی قدیمی به PHP 8.2 را به یکی از مهم‌ترین اقدامات تبدیل می‌کند.</description>
                <category>امیرحسین امانی</category>
                <author>امیرحسین امانی</author>
                <pubDate>Mon, 08 Sep 2025 21:28:52 +0330</pubDate>
            </item>
                    <item>
                <title>راهنمای جامع برای آشنایی با PHP و دنیای طراحی وب</title>
                <link>https://virgool.io/@m_77898233/%D8%B1%D8%A7%D9%87%D9%86%D9%85%D8%A7%DB%8C-%D8%AC%D8%A7%D9%85%D8%B9-%D8%A8%D8%B1%D8%A7%DB%8C-%D8%A2%D8%B4%D9%86%D8%A7%DB%8C%DB%8C-%D8%A8%D8%A7-php-%D9%88-%D8%AF%D9%86%DB%8C%D8%A7%DB%8C-%D8%B7%D8%B1%D8%A7%D8%AD%DB%8C-%D9%88%D8%A8-zzjri88zw01n</link>
                <description>مطمئنا PHP مثل گذشته در اوج نیست، اما این‌طور نیست که PHP کاملا منسوخ شده باشد. در فروم‌هایی مثل StackOverFlow بعضی از برنامه‌نویس‌ها دائما می‌گویند که PHP دیگر کاربردی ندارد؛ اما واقعا نظر آن‌ها درست است یا صرفا به خاطر این است که PHP را دوست ندارند؟اگر اولین قدم‌های خود را در دنیای توسعهٔ وب برمی‌دارید، چه به عنوان یک برنامه‌نویس با آینده‌ای درخشان، یا به عنوان یک کارفرمای بالقوه، طولی نمی‌کشد که با PHP رو به رو خواهید شد. عجیب نیست؛ چون PHP یکی از محبوب‌ترین زبان‌های برنامه‌نویسی وب است. مهم‌تر از آن تقریبا ۷۹ درصد تمامی وب‌سایت‌ها با استفاده از PHP ساخته شده‌اند که ابزارهای مبتنی بر وبی که روزانه از آن‌ها استفاده می‌کنید مانند فیسبوک، ویکی‌پدیا، یاهو، میل‌چیمپ و پینترست هم جزو آن‌ها هستند.اگر به یادگیری زبان برنامه‌نویسی PHP علاقه‌مند هستید، پیشنهاد می‌کنیم سری هم به دوره جدید کوئراکالج، یعنی «آموزش پروژه‌محور برنامه‌نویسی وب با PHP» بزنید. در این دوره با پروژه‌های واقعی از شرکت دیجی‌کالا و تمرین‌های مختلف سر و کار خواهید داشت.زبان برنامه‌نویسی PHP چیست؟زبان PHP یک زبان برنامه‌نویسی سمت سرور و منبع باز (Open Source) برای توسعهٔ برنامه‌های وب است که می‌تواند در کد HTML جاسازی (تعبیه یا embed) شود. PHP با سیستم عامل‌های اصلی و مطرح (macOS, Windows, Linux, Unix) سازگار است و توسط سرورهای وب مختلف (Apache, nginx, IIS, lighttpd) پشتیبانی می‌شود. این زبان برنامه‌نویسی محدود به HTML نیست و می‌تواند فایل‌های متنی و تصویری با ساختارهای متفاوت را ایجاد کرده و خروجی دهد.به علاوه آن، PHP از یک روش موثر در گزینش بانک‌های اطلاعاتی پشتیبانی می‌کند که روند توسعهٔ وب را ساده و آسان می‌کند. PHP با توجه به انعطاف‌پذیر بودنش، محدودیت‌های کمی برای توسعه‌دهندگان، طراحان و کارفرمایان ایجاد می‌کند و آزادی فراوانی را در انتخاب و خلاقیت در اختیارشان می‌گذارد.زبان PHP چه‌کاری می‌تواند انجام دهد؟دفترچهٔ راهنمای رسمی PHP جواب کوتاهی برای این سوال دارد: هر چیزی که با حقیقت فاصله ندارد.سه حوزه اصلی از کاربردهای PHP این‌ها هستند: اسکریپت‌نویسی خط فرمان (Command-line scripting)، اسکریپت‌نویسی سمت سرور (Server-side scripting)، و توسعهٔ برنامه‌های دسکتاپ (Desktop application). این آخری به صورت تئوری امکان‌پذیر است، اما خیلی کم عملی می‌شود. به زبان ساده، هر چیزی که باید با یک وب‌سرور اجرا شود، می‌تواند با PHP ساخته شود: یک وبلاگ، یک فروشگاه آنلاین، یک اسکریپت پردازش داده، یک SaaS (اجاره نرم‌افزار) (۱) پیچیده و سطح بالا و هر چیز مشابهی که به فکرتان می‌رسد.در اصل PHP محتوایی از نوع HTML را بر اساس شروطی تعیین شده، برای بازدیدکنندگان وب‌سایت ایجاد می‌کند. با استفاده از مجموعه‌ای از متغیرها، PHP داده‌های مورد نیاز را از پایگاه داده استخراج کرده و محتوای متناظر را به صورتی پویا ارائه می‌کند؛ مثل زمانی که مشتریان یک فروشگاه آنلاین از فیلتر «جدیدترین محصولات»‌ موقع جستجوی محصول استفاده می‌کنند.جدای از این، PHP به توسعه‌دهندگان اجازه می‌دهد که صفحات وب را ایجاد، منتشر و ویرایش کنند؛ بدون این‌که هر بار نیاز به سر و کله زدن با HTML داشته باشند. به جای آن، می‌توان با استفاده از سیستم‌های مدیریت محتوای کاربرپسند که بر پایهٔ PHP ساخته شده‌اند (مانند WordPress) تغییرات لازم را ایجاد کرد تا پایگاه دادهٔ محتوا به صورت خودکار به‌روز‌رسانی شود.زبان PHP را می‌توان در همهٔ سیستم عامل‌های اصلی، از جمله لینوکس، بسیاری از انواع یونیکس، ویندوزِ مایکروسافت، MacOS، RISC OS و احتمالا موارد دیگر استفاده کرد. همچنین در حال حاضر، PHP از بیشتر سرورهای وب شامل IIS و Apache پشتیبانی می‌کند. به علاوه این‌که شما می‌توانید از برنامه‌نویسی رویه‌ای (Procedural Programming) یا برنامه‌نویسی شی‌گرا (OOP) یا ترکیبی از هر دو استفاده کنید.همانطور که می‌دانید، PHP برای داینامیک کردن صفحات ساخته شده با HTML و CSS کاربرد دارند. ولی با استفاده از PHP شما فقط محدود به ارسال خروجی بصورت HTML نیستید. بلکه می‌توانید خروجی اجرای کدهای PHP را به صورت تصویر، فایل pdf و حتی فایل فلش ارسال کنید. همچنین می توانید به راحتی هر متنی مانند XHTML و هر پرونده XML دیگر را به راحتی در خروجی چاپ کنید. پی اچ پی می تواند این فایل ها را به صورت خودکار تولید کند و به جای چاپ کردن ، آنها را در سیستم بصورت فایل ذخیره کند و یک حافظه نهان سمت سرور را برای محتوای پویای شما تشکیل می دهد. که بدون نیاز به ذخیره کردن در جایی (اصطلاحا به صورت On the fly) ساخته می‌شوند.یکی از پرقدرت‌ترین و مهم‌ترین ویژگی‌های PHP، پشتیبانی آن از طیف گسترده‌ای از پایگاه‌های داده است. نوشتن یک صفحهٔ وب با قابلیت اتصال به پایگاه داده با استفاده از افزونه‌های اختصاصی پایگاه داده (به عنوان مثال برای mysql)، استفاده از یک لایهٔ abstraction مانند PDO یا اتصال به هر پایگاه داده‌ای که از استاندارد اتصال پایگاه دادهٔ باز (Open Database Connection Standard) با به‌کارگیری افزونهٔ ODBC پشتیبانی می‌کند، در PHP بسیار ساده است.تکنولوژی PHP همچنین از گفتگو (۲) با سایر سرویس‌ها با استفاده از پروتکل‌هایی مانند LDAP، IMAP، SNMP، NNTP، POP3، HTTP، COM (بر روی ویندوز) و موارد بی‌شمار دیگری پشتیبانی می‌کند. همچنین می‌توانید سوکت‌های شبکه را مستقیما باز کرده و با به‌کارگیری هر نوع پروتکل دیگری ارتباط برقرار کنید. PHP از تبادل داده‌های پیچیدهٔ WDDX مابین تقریبا همهٔ زبان‌های برنامه‌نویسی هم پشتیبانی می‌کند. در زمینهٔ ارتباط، PHP از نمونه‌سازی آبجکت‌های JAVA و به‌کارگیری آن‌ها به عنوان آبجکت‌های PHP هم پشتیبانی می‌کند.زبان PHP دارای امکانات مفیدی برای پردازش متن است، که شامل RegEx (عبارات منظم) سازگار با PERL یا به صورت اختصار (PCRE)، و بسیاری از افزونه‌ها و ابزارها برای تجزیه و دسترسی به اسناد XML است.فریم‌ورک‌ (چارچوب) PHP چیست؟فریم‌ورک PHP بستری برای ساخت برنامه‌های وب PHP است. این فریم‌ورک شامل کتابخانه‌هایی با توابع و کلاس‌‌های از پیش آماده‌ شده و هم‌چنین در بیش‌تر موارد، المان‌هایی برای اجرای الگوی طراحی نرم‌افزار (Design Pattern) است. این دومی، یک اسکلت‌بندی آماده یا به اصطلاح بیرون از جعبه (۳) (out-of-the-box) از پروژه‌ای که ساخته خواهد شد را بر پایهٔ رشته‌‌کدهای توسعه‌دهنده تشکیل می‌دهد؛ چه برای کدهای به ارث برده شده از کلاس‌های کتابخانه‌ای یا کدهایی که از ابتدا نوشته شده‌اند.فریم‌ورک‌های PHP به دلیل اهمیت دادن به جنبه‌های معمول و تکرارشونده در توسعهٔ وب رواج پیدا کرده‌اند. هم‌چنین، توابع کتابخانه‌ای و کلاس‌ها در این فریم‌ورک‌ها، از شیوه‌های استاندارد توسعهٔ وب پیروی می‌کنند و به خوبی تست شده‌اند. با استفاده از آن‌ها، علاوه بر آن‌که هر بار مجبور به اختراع دوبارهٔ چرخ نخواهید بود، احتمال بروز خطاهایی که می‌توانند دائما اتفاق بیفتند و باعث خرابی برنامه شوند را نیز به‌طور قابل ملاحظه‌ای کاهش می‌دهید.آخرین، اما نه کم‌اهمیت‌ترین مزیت استفاده و تکیه بر این فریم‌ورک‌ها، این است که کدِ شما را برای دیگر همکاران توسعه‌دهنده‌ قابل خواندن و درک می‌سازند.بهترین فریم‌ورک PHP کدام است؟این روزها، توسعه‌دهندگان PHP به هیچ‌وجه از کمبود فریم‌ورک‌های برنامه‌نویسی نگران نیستند. برعکس، احتمال زیادی وجود دارد که به خاطر تنوع زیاد فریم‌ورک‌ها، برای انتخاب از بین آن‌ها سردرگم شوند. برای راهنمایی شما در مسیر درست، خلاصه‌ای از پنج فریم‌ورک PHP که بهترین عملکرد را دارند و ارزشمندتر و محبوب‌تر هستند را بررسی می‌کنیم.۱. فریم‌ورک Laravelلاراول این روزها داغ‌ترین فریم‌ورک PHP است. به عنوان فریم‌ورکی برای (۴) Web Artisans، طبق ادعای سازندگانش، به توسعه‌دهندگان اجازه می‌دهد که طراحی‌های مدرن و زیبایی را انجام دهند. Laravel به دلیل شیب کم منحنی یادگیری (۵) (Shallow learning curve)، سادگی و منابع یادگیری فراوان و برتر، مورد استقبال توسعه‌دهندگان جوان قرار گرفته است. از طرف دیگر هم مهندسان باتجربهٔ PHP، محیط توسعهٔ داخلی، موتور الگومحور و سیستم مسیریابیِ (۶) RESTful آن را ستایش می‌کنند.۲. فریم‌ورک Symfonyفریم‌ورک Symfony مجموعه‌ٔ چشمگیری از امکانات و در کنار آن ویرایش‌های با پشتیبانی بلندمدت را ارائه می‌دهد، اما در عوض نیاز به سطح مناسبی از تخصص دارد. این موضوع، هرچند باعث کمتر شدن محبوبیت آن نمی‌شود، اما باعث می‌شود توسعه‌دهندگان تازه‌کار در مورد آن محتاط باشند. Symfony یکی از بزرگ‌ترین جامعه‌های توسعه‌دهندگان را دارد. SensioLab، مالک این فریم‌ورک، با منتشر کردن محتوای آموزشی مفید، پست‌های وبلاگ و بحث‌های فنی از آن پشتیبانی می‌کند.۳. فریم‌ورک Zendبه دلیل ماهیت مبتنی بر مولفه (Component-based)، این فریم‌ورک در جامعهٔ توسعه‌دهندگان PHP به عنوان فریم‌ورک چسبان (a glue framework) لقب گرفته است. فریمورک zend از معماری MVC پشتیبانی می‌کند و کاملا از اصول شی‌گرایی در ساختار خود پیروی می‌کند و همین ویژگی باعث قدرتمند شدن این فریم‌ورک شده، به طوری که به برنامه‌نویس‌ها این اجازه را می‌دهد تا در صورت نیاز از هر جزئی که در برنامه‌شان استفاده کرده‎‌اند در هر کجای دیگر نیز استفاده کنند. در واقع، با استفاده از Zend، میتوانید آزادانه فقط آن دسته از کامپوننت‌هایی که نیاز دارید را فراخوانی کنید. این فریم‌ورک نه تنها دارای یک کتابخانهٔ داخلی پر و پیمان و گران‌بهاست، بلکه می‌تواند آزادانه با مقدار زیادی از کتابخانه‌های بیرونی یکپارچه شود.۴. فریم‌ورک Phalconفالکون اساسا با دیگر فریم‌ورک‌های PHP تفاوت دارد؛ زیرا در واقع یک افزونهٔ PHP است که با زبان C نوشته شده است. این افزونه، به منابع کمی نیاز دارد، فریم‌ورک MVC را می‌پذیرد و سرعت و کارایی چشم‌گیری دارد. با تمام این‌ها، در نبود یک موتور تست خودکار و ماهیت عجیب و غریب این فریم‌ورک، یافتن اشکالات برنامه‌ها، به تلاشی تبدیل می‌شود که حتی توسعه‌دهندگان باتجربه را هم از کار با Phalcon دل‌سرد می‌کند.۵. فریم‌ورک CakePHPبا انتخاب CakePHP، مجموعهٔ کاملی از کارکردهای اساسی مورد نیاز برای توسعهٔ PHP را به دست می‌آورید: پشتیبانی از MVC، انتخابی عالی از افزونه‌ها و مولفه‌های (Components) سودمند، قابلیت استفادهٔ دوباره از کد، و پشتیبانی از AJAX بیرون از جعبه (out-of-the-box*). آن‌چه CakePHP را متمایز می‌کند، تاکید آن بر قراردادهای کدنویسی است که از سویی به روند توسعه سرعت می‌بخشد و از سویی دیگر ممکن است خلاقیت و نوآوری را در شما فرو بنشاند.ورژن انقلابی PHP8.2، جدیدترین نسخه زبان برنامه‌نویسی PHP است.آیندهٔ PHPبروزرسانی جدید: PHP8.2از زمان انتشار PHP8.2، امکانات تازه و بهبودهای فراوانی معرفی شده‌اند. قابل توجه‌ترین پیشرفت‌ها بهبود سرعت و استفادهٔ بهتر از حافظه است. این به آن معناست که وب‌سایت‌هایی که از PHP8.2 استفاده می‌کنند سریع‌تر از وب‌سایت‌هایی که از ویرایش قدیمی PHP استفاده می‌کنند بارگذاری می‌شوند و می‌توانند هم‌زمان کاربران بیش‌تری را نیز هندل کنند. Code wise، اعلامیه‌های نوع (Type declarations) و عمل‌گرهای (Operators) تازه‌ای معرفی شده‌اند. اداره‌کنندهٔ خطاها نیز بهبود یافته است.زبان PHP هنوز بر دنیای وب مسلط است.یکی از دلایلی که PHP به وسیلهٔ بسیاری از وب‌سایت‌ها استفاده می‌شود، این است که WordPress از PHP استفاده می‌کند. سهم بازار WordPress تقریبا ۳۴ درصد از کل وب‌سایت‌های دنیا است. این یعنی ۷۵ میلیون وب‌سایت از WordPress استفاده می‌کنند.علاوه بر این، برخی از CMSهای دیگر مانند Drupal و Joomla نیز وجود دارند که سهم قابل توجهی در بازار دارند. از طرف دیگر بعضی سیستم‌های مدیریت فروشگاهِ محبوب، مانند Magento نیز بر پایه PHP هستند. همین موضوع، PHP را مهم و برای یادگیری و استفاده مناسب می‌سازد.بازار کاراز آن‌جایی که ۷۵ درصد وب با استفاده از PHP نوشته شده است، مشخص است که بازار خوبی در انتظار برنامه‌نویسان آن است. همهٔ این وب‌سایت‌ها باید پشتیبانی شوند و برای این کار به توسعه‌دهندگان PHP نیاز دارند. سهم بزرگی از بازار PHP در یک شب از بین نخواهد رفت، بنابراین مشاغل مربوط به PHP در آینده نیز وجود خواهند داشت.نتیجه‌گیریاگرچه بحث‌های فراوانی در مورد آیندهٔ PHP وجود دارد، اما روشن بودن آینده PHP تقریبا مشخص است. این زبان هنوز هم پراستفاده‌ترین زبان برنامه‌نویسی برای وب‌سایت‌ها است. نظر شما چیست؟ شما هنوز به آینده PHP امیدوارید؟(۱) Software as a Service:نرم‌افزار به عنوان سرویس یک مدل توزیع نرم‌افزار است که در آن یک ارائه‌دهنده میزبان برنامه بوده و خدمات برنامه را از راه اینترنت در دسترس مشتریان قرار می‌دهد. SaaS در کنار زیرساخت به عنوان سرویس (IaaS) و بستر خدمات به عنوان سرویس (PaaS)، یکی از سه دستهٔ اصلی محاسبات ابری یا همان Cloud Computing است.(۲) گفتگو:در دانش کامپیوتر به معنای برقراری ارتباط به منظور تبادل داده است. برای تبادل داده به گونه‌ای که برای هر دو طرف (منظور از دو طرف معمولا دو دستگاه یا دو برنامه است) قابل درک و استفاده باشد، از پروتکل‌های ارتباطی استفاده می‌شود.(۳) out-of-the-box:ویژگی یا کارکرد خارج از جعبه (که به آن Off the shelf هم گفته می‌شود)، به خصوص در نرم‌افزار، ویژگی یا کارکردی است که بدون نیاز به هیچ‌گونه نصب یا تنظیم و اصلاحی کار می‌کند. هم‌چنین به این معنا نیز هست که به‌طور پیش‌فرض برای همهٔ کاربران در دسترس است و برای استفاده از یک چنین کارکردی، نیاز به پرداخت هزینهٔ اضافی یا پیکربندی و تنظیمات خاص نیست.(۴) Web Artisans:یک رابط خط فرمان است که همراه فریم‌ورک Laravel عرضه می‌شود.این برنامه دستورات مفیدی ارائه می‌دهد که می‌توانند در ساخت برنامه‌ها به شما کمک کنند.(۵) Shallow learning curve:منحنی یادگیری کم‌عمق به معنای روند سریع یادگیری یک موضوع است. در نقطهٔ مقابل اصطلاح منحنی یادگیری با شیب تند یا steep learning curve وجود دارد که به معنای روند کند و مدت زمان طولانی برای یادگیری یک موضوع می‌باشد.(۶) RESTful:یک سبک معماری نرم‌افزار است که مجموعه‌ای از محدودیت‌ها را برای استفاده از سرویس‌های وب تعریف می‌کند.</description>
                <category>امیرحسین امانی</category>
                <author>امیرحسین امانی</author>
                <pubDate>Mon, 08 Sep 2025 20:47:46 +0330</pubDate>
            </item>
                    <item>
                <title>نحوه تعامل سخت افزار و نرم افزار (صفر تا 100)</title>
                <link>https://virgool.io/@m_77898233/%D9%86%D8%AD%D9%88%D9%87-%D8%AA%D8%B9%D8%A7%D9%85%D9%84-%D8%B3%D8%AE%D8%AA-%D8%A7%D9%81%D8%B2%D8%A7%D8%B1-%D9%88-%D9%86%D8%B1%D9%85-%D8%A7%D9%81%D8%B2%D8%A7%D8%B1-%D8%B5%D9%81%D8%B1-%D8%AA%D8%A7-100-u5kezmrzuplx</link>
                <description>مراحل اصلی در پردازش اطلاعاتسلام, با این مقاله قصد داریم نگاهی به طرز کار سخت افزار و نرم افزار در کنار هم بیاندازیم.اگر مطلب «من می خواهم برنامه نویس شوم - قسمت دوم» را مطالعه کرده باشین در انتهای مطلب راجع به سطوح زبان های برنامه نویسی صحبت کردیم و مسیرهای مختلفی را در این رشته تعیین کردیم، ادامه سری آموزشی (من می خواهم برنامه نویس شوم) مسیر برنامه نویسان سطح بالا را روشن تر خواهد کرد و در این مقاله سعی داریم دید روشنی از برخی دروس رشته کامپیوتر و آی تی و علت مطالعه آن ها برای ورودی های جدید این رشته بدهیم.این مقاله در حقیقت نگاهی سطحی و اجمالی به چند درس از رشته علوم کامپیوتر و فناوری اطلاعات می باشد:معماری کامپیوترمدارهای منطقیسیستم عاملزبان ماشین و برنامه سازی سیستماصول ذخیره سازی دادهدر قسمت دوم «من می خواهم برنامه نویس شوم» مفهوم مفسر و کامپایلر ها توضیح داده شد. دستورات شما پس از کامپایل یا تفسیر در حقیقت به کدهایی از زبان ماشین که صفر و یک هستند تبدیل می شود و سخت افزار می تواند آن را اجرا کند.چرا صفر و یک (باینری یا دودویی)؟به دلیل ساده بودن پیاده سازی مدار با دو حالت، در حقیقت «صفر و یک دو سطح ولتاژ» است. اگر کامپیوتری داشته باشیم که بخواهد با اعداد صفر تا نه کار کند این کار هزینه بالایی خواهد داشت چون به طراحی مدارهایی به ۱۰ سطح ولتاژ نیاز است. بصورت قراردادی دو سطح بالا و پایین می توانند ۰ و ۵ ولت (یا ولتاژ های دیگری) باشند. زمانیکه ولتاژ ضعیف است یعنی بین ۰ تا نیم ولت می توان «صفر» و زمانی که قوی است مانند ۵ آن را «یک» درنظر گرفت و این ولتاژ همین مقدار است. (حالت شارژ یا حالت قطع)البته اکنون به تکنولوژی محاسبات کوانتومی و کامپیوترهای کوانتومی نیز دست پیدا شده که در اختیار مراکز تحقیقاتی مانند گوگل. آمازون. آی بی ام و ... است و مبحث دیگری است و از هدف این مقاله خارج است.چگونه متن، عدد، صدا و تصویر و ویدئو به صفر و یک تبدیل می شود؟اعداد و متوندر مورد اعداد برای اینکه بتوان مفهوم  و ارزش آن ها را همچنان حفظ کرد باید آن ها را به مبنای ۲ ببریم (به مبنا ها در ریاضی رجوع شود) و همه چیز از همین ایده شروع می شود با همین ایده ساده یعنی مبنای دو و استفاده از دو سطح ولتاژ برای تنها اعضای این مجموعه یعنی (صفر و یک) تحولات عظیمی شکل گرفته مثلا عدد ۱۳ در مبنای دو به این شکل است: ۱۱۰۱همه متون از کاراکتر تشکیل می شوند و به ازای هر کاراکتر می توان یک عدد نسبت داد و در حقیقت بجای کاراکترها کد آن ها را به مبنای ۲ برده و استفاده می کنیمبرای این کار ابتدا به تمامی اعداد و حروف و کلید های کیبورد یک عدد نسبت می دهند. از جمله این کدگذاری ها ASCII و Unicode هستند. مثلا در کاراکتر ست ASCII معادل علامت ! عدد 33 و معادل عدد 0 عدد 48 و معادل A عدد 65 و معادل a عدد 96 است که تمامی این ها را میتوان به مبنای دو برد. در این کاراکتر ست هر کاراکتر معادل 8 عدد باینری میشود، کد 0 معادل 00000000 و نهایتا کد 127 معادل 1111111 پس هر کاراکتر معادل 8 بیت که آن را یک بایت نام گذاری کردند. (در نرم افزاری مانند notepad ویندوز می توان بعد از تایپ متن آن را با کاراکتر ست دلخواه ذخیره کرد. اگر متن حاوی کاراکتر فارسی باشد و بخواهید آن را با کاراکتر ست ascii ذخیره کنید اخطار دریافت خواهید کرد که نمیتوان متن را با این کاراکتر ست ذخیره کرد چرا که این کد گذاری فقط شامل کاراکترهای انگلیسی است. و خواهید دید اگر متن انگلیسی را به دو صورت کاراکترست Ascii و UTF-8 ذخیره کنید حجم فایل ascii کمتر خواهد بود - علت را در ادامه خواهید دید)کاراکتر ست Unicode کمی کد گذاری متفاوتی دارد. در این کاراکتر ست باقی زبان ها مثل فارسی و عربی و چینی هم می توانند کد بگیرند و نیاز بود که تعداد کد بیشتری داده شود. در این کاراکتر ست هر کد معادل 16 بیت یا حتی ممکن است 32 بیت باشد. بنابراین همان متن در کاراکترست UTF-8 منطقا حجم بیشتری را اشغال خواهد کرد.تصاویردر ذخیره سازی تصاویر رنگ ها را کد گذاری می کنیم. تصاویر در دنیای کامپیوتر بصورت دیجیتال ذخیره و نمایش داده می شوند یعنی هر تصویر از تعدادی خانه رنگی تشکیل شده که این خانه ها را پیکسل می گوییم بنابراین وقتی می گوییم این دوربین ۱۲ مگاپیکسل است یعنی یک عکس آن شامل ۱۲۲۸۸ خانه رنگی است و همانطور که می دانید هرچه این خانه ها بیشتر باشد کیفیت بیشتری خواهید داشت. در طراحی دیجیتال برای بیان کیفیت از رزولوشن استفاده می کنند که بیان گر تعداد پیکسل در یک اینچ مربع است. مثلاً می‌گویند 300 dpi.بنابراین هرچه رزولوشن بیشتر یعنی خانه های بیشتر برای همان عکس و عکس بزرگ تر و با کیفیت تر. برای دیدن پیکسل ها کافی است تا آنجا که می توانید بر روی یک تصویر در کامپیوتر زوم کنید (مثلا در نرم افزاری مانند فوتوشاپ آنگاه خانه های رنگی تشکیل دهنده عکس را خواهید دید)در نتیجه برای تبدیل تصویر به صفر و یک اجرای تشکیل دهنده آن یعنی این خانه های رنگی را به صفر و یک تبدیل می کنیم. هر خانه یک رنگ بیشتر ندارد و طیف رنگی با در کنار هم قرار گرفتن این ها قابل مشاهده است و چون تعداد آن ها زیاد است چشم قابل به تشخیص مرز آن نیستبرای تبدیل کردن رنگ ها به باینری مانند کاراکتر ها آن ها را کد گذاری می کنیم (تمام رنگ ها از ترکیب سه رنگ پایه قرمز، آبی، سبز ساخته می شود) و هر رنگ پایه را با یک عدد بین ۰ تا ۲۵۵ مشخص کنیم. یعنی کد هر پیکسل شامل سه عدد (هر کدام بین 0 تا 255) است که هر سه به مبنای دو تبدیل می شوند.ویدئوویدئو نیز از فریم تشکیل شده اند (وقتی می گوییم این ویدئو ۲۴ فریم/ثانیه است یعنی در هر ثانیه از این فیلم ۲۴ عکس استفاده شده) بسته به اندازه عکس های تشکیل دهنده و کیفیت آنها کیفیت فیلم و اندازه طول و عرض فیلم ها با هم متفاوت است مثلا در فیلم با کیفیت 720p تصاویری با عرض ۷۲۰ پیکسل در طول ۱۲۸۰ (معمولا برای کیفیت تنها عرض را بیان میکنند و معمولا نسبت عرض به طول برابر ۹ به ۱۶ است، البته میتواند هر نسبتی داشته باشد) که ضرب این دو عدد در هم تعداد خانه های رنگی یا پیکسل هر فریم فیلم را مشخص می کند و اگر فیلم ۲۴ فریم باشد، با ضرب حاصل آن با ۲۴ می توانید بفهمید در یک ثانیه از این فیلم چند پیکسل داده وجود دارد. البته برای فیلم باید صدا را نیز لحاظ کردصداصدا نیز از فرکانس و دامنه تشکیل شده (فرکانس همان لحن یا زیر و بم بودن است و دامنه کم و زیاد بودن) که باز هم این دو به عدد تبدیل می شوند برای پخش صدا در هر لحظه از آن، این دو عدد به بلندگو داده می شود.میکروفون یک پرده مرتعش دارد که فرکانس صدا را میگیرد و تعداد ارتعاشی که ایجاد می شود بلندی و کمی صدا را مشخص می کند، بلندگو نیز مشابه آن.خوب چطور میشود با باینری کار کرد چطور با صفر و یک سیستم عامل نوشته شده؟دوست دارید بدانید از کجا شروع شده و سیستم عامل به عنوان برنامه ای که مدیریت سخت افزار را بعهده دارد چطور به صفر و یک تبدیل می شود و خود با صفر و یک کار می کند. در حقیت با یک سیر تکاملی روبه رو هستیم و طبعا پیچیده اما ابتدا این طور نبوده و تک تک قطعات کامپیوتر رشد فوق العاده ای داشته اند از کیبورد و ماوس گرفته تا تک تک قطعات بکاررفته در برد اصلی و مانتیور و ...به زودی به شما میگوییم ماده سیلیکون (همان ماده ای که در مغز مداد استفاده شده) چه تحول عظیمی را ایجاد کرده.به زودی به شما میگوییم ماده سیلیکون (همان ماده ای که در مغز مداد استفاده شده) چه تحول عظیمی را ایجاد کرده .همه چیز از زبان ماشین شروع می شود و به آن بر می گردد.دستورات پیچیده از دستورات ساده تشکیل میشوند مثلا ضرب همان جمع اعداد است. قطعات سخت افزاری در خود عملیات منطقی را انجام میدهند اگر در ریاضیات جبر منطقی را خوانده باشید با عملیات های And و Or آشنایی دارید.مثلا قطعه ای که دو ولتاژ ورودی میگیرد و بگونه ای طراحی شده که ولتاژ خروجی معادل همان عملیات and می تواند باشد.حال اگر شما بتوانید بصورت سخت افزاری مداری درست کنید که یک سری عملیات پیچیده تر را جهت ارسال داده به یک مدار دیگر (مثلا این دیتا (پالسی از ولتاژ های 0 و 5) را ببر به این قسمت از مدار) و گرفتن خروجی از آن (خروجی را از این قسمت بگیر و ...) طراحی کنید با استفاده از مجموعه ای از مدارها و استفاده از جبر بولی می توانید هر مسئله ای را به مجموعه ای از دستورات پایه مثل همین and و or تبدیل کنید و به مدار که شامل همین عملیات است بدهید و از خروجی مجددا در مدار دیگری استفاده کنید.این عملیات کمی پیچیده تر بدین صورت است: انتقال، جمع، تفریق، تقسیم و ضرب، شما مجموعه ای از دستورات را با همین توابع که مدارهای آنها در CPU قرار دارد، در دست دارید و مثلا می توانید دیتایی را داخل رم که مجموعه ای از خازن ها هست ذخیره کنید و یا دوباره آن را بگیرید. به صورت بسیار ساده می‌توان گفت پردازنده‌های متفاوت، دستورالعمل‌های متفاوتی دارند که در قیمت و سرعت و ... آنها تاثیرگذار است، اما تمامی پردازنده‌ها (بدون توجه به تفاوت‌هایشان) دارای چهار مجموعه دستورالعمل زیر می‌باشند:کپی کردن بیت‌هاچهار عمل اصلی ریاضی (محاسبات ریاضی: جمع، ضرب، تفریق و تقسیم)بیت منطقی (NOT, AND, OR, XOR)پرش (شامل پرشهای مشروط) که به منظور پرش از یک آدرس حافظه اصلی (RAM) به آدرس دیگری از حافظه کاربرد دارددر اینجا زبان اسمبلی زبان سطح پایینی هست که این دستورات را با آن می نویسید و اسمبلری که بسته به پردازنده شما شرکت سازنده در اختیارتان گذاشته کد شما را یک یا دومرحله ساده تر کرده و به صفر و یک تبدیل میکند. (می توانید با کمی جست و جو اطلاعت زیادی در مورد آنها بدست آورید)اولین سیستم عامل با استفاده از زبان اسمبلی نوشته شده و سیستم عامل های کنونی از زبان اسمبلی و سی و سی پلاس پلاس. در اینجا دیگر وارد جزئیات قطعات سخت افزاری بکار رفته در کامپیوتر مانند ثبات ها و ... نمی شویم.در صورتی که به این بحث علاقه دارید باید درس معماری کامپیوتر، مدارهای منطقی و زبان ماشین رجوع کنید و از ابتدا آن ها را مطالعه کنید اما اکنون شما می دانید که با چه چیزهایی روبه رو خواهید شد و از ابتدا دیدی کلی راجع به موضوع مورد مطالعه دارید.در مورد cpu بهتر است این موارد را نیز بدانید:فرکانس CPU (ساعت CPU، یا Clock Speed) که با 4 رقم اول آن مشخص می شود، مثلا 3330، و به این معنی است که این پردازنده محاسبات را با چه سرعتی انجام می دهد. مثلا CPU با مشخصات 2.70GHz up to 4.00 GHz می تواند 2.70 تا 4 میلیارد محاسبه را در هر ثانیه انجام می دهد.تعداد هسته یا Core CPU: کامپیوتر در هر لحظه در حال انجام میلیونها محاسبه در هر ثانیه است، وقتی شما برنامه ای را اجرا می کنید (مثلا اکسل)، CPU، کسری از ثانیه را برای پردازش محاسبات مربوط به این برنامه اختصاص می دهد و باقی زمان را به انجام سایر محاسبات می پردازد.بنابراین اگر CPU یک هسته داشته باشد زمان اجرا باید بین برنامه ها تقسیم شود اما با ۸ هسته این سرعت عملا ۸ برابر شده است.با کشف سیلیکون توانستند ترانزیستورهای نانومتری بسازند و تعداد آن را به 6500 عدد در یک پردازنده و امروزه به 100 ها میلیون و در بهترین CPU های امروزی به بیش از 2 میلیارد عدد افزایش دهند.کامپیوتر را روشن می کنیدحال کامپیوتر را روشن می کنید، بصورت سخت افزاری CPU بطور خودکار در شروع کار کامپیوتر به سراغ اولین دستور BIOS (اولین نرم افزاری که در برد اصلی ذخیره شده) می رود. وظایف BIOS بدین شرح است:تست قطعات بر اساس تنظیم کاربر (در کامپیوتر ها با زدن دکمه del در ابتدای شروع کار کامپیوتر به تنظیمات BIOS می روید)کپی کردن برخی اطلاعات از جمله جداول گلایف (تصویر نمونه پایین را مشاهده کنید) و برخی توابع لازم برای کار یک سیستم عامل (توابع وقفه برای کنترل پردازش ها و نوبت دهی)جست و جوی حافظه جانبی برای یافتن سیستم عامل و در صورتی که آن را نیافت دادن پیغام لازمبه بارگذاری سیستم عامل از حافظه جانبی(Hard Disk) به حافظه اصلی (RAM) عمل بوت می گویند. پس از بوت شدن سیستم عامل قسمتی از آن بطور دائم در حافظه می ماند که هسته سیستم عامل است و به آن Kernel هم می گویند و بقیه قسمت ها در حافظه جانبی می ماند و در صورت لزوم فراخوانی می شوند.سیستم عامل مدیریت همه پردازش ها برای همه برنامه ها، اجرای برنامه ها و مدیریت حافظه جانبی و حافظه اصلی و ورودی و خروجی ها را به عهده دارد. اینکه چطور این کار را انجام می دهد هم بحث طولانی است و علاقه مندان می توانند کتاب مفاهیم و مبانی سیستم عامل را مطالعه کنند که تمامی استراتژی ها و حتی کد دستورات سیستم عامل هم در آن نوشته شده (چطور وقفه ایجاد میکند و ...)وقتی شما یک کاراکتر را روی کیبورد فشار می دهید سیستم عامل می داند چه کدی فشرده شده، سیستم عامل می داند باید نتیجه آن را به کدام برنامه ای بدهد که وضعیت آن مثلا در حال استفاده توسط کاربر است، می داند که از جدول گلایف چه نقشی را استخراج کند و آن را بررسی می کند و تغییرات لازم را به صفحه نمایش می فرستد.جدول گلایف، نقشه بیتی جهت مشخص شدن شکل کاراکتر</description>
                <category>امیرحسین امانی</category>
                <author>امیرحسین امانی</author>
                <pubDate>Sun, 31 Aug 2025 18:45:32 +0330</pubDate>
            </item>
                    <item>
                <title>آشنایی با فیشینگ و ساخت فیک پیج با ابزار zphisher</title>
                <link>https://virgool.io/@m_77898233/%D8%A2%D8%B4%D9%86%D8%A7%DB%8C%DB%8C-%D8%A8%D8%A7-%D9%81%DB%8C%D8%B4%DB%8C%D9%86%DA%AF-%D9%88-%D8%B3%D8%A7%D8%AE%D8%AA-%D9%81%DB%8C%DA%A9-%D9%BE%DB%8C%D8%AC-%D8%A8%D8%A7-%D8%A7%D8%A8%D8%B2%D8%A7%D8%B1-zphisher-rffgcq4eidhf</link>
                <description>Automated Phishig Toolفیشینگ چیست؟اگه بخوایم خیلی ساده بگیم فیشینگ چیست؟ فیشینگ به روشی گفته میشه که شما با ساخت یه صفحه مثل صفحه ای که میخواین برای قربانی بفرستین به روش های مختلف میسازین و قربانی هر چیزی که توی اون صفحه جعلی یا فیک ما بزنه برای ما وارد میشه.عملیات فیشینگ چیست؟کلاهبرداری فیشینگ از طریق ایمیل ها و پیامها صورت می پذیرد و قربانیان به صورت مستقیم اطلاعات حساس و محرمانه خود را در وب سایت های جعلی که در ظاهر کاملا شبیه وب سایت های سالم و قانونی می باشد وارد می نمایند. حقه ی فیشینگ یکی از تکنیک های مهندسی اجتماعی برای فریب کاربران می باشد که علی‌القاعده از ضعف امنیتی یک وب سایت برای انجام عملیات مجرمانه خود استفاده می کنند. برای اولین بار حقه ی فیشینگ در 1987 تعریف شد و اولین باری که واژه فیشینگ برای نام گذاری این واژه استفاده گردید، سال 1996 بود.✔ خب برای شروع کار ما ابزار Zphisher رو دانلود میکنیم این ابزار برای ما یک صفحه جعلی میسازه که ما میتونیم اونو برای قربانی ارسال کنیم ، البته این ابزار فقط برای اینستاگرام نیست و برای بقیه شبکه های اجتماعی معروف و سایت های معروف قابل استفاده است.خب اول از همه ترمینال لینوکس رو run میکنیم وبعد ابزار zphisher رو از گیت هاب دانلود میکنیم. git clone https://github.com/htr-tech/zphisher.gitدانلود ابزار zphisherبعد از اینکه ابزار رو از گیت هاب دانلود کردیم با دستور زیر وارد پوشه zphisher میشیم.cd zphisherو بعد دستور زیر :chmod +x zphisher.shحالا ابزار رو با دستور bash اجرا میکنیمbash zphisher.shبعد از درست انجام دادن مراحل بالا ابزار zphisher به این شکل اجرا میکنیممن اینجا میخوام یک صفحه جعلی برای اینستاگرام بسازم پس گزینه ۲ انتخاب میکنمانواع مختلف از فیک پیجما میتونیم با این ابزار سه نوع فیک پیج مختلف درست کنیم که بهتون معرفی میکنم:✔ ساخت فیک پیج صفحه لاگین اینستاگرام✔✔ ساخت فیک پیج پنل دریافت فالور،لایک،کامنت و... رایگان اینستاگرام✔✔✔ ساخت صفحه دریافت تیک ابی اینستاگرامنکته: یه خوبی که گزینه 3 داره اینکه که شخص اول یوزر و پسورد اینستاگرامشو میزنه و بعد به یه صفحه دیگه ارجاع میشه که ازش یوزر و پسورد ایمیلشو میخواد، یعنی یا یه تیر دو نشون میزنی?من اولی رو انتخاب میکنم برای اینکه یک صفحه برام بسازه شبیه به صفحه ورود اینستاگرامدر مرحله بعدی ابزار از ما میپرسه که از کدوم حالت میخواهید برای دسترسی به فیک پیج استفاده کنید که من اینجا چون میخوام فقط یه تست بزنم برای همین LocalHost رو انتخاب میکنم ولی شما میتونید از Ngrok یا Serveo هم استفاده کنید.localhostبعد از انتخاب گزینه مورد نظرتون ابزار یک لینک برای شما میسازه که شما باید اون لینک رو به قربانی بدید  بعد از اجرا لینک توسط قربانی ای پی قربانی نشون داده میشهصفحه ای که قربانی میبینه به شکل زیر است که در قسمت یوزرنیم و پسورد اگر اطلاعات اکانت خودشو وارد کنه اطلاعات برای ما ارسال میشه.بعد از وارد کردن یوزرنیم و پسورد توسط قربانی اطلاعاتش برای ما ارسال میشهحالا میتونیم راحت و بی دردسر وارد اینستاگرام قربانی بشیم ??امیدوارم از این آموزش خوشت اومده باشه اگه سوال یا مشکلی داشتی زیر همین پست بگو تا کمکت کنم</description>
                <category>امیرحسین امانی</category>
                <author>امیرحسین امانی</author>
                <pubDate>Sun, 31 Aug 2025 18:28:46 +0330</pubDate>
            </item>
                    <item>
                <title>همه چیز در مورد هک و امنیت با (Bad Usb) و کاربرد های آن</title>
                <link>https://virgool.io/@m_77898233/%D9%87%D9%85%D9%87-%DA%86%DB%8C%D8%B2-%D8%AF%D8%B1-%D9%85%D9%88%D8%B1%D8%AF-%D9%87%DA%A9-%D9%88-%D8%A7%D9%85%D9%86%DB%8C%D8%AA-%D8%A8%D8%A7-bad-usb-%D9%88-%DA%A9%D8%A7%D8%B1%D8%A8%D8%B1%D8%AF-%D9%87%D8%A7%DB%8C-%D8%A2%D9%86-ck2mjfwgxbs4</link>
                <description>بد یو اس بی یا (Rubber Ducky) یک ابزار برای تزریق کلیدواژه است که شباهتش به یک فلش معمولی آنرا خاص می کند! کامپیوترها آنرا بعنوان یک صفحه کلید عادی تشخیص می دهند و کلیدواژه‌های از پیش برنامه‌ریزی شده را با ظرفیت 1000 کلمه در هر دقیقه به کامپیوتر تزریق می‌کند ! هر کلمه را با عنوان payload می شناسیم.به کمک Rubber Ducky می توانیم مدیریت سیستم را در دست بگیریم و یا یک ویروس را روی سیستم اجرا کنیم .بد یو اس بی چیست؟بد یو اس بی ها دقیقا مانند یک فلش مموری هستند که روزانه بارها و بارها آن ها را مشاهده می کنید ، اما با این تفاوت که توسط یک هکر دستکاری شده و فایل های مخربی در آن هست که منتظر شما اونو به سیستم خودتون وصل کنید هکر با نوشتن کد هایی مخرب و جایگذاری آن ها در یک Bad USB ویا (Rubber Ducky) ، به فلش مموری دستور می دهد که هنگامی که به سیستم قربانی متصل شد یک سری فرایند ها را به صورت خودکار اجرا کند‌‌. این فرایند ها می تواند از دستیابی به اطلاعات شخصی و ذخیره سازی آن ها در فلش مموری باشد تا از کار انداختن کلی یک سیستم عامل و یا در دست گرفتن سیستم شخص باشد .Bad Usb (Rubber Ducky)زبان برنامه نویسی بسیار ساده Duckyزبان برنامه نویسی این سخت افزار، بسیار ساده است! نوشتن دستورات به سادگی نوشتن آن ها در نرم افزار یادداشت مثل نوت پد، یا تکست ادیت است.نوشتن “Hello World” با تایپ STRING Hello World انجام می شود.ایجاد مکث بین اجرا، با دستور DELAY صورت می‌پذیرد. استفاده از دستور DELAY 100 به معنای مکث در حد 100 میلی ثانیه بوده و دستور DELAY 1000 نیز به مدت یکثانیه در اجرا مکث ایجاد می‌کند.کلیدهای ترکیبی، ALT_F4، CONTROL_ESCAPE، WINDOWS_R و SHIFT_TAB نیز همان دستوراتی را اجرا می‌کنند که انتظارش را دارید.برای نوشتن کامنت، از دستور REM استفاده کنید.به همین سادگی. شما دستورات لازم را فرا گرفتید!دستورات Duckyساخت و یا خرید Rubber Duckyیکی از مهمترین بحث ها خرید Rubber Ducky هست ! البته برای خرید Bad Usb باید کلی هزینه کنید که واقعا سخت هست که واس یه usb اینقدر هزینه کرد . البته توی ایران جایی برای خرید Bad usb یا Rubber Ducky نیست . برای خرید این usb باید یه سر به سایت های خارجی بزنیم . یکی از معروفترین برند ها در این زمینه Hak5 هست . البته قیمت روز این usb تو خود سایت رسمی 130$ هست !(Hak5)یعنی برای خرید این Rubber Ducky باید ۴میلیون هزینه کنیم ! حالا میریم به بحث ساخت Rubber Ducky . تمام Bad Usb ها از یک برد ساخته شده اند به نام برد arduino . این برد هم قیمت کمتری نسبت به Hak5 داره هم اینکه میتونیم خودمون به کمک زبان Ducky برنامه نویسیش کنیم و هرکاری که میخوایم باهاش انجام بدیم .خب یکی از قدیمی ترین روش ها برای ساخت Rubber Ducky به دوران ویندوز های XP و قبل تر بر میگردد همانطور که احتمالا میدانید در آن روز ها قابلیتی در ویندوز های XP و قدیمی تر وجود داشت به نام autorun . این قابلیت به این صورت بود که برای مثال وقتی شما یک دیسک نصب برنامه را داخل سی دی رام میگذاشتید ، بدونه اینکه شما فایل نصب را از روی سی دی اجرا کنید ، فایل نصب به طور خودکار اجرا میشد . اگر بخواهیم فنی تر به این موضوع نگاه کنیم ، طرز کار به این صورت بود که هر دیسکی یا فلش مموری که وارد سیستم شما میشد ، ویندوز دنبال فایلی به اسم inf.autorun روی آن بود داخل چنین فایلی اطالعاتی مربوط به خودکار اجرا شدن یک فایل دیگر روی همان دیسک یا فلش مموری نوشته شده بود . برای مثال شما سی دی بازی مورد عالقه خود را خریده بودید . وقتی شما سی دی را داخل سی دی رام میگذاشتید ، کامپیوتر شما دنبال فایلی به نام inf.autorun روی سی دی بود. آن را پیدا میکرد و داخل این فایل نوشته شده بود که فایل نصب بازی به طور خودکار اجرا شود . نهایتا کامپیوتر شما فایل نصب بازی را به طور خودکار برای شما اجرا میکرد . این طرز کار قابلیت autorun در ویندوز بود .این بود روش ساخت Rubber Ducky امیدوارم موفق باشید .</description>
                <category>امیرحسین امانی</category>
                <author>امیرحسین امانی</author>
                <pubDate>Sun, 31 Aug 2025 16:13:37 +0330</pubDate>
            </item>
                    <item>
                <title>آشنایی با کد های مهم و خطرناک Linux</title>
                <link>https://virgool.io/@m_77898233/%D8%A2%D8%B4%D9%86%D8%A7%DB%8C%DB%8C-%D8%A8%D8%A7-%DA%A9%D8%AF-%D9%87%D8%A7%DB%8C-%D9%85%D9%87%D9%85-%D9%88-%D8%AE%D8%B7%D8%B1%D9%86%D8%A7%DA%A9-linux-a6tgj0w50r36</link>
                <description>لینوکس یک سیستم عامل سبک و بسیار قدرتمندی هست که بیش از ۹۰ درصد سرور های دنیا از این سیستم عامل استفاده می کنند. برای لینوکس خانواده های مختلفی تولید شده که هر کدام پکیج منیجر شخصی دارند. در این سری از آموزش های لینوکسی نحوه کار با دستورات پایه ترمینال لینوکس آشنا خواهید شد.آشنایی با کد های مهم Linuxاما اگر شما هیچ آشنایی با این دستورات نداشته باشید ، ممکن است فقط با زدن یک دستور به ظاهر ساده سیستم خودتان را کاملا به هم بریزید و اطلاعاتتان را پاک کنید در این اموزش ما چند دستور مخرب لینوکسی را معرفی میکنیم :Kali Linux1- حذف تمام فایل ها و پوشه هابا زدن این دستور که به صورت زیر است :$ rm -rf /Terminal2- فرمان خروجی به طور مستقیم به هارد$ any-command &gt; /dev/sdaKali Linux3- دستور Pwdهنگامی که وارد ترمینال لینوکس می شوید برای اینکه دقیقا بدانید در چه مکانی قرار دارید، می توانید از دستور pwd استفاده کنید.$ pwdدستور Pwd4- دستور Cdبرای جابجایی بین دایرکتوری ها از دستور cd استفاده میشود. مثلا وقتی میخواهیم از پوشه A به پوشه B برویم دستور cd B را وارد میکنیم. همچنین برای خارج شدن از دایرکتوری B هم از .. بعد از cd استفاده میکنیم.$ cd5- دستور LSاین دستور برای نشان دادن محتویات داخل یک دایرکتوری استفاده میشود. مثلا محل ذخیره پرونده های ما در پوشه B است و اگر ما از قبل وارد پوشه شده باشیم، می توانیم با دستور ls لیستی از پرونده ها را ببینیم.اگر بعضی از پرونده ها یا اسکریپت ها مخفی شده باشند ، میتوانیم با دستور ls -a پرونده های مخفی را ببینیم.اگر نیاز باشد دسترسی اسکریپت یا پرونده ایی را ببینیم که چه دسترسی هایی برای خواندن و نوشتن و ذخیره کردن دارد، میتوانیم از دستور ls -la استفاده کنیم.دستور ls$ ls5- دستور rmdirاین دستور مخفف (Remove Directory) که به معنای حذف پوشه است. اگر میخواهیم یک پوشه را پاک کنیم، در ترمینال دستور rmdir را وارد کرده و بعد از آن اسم پوشه را مینویسیم.$ rmdir6- دستور mkdirدستور mkdir مخفف (Make Directory) که به معنای ساختن یک پوشه است. اگر بخواهیم در ترمینال پوشه ایی بسازیم میتوانیم دستور mkdir را وارد کنیم و بعد از آن نام پوشه ایی که میخواهیم بسازیم را بنویسیم.$ mkdirنمونه ساختن پوشه در کالی لینوکس </description>
                <category>امیرحسین امانی</category>
                <author>امیرحسین امانی</author>
                <pubDate>Sun, 31 Aug 2025 16:08:33 +0330</pubDate>
            </item>
                    <item>
                <title>هش Hash  چیست؟ (صفر تا 100)</title>
                <link>https://virgool.io/@m_77898233/%D9%87%D8%B4-hash-%DA%86%DB%8C%D8%B3%D8%AA-%D8%B5%D9%81%D8%B1-%D8%AA%D8%A7-100-le9qz6zft5ql</link>
                <description>ساختار الگوریتمیعملکرد Hash چیست؟یک تابع هش یک تابع خاص است که می تواند هر نوع اطلاعات را به هر اندازه به مقادیر کوچک با اندازه ثابت تبدیل کند. محصول نهایی یک مقدار هش ، هش هضم یا کدهای هش نامیده می شود. کدهای هش از شکل دلخواه اعداد و حروف تشکیل شده است. این توابع هش به جای استفاده از داده های اصلی ، مزایای مختلفی را ارائه می دهند. برخی از انواع و نسخه های توابع هش وجود دارد ، و آنها معمولا برای اجرای امضاهای دیجیتال استفاده می شوند.عمکرد تابع Hash  در یک نگاهتوابع هش رمزنگاری مشابه عملکرد هش معمول است. اینها تابع هش هستند که برای اهداف امنیتی رمزنگاری استفاده می شوند. به عنوان یک عملکرد یک طرفه ، عملکرد هش امنیت زیادی را ارائه می دهد. اگر عملکرد هش معامله را داشته باشید ، تبدیل به فرم اصلی غیرممکن است. در عین حال ، تغییرات کوچک در پرونده اصلی باعث تغییر ناگهانی کلید هش می شود. این مفهوم اثر بهمن نامیده می شود ، به این معنی که تغییرات جزئی باعث تغییرات ذاتی می شود. بنابراین ، شما به سادگی با مقایسه کلیدهای هش آن ، اصالت آن را درک خواهید کرد. اندازه کوچک توابع هش به کامپیوترها امکان می دهد فقط در چند ثانیه در کل پایگاه داده جستجو کنند. اگر آنها به عنوان پرونده اصلی باقی بمانند ، اینگونه نخواهد بود. این مزایا باعث می شود که استفاده از توابع هش غیر قابل اجتناب باشد.مثالی از  نمونه جست و جو  تابع Hashما عملکرد هش را در مورد بیت کوین بررسی خواهیم کرد. برخلاف سایر ارزهای رمزپایه ، بیت کوین فقط از یادداشت های دفتر یا اطلاعات معاملات تشکیل شده است. در بلاکچین ، آن معاملات گروه بندی می شوند و در بلاک ها قرار می گیرند. الگوریتم های هش بسیاری وجود دارد. الگوریتم پرکاربرد در زنجیره بلوک SHA2–256 است (الگوریتم امن هش کردن نسخه 2 با طول 265 بیت). در اینجا عملکرد هش را در معاملات و بلاک ها بررسی خواهیم کرد.مقادیر هش در معاملاتیک معامله دو قسمت دارد: ورودی و خروجی. بخش ورودی از برخی عناصر تشکیل شده است. قبل از ارسال بیت کوین به آدرس های دیگر ، سیستم بلاکچین باید مطمئن باشد که مقدار مشخص شده بیت کوین را در اختیار دارید. برای اطمینان ، سیستم مقدار هش تراکنش ارجاع شده را اضافه می کند. معامله ارجاع شده آخرین معامله ای است که انجام داده اید. چرا؟ اگر از استخراج پاداش 6.25 بیت کوین دریافت کرده اید ، آن را از سیستم دریافت خواهید کرد. اگر می خواهید 6 BTC به Coinsfera ارسال کنید و 0.25 BTC را برای خود نگه دارید ، باید 6 BTC را به کلید عمومی Coinsfera و 0.25 BTC را به آدرس خود ارسال کنید.عملکرد مقادیر هش در بلاکچین نسبت به معاملات پیچیده است. بلاکچین از بلوک ها به عنوان واحد تشکیل شده است. هر بلوک از معاملات و دفترهای بیشماری تشکیل شده است. چگونه آن معاملات در بلوک واقع شده اند؟ برنامه نویسی از روش درخت مرکل برای قرار دادن این تراکنش ها در بلوک استفاده می کند. برای سهولت ، بیایید سه معامله انجام دهیم. چگونه آنها را در یک هش قرار می دهید؟ در مرحله اول ، باید یک هش فردی از آن معاملات پیدا کنیم. بعد ، مقدار هش دو دفتر اول را بدست آورید. در این سناریو ، معاملات باید عددی زوج باشند ، اما در اینجا عدد فرد است. در این حالت ، ما باید هش آخرین معامله را دوباره بنویسیم. بنابراین ، ما مقدار هش معامله 3 را دو بار تخمین می زنیم. ما مقدار هش 12 و مقدار هش 33 را دریافت می کنیم. در پایان ، آنها را دوباره اضافه می کنیم و آخرین مقدار هش بلوک را می گیریم. گره ها این فرایند را برای هر بلوک انجام می دهند. هر بلوک دارای هش بلوک قبلی خواهد بود و بلاکچین به همین ترتیب ادامه خواهد یافتنحوه رمزنگاری تابع Hash  در یک نگاهبا تمام مزایا ، مقادیر هش برای بلاکچین مناسب است. جستجوها را سریعتر می کند و معاملات ایمن تر نیز به اندازه کوچکی نیاز دارند. بهتر از استفاده از پرونده های کامل به جای آن است. بنابراین تا زمانی که مقادیر هش زنده باشد ، بلاکچین وجود خواهد داشت و تا زمانی که بلاکچین زندگی کند ، مقادیر هش نیز وجود خواهد داشت.</description>
                <category>امیرحسین امانی</category>
                <author>امیرحسین امانی</author>
                <pubDate>Sun, 31 Aug 2025 16:02:54 +0330</pubDate>
            </item>
                    <item>
                <title>هک پسورد از طریق sha256 در پایتون</title>
                <link>https://virgool.io/@m_77898233/%D9%87%DA%A9-%D9%BE%D8%B3%D9%88%D8%B1%D8%AF-%D8%A7%D8%B2-%D8%B7%D8%B1%DB%8C%D9%82-sha256-%D8%AF%D8%B1-%D9%BE%D8%A7%DB%8C%D8%AA%D9%88%D9%86-zqktv4cbkitj</link>
                <description>یه پروژه با آموزش چند گانه ، کار با کتابخانه hashlib ، کار با csv و دیکشنری ... سلام . با یک حل  مساله پایتون درخدمتتون هستم . چرا مسله حل میکنیم ؟ چون با کدهای جدید  اشنا شیم ، با الگوریتم های مختلف اشنا شیم و حتی با ارور های مختلف آشنا  شیم ! و خلاصه بیشتر برنامه نویسی رو کشف کنیم ...توجه : برای اینکه بهتر یاد بگیرید قطعه کدی رو تا زمانی که مطمئن نشدید فهمیدین کپی نکنید!هش  کردن یک فرایند یک طرف است ، شما میتونید با داشتن پسورد به هش شده اون  برسید ولی نمیتونید با داشتین هش شده رمز به اون رمز برسید . یک مثال میزنم  که جا بیفته ، شما میتونید با گوجه(رمز)،رب(رمز هش شده) درست کنید ولی نمی  تونید با رب(رمز هش شده) گوجه(رمز) درست کنید . اما راهی برای دور زدن این  قضیه وجود داره  : ما یک شیشه مربا داریم که نمیدونیم توش چه مربایی هست ،  تا حالا هم مزه هیچ مربایی رو نچشیدیم تا بدونیم چه مزه ایه و میخوایم  بدونیم تو اون شیشه چه مربایی هست  ؛ حالا ما سیب و پرتقال و انار و موز و  هویج و بالگ  و توت فرنگی داریم . با تمام اینا مربا درست میکنیم ( ولی  انصافا با موز نمیشه مربا درست کرد! ) بعد مزه هر کدوم از مربا ها رو با  مزه مربایی که نمیدونیم چیه مقایسه میکنیم و هر کدوم از مربا ها که با شیشه  مربا هم مزه بود یعنی مربا با اون میوه درست شده !! جواب پیدا شد ، مربا  انار!!!!!!!!!!!!!!!!این روش هکر ها است برای یافتن پسورد کاربر ها ، البته باید یه پسورد هش شده داشته باشیم .تعریف پروژه :ما یه فایل csv. داریم که در اون نام کاربر و پسورد هش شده نوشته شده . ما میخوایم بفهمیم  که رمز هر کاربر چی هست . چیزایی که میدونیم اینه که رمز هر کاربر عددی بین  1-9999 هست و میدونیم که با الگوریتم هش sha256 پسورد ها هش شدند.اینم فایل csv. که نام کاربر با رمز هش شده اونها نوشته شده :iliya,cfa8624c2d1e3c8c89316808b45ce942770e5ef9cd845dfd74baf4a616aa6d3a
arshia,03ac674216f3e15c761ee1a5e255f067953623c8b388b4459e13f978d7c846f4
mahsen,888df25ae35772424a560c7152a1de794440e0ea5cfee62828333a456a506e05
ralf,6b86b273ff34fce19d6b804eff5a3f5747ada4eaa22f1d49c01e52ddb7875b4b
jafar,b22eb34537f6f6753da6e0dc05713be0ccc35ef12dae0f6bf19b5206d373af33توجه کنید که در فایل csv. نباید خط خالی وجود داشته باشه وگرنه برنامه با مشکل مواجه میشهخب  همونطور که بالاتر گفتم ما رمز هش شده رو در اختیار داریم و می خوایم که  ببینم چه عددی رو هش کنیم  به پسورد های هش شده در فایل csv. میرسیم .  همونطور که می دونید هیچ راهی وجود نداره که بشه از هش شده ی چیزی به خود  اون چیز برسیم (برای اطلاعات بیشتر در مورد هش کردن یا هشینگ کلیک کنید) هکرها  میان یه برنامه مینویسن که رمز هایی تصادفی تولید و اون  ها رو با الگوریتم های مختلف هش میکنه ، بعد در یک دیکشنری قرار میده که  در اون رمز هش شده کلید (Key) و خود رمز مقدار (values) هست ، در مرحله بعد  رمز های هش شده ای که هکر در اختیار با رمز های هش شده داخل دیکشنری  مقایسه میشند و نتیجه رمز اون کاربر میشه . حالا ما میخوایم این برنامه رو  پیاده سازی کنیم ... https://virgool.io/p/zqktv4cbkitj/%D9%81%D8%B1%D8%A7%DB%8C%D9%86%D8%AF%DB%8C%DA%A9%D8%B7%D8%B1%D9%81%D9%87%D9%87%D8%B4%DA%A9%D8%B1%D8%AF%D9%86 1- چیزایی که نیاز به ایمپورت (import) شدن دارند رو مینویسیم :from csv import reader
from hashlib import sha256اول از کتابخونه  reader ، csv  رو ایمورپ میکنیم چون برای کار با فایل  هایی با فرمت csv. و خوندن (reader) اونها بهش  بهش نیاز هست ، بعد از  کتابخونه sha256 ، hashlib رو ایمپورت می کنیم .بهتره بجای اینکه کل یک کتابخونه رو وارد برنامه کنیم فقط بخشی که نیاز هست رو ایمپورت کنیم.2- یه دیکشنری خالی تعریف میکنیم :hash_password_to_password = {}در مراحل بعد از این دیکشنری برای نگهداری از رمز ها و رمز های هش شده استفاده میکنیم .3-ساخت اعداد 1-9999 و هش کردن اونها با استفاده از الگوریتم هش &quot;sha256&quot; :for password in range(1000,10000):اول  یک حلقه فور(for) می نویسیم و با استفاده از تابع (range)  اعداد یک تا  9999 رو درست بکنه و خب این رو هم میدونیم که باید یک دونه بیشتر از اونی  که میخوایم  عدد ایجاد بکنیم در رنج بنویسیم ، مثلا اگر مخوایم اعداد یک تا  پنج رو چاپ بکنه با بنویسیم (range(1,6.hashing_number = sha256(b&#039;%i&#039;% password).hexdigest()مثل  ریاضی انجام عملیات از داخلی ترین پرانتز اغاز میشه . اینجا داخلی ترین  پرانتر (b&#x27;%i&#x27;% password)هست &quot; &quot;b متن رو تبدیل به بایت(byte) تبدیل میکنه ،  i% به مفسر میگه که من بعدا بهت یک عدد(int)  میدم ، بعد بیرون از علامت های نقل قول یک درصد خالی میزاریم و مفسر  میفهمه که الان میخواد بهش عددی رو بده که گفته بود ، عدد که از 1-9999  باشه رو ریختیم تو متغیری به نام password . password یک عدد رو در خودش  ذخیره میکنه بعد که کارش در یک مرحله از فور(for)تموم شد مقداری که به  password منتسب شده پاک میشه و عدد بعدی جای اون رو میگیره .در مرحله بعد متن یا عددی که به بایت تبدیل کرده بودیم با استفاده از الگوریتم  sha256 هش میشن.  سپس یک نقطه و بعدش ()hexdigest مینویسیم تا فرایند هش کامل بشه.sha256(b&#039;%i&#039;% 1399) # &lt;sha256 HASH object @ 0x00000144EEABFC10&gt;
0x00000144EEABFC10 # 1395573652496 
sha256(b&#039;%i&#039;% 1399).hexdigest() 
#&#039;3485da2e4aaa4c692d04e570406af48b512f13137ab9e57718753a7a9f7b6e1c&#039;
# البته خیلی نیاز به دونستن نداره صرفا برای افرادی که مثل خودم کنجکاون نوشتم4-وارد کردن اعداد و اعداد هش شده به دیکشنری :hash_password_to_password[hashing_number] = passwordدر  این مرحله اعداد هش شده به عنوان کلید(keys) و خودِ اعداد مقدار (values)  اون کلید ها قرار میگیرند و به دیکشنری  hash_password_to_password اضافه  میشوند . یعنی اگر  یک keys(در اینجا اعداد هش شده) رو صدا بزنیم  , values (در اینجا اعدادی که هش میشن) میگن : بله !5-باز کردن فایل csv. و خواندن آن :with open(&#039;D:/iliya/users password.csv&#039;) as f:
    psswords_singer = reader(f)فایل رو باز میکنیم و  اون رو f نام گذاری میکنیم ، خط بعد متغیری بنام  psswords_singer تعریف میکینم که فایل باز شده را میخواند .for row in psswords_singer:
        name_users = row[0]از این طریق هر خط فایل را  میخواند و به row منتسب میشود . اولین عنصر row یعنی نام هر کاربر در متغیر name_users نگهداری میشود .for key in row[1:]:
            print(name_users,&#039;:&#039;,hash_password_to_password[key])حال  پسورد هش شده هر کاربر را ([:row[1) به عنوان کلید در نظر گرفته و در  دیکشنری ای که اول تعریف کردیم به دنبال آن پسورد هش شده میگردد و در آخر  نام کاربر به همراه رمز عبور آن چاپ میشود !!کد یکجا این پروژه :from csv import reader
from hashlib import sha256
hash_password_to_password = {}
for password in range(1,10000):
    hashing_number = sha256(b&#039;%i&#039;% password).hexdigest()
    hash_password_to_password[hashing_number] = password
with open(&#039;D:/iliya/users password.csv&#039;) as f:
    psswords_singer = reader(f)
    for row in psswords_singer:
        name_users = row[0]
        for key in row[1:]:
            print(name_users,&#039;:&#039;,hash_password_to_password[key])حالا  فایل csv. بالا رو بر دارید و در کامپیوتر خودتون ذخیره کنید ، سپس آدرس  فایل رو به محلی که فایل در اون ذخیره شده تغییر بدید و برنامه رو اجرا  کنید ...امیدوارم  کمکتون کرده باشم . با نظرات و لایک هاتون ممیتونید از من حمایت کنید ‍، و  با دنبال کردن من میتونید از جدید ترین پست های من در زمینه برنامه نویسی  پایتون مطلع شوید . </description>
                <category>امیرحسین امانی</category>
                <author>امیرحسین امانی</author>
                <pubDate>Fri, 13 Dec 2024 12:15:45 +0330</pubDate>
            </item>
                    <item>
                <title>بررسی اصول SOLID با تصاویر</title>
                <link>https://virgool.io/@m_77898233/%D8%A8%D8%B1%D8%B1%D8%B3%DB%8C-%D8%A7%D8%B5%D9%88%D9%84-solid-%D8%A8%D8%A7-%D8%AA%D8%B5%D8%A7%D9%88%DB%8C%D8%B1-xym0jocryicm</link>
                <description>اگر با برنامه نویسی شئ‌گرا آشنایی داشته باشید احتمالا اسم قوانین solid یا SOLID principles به گوشتان خورده است.این  پنج قانون، دستور العمل هایی هستند که برای تولید، گسترش و نگهداری راحت  تر برنامه ها از آنها استفاده می‌شود. این قوانین توسط مهندس نرم افزار  Robert C. Martin فراگیر شد.در  اینترنت مطالب بسیار زیادی در رابطه با قوانین solid یافت می‌شود، اما به  ندرت مطلبی پیدا میکنید که این مفهوم را با تصاویر توضیح داده باشند. این  امر باعث سخت تر شدن درک مطلب برای کسانی که مثل من با تصاویر بهتر یاد  میگیرند می‌شود.بنابراین مهمترین ویژگی این نوشته تصاویریست که هدف هر یک از قوانین را برای درک بهتر به نمایش می‌گذارند.همانطور  که خواهید دید برخی از این اصول شاید شبیه هم به نظر بیایند، اما یک هدف  رو دنبال نمی‌کنند. می‌توان از یک اصل یا قانون پیروی کرد در حالی که قانون  دیگری را نادیده گرفته باشیم. حتی اگر مشابه هم باشند.برای ساده کردن کار، من Class ها رو مثال میزنم اما شما میتونید برای فانکشن‌ها، متدها، و ماژول ها هم ازش استفاده کنید.اصول SOLIDتک وظیفه بودن یا Single Responsibilityیک کلاس باید تنها مسئولیت یک کار رو بر عهده داشته باشدتک وظیفه بودناگر  یک کلاس چندین مسئولیت داشته باشد، احتمال ایجاد باگ ها هم بیشتر می‌شود.  به این دلیل که اگر تغییراتی در یکی از وظیفه های کلاس ایجاد کنیم، ممکن  است که سایر بخش ها بدون اینکه ما اطلاع داشته باشیم تحت تاثیر قرار  بگیرند.هدفهدف  این اصل تفکیک کردن وظیفه ها است، بنابراین اگر به واسطه‌ی تغییراتی که در  کد بوجود می‌آوریم باگی ایجاد شود، روی سایر بخش ها که وظیفه مرتبطی  ندارند تاثیری نمی‌گذارد.باز-بسته یا Open-Closedکلاس ها باید قابل گسترش و توسعه باشند، اما جلوی تغییر آنها را گرفت.اگر رفتار یک کلاس را تغییر بدهیم، روی تمام بخش هایی از سیستم که از این کلاس استفاده میکنند تاثیر می‌گذارد.حالت  ایده آل برای این که یک کلاس بتواند کار بیشتری انجام دهد آن است که به آن  فانکشنی اضافه کنیم که تا الان وجود نداشته است، نه اینکه فانکشنی را  تغییر بدهیم.هدفهدف  این اصل این است که بتوانید رفتارهای یک کلاس رو گسترش بدهید.بدون اینکه  رفتارهای قبلی کلاس تغییر کند. این امر باعث جلوگیری از مشکلات و باگ ها در  جاهایی که از این کلاس استفاده شده است می‌شود.جانشینی لیسکو یا Liskov Substitutionاگر  S را زیر گروه T در نظر بگیریم، بنابراین باید بتوانیم بدون اینکه تغییری  در برنامه ایجاد کنیم اجزای T را جایگزین اجزای S در نظر بگیریم.اگر  یک کلاس داشته باشید و کلاس دیگری از روی آن بسازید، به آن کلاس والد  میگوییم و کلاس دیگر نیز کلاس فرزند محسوب می‌شود. کلاس فرزند باید تمام  کارهایی که کلاس والد می‌تواند انجام دهد را انجام دهد.  به این فرایند ارث  بری می‌گویند.کلاس فرزند باید بتواند تمام درخواست ها را مشابه والدش پردازش کند و نتیجه مشابه را برگرداند.در  تصویر می‌بینید که کلاس والد وظیفه تحویل قهوه(میتونه هر نوعی از قهوه  باشه) رو بر عهده دارد. قابل قبول است که کلاس فرزند وظیفه تحویل کاپوچینو  را برعهده داشته باشد، زیرا این یک نوع مشخص از قهوه است. اما تحویل آب  قابل قبول نیست.اگر کلاس فرزند نتواند این شرایط رو برآورده کند، به معنی آن است که کاملا تغییر کرده و این قانون را نقض می‌کند.هدفهدف این اصل آن است که بتوان از کلاس والد و فرزند برای انجام یه کار بدون اینکه مشکلی بوجود آید استفاده کرد.تفکیک رابط‌ها یا Interface Segregationکلاینت‌ها نباید وابسته به متدهایی باشند که از آنها استفاده‌ای نمی‌کنند.هنگامی که یک کلاس شامل action هایی است که برای آن استفاده‌ای ندارند، باعث ایجاد باگ یا غیر قابل استفاده شدن آن کلاس می‌شوند.یک  کلاس باید کارهایی رو انجام بدهد که برای نقش آن لازم است، بقیه کارها  باید به صورت کامل حذف و یا این که به کلاس دیگری که به آن نیاز دارد منتقل  شوند.هدفهدف این اصل آن است که عملکردها را به بخش های کوچکتری تقسیم کنیم تا یک کلاس تنها عملکردهای مورد نیاز خود را اجرا کند.وارونگی وابستگی ها یا Dependency Inversionماژول های سطح بالا نباید به ماژول های سطح پایین وابستگی داشته باشند. بلکه هر دو باید به سطح انتزاعی وابستگی پیدا کنند.انتزاع نباید به جزئیات وابستگی داشته باشد، اما جزئیات باید به سطح انتزاع وابستگی داشته باشند.در ابتدا اجازه بدید که اصطلاحات رو ساده تر تعریف کنیم.ماژول یا کلاس سطح بالا: کلاسی است که یک عمل را با یک ابزار اجرا میکند.ماژول یا کلاس سطح پایین: ابزار مورد نیاز برای انجام یک عمل است.انتزاع: نشان دهنده یک رابط، مابین دو کلاس است.جزئیات: نحوه کار ابزار است.این  اصل بیان میکند که یک کلاس نباید برای انجام یک کار ابزاری رو درون خودش  داشته باشد. بلکه باید با استفاده از interface ها اجازه استفاده از یک  ابزار را به کلاس بدهد.همینطور بیان میکند که کلاس و interface نباید جزئیات نحوه کار ابزار را بدانند.هدفاین اصل برای کاهش وابستگی یک کلاس سطح بالا به کلاس های سطح پایین با استفاده از interface ها استفاده می‌شود.امیدوارم  که این مطلب برای شما هم مفید باشه، اگر سوال یا پیشنهادی در این رابطه  دارید لطفا در قسمت کامنت ها نظر بدید. ممنون از وقتی که گذاشتید.</description>
                <category>امیرحسین امانی</category>
                <author>امیرحسین امانی</author>
                <pubDate>Wed, 11 Dec 2024 01:30:12 +0330</pubDate>
            </item>
                    <item>
                <title>Git workflow | Centralized workflow</title>
                <link>https://virgool.io/@m_77898233/git-workflow-centralized-workflow-cm1cahf2469u</link>
                <description>? مراقب باشیم!زﻣﺎﻧﯽ ﮐﻪ ﻣﺒﺤﺚ workflow ﻣﻄﺮح ﻣﯿﺸﻪ، ﺗﺼﻤﯿﻢ‌ﮔﯿﺮی اﯾﻦ ﻣﻮﺿﻮع ﺧﯿﻠﯽ ﺑﺴﺘﮕﯽ ﺑﻪ ﻓﺮﻫﻨﮓ ﺗﯿﻢ ﯾﺎ culture داره. ﺑﺎ اﺿﺎﻓﻪ ﺷﺪن workflow اﯾﻦ اﻧﺘﻈﺎر ﻣﯿﺮه ﮐﻪ، ﮐﺎراﯾﯽ ﺗﯿﻢ  اﻓﺰاﯾﺶ ﭘﯿﺪا ﮐﻨﻪ! ﮔﺮدش ﮐﺎر ﻣﯿﺘﻮﻧﻪ ﯾﻪ مسئولیت اﺿﺎﻓﻪ روی ﺗﯿﻢ اﯾﺤﺎد ﮐﻨﻪ و  ﻃﺒﯿﻌﺘﺎ ﮐﺎﻫﺶ productivity در ﺗﯿﻢ و ﻣﺤﺼﻮل رو ﺑﻬﻤﺮاه داره.انتخاب استراتژیبرای انتخاب استراتژی مناسبِ تیم و محصول خودمون، باید این موارد رو درنظر بگیریم:? آیا این workflow مناسب سایز تیم یا محصول من هست؟? اگه به اشتباه یا خطایی برخورد کردم، این workflow به داد من میرسه؟? آیا این workflow با اضافه شدنش، سربار ذهنی غیرضروری جدیدی به تیم وارد میکنه؟ورک‌فلِو متمرکز | Centralized Workflowمیشه  گفت این استراتژی در git، ساده ترین روش برای مدیریت codebase محصول به  حساب میاد. در این روش، یک default branch وجود داره و اون master نامیده  میشه. در این روش فقط یک نقطه ی ورود برای همه ی تغییرات در پروژه وجود  دارد. درسته که این روش فرق چندانی با نگهداری کد بصورت local نداره، ولی  باعث میشه برنامه نویس ها فارق از بقیه ی تغییرات اعمال شده توسط بقیه  افراد تیم، بتونن کد بزنن و فیچر خودشون رو به repository اضافه کنند.#نظرشخصی: این روش بنظر من واسه تیم های کوچک و کمتر از ۵ نفر مناسبه⚫️ ایجاد تغییرات و commitزمانی  که توسعه دهنده repository رو clone میکنه، میتونه با استفاده از فرآیند  های گیت مثل edit،stage،commit تغییرات جدیدی رو بصورت local در repository  اعمال کند.برای بررسی تغییرات میتوانید از این دستور استفاده کنید:⚫️ انتقال کامیت های جدید به central repositoryزمانی  که تغییرات جدیدی در local repository کامیت شد، نیازه که این تغییرات با  بقیه ی برنامه نویس های محصول، به اشتراک گذاشته شود.با  اجرا کردن این فرمان کامیت های جدید، در برنچ master که از اون بعنوان  central repository استفاده میکنیم، push میشه. این احتمال وجود داره که  تغییرات جدید کد، باعث بشه هم تیمی شما هنگام push کردن کدهای جدید به خطای  مغایرت یا conflict error برخورد کنه!⚫️ اولین راهِ چارهاولین راهکار برای رفع conflict در این شرایط اجرای git pull هست که در ادامه راهکار جامع تری رو توضیح میدم.⚫️ مدیریت conflictsاگه  local commit های توسعه با central repository هم‌خوانی نداشته باشه، گیت  از push کردن تغییرات خودداری میکنه به این دلیل که این امکان وجود داره که  central repository دچار overwrite شود.? یک مثال از این ورک‌فلوبیایید  یک مثال کلی در مورد چگونگی همکاری یک تیم کوچک معمولی با استفاده از این  گردش کار بیاوریم. خواهیم دید که چگونه دو برنامه نویس ، John و Mary ، می  توانند روی ویژگی های جداگانه کار کنند و مشارکت های خود را از طریق یک  مخزن متمرکز به اشتراک بگذارند.توسعه feature توسط Johnدر local repository خود ، John می تواند فیچر خود را با استفاده از فرآیند استاندارد Git  توسعه دهد. به یاد داشته باشید از آنجا که این دستورات کامیت های local را  ایجاد می کنند ، John می تواند این روند را هر چند بار که بخواهد تکرار کند  بدون اینکه نگران تغییرات موجود در central repository باشد.توسعه feature توسط Maryدر  همین حال ، Mary با استفاده از همان فرایند در حال کار بر روی feature خود  در local repository خود است. برای Mary مانند John مهم نیست که در  central repository چه می گذرد و اهمیتی ندارد که John مشغول چه کاری است.  زیرا همه repository ها local و خصوصی هستند.انتشار feature توسط Johnهنگامی  که John فرآیند توسعه ی feature خود را به پایان رساند باید local commit  های خود را در central repository منتشر کند تا سایر اعضای تیم بتوانند به  آن دسترسی پیدا کنند. او می تواند این کار را با دستور git push انجام دهد:انتشار feature توسط Maryبیایید  ببینیم اگر Mary سعی کنه feature خود را انتشار دهد، پس از اینکه John با  موفقیت تغییرات خود را در central repository منتشر کرد ، چه اتفاقی می  افتد. اون نیز مانند John از دستور     git push استفاده میکند ولی با خطا  مواجه میشود:استفاده از rebase توسط Maryکاری که Mary میتواند انجام دهد استفاده از git pull است. با این کار تغییراتی که قبلا John در central repository منتشر کرده  است، به local repository مری انتقال می‌یابد و کامیت های John هم با کامیت  های Mary ادغام میشود:در  دستور بالا، با اضافه کردن rebase-- پس از یکسان سازی local repository با  central repository، تمام کامیت های Marry به ابتدای برنچ master انتقال  می‌یابد:رفع یک تداخل ( merge conflict ) توسط Marryفرآیند  rebasing با انتقال هر کامیت local به برنچ master انجام میشود. این به  این معناست که تداخلات کد بجای حل شدن در یک merge commit بزرگ، کامیت به  کامیت حل میشوند. این قابلیت به نگهداری تمیز تر کد کمک زیادی میکند. از  طرف دیگر، این امر باعث میشود که ریشه ی اشکالات را راحت‌تر پیدا کنید و  درصورت نیاز، بازگرداندن تغییرات ( roll back ) با کمترین تاثیر بر روی  پروژه و محصول انجام شود.اگر  Mary و John روی دو feature مختلف کار کنند، بعید بنظر میرسد که روند  rebasing دچار تداخل شود. درغیر اینصورت git فرایند را با این پیام متوقف  میکند:نکته  ی جالب در مورد git این است که هر کس میتواند merge conflict خود را حل  کند. در مثال ما، Mary به سادگی با اجرای git status میتواند فایل های  دارای تداخل را در بخش Unmerged paths مشاهده کند:سپس  فایل (ها) را همانطور که میخواهد ویرایش میکند. زمانی که به نتیجه ی مطلوب  رسید، میتواند فایل ها را به stage اضافه کند و اجازه دهد git rebase بقیه  ی کاراها را انجام دهد:این تنها کاری است که باید انجام شود. git به commit بعدی میرود و این فرایند را تکرار میکند تا همه ی تداخلات برطرف شود.اگر  در این فرآیند به مرحله ای رسیدید که نمیدانید چخبر است، وحشت نکنید! فقط  دستور زیر را اجرا کنید و به همان مکانی که شروع کردید برمیگردید:انتشار موفق feature توسط Maryبعد از انجام مراحل قبل و همگام سازی هر دو ریپوزیتوری ( local و central ) Mary میتواند تغییرات خود را با موفقیت منتشر کند. در پست های آینده راهکار های مناسب تیم های بزرگ تر را ارائه میکنم.</description>
                <category>امیرحسین امانی</category>
                <author>امیرحسین امانی</author>
                <pubDate>Mon, 02 Dec 2024 16:21:01 +0330</pubDate>
            </item>
                    <item>
                <title>مقایسه زمان سفر مسیریاب نشان، ویز و گوگل‌مپز</title>
                <link>https://virgool.io/@m_77898233/%D9%85%D9%82%D8%A7%DB%8C%D8%B3%D9%87-%D8%B2%D9%85%D8%A7%D9%86-%D8%B3%D9%81%D8%B1-%D9%85%D8%B3%DB%8C%D8%B1%DB%8C%D8%A7%D8%A8-%D9%86%D8%B4%D8%A7%D9%86-%D9%88%DB%8C%D8%B2-%D9%88-%DA%AF%D9%88%DA%AF%D9%84-%D9%85%D9%BE%D8%B2-dpczkzjexibo</link>
                <description>برای مقایسه زمان سفر اپلیکیشن مسیریاب نشان از وب‌سرویس مسیریابی پلتفرم نقشه نشان (Neshan Direction + ETA API)،  نقشه آنلاین Waze و Google Maps استفاده میکنیم. روش کار به این شکل هست  که مسیرهای متعددی با توزیع مکانی خاص رو مورد بررسی قرار میدیم. هر روز  برای هر مسیر انتخابی ۷۲۰ بار گزارش میگیریم (هر دو دقیقه یک ریکوئست) و  خصوصیات مختلف این مسیرها رو به دقت مونیتور میکنیم.ویز - گوگل‌مپز - نشاندر  برخی موارد هم حالت‌های ویژه ای هستن که چون برای کاربران مهم هستن نسبت  بهشون اهتمام ویژه ای داریم (مثلاً مسیرهایی که در تهران وارد طرح میشن).  تو این پست یک مسیر از غرب تهران به داخل طرح ترافیک در مرکز تهران رو  انتخاب کردم که با هم مرور کنیم.مبدا: پونک، بزرگراه آبشناسان، نرسیده به سردار جنگل. (35.769852, 51.325989)مقصد: قیام، خراسان، بین خوش لهجه و بیگی. (35.665794, 51.443714)مقایسه ۴۸ ساعتی مسیر مذکور در تهران. از ساعت ۱۸ روز یکشنبه ۶ آذر ماه تا ساعت ۱۸ سه شنبه ۶ بهمن ۱۴۰۲نمودار  بالا فقط شِمایی از تغییرات زمان سفر این سه سرویس را نشان میدهد. خط آبی،  زمان سفر گوگل مپز، خط قرمز، زمان سفر مسیریاب نشان و خط سبز، زمان سفر  مسیریاب ویز هستند.مقایسه زمان سفر در یک شبانه روز دوشنبه ۷آبان ۱۴۰۲مقایسه زمان سفر در ساعات پیک ترافیک. ساعت ۶ صبح تا  ۲۲ روز دوشنبه ۷آبان ۱۴۰۲برای اینکه بازه های تصاویر بالا بزرگ بودن و ممکنه خیلی قابل مقایسه نباشه یک نمودار از بازه زمانی کوتاه تری رو با هم ببینیم:چهارشنبه ۹ آبان ماه ۱۴۰۲ از ساعت ۹:۳۰ تا ۱۰:۳۰تفاوت  های موجود در این نمودار ها از جاهای مختلفی سرچشمه میگیره.مهم ترین دلیل  برای این مساله تفاوت در الگوریتم مسیریابی نشان، ویز و گوگل مپز هست. این  مورد باعث میشه که مسیرها عینا مثل هم نباشند و گاهی حتی تفاوت فاحشی داشته  باشند. ولی بطور عمومی مشخص هست که مرتبه زمان سفرهای نشان خصوصا نسبت به  ویز اوضاع خوبی داره با توجه به اینکه مسیرها مقداری متفاوت هستند.یکی  دیگه از کارایی که ما خیلی بهش دقت داریم این هست که کاربران مون چقدر  نسبت به زمانی که بهشون میدیم دیرتر یا زودتر میرسند؟ سوال مهمی هست که دید  بهتری رو میده. برای این مورد ما زمانی که به کاربر میدیم و زمانی که در  واقع به مقصد میرسه رو بصورت لایو مونیتور میکنیم. این جا نکته خیلی مهمی  هست و اونم اینه که حالت های مختلفی پیش میاد که همه شون با جزئیات دارن  مونیتور میشن. مثلا کاربرانی که مسیر رو با ما میرن. یا اینکه مقداری رو با  ما میرن و مقداری رو خودشون تصمیم میگیرند که مسیر رو تغییر بدن. من این  جا میخوام درباره همه کاربران عزیز نشان صحبت کنم. اونها که از ما مسیر  گرفتن بدون در نظر گرفتن اینکه چند درصد از مسیر رو با ما بودن یا نه. در  بازه چند ساعت، داستان سفر همه کاربران نشان در تهران این بوده:مقایسه زمان رسیدن تخمینی نشان با واقعیت برای همه کاربران نشان. یکشنبه ۱۳ آبان ماه ۱۴۰۲ از ساعت ۷:۳۰ تا ۱۱:۳۰ما  کاربران رو تو نمودار فوق به ۳ بخش عمده تفکیک میکنیم. اونها که زمان  تخمینی نشان با اون چیزی که در واقعیت رسیدن قابل قبول بوده با رنگ سبز  نشون شون دادیم. اونها که دیرتر از زمانی که ما گفتیم رسیدن و خطا از  نظرشون احتمالا قابل قبول نیست رو با قرمز نشون دادیم. و اونها که زودتر از  حد خطا قبول رسیدن رو با بنفش نشون دادیم.این  نمودار نکته خیلی جالبی داره. بیش از اونکه فکرشو بکنید داستان داشتیم تا  این نمودار رو بکشیم. نکته توی تعریف اون &lt;حد قابل قبول&gt; هست. حد  قابل قبول چیه؟ ما اومدیم با نظرسنجی که انجام دادیم آستانه قابل قبول بودن  زمان سفر رو تعیین کردیم. مثلا تو مسیری که نشان میگه ۳۰ دقیقه تو راه  هستید، اگر کاربر بیش از ۴ دقیقه دیرتر برسه اون رو در دسته قرمز ها و اگر ۴  دقیقه زودتر برسه اون رو در دسته بنفش ها قرار میدیم. یا برای مسیر ۱۵  دقیقه، کاربر انتظار نداره خطای تخمین زمان سفر از ۲ دقیقه بیشتر باشه. مدل  کردن این عدد ها و چسبوندن چند تا چیز بهشون ما رو به یه سری فرمول عجیب  غریب رسوند که خب واقعا با دیدنش میگفتیم خب ایول ما خیلی کار خفنی کردیم  ولی از کجا معلوم این درست باشه؟ روشن کردن اینکه خود این معیار چقدر درسته  یه پروسه دیگه بود. در نهایت ما تونستیم خطا های زمان سفر رو به طرز بسیار  تر و تمیز توی یه نمودار گوسی توصیف کنیم. در واقع اون تابع آستانه خطا به  ما کمک کرد که دیگه بصورت discrete خطا ها رو نسنجیم و بدونیم که در واقع  چی خطا هست و چی خطا نیست.نکته  بعدی که تو این نمودار خیلی حائز اهمیت هست اینه که من اینجا اونهایی که  کلا ازمون مسیر گرفتن رو نشون دادم. مقدار خیلی زیادی از اونها که خطای بیش  از حد آستانه رو تحمل میکنن (بیش از ۵۰ درصدشون) همون هایی هستن که دقیقا  مسیر نشان رو نمیرن و خب طبیعتا زمانی که پیش بینی کردیم در همون ابتدا  مقداری دچار خطا میشه.اگر  بخوام گزارش رو دقیق تر کنم اون دسته از کاربران نشان که مسیرشون بیش از  ۸۰ درصد با مسیری که مسیریاب داده تطابق داره بطور میانگین بیش از ۸۵  درصدشون خطایی کمتر از آستانه رو تو مسیرها میبینند.یک  مورد مهم دیگه پایدار بودن مسیرها است. پایدار بودن مسیرها یعنی اینکه  مسیر ها پشت هم تغییر نکنند و اینطور نباشه که هر بار که کاربر مسیر  میگیره، با اختلاف چند دقیقه ناگهان مسیر تغییر کنه. ما زمان زیادی رو صرف  ثبات مسیر هامون کردیم. پایدار نگه داشتن مسیرها از یکجا به بعد کار بشدت  پیچیده ای میشه. چرا؟ چونکه شما کافی هست فقط دویست متر از مسیر رو اشتباه  پیش بینی کرده باشی. الگوریتم مسیریابی یک کوچه رو که جابجا کنه یهو ۵۰  درصد از مسیر جدید با مسیر قبلی تطابق نداره. زیبا نیست؟ :)مسیر میدان آزادی به میدان تجریش و بالعکس.این  سرویس میاد و هر ۲ دقیقه مسیر هایی که زمان شون رو داریم مونیتور میکنیم  رو متر به متر با قبلی مقایسه میکنه. تو عکس بالا از تجریش به آزادی (خط  بنفش) با مسیر از آزادی به تجریش ( خط آبی) رو مشاهده میکنید. پایداری مسیر  خیلی داستان داره و ما داریم روش کار میکنیم ولی خب اوضاع مون نسبت به قبل  به مراتب خیلی بهتر هست.خب  حالا موقع این هست که این گزارش ها رو کنار هم بذاریم و ببینیم اوضاع  چطوره؟ بذارید مقداری زوم کنیم تو این نمودار ها و یکی از جاهایی که ترند  ها مقداری متفاوت هست رو دقیق تر چک کنیم:مقایسه زمان سفر در مسیر مذکور- شنبه ۱۹ آبان ساعت ۱۸-۱۹همونطور  که مشخص هست نشان در این ساعت داره مسیر تقریبا ثابت و زمان سفر ثابتی رو  میده. و گوگل و ویز هر دو دارن به سمت زمان سفر های بالاتر میرن. البته این  رو باید با نیم ساعت فاصله بگیریم چون کسایی که ساعت ۱۸ استارت مسیریابی  رو زدن حدودا از ۱۸:۳۰ به بعد میرسند به مقصد.مقایسه زمان سفر واقعی و پیش بینی شده در مسیریاب نشان. مسیرهایی که از ساعت ۱۸-۱۹ آغاز شده اند.خب  جاهایی که پیک ویز رو میبینیم ولی نشان چندان تغییری تو زمان سفر نداشته،  خطا های زمان سفر کاربران افزایش چندانی نداشته و حدود ساعت ۱۹ ماکزیمم دقت  زمان سفرمون رو شاهد هستیم (خط سبز).ولی  همیشه اوضاع اینطوری نیست. برای مثال هم زمان با بازی ایران ـ قرقیزستان ترافیک  خیابان ها بشدت افت شدیدی رو شاهد بود ولی الگوریتم های ما با تاخیر متوجه  شرایط آنومالی شدن، در حالی که ویز تقریبا با ۲۰ دقیقه تاخیر اوضاع رو درک  کرد. البته ما همزمان داشتیم رو سرویس تست مسیریابی مون اوضاع رو مونیتور  میکردیم و سرویس تست مون با سرعت خیلی خوبی متوجه اوضاع شد ولی خب معمولا  سرویس تست ما ۳-۴ ماه از سرویس عملیاتی جلوتر هست تا دلیور بشه و به دست  کاربر برسه.همزمان با بازی ایران - قرقیزستان افرادی که زودتر از زمان پیش بینی شده رسیدن(خط بنفش) افزایش ناگهانی دارن.ما  سرویس های مونیتورینگ دیگه ای هم داریم که اینجا اشاره نکردم. مثلا برای  یکی از این مونیتورینگ ها نزدیک به ۱۵ ماه فکر و ایده پردازی شده. سرویسی  که بگه کاربر چه حسی نسبت به کل مسیر داشت؟ اصلا به نظرتون چجوری میشه  همچین چیزی رو مدل ریاضی براش داشت؟ شرمنده روی ماهتون ولی اینو هنوز  نمیتونم منتشر کنم. امیدوارم یه روز این رو براتون دمو کنیم :)</description>
                <category>امیرحسین امانی</category>
                <author>امیرحسین امانی</author>
                <pubDate>Mon, 02 Dec 2024 14:26:48 +0330</pubDate>
            </item>
                    <item>
                <title>انواع متدهای زبان python</title>
                <link>https://virgool.io/@m_77898233/%D8%A7%D9%86%D9%88%D8%A7%D8%B9-%D9%85%D8%AA%D8%AF%D9%87%D8%A7%DB%8C-%D8%B2%D8%A8%D8%A7%D9%86-python-k7lrzw0v63nf</link>
                <description>زبان python دارای  سه نوع متد، شامل: Instance method, Class method و Static method است.  متدهای یک کلاس به طور پیش فرض از نوع Instance method است و اگر بخواهیم  تغییری در این روند ایجاد کنیم باید از decorator های مخصوص استفاده کنیم  که در ادامه به شرح هرکدام می پردازیم .متدهای نمونه (Instance method):رایج  ترین و قدرتمندترین متدها در زبان پایتون هستند. این متدها از پارامتر  self به عنوان اولین آرگومان در ورودی استفاده می کنند (بدیهی ست که  استفاده از سایر ورودی ها امکان پذیر است). با استفاده از self که به  Instance کلاس اشاره می کند، دسترسی به سایر متد ها و attributes های کلاس  امکان پذیر است.Syntax:class C(object):
    def fun(self, arg1, arg2, ...):
       ....برای استفاده از instance method ها باید یک نمونه از آن ایجاد کرد و از اعضای آن ها استفاده کرد:c = C()
c.fun(&amp;quotarg1&amp;quot, &amp;quotarg2&amp;quot, ...)متدهایی که به این صورت تعریف شوند، با هر بار ایجاد نمونه از کلاس می توانند نتایج متفاوت داشته باشند. این متد ها با استفاده از self.__class__ به اعضای کلاس دسترسی دارند، بنابراین قادرند وضعیت class و وضعیت instance ساخته شده از کلاس را تغییر دهند.متدهای کلاس (Class method):این  نوع از متد با استفاده از دکوراتور داخلی (builtin) classmethod@ ایجاد (و  شناخته) می شوند. یک کلاس متد پارامتر cls را به عنوان اولین آرگومان در  ورودی می پذیرند (مثل حالت قبل استفاده از سایر ورودی ها نیز امکان پذیر  است). cls به اشیای درون کلاس اشاره می کند و نه نمونه ساخته شده از آن،  بنابراین Class method ها می توانند وضعیت کلاس را تغییر دهند.Syntax:class C(object):
    @classmethod
    def fun(cls, arg1, arg2, ...):
       ....برای استفاده از کلاس متدها نیازی به ساخت نمونه از آن نیست و می توان از کلاس متدها به صورت زیر استفاده کرد:c = C.func(&amp;quotarg1&amp;quot, &amp;quotarg2&amp;quot)کلاس  متدها محدود به کلاس هستند و نه نمونه ساخته شده (Instance) از کلاس و می  توانند state کلاس را از طریق پارامتر cls تغییر دهند که تغییر در کلاس  منجر به تغییر state نمونه های ساخته شده از کلاس نیز خواهد شد.عموما  از کلاس متدها برای ایجاد factory method استفاده می شود. factory method  همانند constructor ها یک نمونه از کلاس برای use case های مختلف برمی  گردانند.متدهای استاتیک (Static method):این  متد ها با استفاده از دکوراتور staticmethod@ ایجاد (و شناخته) می شوند.  در ورودی این نوع متد ها پارامتر معناداری مانند cls یا self وجود ندارد  اما مانند تمام متد ها امکان دریافت ورودی را دارند.این  متدهای کاربرد زیادی در برنامه نویسی پایتون ندارند و به جای آن ها می  توان از module functions (توابعی که در یک ماژول دیگر قرار دارد، مثلا  ماژول utils) استفاده کرد.Syntax:class C(object):
    @staticmethod
    def fun(arg1, arg2, ...):
        ...استاتیک  متدها نیز محدود به کلاس هستنداما قادر نیستند state کلاس یا نمونه ساخته  شده از کلاس را تغییر دهند و تنها به داده هایی که به آنها دسترسی دارند  محدود شده اند. به طور کلی استاتیک متدها اطلاعاتی از state کلاس یا نمونه  ساخته شده از کلاس ندارند. استاتیک متدها در حقیقت چیزی جز یک callable در  یک کلاس نیستند که برای دسترسی به آن ها نیازی به نمونه سازی از کلاس نیست.کاربرد  استاتیک متدها در مواقعی است متد وظیفه پردازش مجزایی از سایر فعالیت  اعضای کلاس را بر عهده دارد و نیاز به  بیشتر برای ایجاد متدهای کاربردی و  یا محاسباتی است.مثال)from datetime import date


class Person:
    def __init__(self, name, age):
        self.name = name
        self.age = age

    def sayHello(self, name):
        return(f&amp;quotHello {name})

    @classmethod
    def fromBirthYear(cls, name, year):
        return cls(name, date.today().year - year)

    @staticmethod
    def isAdult(age):
        return age &gt; 18&gt;&gt;&gt; person1 = Person(&#039;mayank&#039;, 21)
&gt;&gt;&gt; person2 = Person.fromBirthYear(&#039;mayank&#039;, 1996)
&gt;&gt;&gt; print person1.age
&gt;&gt;&gt; print person2.age
&gt;&gt;&gt; print Person.isAdult(21)خروجی کد بالا به صورت زیر خواهد بود:21
21
True</description>
                <category>امیرحسین امانی</category>
                <author>امیرحسین امانی</author>
                <pubDate>Mon, 02 Dec 2024 14:06:35 +0330</pubDate>
            </item>
                    <item>
                <title>سیر تا پیاز caching در چند دقیقه !!!!</title>
                <link>https://virgool.io/@m_77898233/%D8%B3%DB%8C%D8%B1-%D8%AA%D8%A7-%D9%BE%DB%8C%D8%A7%D8%B2-caching-%D8%AF%D8%B1-%DA%86%D9%86%D8%AF-%D8%AF%D9%82%DB%8C%D9%82%D9%87-fgg1wrzzoud8</link>
                <description>کش کردن یعنی داده  هایی که از قبل درخواست شده اند و امکان درخواست مجدد آن وجود دارد یا داده  هایی که می توان تا دسترسی به داده از سرور به کاربر نمایش داده شوند در  محلی ذخیره شوند تا سرعت افزایش یابد و سیستم بهینه تر شود. به طور خلاصه  caching تکنیکی برای ذخیره کردن موقت داده ها در حافظه است. به صورت کلی به  دو صورت سخت افزاری و نرم افزاری انجام می شود. انواع کش کردن نرم افزاری  در back-end با ذخیره اطلاعات در حافظه کش (معمولا RAM) و در front-end به  صورت ذخیره اطلاعات در حافظه مرورگر امکان پذیر است، و کش کردن سخت افراری  کش DNS سرور ها و Cache server ها.کاربرد  اصلی کش کردن زمانی است که برنامه درگیر محاسبات سنگینی است یا بنا به  دلایل دیگر دریافت پاسخ زمان بر باشد، در این گونه مواقع تا زمان دریافت  داده های جدید، داده های کش شده را در اختیار کاربر قرار می دهیم. همچنین  در بعضی مواقع ریکوئست های تکراری در سیستم زیاد است یا ریکوئست هایی وجود  دارد که پاسخ آن ها معمولا با تغییرات زیادی همراه نیستند، در این مواقع  caching موجب می شود تا تنها برای داده هایی که نیاز است request ها به سمت  سرور ارسال گردند و سایر داده ها از حافظه کش در اختیار کاربر قرار می  گیرد. البته داده های کش با استفاده از روش های مختلف دائما به روز می  شوند. در عملیات caching داده ها یا با موفقیت cache می شوند (اصطلاحا heat  اتفاق افتاده) و یا با شکست مواجه می شوند (miss).هدف اصلی caching پایین آوردن Response Time درخواست‌های کاربران و پایین آوردن بار ترافیکی روی سیستم و دیتابیس است.تا  اینجا به بررسی caching و مزایای آن در سیستم پرداختیم ولی caching می  تواند مشکلاتی هم ایجاد کند: حتی در صورتی که caching به صورت صحیح پیاده  سازی شده باشد مراحل اضافه ای جهت کش کردن اطلاعات به سیستم افزوده می شود.  در صورت پیاده سازی غیر صحیح این امر کاملا مشهود خواهد بود.از  دیگر مشکلاتی که در caching وجود دارد این است که ممکن است اطلاعات کش  اطلاعات قدیمی باشد زیرا ممکن است اطلاعات با موفقیت کش نشده باشد یا در  هنگام برگرداندن پاسخ از کش داده در دیتابیس تغییر کرده باشد.از  آنجایی که فضای cache محدود است و ما نیاز دائمی به داده های کش شده  نداریم، روش هایی برای حذف داده های قدیمی تر و جایگزین کردنشان با داده  های جدید و مدیریت داده ها وجود دارد:روش LRU (Least Recently Used)در این روش داده های بیشتر استفاده شده به بالای حافظه منتقل شده و داده های کمتر استفاده شده حذف می شود.این  روش از رایج ترین روش ها در caching است. در این روش هرگاه داده ای  درخواست شود به بالای کش منتقل می شود، به این ترتیب الگوریتم می تواند  داده هایی که کمتر از آن ها استفاده شده است را با مشاهده انتهای کش  شناسایی کند. این الگوریتم فرض بر این است که هرچه تعداد درخواست ها برای  یک داده بیشتر باشد باید بیشتر در فضای کش باقی بماند.روش LFU (Least Frequently Used)در این روش یک شمارنده تعداد استفاده از داده ها را محاسبه کرده و داده هایی که کمترین استفاده از آن ها شده باشند حذف می شوند.روش MFU (Most Recently Used)در این روش داده هایی که بیشتر استفاده شده باشند حذف می شوند. این روش زمانی که داده های قدیمی تر با اهمیت تر هستند کاربرد دارد.انواع الگوریتم های cashingروش Cache-Asideاین  روش را می توان یکی از متداول‌ترین روش‌های caching دانست. در مواقعی که  درخواست کش کردن بیشتر از درخواست خواندن اطلاعات است. در این روش اگر داده  ها در cache موجود باشند در اختیار کاربر قرار داده می شود و در صورت که  موجود نباشد داده از سرور درخواست می شود و برای کاربر ارسال می شود، سپس  داده در cache ذخیره خواهد شد.روش Read-Through Cacheدر  این روش دیتابیس و کش به صورت in-line هستند و درخواست‌ها به cache ارسال  می شود. کش با داده های دیتابیس sync می شود، اگر داده در کش وجود نداشته  باشد، از دیتابیس درخواست می شود و کش آپدیت می کنیم، سپس داده در اختیار  کاربر قرار می گیرد. تفاوت این روش با روش قبل در این است که برنامه همیشه  با cache در ارتباط است.روش Write-Through Cacheمانند روش قبل برنامه همیشه با cache در ارتباط است. در این حالت اطلاعات  ابتدا در cache ذخیره می شوند و دیتابیس با کش sync می شود. در این حالت  احتمال cache miss به حداقل می رسد.روش Write Backاین  روش مشابه روش قبل است با این تفاوت که ذخیره اطلاعات از cache به  database در لحظه صورت نمی گیرد و مثلا در بازه های زمانی خاص صورت می  گیرد. در این روش اگر داده های cache از بین برود دیگر به آنها دسترسی  نداریم بنابراین این روش پر ریسک محسوب می شود.روش Write Aroundدر این روش اطلاعات روی دیتابیس ذخیره می شود و در زمان درخواست، فقط اطلاعات درخواست شده روی کش قرار می گیرد.کش کردن در pythonدر  پایتون با استفاده از دکوراتور lru_cache@ که در پکیج functools وجود دارد  می توان عملیات caching را انجام داد. پکیج functools پکیجی higher-order  است، به این معنی که یا ورودی آن تابع است و یا یک تابع را به عنوان خروجی  باز می گرداند.این  دکوراتور از یک دیکشنری ذخیره می کند که شامل argument ها و نتیجه تابع  است. بنا براین argument ها باید قابلیت hash شدن را داشته باشند تا  دکوراتور بتواند کار خود را انجام دهد.مثال زیر را بدون در نظر گرفتن کار که انجام می دهد در نظر بگیرید:from timeit import repeat

def steps_to(stair):
    if stair == 1:
        return 1
    elif stair == 2:
        return 2
    elif stair == 3:
        return 4
    else:
        return (
            steps_to(stair - 3) + steps_to(stair - 2) + steps_to(stair - 1))setup_code = &amp;quotfrom __main__ import steps_to&amp;quot
stmt = &amp;quotsteps_to(30)&amp;quot
times = repeat(setup=setup_code, stmt=stmt, repeat=3, number=10)
print(f&amp;quotMinimum execution time: {min(times)}&amp;quot)خروجی کد بالا به صورت زیر خواهد بود:Minimum execution time: 29.684728438001912حال دکوراتور lru_cache@ را به منظور کش کردن نتیجه به کد بالا اضافه می کنیم:from functools import lru_cache
from timeit import repeat

def steps_to(stair):
.
.
.و همانطور که مشاهده می کنیم نتیجه به شکل قابل توجهی سریع تر خواهد بودMinimum execution time: 1.2620002962648869e-06با استفاده از print(steps_to.cache_info())می  توان جزئیات نربوط به کش کردن کد بالا را مشاهده کرد که ۸۲ بار عملیات کش  شدن با موفقیت انجام شده و ۳۰ شکست هم در این عملیات مشاهده می شود:CacheInfo(hits=82, misses=30, maxsize=128, currsize=30)کش کردن با استفاده از Redisردیس  (redis) به عنوان یک message queue یا message broker شناخته می شود که  داده ها را به صورت key-value در خود ذخیره می کند. از مزایای redis سرعت،  سادگی در ساختار، ttl و کاربردی بودن آن است.ردیس  ابزاری قدرتمند جهت کش کردن یک سیستم به شمار می آید که با در اختیار قرار  دادن data type های مختلف بنا به نیازمندی و معماری سیستم می تواند انتخاب  مناسبی برای caching باشد.انواع Data Type ها در Redis:کلید(key):برای ذخیره داده به صورت key: value کاربرد دارد.هش (Hsah):برای ذخیره داده به صورت hash_name field1: value1, hash_name field2: value و... کاربرد دارد.لیست (List):برای ذخیره داده به صورت list_name: valu1, value2, ... value(n) کاربرد دارد.برای نصب ردیس در ubuntu دستور زیر را در terminal وارد می کنیم:sudo apt install redis-serverو برای اتصال به redis در terminal دستور زیر را وارد می کنیم:redis-serverبرای  اطمینان از اتصال به ردیس دستور ping را وارد می کنیم و در صورتی که PONG  در خروجی برگردانده شود دسترسی به redis به درستی صورت گرفته است.کلید ها (KEYS)همانطور  که قبلا هم اشاره شد redis پایگاه داده ای مبتنی بر کلید-مقدار  (key-value) است. برای تعریف یک  key و مقدار دادن به آن از دستور زیر  استفاده می کنیم:SET KEY [KEY_NAME] [VALUE]برای مقدار دادن به یک کلید در صورتی که وجود نداشته باشد از دستور زیر استفاده می کنیم:SET KEY [KEY_NAME] [VALUE]برای مقدار دادن به چند کلید همزمان از دستور زیر استفاده می کنیم:MSET KEY [KEY_NAME1] [VALUE1] [KEY_NAME2] [VALUE2] ... [KEY_NAMEn] [VALUEn]نکته: در صورتی که یکی از کلیدها از قبل وجود داشته باشد هیچ کدام از مقادیر ثبت نخواهند شد.برای دسترسی به همه کلید ها از دستور زیر استفاده می کنیم:KEYS *برای دسترسی به مقادیر یک کلید از دستور زیر استفاده می کنیم:GET [KEY_NAME]اگر بخواهیم به چند کلید را همزمان GET کنیم از دستور زیر استفاده می کنیم:MGET [KEY_NAME] [KEY_NAME1] ... [KEY_NAMEn]برای تغییر نام یک کلید از دستور زیر استفاده می کنیم:RENAME [KEY_NAME] [NEW_KEY_NAME]برای حذف یک کلید از دستور زیر استفاده می کنیم:DEL [KEY_NAME]برای بررسی وجود داشتن یک کلید در کلید از دستور زیر استفاده می کنیم:EXISTS [KEY_NAME]برای ایجاد موقتی یک کلید به صورت ثانیه از دستور زیر استفاده می کنیم (n ثانیه):SET [KEY_NAME] [VALUE]
EXPIRE [KEY_NAME] #n(second)برای مشاهده میزان باقی مانده از طول عمر رشته از دستور زیر استفاده می کنیم:TTL [KEY_NAME]نکته: در صورت expire شدن کلید مقدار 2- برگردانده می شود.در صورتی که بخواهیم دستور EXPIRE را خنثی کنیم از دستور زیر استفاده می کنیم:PERSIST [KEY_NAME]نکته:  در صورتی که expire روی کلیدی اعمال نشده باشد و یا دستور persist را بعد  از expire  روی یک کلید اعمال کنیم مقدار برگشتی از دستور &#x27;[TTL &#x27;[KEY_NAM  برابر با 1- خواهد بود.دستورات مربوط به هش ها:برای ایجاد یک مقدار در هش از دستور زیر استفاده می کنیم:HSET [HASH_NAME] [FIELD] [VALUE]دریافت مقادیر فیلد یک hashHGET [HASH_NAME] [FIELD_NAME]دریافت همه مقادیر یک hashHGETALL [HASH_NAME]کلید های یک hashHKEYS [HASH_NAME]ذخیره دسته ای در یک hashHMSET [HASH_NAME1] [FIELD1] [VALUE1] [HASH_NAME2] [FIELD2] [VALUE2] ... [HASH_NAMEn] [FIELDn] [VALUEn]دستورات مربوط به لیست ها:برای قرار دادن مقادیر در ابتدای لیست از LPUSH و برای قراردادن از انتهای لیست از RPUSH استفاده می کنیمLPUSH [LIST_NAME] [VALUE1] [VALUE2] ... [VALUEN]RPUSH [LIST_NAME] [VALUE1] [VALUE2] ... [VALUEN]برای وارد کردن مقادیر در لیست در صورت وجود لیست از دستو زیر استفاده می کنیم:LPUSHX [LIST_NAME] [VALUE1] [VALUE2] ... [VALUEN] 
RPUSHX [LIST_NAME] [VALUE1] [VALUE2] ... [VALUEN]برای دسترسی به آخرین عنصر لیست از دستور زیر استفاده می کنیم.LPOP [LIST_NAME][VALUE2] ... [VALUEN]برای دسترسی به اولین عنصر لیست از دستور زیر استفاده می کنیم.RPOP [LIST_NAME]نکته: در صورتی که بخواهیم به آخرین عنصر لیست اشاره کنیم از 1- استفاده می کنیم.برای حذف چند عنصر لیست از دستور زیر استفاده می کنیم:LREM [LIST_NAME] counter [VALUE]</description>
                <category>امیرحسین امانی</category>
                <author>امیرحسین امانی</author>
                <pubDate>Mon, 02 Dec 2024 13:55:58 +0330</pubDate>
            </item>
                    <item>
                <title>همه چیز در مورد سشن ها (Sessions) و کوکی ها (Cookies)</title>
                <link>https://virgool.io/@m_77898233/%D9%87%D9%85%D9%87-%DA%86%DB%8C%D8%B2-%D8%AF%D8%B1-%D9%85%D9%88%D8%B1%D8%AF-%D8%B3%D8%B4%D9%86-%D9%87%D8%A7-sessions-%D9%88-%DA%A9%D9%88%DA%A9%DB%8C-%D9%87%D8%A7-cookies-h44au4fwbrb0</link>
                <description>در برنامه‌نویسی وب  بسیار پیش می‌آید که نیاز به ذخیره اطلاعات در  متغیرهایی داشته باشیم که  در سراسر پروژه در دسترس باشند. در این شرایط می‌توان از Session ها و Cookie ها استفاده کرد.کوکی (Cookie):پروتکل  HTTP پروتکلی Stateless است به این معنی که اطلاعاتی از درخواست کننده را  نزد سرور نگهداری نمی کند. بنابر این در درخواست های بعدی، امکان شناسایی  طرفین درخواست وجود ندارد. با استفاده از cookie می توان برای شناسایی  کاربران اطلاعات server را نزد client قرار داد.کوکی  ها (Cookie) ها فایل های متنی هستند که توسط مرورگر Client در مرورگر وی و  به صورت محلی (local) برای شناسایی کاربر ذخیره می شوند. کوکی ها طول عمر  دارند و بنا به خواست توسعه دهنده تنظیم می شوند. کوکی های متعلق به یک  دامنه، در اولین درخواست بین Client و Server رد  وبدل می شنود تا در  درخواست های بعدی امکان شناسایی وجود داشته باشد. از آنجا که کوکی ها با جا  به جا شدن از یک صفحه به صفحه دیگر و یا حتی بسته شدن  مرورگر از بین نمی  روند، می توان از آنها برای ذخیره توکن کابر، ذخیره تنظیمات کاربر مانند  اندازه فونت و رنگ اجزای صفحه، نام کاربری و … استفاده کرد.نکته  مهم درباره  کوکی ها این است که کوکی ها در دسترس هستند و  دستکاری یا  سرقت آن ها کاری دشوار نیست، بنا بر این نباید  قابل خواندن و حاوی اطلاعات  مهم باشند.یک کوکی از بخش های زیر تشکیل شده است:تاریخ انقضا (Expire):تاریخ انقضا یا طول عمر کوکی.محتوا (Content):محتوای ذخیره شده در کوکی.دامنه (Domain):دامنه ای که کوکی در آن ایجاد می شود.مسیر (Path):مسیری که کوکی در آن ذخیره می شود.امنیت (Secure):اطلاعات امنیتی مربوط به سرویس دهنده های امن.انواع کوکی:کوکی های session:برای  مواقعی که نیاز است یک کوکی به طور موقت استفاده شود از آنها استفاده  میکنیم زیرا آنها در حافظه موقت ذخیره می شوند و تا زمانی که مرورگر کاربر  بسته شود باقی می مانند.کوکی های امن یا secure:این  کوکی ها رمزگذاری شده است و فقط در یک اتصال امن HTTPS کار می کند. برای  نگهداری اطلاعات حساس از این نوع کوکی استفاده می شود. به دلیل اینکه این  نوع کوکی رمزنگاری شده هستند از سایر انواع خود امن تر هستند.کوکی های پایدار یا Persistent:از آن ها برای ردیابی و  جمع آوری اطلاعات کاربر در طول یک بازه زمانی خاص استفاده می کنند.کوکی های HttpOnly :این  کوکی ها فقط  توسط دامنه ای که آنها را ایجاد کرده اند می توانند مورد  استفاده قرار بگیرند، همچنین نمی توانند توسط هیچ  پروتکلی غیر از HTTP  استفاده شوند. فقط کوکی های session می توانند HttpOnly باشند.کوکی های شخص ثالث یا Third-Party:این  کوکی ها متعلق به یک دامنه متفاوت، غیر از دامنه ای که آنها را ایجاد کرده  است می باشند و می توانند تاریخچه مرور یک کاربر را در چندین وبسایت که از  یک شبکه تبلیغاتی استفاده می کنند، ذخیره کنند. از آنجا که این کوکی ها در  شبکه های تبلیغاتی برای تبلیغات هوشمند برای ردیابی اطلاعات استفاده می  شود ممکن است به حریم خصوصی آسیب برساند.کوکی های زامبی:این  نوع کوکی ها  در خارج از مرورگر ذخیره می شوند و پس از حذف شدن، خود را   بازیابی می کنند. آنها معمولا توسط سرویس های تجزیه و تحلیل و به این دلیل  که اگر کاربر کوکی ها را حذف کرد، داده ها از بین نروند مورد استفاده قرار  می گیرند. آنها همچنین می توانند برای اهداف مخرب مورد استفاده قرار   بگیرند، زیرا مرورگر نمی تواند وجود آن ها را کنترل کند. تنها محصولات  امنیتی مثل آنتی ویروس ها هستند که می توانند کوکی های زامبی را شناسایی و   حذف کنند.سشن (Session):سشن  (Session) برخلاف کوکی ها در سرویس دهنده (Server) ذخیره می شود. مکان  ذخیره Session را میتوان تغییر داد ولی به صورت  پیشفرض در حافظه ذخیره می  شود، به همین دلیل به سرعت قابل دسترسی هستند. به این دلیل که مقادیر  Session عمومی نیست باید به ازای هر کاربر ایجاد گردد. بنابراین باید در  هنگام ساخت یک Session، یک کوکی هم در سرویس گیرنده با مقدار آیدی  Session ایجاد گردد.به  طور پیش فرض، Session ها بعد از بسته شدن مرورگر، از بین خواخند رفت بنابر  این در صورتی که اطلاعات حساس در آن ها قرار می گیرد باید مقدار آن ها در  پایگاه داده ذخیره شوند.از sessionها باید فقط برای اطلاعات مهم استفاده کرد زیرا استفاده بیش از حد از آن ها می تواند موجب کاهش سرعت بارگذاری صفحات شود.مراحل ایجاد یک session:ایجاد یک session با Id منحصر به فرد.ایجاد یک cookie هم نام session در مرورگر کاربر.ایجاد یک فایل در دایرکتوری موقت مشخص شده بر روی سرور  با Id سشن.انتقال کاربران از صفحه نت به سروربه صورت کلی تفاوت session و cookie در یک نگاه :سشن ها (Sessions)1) اطلاعات را روی سرور برای کاربر ذخیره می کنند (Server-Side)2) محدودیت در حجم و نوع داده ندارند3) برای نگهداری موقتی اطلاعات هستند (Temporarily)4) از امنیت بالاتری برخوردار هستند5) اطلاعات سشن های کدگذاری شده فقط در خود سرور می تواند تفسیر و بازگشایی شود (Decrypt on Server)6)با اتمام کار کاربر با وب-اپلیکشن یا بستن مرورگر سشن ها از بین می روندکوکی ها (Cookies)1)اطلاعات را روی مرورگر برای کاربر ذخیره می کنند2) فقط میتوانند نوع string را با حجم حداکثری 4 کیلوبایت ذخیره سازی کنند3) از امنیت پایین تری نسبت به سشن ها برخوردار هستند4)حتا با بسته شدن برنامه یا مرورگر، کوکی ها بسته به زمان تعیین شده (Life-time) در مرورگر باقی می مانند5) پذیرفتن کوکی امری اجباری نیست و کاربر به راحتی می تواند کوکی هارا از سمت یک سایت قبول نکند یا حذف کند6)برای ستفاده از کوکی ها در سمت سرور (Back-End) نیازی به استفاده از تابع خاصی (در زبان PHP) نداریم</description>
                <category>امیرحسین امانی</category>
                <author>امیرحسین امانی</author>
                <pubDate>Mon, 02 Dec 2024 13:46:05 +0330</pubDate>
            </item>
                    <item>
                <title>نحوه پیدا کردن سایت برای هک کردن</title>
                <link>https://virgool.io/@m_77898233/%D9%86%D8%AD%D9%88%D9%87-%D9%BE%DB%8C%D8%AF%D8%A7-%DA%A9%D8%B1%D8%AF%D9%86-%D8%B3%D8%A7%DB%8C%D8%AA-%D8%A8%D8%B1%D8%A7%DB%8C-%D9%87%DA%A9-%DA%A9%D8%B1%D8%AF%D9%86-no96dy0pw9ik</link>
                <description>به آموزش پیدا کردن سایت برای هک کردن خیلی خوش آمدید; میدونم که سوال خیلی  از شماها هست که آقا ما یک روش برای هک سایت پیدا کردیم حالا چطوری مثلا  10 هزار تا سایت پیدا کنم که بتونم به صورت Mass تست انجام بدم که در نهایت  به هک کردنشون ختم میشه. در این آموزش چگونه سایت برای هک کردن پیدا کنیم ؟  همه چیز رو به شما میگیم .آموزش پیدا کردن سایت برای هک کردنپیدا کردن سایت برای هک کردن چندین و چند روش وجود داره که خوب  ممکنه اسم برخیشونو شنیده باشید, مثل استفاده از دورک, استفاده از گیت هاب و  . . . در این مقاله 3 تا روش میگم که چگونه سایت برای هک کردن پیدا کنیم  که 100% بهتون جواب میده و همین امروز میتونید نتیجه بگیرید بریم سراغ اول .خلاصه که خیلی روش هست برای پیدا کردن سایت برای هک کردن حالا یه  نکته ای رو هم که یادم رفت وقتی یه دورکی رومیزنید و اگر خواستید که روش  Reverse استفاده کنید کافیه که کل صفحه گوگل رو کپی کنید و به یک url  Extractor بدید تا درجا لینک های توی صفحه رو به شما بده و نیاز نباشه که  url تک تک سایت هارو دستی جدا کنید .پیدا کردن سایت برای هک کردن با استفاده از دورک سایت Exploit-Dbبرای استفاده از دورک برای هک کردن تارگتتتون چنتا تکنیک میگم و یه تکنیک پرایوت که راحت نتیجه بگیرید . روش اول مراجعه به وبسایت Exploit-db هست که کلی دورک هست و بهش میگیم گوگل هکینگ دیتابیس . ساده ازش نگذرید  خیلی مهمه طریقه ساخت دورک رو میتونید فقط با نگاه کردن به دورک هایی که  بقیه گذاشتن یادبگیرید و دورکی بسازید که دست کسی نباشه حتی اگه از این  دورک ها نمیخواین استفاده کنید ولی نگاه کنید که بقیه چطوری دورک میسازن .این روش یکم حرفه ای تر و خصوصی تر هست البته نه از الان به بعد !!! کاری ندارم نوش جونتون برید توی گیت هاب و مثلا اگه میخواین سایت  وردپرسی هک کنید یا هر سایتی ابزاری رو پیدا کنید که توی خودش دورک داره و  به سراغ سورس کدش برید و دورکی که استفاده کرده رو بردارید مثال بزنم ؟!مثلا من رفتم توی گیت هاب سرچ زدم “Dork WordPress” و رفتم توی ریپازیتوری اول و Source کدشو خوندم که میشه  اینجا  داخل  عکس بالا هم هایلایت کردم دورک هارو براتون  . 10 ها ریپازیتوری هست که  میتونید ازشون استفاده کنید برای پیدا کردن دورک . خلاصه که بعد این دورک  هارو که میبینید خودتون با چیزی که از نمونه های توی Exploit-Db دیدید  مخلوط کنید و (خلاقیت) یه دورک بسازید و شروع کنید به پیدا کردن تارگت !  اما شاید تو بخوای مثلا 1000 تا باهم پیدا کنی شدنیه ؟ آره میرسیم .سایت CxSecurityخوب این سایت خیلی بروز و Fast هست میتویند یک اسکریپت بنویسید و  فورا بلافاصله بعد از اینکه دورکی در بخش دورک ها قرار گرفت در وبسایت CxSecurity توی تلگرام یا مثلا دیسکورد براتون ارسالش کنه . که خوب شما هم یکم با  دورک ها کار کنید بزودی خودتون میتونید دورک هایی بسازید که دست کسی نیست .سایت pastebinیکی دیگه از وبسایت هایی که انواع و اقسام دورک هارو میتونید توش پیدا کنید همین وبسایت pastebin هستش.  در وبسایت PasteBin شما دورک های sql, دورک برای دیفیس, دورک آسیب  پذیری های جدید, دورک وبسایت های وردپرسی و … رو به راحتی میتونید پیدا  کنید . البته امکان استفاده و سرچ روزانتون محدود هست و باید حتما حساب  بسازید داخل این وبسایت .یکی دیگه از روش های پیدا کردن سایت برای هک کردن این هست که توی  گوگل یا موتور های جستجوی دیگه نظیر bing,yandex  و … برید و سرچ کنید  مثلا Sql injection Dorks در واقع باید آسیب پذیری رو + کلمه Dorks کنید و  سایت های مختلفی رو به شما ارائه میده که میتونید ازشون دورک پیدا کنید از  جمله گیت هاب به غیر از اینکه شما میتونید دورک هارو از ابزار مردم استخراج  کنید بعضی ها اومدن و دورک هارو جمع آوری کردن و توی گیت هاب برای دانلود  گذاشتن و با گوگل یا سرچ خود گیت هاب میتونید پیدا کنید و یا وبلاگ ها و …  که هکر ها ایجاد کردن .دارک وببا ورود به فروم های مختلفی مثل  BreachForums میتونید با سرچ کردن اقدام به پیدا کردن دورک برای هک کردن سایت کنید .  البته این وسط خیلی به خلاقیت خودتون هم ربط داره مثلا من خیلی اوقات میشه  سایت های هک شده رو میرم لاگ هاشون رو بررسی میکنم و چک میکنم که هکر چطوری  به این سایت نفوذ کرده و هم Payload هاش و هم آدرسی که مورد استفاده قرار  داده رو ذخیره میکنم توی دیتابیسم در واقع میدم به برنامم و اون اطلاعات  مفید رو از Log File میکشه بیرون و به من میده و توی دیتابیس ذخیره میکنه و  خوب این چیزیه که ممکنه فقط من و اون هکره داشته باشیمش و شانس هک کردن  سایت های بیشتری رو خواهم داشت تا مثلا استفاده از PasteBin و  …اگر در حوضه دارک وب سوالی دارید و یا با این حوضه آشنایی ندارید به مقاله های قبلی رجوع کنید در آنجا به طور کامل نحوه دارک وب رو توضیح دادم و نحوه ورود به این دنیا وب رو آمورش دادم .امید وارم مقاله بالا برای شما مفید بوده باشه و بتواند در حد یک راهنمایی برای پیدا کردن راهکاری برای تست نفوذ به وبسایت ها به طور قانونی به شما کمک کرده باشد و شما با خیالی آسوده تر به دنبال نفوذ به سایت ها از پیش طراحی شده باشید و تارگد ها خود رو امتحان و بررسی کنید .</description>
                <category>امیرحسین امانی</category>
                <author>امیرحسین امانی</author>
                <pubDate>Mon, 11 Nov 2024 22:32:11 +0330</pubDate>
            </item>
            </channel>
</rss>