<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
    <channel>
        <title>نوشته های ayhan Dev</title>
        <link>https://virgool.io/feed/@Ayhan_dev</link>
        <description>برنامه نویس هستم مثلا این یک صفحه فان هست</description>
        <language>fa</language>
        <pubDate>2026-04-15 06:50:45</pubDate>
        <image>
            <url>https://files.virgool.io/upload/users/1469804/avatar/Hv76WN.jpg?height=120&amp;width=120</url>
            <title>ayhan Dev</title>
            <link>https://virgool.io/@Ayhan_dev</link>
        </image>

                    <item>
                <title>ایهان / mr.05 / ayhan saral / ayhan-dev / dev</title>
                <link>https://virgool.io/@Ayhan_dev/%D8%A7%DB%8C%D9%87%D8%A7%D9%86-mr05-ayhan-saral-ayhan-dev-dev-ncboqupa5bzc</link>
                <description>سلام من ایهان هستم. اینم یه صفحه کامل عادی برای هدایت شما کاربران به صفحه اصلی هست موفق باشید.به خاطر دلایلی در سطح سرویس ایرانی فعالیت ندارم github.com/ayhan-devt.me/devayhanayhan-dev.online</description>
                <category>ayhan Dev</category>
                <author>ayhan Dev</author>
                <pubDate>Tue, 22 Apr 2025 16:43:07 +0330</pubDate>
            </item>
                    <item>
                <title>قیمت گذاری پروژه ها</title>
                <link>https://virgool.io/@Ayhan_dev/%D9%82%DB%8C%D9%85%D8%AA-%DA%AF%D8%B0%D8%A7%D8%B1%DB%8C-%D9%BE%D8%B1%D9%88%DA%98%D9%87-%D9%87%D8%A7-wcinv7lfzfqs</link>
                <description>سلام دوستان من ayhan G.y و  با یه مقاله دیگه مدیریت هزینه پروژه و قیمت گذاری دقیق پروژه دو موضوع مهم و اساسی در مدیریت پروژه هستند که درمورد شون نوشتم. که از کارآیی و موفقیت پروژه تأثیر بسزایی داره. در این مقاله سعی می‌کنم به مفاهیم اصلی و روش‌های موثر در این زمینه پردازی کنم. که از کارآیی و موفقیت پروژه تأثیر بسزایی داره. در این مقاله سعی می‌کنیم به مفاهیم اصلی و روش‌های موثر در این زمینه پردازی کنیم.های موثر در این زمینه پردازی کنیم.#مدیریت هزینه پروژه : مدیریت هزینه پروژه شامل فرآیند برنامه‌ریزی، بودجه‌بندی، کنترل و نظارت بر هزینه‌های پروژه هست. هدف از مدیریت هزینه پروژه، مدیریت صحیح، کنترلی و اثباتی بر روی هزینه‌های پروژه، با هدف کاهش هزینه‌ها و بهینه‌سازی مدت زمان پروژه ها هست.مدیریت هزینه پروژه شامل مراحل مختلفی هست که به ترتیب زیر نوشتم:1- برنامه‌ریزی هزینه: در این مرحله، برای پیش بینی هزینه‌های مورد نیاز برای اجرای پروژه، از فرآیند‌های مختلفی استفاده می‌شود که شامل سازوکارهای تحلیل هزینه-فایده، نمودار فعالیت (WBS) و واحدهای مرجع هزینه (Cost Breakdown Structures) می‌باشد.2- بودجه‌بندی پروژه: در این مرحله، پس از پیش‌بینی و برنامه‌ریزی هزینه‌های مورد نیاز برای پروژه، بودجه‌بندی صحیح از آن‌ها تهیه و تدوین می‌شه.3- کنترل هزینه‌ها: در این مرحله، با کنترل مداوم و به‌روز‌رسانی هزینه‌ها، تخمین‌ها و بودجه‌های تحت حفظ نظارت قرار می‌گیرند.4- نظارت بر هزینه‌های پروژه: در این مرحله، پس از پایان داشتن پروژه، هزینه‌های صرف شده و برآوردی از آن‌ها می‌تواند مورد بررسی و تحلیل قرار بدید.در میان مراحل مختلف مدیریت هزینه پروژه، برنامه‌ریزی و بودجه‌بندی پروژه دو مرحله مهم و بحرانی هستند که می‌توان به عنوان اساس تصمیم گیری در مدیریت هزینه پروژه استفاده کرد.قیمت‌گذاری دقیق پروژهقیمت گذاری دقیق پروژه شامل پیش بینی هزینه‌های مورد نیاز برای اجرای پروژه، محاسبه هزینه کلی و تعیین قیمت فروش پروژه میشه وبرای قیمت‌گذاری دقیق پروژه، ابتدا باید محاسبه هزینه کلی پروژه با توجه به کاربردی بودن هزینه‌ها و هزینه‌های نظارتی کنترل کلیزا سفارشی شده‌ای برای پروژه خاص بیابید. سپس با در نظر گرفتن سود مورد نظر، تعیین قیمت نهایی پروژه انجام می‌گیرد.در نظر داشته باشید که قیمت گذاری دقیق پروژه باید به نحوی باشد که هزینه‌های پروژه را پوشش دهد و در عین حال قابل قبول برای مشتریان باشد. بنابراین، تعیین قیمت نهایی پروژه به صورت محاسباتی و دقیق باید انجام شود.در نهایت باید گفت که مدیریت هزینه پروژه و قیمت‌گذاری دقیق پروژه از اهمیت بسزایی برخوردارند و مدیران پروژه باید این موضوع را به عنوان یکی از اولویت‌های اصلی خود در مدیریت پروژه در نظر بگیرند. رعایت اصول مرتبط با این دو مبحث، به عنوان یکی از بخش‌های کلیدی در موفقیت و توسعه پایدار پروژه محسوب می‌شوند.</description>
                <category>ayhan Dev</category>
                <author>ayhan Dev</author>
                <pubDate>Wed, 03 May 2023 20:08:26 +0330</pubDate>
            </item>
                    <item>
                <title>پروتکل MTProto چیست؟</title>
                <link>https://virgool.io/@Ayhan_dev/%D9%BE%D8%B1%D9%88%D8%AA%DA%A9%D9%84-mtproto-%DA%86%DB%8C%D8%B3%D8%AA-pymo8imu3qet</link>
                <description>پروکسی اختصاصی تلگرام که MTProto نام گذاری شد، در واقع فقط به عنوان ساز و کاری جدید برای دور زدن فیلترینگ تلگرام محسوب نمی شود. این پروتکل (MTProto) توسط آقای نیکولای دورف ( برادر پاول دورف ) توسعه داده شد. اگر در جایی کلماتی مانند: ” اِم‌تی‌پروکسی “، ” اِم‌تی‌پروتو ” یا ” پروکسی اختصاصی تلگرام ” به گوش‌تان خورد، منظور همین پروتکل است.منظور از پروتکل در واقع مجموعه‌ای از قوانین و مقرراتی است که برای برقراری ارتباط، رعایت می‌شود.MTProto به زبان سادهپروتکل MTProto در واقع مخفف ” Mobile Telegram Protocol ” است. یک پروتکل امنیتی جدید و اختصاصی برای تلگرام که توسط همین تیم توسعه و منتشر و تا به امروز تا دو نسخه از آن ارائه شده است (MTProto 1.0 و MTProto 2.0).پروتکل ام‌تی‌پروتو وظیفه انتقال و رد و بدل پیام‌های رمزنگاری شده از کاربر به کاربر( Client to Client ) به صورت End-To-End را برعهده دارد.در زمان اتصال به این پروکسی، پیام‌ها و تمامی داده‌های رد و بدل شده، تنها برای فرستنده و گیرنده قابل رمزگشایی و مشاهده است ( تعریف ساده‌ای از End-To-End). پس در واقع این پروتکل ( پروکسی MTProto ) فقط برای عبور از فیلترینگ ارائه نشده، بلکه جنبه ارتقا امنیتی نیز دارد.در حات بدون اتصال به پروکسی تلگرام چه اتفاقی می افتد؟سیستم رمزنگاری که در بالا گفته شد برای زمانی بود که شما به این پروکسی متصل باشید، حالا اگر کاربری در حالت عادی به تلگرام مراجعه کند چه تفاوتی خواهد داشت ؟در این حالت، پیام به صورت رمزنگاری شده، از سمت کاربر فرستنده به سرورهای تلگرام منتقل شده و رمزگشایی می‌شود و سپس دوباره رمزنگاری شده و برای کاربر گیرنده ارسال می شود ( ! ). در واقع امکان شنود پیام‌ها در سرورهای تلگرام مهیا خواهد شد.سیستم رمزنگاری در MTProtoاز دیگر مزایای پروتکل MTproto، میتوان به ترکیب متنوعی از روش‌های رمزنگاری نام برد.در این پروتکل از روش‌های تبادل کلید دیفی-هلمن(Diffie–Hellman Key Exchange)، الگوریتم رمزنگاری SHA-256، استاندارد رمزنگاری پیشرفته AES (رمزنگاری متقارن) و استانداردهایی همچون AES IGE و AES IGE IV که فقط توسط خود تلگرام توسعه داده شدند، به کار گرفته شده است.یک نکته‌ی جالب و قابل تامل در این نوع از پروکسی، این پروتکل قادار به استفاده از از هر روشی برای ارتباط و انتقال بسته‌( پکت )، از جمله UDP، TCP، HTTP و HTTPS است. به همین خاطر فیلتر و مسدود کردن آن بسیار کار دشواری خواهد بود.تفاوت HTTPS و MTProtoپروتکل MTProto را میتوان از جهاتی به پروتکل HTTPS مرتبط دانست البته با این تفاوت که پروتکل HTTPS یک رابط بین کاربر و سرور است و صرفاً اطلاعات را بین کاربر(Client) و سرور(Server) رمزنگاری می کند و پیام در سرور رمزگشایی شده و سرور می تواند محتوای پیام را رویت کند.البته باید گفت که این یک عیب برای این پروتکل محسوب نمی‌شود، چراکه اصولا پروتکل HTTPS برای همین کار، یعنی : وب‌گردی، تبادل فایل و … طراحی و بهینه سازی شده است و هیچ محدودیتی برای استفاده از این پروتکل برای مقاصد دیگر وجود ندارد.پروتکل MTProto علاوه بر رمزنگاری محتوای پیام‌ها، ساختار چت‌ها و متادیتاها به صورت رمزنگاری شده را نیز امکان‌پذیر می‌کند درحالی که HTTPS چنین قابلیتی ندارد. در واقع این پروتکل صرفا برای این کاربرد توسعه داده شده است.تفاوت MTProto 1.0 و MTProto 2.0تلگرام تاکنون دو نسخه از این پروتکل را توسعه داده که نسخه دوم ام‌تی‌پروتو یعنی MTProto 2.0 به دلیل استفاده از SHA-256 به جای SHA-1 از الگوریتم رمزنگاری قوی‌تری برخورداراست. همچنین استفاده از ۱۲ تا ۱۰۲۴ بایت چسبیده به جای ۰ تا ۱۵ بایت در نسخه اول آن .</description>
                <category>ayhan Dev</category>
                <author>ayhan Dev</author>
                <pubDate>Sun, 30 Apr 2023 20:07:39 +0330</pubDate>
            </item>
                    <item>
                <title>سفر در هوش مصنوعی</title>
                <link>https://virgool.io/Devexpr/%D8%B5%D9%81%D8%B1-%D8%AF%D8%B1-%D9%87%D9%88%D8%B4-%D9%85%D8%B5%D9%86%D9%88%D8%B9%DB%8C-exheqbt1isjh</link>
                <description>امروزه یکی از پر حرف ترین و طرفدار ترین موضوع جهان در مورد هوش مصنوعی هست.هوش مصنوعی یا همان AI مجموعه ای از فنون و فناوری هست که به کامپیوتر و ماشین اجازه میده قابلیت های تحلیل و یادگیری و درک احساسات و استنتاج و حل موضوع های سخت در چند لحظه که برای انسان میتواند سال تا و روز ها و ماه ها با ساعت ها با تحقیق و تحلیل ها زیادی به سرانجام برسد.این فناوری بر خلاف هر چیزی که انسان خلق کردند هم مفید و هم خطرناک هست و بهترین خلق قرن بیست و یکم تبدیل شده.هوش مصنوعی با قدرتی که داراست به کمک انسان شتافه و میتوان از ان برای حوزه های برنامه نویسی و اقتصادی و گردشگری و پزشکی و... استفاده کرد.و در این میان شغلی از بین نخواهد رفت.هوش مصنوعی برای بهبود کار و راحتی بشریت خلق شده و در این میان افرادی بخصوصی مانند جو گیری و سواستفادهمردم به وحشت شغلی انداختند. ولی حقیقت آنچیزی که دیده میشود نیست اما همانطور که هیچ فناوری بی خطر نیست و تهدیداتی در آن خوفته هست و هوش مصنوعی از این قاعده مستثنی نیست.خطرات و تهدیدات به دو دسته تقسیم میشوند که : خطرات و تهدیدات فیزیکی و خطرات و رشد و توسعه و یادگیری تا مرحله تصمیم گیری برای انسان خطرات فیزیکی : از جمله پیچیده شدن سیستم ساخته شده توسط هوش مصنوعی و خودرو بدون سرنشین و ....خطرات تصمیم گیری : هوش مصنوعی در راه پیشرفت یادگیری هست و به تمام سیستم و...دسترسی داره و روز به روز در حال قدرتمند شدن و پیشرفت هست و این پروسه تا زمان که به مرحله تصمیم گیری برسد ادامه خواهد داشت. و اون روز زیاد دور نیست در بعضی از کشور آمریکای برای محاکمه از هوش مصنوعی استفاده شده. و هیچ کسی از طرفی هوش مصنوعی طراحی شده به صورت متن باز نیستند تا متخصصان و استادان تحلیل کنند و این نگرانی‌ هارو تشدید می‌کنه . هوش مصنوعی در شرکت‌ها به منظور بهبود روند تولید و ساخت محصولاتشان کمک می‌کند، چرا که قابلیت بازبینی و تحلیل داده‌ها را ارائه می‌دهد و در روند و سرعت کار پیشرو هست و این داده‌ها به شرکت‌ها کمک می‌کند تا به مشتریان بهترین خدمات را ارائه دهند. همچنین در صنایع بزرگ مانند خودروسازی و فضایی نیز استفاده از هوش مصنوعی امری بسیار گسترده است.اما همانطور که گفته شد، هوش مصنوعی نیز با خطرات و تهدیدات متعددی همراه است. بنابراین، باید توجه داشت که استفاده‌ی مسئولانه و احتیاطی از این فناوری بسیار حائز اهمیت است. بهینه‌سازی‌هایی برای کاهش خطراتی که می‌توانند توسط هوش مصنوعی ناشی شوند، می‌تواند با تلاش و همکاری بین دولت، صنایع و تحقیقاتی صورت پذیرد.</description>
                <category>ayhan Dev</category>
                <author>ayhan Dev</author>
                <pubDate>Mon, 24 Apr 2023 00:22:15 +0330</pubDate>
            </item>
                    <item>
                <title>UI/UX چیست و در دوره آموزشی چی یاد میگیرید</title>
                <link>https://virgool.io/Devexpr/uiux-%DA%86%DB%8C%D8%B3%D8%AA-%D9%88-%D8%AF%D8%B1-%D8%AF%D9%88%D8%B1%D9%87-%D8%A2%D9%85%D9%88%D8%B2%D8%B4%DB%8C-%DA%86%DB%8C-%DB%8C%D8%A7%D8%AF-%D9%85%DB%8C%DA%AF%DB%8C%D8%B1%DB%8C%D8%AF-hzb4ef9vpttv</link>
                <description>سلام و آرزو سلامت برای همه دوستان عزیزامروز همراه شما هستیم با UX  UI این UX/UIدو عبارت مختلف هستند. که در حوزه طراحی و توسعه نرم افزار و وب سایت به کار می‌روند. UX به معنای تجربه کاربری و UI به معنای طراحی رابط کاربری هست. طراحی مناسب UX و UI حقیر بسیار مهمی در جذب و نگه‌داشت کاربران داره و برای همین باید توجه بیشتری داشته باشید.بنابراین یادگیری این مهارت‌ها برای افرادی که قصد کار در حوزه‌های مربوط به IT و طراحی دارند بسیار مفید هست.دو دوره ی آموزشی UX و UI از ابتدایی تا پیشرفته به دانشجویان آموزش می‌دهند که چگونه تجربه کاربری مناسبی را برای کاربران خود ارائه بدند. در دوره‌های ابتدایی، دانشجویان با مفاهیمی همچون تحلیل و بررسی فرآیند، ساخت پروتوتایپ و طراحی رابط کاربری برای برنامه های وب و موبایل آشنا می شوند. در مراحل پیشرفته، دانشجویان یادگیری مفاهیمی همچون بازاریابی تجربه کاربری، تحلیل تجربه کاربری، طراحی سیستم های کاربردی، و مراحل تولید و توسعه UI و UX انجام می دهند عا صبر کنید تموم نشده هنوزبه طور کلی، دو دوره ی آموزشی UX و UI یادگیری بسیاری از مهارت های لازم برای طراحی تجربه کاربری و رابط کاربری به دانشجویان می دهد. این دوره‌ها به دانشجویان امکان می دهد با مفاهیم عملی کار در صنعت طراحی و اکتشاف راه کارهای بهتر برای بهبود تجربه کاربری، طراحی رابط کاربری و خلق تجربه خوب برای کاربران آشنا شوند.دو دوره آموزشی UX UI شامل مطالب گسترده ای می شوند که از مقدماتی تا پیشرفته ، تجربه کاربری (UX) و طراحی رابط کاربری (UI) را پوشش می دهند. در ادامه به برخی از مباحث اصلی آموزشی این دو دوره میرسیم - مبانی طراحی: در این بخش از دوره، مفاهیم اولیه طراحی ارائه می شود، که شامل تعریف مفهوم ها، استفاده از رنگ و ترکیبات رنگ، تکنیک های طراحی و مفهوم فضای خالی می شود.- اصول تجربه کاربری: بخش های مختلفی از تجربه کاربری از جمله آگاهی از نیاز کاربر، طراحی سایت، طرح واکنش آن رابط کاربری، و مطالب طراحی رابط کاربری مورد بررسی قرار می گیرد!!!!.- طراحی رابط کاربری (UI): در این بخش، ترکیب کاورهای گرافیکی، تکنولوژی مورد استفاده در طراحی، طراحی موبایل و وب سایت، طراحی نرم افزار، طراحی شماتیک و ساختار سایت و نرم افزار و غیره مورد بررسی قرار می گیرد!!!.- فرایند طراحی UX: در این قسمت، شما با مهارت های طراحی UX برای یافتن نیازهای کاربران، طراحی و ارزیابی محصولات دیجیتال، افزایش تحلیل رابط کاربری، تصویرسازی صفحات و موارد قدرتمندی همچون فرایند طراحی کاربر مورد بررسی قرار می گیرد.- فرایند طراحی UI: در این قسمت، آموزش داده می شود که چگونه می توان یک رابط بصری جذاب و کارآمد طراحی کرد و نیز تجربی که کاربر در هر صفحه از طراحی خواهد داشت، آقای کاربر، جدول آرایی ، نمودارهای فرمت شده و کار با فایل های گرافیکی مورد بررسی قرار می گیرد.در کل، دوره های آموزشی UX UI برای افرادی که به مفاهیم طراحی و تجربه کاربری علاقه مندند، بسیار مفید واقع می شوند. این دوره ها یک روش جدید برای فهم بهتر نیازهای کاربران و طراحی رابط کاربری آسان و کارآمد را آموزش می دهند.آرزو موفقیت و سربلندی دارم برا همه تون :)) منتظر مقاله جدید باشید </description>
                <category>ayhan Dev</category>
                <author>ayhan Dev</author>
                <pubDate>Sun, 23 Apr 2023 22:11:24 +0330</pubDate>
            </item>
                    <item>
                <title>شی گرایی در زبان دارت: مفهوم کلاس (class)</title>
                <link>https://virgool.io/@Ayhan_dev/%D8%B4%DB%8C-%DA%AF%D8%B1%D8%A7%DB%8C%DB%8C-%D8%AF%D8%B1-%D8%B2%D8%A8%D8%A7%D9%86-%D8%AF%D8%A7%D8%B1%D8%AA-%D9%85%D9%81%D9%87%D9%88%D9%85-%DA%A9%D9%84%D8%A7%D8%B3-class-ylvzskhrumi6</link>
                <description>برنامه نویسی شی گرا متد قالب هر زبان برنامه نویسی است و اگر وارد هر زبانی بشین باید اون رو یاد بگیرید چون ابزار ها و فریم ورک هایی که برای اون زبان به وجود میان از این متد استفاده میکنن استفاده از کلاس ها و شی گرایی باعث کاهش کدهای ما و افزایش قابلیت توسعه برنام و کاهش هزینه توسعه برنامه میشود .برنامه نویسی شی گرا متد قالب هر زبان برنامه نویسی است و اگر وارد هر زبانی بشین باید اون رو یاد بگیرید چون ابزار ها و فریم ورک هایی که برای اون زبان به وجود میان از این متد استفاده میکنناستفاده از کلاس ها و شی گرایی باعث کاهش کدهای ما و افزایش قابلیت توسعه برنام و کاهش هزینه توسعه برنامه میشود .برای درک بهتر این موضوع کلاس را یک نقشه ساختمان در نظر بگیرید و خونه هایی که طبق این نقشه ساخته میشن رو شی در نظر بگیرید . با استفاده از این نقشه میشه هزارتا خونه در جاهای مختلف ساخت که شاید یکی رنگ دیوار هاش فرق کنه یکی کابینت هاش ولی بیس اصلی خونه یک چیز هست . برای درک بهتر این موضوع به کد های زیر توجه کنیدclass Map {
  String wall;
  String window;

  void changeWindowColor(String color){
    this.window  = color;
  }

}برای تعریف یک کلاس درست مانند مثال بالا از کلمه کلیدی class استفاده میکنیم . خب همون طور که میبینید ما امدیم یک کلاس به اسم Map رو ساختیم و توی این کلاس ما یک سری ویژگی های پیش فرض مانند رنگ دیوار ها و رنگ پنجره ها رو اضافه کردیم .حالا میایم و از این کلاس یک شی رو به وجود میاریم که این شی در واقع همون خونه ما میشه که طبق این نقشه ساخته میشهvoid main() {
  var map = new Map();
  map.windowColor = &amp;quotblue&quot;
  print(map.windowColor);
}در بالا با استفاده از کلمه کلیدی new قبل از اسم کلاس یک شی از اون کلاس به وجود اوردم . در خط بعد من به ویژگی رنگ پنجره ها اشاره کردم با نوشتن اسم شی که به وجود اوردم و قرار دادن دات و نوشتن نام اون ویژگی و اون رو برابر با رنگ آبی قرار دادم و در خط بعد اون رو نمایش دادم . همون طور که میبینید ما خیلی راحت میتونیم به وژگی های کلاسمون دسرسی داشته باشیم و اون هارو بر اساس نیازمون تغییر بدیم .متد سازندهدر شی گرایی ما یک سری متد داریم به اسم متد سازنده (کانستراکتور Constructor) به متدهایی که هم نام کلاس باشند متد سازنده میگیم. اگر متد سازنده ای تعریف نکنیم بصورت پیش فرض یک متد سازنده خالی برای ما فرض می شود به شکل زیرclass Map {
  String wallColor;
  String windowColor;

  Map(){
    
  }
}اما یکی از کارهای مهمی که با این متد انجام می شود مقداردهی ویژگی های کلاس ما هست. فرض کنید ما ده تا ویژگی داره کلاسمون و موقع ساخت آبجکت برای اینکه این ویژگی ها را مقداری دهی کنیم باید ده بار متد های مختلف Set و صدا بزنیم, این کار و میتونیم در Constructor به راحتی انجام بدیم به مثال زیر توجه کنید .void main() {
  var map = new Map(&#039;blue&#039; , &#039;red&#039;);
  map.windowColor = &amp;quotblue&quot;
  print(map.windowColor);
}

class Map {
  String wallColor;
  String windowColor;

  Map(window , wall){
    this.windowColor = window;
    this.wallColor = wall;
  }
}اگر توجه کنید وقتی ما متد سازنده رو میسازیم هربار که میخوایم از کلاس یک شی جدید بسازیم باید مقادیری رو که درون متد سازنده هستن رو مقدار دهی کنیم درست شبیه مثال بالا .ما میتونیم متد سازنده خومون رو کوتاه تر کنیم و بهینه تر اون رو بنویسیم به شکل زیرclass Map {
  String wallColor;
  String windowColor;

  Map(this.wallColor , this.windowColor);
}همون طور که میبینید با این مقدار کد در واقع داره همون کارو انجام میده پس سعی کنیم همیشه متد سازنده خومون رو به این شکل بسازیم .ویژگی هایی که در بالا برای کلاس تعریف کردیم از نوع Public هستند به همین خاطر به صورت مستقیم با صدا زدن نام آبجکت میتونیم به اون ها دسترسی داشته باشیم. اما میتونیم این ویژگی هارو از نوع Private تعریف کنیم که فقط با استفاده از متد هایی به نام Getter و Setter بتونیم برای اونها مقادیر جدید قرار بدیم.  در زبان دارت برای اینکه یک متغیر و به شکل Private تعریف کنیم باید قبل از اسم متغیر از _ استفاده کنیم.برای شروع من یک ویژگی در رو  به کلاس های خودمون اضافه میکنم که از نوع Private هست.class Map {
  String wallColor;
  String windowColor;
  String _door;

  void setDoor(String door){
      this._door = door;
  }

  String getDoor(){
    return _door;
  }

}ویژگی  door_  بصورت خصوصی تعریف شده و برای اینکه موقع ساخت آبجکت بتونیم درب را مقدار دهی کنیم باید حتما از متد setDoor استفاده کنیم. کلمه کلیدی this اینجا به متغیر های داخل کلاس اشاره میکند.و اگه بخوایم مقدار door_ رو دریافت کنیم با از متد getDoor استفاده کنیم درست به شکل زیرvoid main() {
  var map = new Map();
  map.setDoor(&#039;black&#039;);
  print(map.getDoor());
}سDD تگ ها :اموزش دارتشما برای ارسال نظر باید وارد سایت شویددیدگاه های ارزشمند شمادرباره ماتمام تلاش ما در مستر فلاتر این است که شما رو با طراحی های روز دنیا در زمینه رابط کاربری و ایده های خلاقانه ای اشنا کنیم که با استفاده از ان ها هم به دانش خود بیفزاید و هم در پروژه هاتون استفاده کنید . و این که سطح طراحی رابط کاربری رو در حد توان خود بالا ببریم و یک قدم مثبت در این زمینه برداشته باشیم .بخش های سایتقوانین و مقرراتدرباره ماارتباط با ماارتباط با ماشما میتوانید با استفاده از یکی از راه‌های زیر با ما ارتباط برقرار کنید@mrflutterinfo@mrflutter.irحقوق محصولات و محتوای اين سایت متعلق به مستر فلاتر می باشد و هر گونه کپی برداری از محتوا و محصولات سایت غیر مجاز و بدون رضایت ماست</description>
                <category>ayhan Dev</category>
                <author>ayhan Dev</author>
                <pubDate>Thu, 22 Dec 2022 17:06:40 +0330</pubDate>
            </item>
                    <item>
                <title>چرا متد های آرایه در جاوا قابل دسترسی نیست</title>
                <link>https://virgool.io/@Ayhan_dev/%DA%86%D8%B1%D8%A7-%D9%85%D8%AA%D8%AF-%D9%87%D8%A7%DB%8C-%D8%A2%D8%B1%D8%A7%DB%8C%D9%87-%D8%AF%D8%B1-%D8%AC%D8%A7%D9%88%D8%A7-%D9%82%D8%A7%D8%A8%D9%84-%D8%AF%D8%B3%D8%AA%D8%B1%D8%B3%DB%8C-%D9%86%DB%8C%D8%B3%D8%AA-e1mhdmvja51u</link>
                <description>مقاله کوتاه در مورد متد های ارایه در جاوا ایهان محمدیمتد و خصوصیات خود آرایه قابل دسترسی نیستمثلا شما بوسیله length طول آرایه رو بدست میاریدهیچوقت نمیتونید به کلاس یا هرکجا که این خصوصیت رو در برمیگیره بریدآرایه ها یک نوع خاص از ابجکت ها هستند که هیچ تعریفی مانند کلاس ندارنیعنی شما نمیتوانید متد ها و خصوصیات یک آرایه را در قالب کلاس ببینید. زیرا آرایه یک بخش از خود زبان است یا به عبارتی یکی از ویژگی های خود زبان میباشد که دارای قواعد نوشتاری syntax منحصر به فرد خود است.خصوصیت length که طول آرایه رو برمیگرداند. length میتواند 0 یا یک عدد مثبت باشد. متد clone که دقیقا متدی همنام متد clone در کلاس Object را Override میکند. خروجی این متد یک آرایه از نوع همان آرایه است. برای مثال اگر آرایه شما نوع []T باشد، خروجی متد Clone یک آرایه از نوع []T میباشد.تمامی اعضای آرایه از کلاس Object ارث بری میکنند بجز متد clone.i.m : @ayha.n_1380T.m : @ayhan_dev</description>
                <category>ayhan Dev</category>
                <author>ayhan Dev</author>
                <pubDate>Wed, 31 Aug 2022 12:21:05 +0430</pubDate>
            </item>
                    <item>
                <title>ایجاد پردازش جدید در پایتون</title>
                <link>https://virgool.io/@Ayhan_dev/%D8%A7%DB%8C%D8%AC%D8%A7%D8%AF-%D9%BE%D8%B1%D8%AF%D8%A7%D8%B2%D8%B4-%D8%AC%D8%AF%DB%8C%D8%AF-%D8%AF%D8%B1-%D9%BE%D8%A7%DB%8C%D8%AA%D9%88%D9%86-zcwpcxr0sqff</link>
                <description>در ابتدا فرض میکنیم تابعی با نام test() داریم که یک متن ساده را برای ما چاپ میکند. در حالت عادی برای صدا زدن تابع به صورت زیر عمل خواهیم کرد.def test():    print(&quot;test function ran successfully!&quot;)if __name__ == &#x27;__main__&#x27;:    test()در صورتی که کد به صورت بالا اجرا شود، هم برنامه اصلی و هم تابع test() در یک پردازنده اجرا و پردازش میشوند.اما میخواهیم تابع test() در پردازنده دیگری از سیستم اجرا و پردازش شود.ایجاد process جدیدبرای این کار در زبان برنامه نویسی پایتون از ماژول multiprocessing کلاس Process را به برنامه خود اضافه میکنیم.from multiprocessing import Processحال با صدا زدن Process یک شئ از این کلاس ایجاد میکنیم تا بتوانیم تابع مورد نظر را به عنوان یک پردازش جدید اجرا کنیم.برای ایجاد شئ از نوع Process کافی است نام تابع مورد نظر را به عنوان آرگومان target در هنگام صدا زدن سازنده کلاس ارسال کنیم. یعنی چیزی مشابه زیر:p = Process(target=test)اجرای پردازش ایجاد شدهاکنون که یک شئ از نوع فرآیند (Process) داریم، با فراخوانی تابع start() بر روی آن میتوانیم فرآیند را اجرا کنیم.p.start()پس از این فراخوانی، تابع test() به صورت یک پردازش جدید و در پردازنده ای دیگر اجرا خواهد شد.جلوگیری از پیشروی برنامه فعلی تا اتمام اجرای پردازشپس از start شدن پردازش، برنامه فعلی به اجرای خودش ادامه خواهد داد. اگر بخواهیم برنامه فعلی تا اتمام پردازش اجرا شده منتظر بماند و ادامه آن اجرا نشود، میتوانیم از تابع join() استفاده کنیم.این تابع بر روی شئ فرآیند صدا زده شده و باعث میشود اجرای برنامه فعلی تا اتمام پردازش مورد نظر متوقف شود.کد نهایی اجرای پردازش جدید به صورت زیر خواهد شد:from multiprocessing import Processdef test():    print(&quot;test function ran successfully!&quot;)if __name__ == &#x27;__main__&#x27;:    p = Process(target=test)    p.start()    p.join()# result:# test function ran successfully! T.m: t.me/ayhan_dev</description>
                <category>ayhan Dev</category>
                <author>ayhan Dev</author>
                <pubDate>Wed, 31 Aug 2022 11:28:55 +0430</pubDate>
            </item>
                    <item>
                <title>تفاوت IDE، زبان و فریمورک</title>
                <link>https://virgool.io/@Ayhan_dev/%D8%AA%D9%81%D8%A7%D9%88%D8%AA-ide-%D8%B2%D8%A8%D8%A7%D9%86-%D9%88-%D9%81%D8%B1%DB%8C%D9%85%D9%88%D8%B1%DA%A9-pois169b4fgl</link>
                <description>تفاوت‌های IDE، زبان برنامه‌نویسی و فریمورک را بررسی کنیم. نمی‌توانیم C#، .NET و ویژوال استودیو (Visual Studio) را یکی درنظر بگیریم، چون با هم فرق دارند.ویژوال استودیو (Visual Studio) یک IDE (محیط یکپارچه‌ی توسعه‌ی نرم‌افزار) است، C# و VB.NET زبان‌های برنامه‌نویسی هستند و .NET یک فریمورک است.فریمورک .NET مجموعه‌ای عظیم از کامپوننت‌ها و کتابخانه‌هاست. اگر به آدرس زیر در سیستم‌تان بروید:C:\Windows\Microsoft.NET\Frameworkنسخه‌هایی مختلف از فریمورک .NET را خواهید دید. اگر به هریک از پوشه‌های مربوط به نسخه‌های.NET بروید، فایل‌های مختلفی را می‌بینید که با کلمه‌ی “System” شروع می‌شوند و از نوع “Dll” هستند.DLL مخفف کلمه‌ی Dynamic Link Library است.این فایل‌ها دارای کدهایی با قابلیت استفاده‌ی مجدد (reusable code ) هستند که کاری خاص را انجام می‌دهند.مثلاً، فایل “System.Data.dll” به ذخیره‌ی داده در RDBMS کمک می‌کند یا فایل “System.Drawing.Dll”  برای اهداف GUI (واسط کاربری گرافیکی) و نمایش است.پس به زبانی ساده، فریمورک .NET مجموعه‌ای بزرگ از کامپوننت‌هایی با قابلیت استفاده‌ی مجدد است.حالا برای نوشتن یک برنامه، باید منطق برنامه را بنویسیم و این کامپوننت‌ها را فراخوانی کنیم.برای این کار به زبان برنامه‌نویسی نیاز داریم. C# و VB.NET زبان‌های برنامه‌نویسی هستند. این زبان‌ها می‌توانند این کامپوننت‌ها را فراخوانی و از آنها استفاده کنند.در اپلیکیشن‌های حرفه‌ای، سایز برنامه بسیار بزرگ است و برای مدیریت بهتر اتوماسیون موارد زیر لازم است:پیدا کردن و ارجاع به کامپوننت فریمورک .NET در کد C#کمک به پشتیبانی از کامپوننت‌های .NET در زمان کدنویسیچک کردن سینتکس C# و کامپایل آنو ….به طور خلاصه، ابزاری لازم داریم که در مدیریت کد C# و ارجاع کامپوننت‌های فریمورک .NET در شرایط مختلف کمک‌مان کند. می‌توانیم این ابزار را یک محیط یکپارچه‌ی توسعه‌ی نرم‌افزار بنامیم. (VS IDE (Visual Studio IDE تمامی این کارها را برایمان انجام می‌دهد.به طور خلاصه، C# یک زبان برنامه‌نویسی است و از کامپوننت‌های فریمورک .NET برای نوشتن یک اپلیکیشن استفاده می‌کند.برای توسعه‌ی یک نرم‌افزار، باید کارهایی را انجام دهیم، مثلاً کامپایل کردن برنامه، ارجاع به کامپوننت‌های فریمورک .NET، چک کردن سینتکس و غیره، که VS IDE همه‌ی این کارها را انجام می‌دهد. پس VS IDE یک ابزار است.  t.m : @ayhan_devi.m : @ayha.n_1380  </description>
                <category>ayhan Dev</category>
                <author>ayhan Dev</author>
                <pubDate>Tue, 30 Aug 2022 11:13:44 +0430</pubDate>
            </item>
                    <item>
                <title>مقاله درباره Net. و linq</title>
                <link>https://virgool.io/@Ayhan_dev/httpsvirgoolioayhanmohammadilinq-net-ayhan-whm6yfcvy4so</link>
                <description>اکثرا توسعه دهندگان Net. با LINQ آشنا میباشند،تکنولوژی ای که طرح و نقشه برنامه نویسی عملی(functional programming ) را به محیط شی گرایی می‌آورد. Parallel LINQ یا PLINQ, با اضافه کردن قابلیت های موازی بصری بر روی یک فریمورک قدرتمند، LINQ را یک مرحله بالا میبرد . PLINQ یک موتور اجرای پرس و جو (query) است ،هر پرس و جوی LINQ-to-Objects یا LINQ-to-XML را می‌پذیرد و بصورت خودکار از چندین پردازشگر یا هسته که برای اجرا در دسترس هستند ، استفاده میکند .استفاده از PLINQ دقیقا همانند استفاده از LINQ-to-Objects و LINQ-to-XML است . شما از تمام Operatorهایی که در  3.0 #C یا کلاس System.Linq.Enumerable ، شاملOrderBy, Join, Select,Where هستند ، میتوانید استفاده کنید . کوئری های LINQ-to-SQL و LINQ-to-Entities بوسیله پایگاه داده های خاص و query providerها ، قابل اجرا خواهند بود . بنابراین ، PLINQ راهی برای توازی این دسته از کوئری ها پیشنهاد نمیدهد .استفاده از متد AsParallel : متد AsParallel  ، درگاهی است به PLINQ .رشته ای از داده ها را به ParallelQuery تبدیل می‌کند . موتور LINQ استفاده از ParallelQuery در queryها را تشخیص میدهد و بصورت خودکار آن را به PLINQ تبدیل میکند . شما در هر بار استفاده از PLINQ به احتمال زیاد باید از متد AsParallel هم استفاده کنید . Sequential LINQ execution :var customers = new[] { 	new Customer { ID = 1, FirstName = &quot;Sandeep&quot; , LastName = &quot;Ramani&quot; }, 	new Customer { ID = 2, FirstName = &quot;Dharmik&quot; , LastName = &quot;Chotaliya&quot; }, 	new Customer { ID = 3, FirstName = &quot;Nisar&quot; , LastName = &quot;Kalia&quot; } , 	new Customer { ID = 4, FirstName = &quot;Ravi&quot; , LastName = &quot;Mapara&quot; } , 	new Customer { ID = 5, FirstName = &quot;Hardik&quot; , LastName = &quot;Mistry&quot; } 	new Customer { ID = 6, FirstName = &quot;Sandy&quot; , LastName = &quot;Ramani&quot; }, 	new Customer { ID = 7, FirstName = &quot;Jigar&quot; , LastName = &quot;Shah&quot; }, 	new Customer { ID = 8, FirstName = &quot;Kaushal&quot; , LastName = &quot;Parik&quot; } , 	new Customer { ID = 9, FirstName = &quot;Abhishek&quot; , LastName = &quot;Swarnker&quot; } , 	new Customer { ID = 10, FirstName = &quot;Sanket&quot; , LastName = &quot;Patel&quot; } 	new Customer { ID = 11, FirstName = &quot;Dinesh&quot; , LastName = &quot;Prajapati&quot; }, 	new Customer { ID = 12, FirstName = &quot;Jayesh&quot; , LastName = &quot;Patel&quot; }, 	new Customer { ID = 13, FirstName = &quot;Nimesh&quot; , LastName = &quot;Mishra&quot; } , 	new Customer { ID = 14, FirstName = &quot;Shiva&quot; , LastName = &quot;Reddy&quot; } , 	new Customer { ID = 15, FirstName = &quot;Jasmin&quot; , LastName = &quot;Malviya&quot; } 	new Customer { ID = 16, FirstName = &quot;Haresh&quot; , LastName = &quot;Bhanderi&quot; }, 	new Customer { ID = 17, FirstName = &quot;Ankit&quot; , LastName = &quot;Ramani&quot; }, 	new Customer { ID = 18, FirstName = &quot;Sanket&quot; , LastName = &quot;Shah&quot; } , 	new Customer { ID = 19, FirstName = &quot;Amit&quot; , LastName = &quot;Shah&quot; } , 	new Customer { ID = 20, FirstName = &quot;Nilesh&quot; , LastName = &quot;Soni&quot; } }; var results = from c in customers 	 where c.FirstName.StartsWith(&quot;San&quot;) 	 select c;Parallel LINQ execution :var customers = new[] { 	new Customer { ID = 1, FirstName = &quot;Sandeep&quot; , LastName = &quot;Ramani&quot; }, 	new Customer { ID = 2, FirstName = &quot;Dharmik&quot; , LastName = &quot;Chotaliya&quot; }, 	new Customer { ID = 3, FirstName = &quot;Nisar&quot; , LastName = &quot;Kalia&quot; } , 	new Customer { ID = 4, FirstName = &quot;Ravi&quot; , LastName = &quot;Mapara&quot; } , 	new Customer { ID = 5, FirstName = &quot;Hardik&quot; , LastName = &quot;Mistry&quot; } 	new Customer { ID = 6, FirstName = &quot;Sandy&quot; , LastName = &quot;Ramani&quot; }, 	new Customer { ID = 7, FirstName = &quot;Jigar&quot; , LastName = &quot;Shah&quot; }, 	new Customer { ID = 8, FirstName = &quot;Kaushal&quot; , LastName = &quot;Parik&quot; } , 	new Customer { ID = 9, FirstName = &quot;Abhishek&quot; , LastName = &quot;Swarnker&quot; } , 	new Customer { ID = 10, FirstName = &quot;Sanket&quot; , LastName = &quot;Patel&quot; } 	new Customer { ID = 11, FirstName = &quot;Dinesh&quot; , LastName = &quot;Prajapati&quot; }, 	new Customer { ID = 12, FirstName = &quot;Jayesh&quot; , LastName = &quot;Patel&quot; }, 	new Customer { ID = 13, FirstName = &quot;Nimesh&quot; , LastName = &quot;Mishra&quot; } , 	new Customer { ID = 14, FirstName = &quot;Shiva&quot; , LastName = &quot;Reddy&quot; } , 	new Customer { ID = 15, FirstName = &quot;Jasmin&quot; , LastName = &quot;Malviya&quot; } 	new Customer { ID = 16, FirstName = &quot;Haresh&quot; , LastName = &quot;Bhanderi&quot; }, 	new Customer { ID = 17, FirstName = &quot;Ankit&quot; , LastName = &quot;Ramani&quot; }, 	new Customer { ID = 18, FirstName = &quot;Sanket&quot; , LastName = &quot;Shah&quot; } , 	new Customer { ID = 19, FirstName = &quot;Amit&quot; , LastName = &quot;Shah&quot; } , 	new Customer { ID = 20, FirstName = &quot;Nilesh&quot; , LastName = &quot;Soni&quot; } }; var results = from c in customers.AsParallel() 	 where c.FirstName.StartsWith(&quot;San&quot;) 	 select c; با اضافه کردن متد ()AsParallel ،زمان اجرای Net.  توازی (parallelize ) عملیات ها در سراسر هسته های چندگانه به طور خودکار انجام می‌شود . در حقیقت ، PLINQ مسئولیت قسمت بندی کردن داده ها، برای اینکه قادر به پردازش آنها بصورت موازی باشد را ، تماما بر عهده می‌گیرد .با اضافه کردن متد ()AsParallel ،زمان اجرای Net.  توازی (parallelize ) عملیات ها در سراسر هسته های چندگانه به طور خودکار انجام می‌شود . در حقیقت ، PLINQ مسئولیت قسمت بندی کردن داده ها، برای اینکه قادر به پردازش آنها بصورت موازی باشد را ، تماما بر عهده می‌گیرد . زمانی که شما کوئری های ساده بالا را اجرا می‌کنید ،خروجی یکسانی دریافت خواهید کرد اما احتمالا در جهت های مختلف . تکه کد اول یک مثال از Sequential LINQ execution ، و تکه کد دوم یک مثال از Parallel LINQ execution میباشد . محدودیت ها : 1. PLINQ فقط بر روی مجموعه های local کار میکند . این بدان معناست که اگر شما از LINQ Providerهایی ، همانند LINQ to SQL یا ADO.NET Entity Framework استفاده می‌کنید ، شما شانسی در این زمینه برای استفاده از این نسخه ندارید . 2. زمانی که داده هارا قسمت بندی میکنید و آنها را بصورت موازی اجرا میکنید ، خروجیِ شما دقیقا همانند خروجی اجرای کدها بصورت سریالی نمیشود . اگرچه ، شما قادر به استفاده از آن با استفاده از متد  ()AsOrdered در کوئری های خود خواهید بود ، که دستورِ خاصی را بصورت اجباری بر روی نتیجه شما اعمال می‌کند، به یاد داشته باشید که ،  متد ()AsOrdered برای مجموعه های بزرگ روی کارایی تاثیر دارد . حفظ نظم نتایج جستجوی کوئری PLINQ  با استفاده از متد AsOdered :var results = from c in customers.AsParallel().AsOrdered() 	 where c.FirstName.StartsWith(&quot;San&quot;) 	 select c;کنترل توازی :1. اجبار اجرای موازی :در اینگونه موارد ، PLINQ ممکن است تصمیم بگیرد که با کوئری شما بهتر است بصورت ترتیبی رفتار شود . شما این را می‌توانید با استفاده از متد WithExecutionMode کنترل کنید ، که به نوع ParallelQuery اعمال می‌شود . متد WithExecutionMode  یک مقدار از ParallelExecutionMode enumeration دریافت میکند . در اینجا دو نوع مقدار وجود دارد : defualt (اجازه می‌دهد PLINQ برای اینکه چه کاری انجام شود تصمیم بگیرد ) و ForceParallelism .در زیر تکه کدی وجود دارد که استفاده از متد را نمایش می‌دهد :var results = from c in customers.AsParallel().WithExecutionMode 			(ParallelExecutionMode.ForceParallelism) 	 where c.FirstName.StartsWith(&quot;San&quot;) 	 select c;2. محدود کردن درجه توازی :شما می‌توانید با استفاده از متد WithDegreeofParallelism که روی ParallelQuery کار میکند   ، درخواست دهید که PLINQ تعداد قسمت هایی که قرار است با هم پردازش شوند را محدود کند . این متد ، یک مقدار int دریافت میکند که نشان دهنده ماکزیمم تعداد قسمت بندی هایی است که با ید با هم پردازش شوند . این را تحت عنوان درجه توازی میشناسند . تنظیم درجه توازی PLINQ را مجبور به استفاده از آن نمی‌کند . فقط سقف درجه توازی را تعیین می‌کند . ممکن است PLINQ تصمیم به استفاده از مقدار کمتری از آن چه شما مشخص کرده اید ، بگیرد . اگر شما از متد WithExecutionMode استفاده نمی‌کنید ، ممکن است تصمیم به اجرای queryها بصورت ترتیبی بکنید . در زیر تکه کدی آمده است که استفاده از این متد را نمایش می‌دهد :var results = from c in customers.AsParallel().WithDegreeOfParallelism(2) 	 where c.FirstName.StartsWith(&quot;San&quot;) 	 select c;3. تولید و استفاده از توالی موازی (Parallel Sequence) :IEnumerable&lt;int&gt; evens 	= ((ParallelQuery&lt;int&gt;) ParallelEnumerable.Range(0, 50000)) 		.Where(i =&gt; i % 2 == 0) 		.Select(i =&gt; i);کد بالا از متد Range برای ایجاد 50000 عدد integer که از 0 شروع میشود ،  استفاده کرده است . اولین آرگومان دریافتی اندیس آغازین آن است و دومین آرگومان تعداد مقادیری که شما نیاز دارید . توجه داشته باشید که ما مقدار را از متد Range به Cast ، ParallelQuery کردیم . اگر این کار را نکنیم ، LINQ پشتیبانی از توالی بصورت موازی را تشخیص نمی‌دهد و کوئری ها را به صورت متوالی اجرا خواهد کرد . 4. تولید و استفاده از تکرار توالی (Repeating Sequnce) :int sum = ParallelEnumerable.Repeat(1, 50000) 		.Select(i =&gt; i) 		.Sum();متد Static Repeat یک شئ و یک مقدار را دریافت می‌کند و توالی ای را ایجاد می‌کند که در آن اشیا به تعداد مقداری که متد دریافت کرده است تکرار می‌شوند . تلگرام : @ayhan_dev اینستاگرام: Instagram.com/ayha.n_1380</description>
                <category>ayhan Dev</category>
                <author>ayhan Dev</author>
                <pubDate>Sun, 28 Aug 2022 19:04:49 +0430</pubDate>
            </item>
                    <item>
                <title>تعریف CROSS-SITE SCRIPTING یا XSS</title>
                <link>https://virgool.io/@Ayhan_dev/%D8%AA%D8%B9%D8%B1%DB%8C%D9%81-cross-site-scripting-%DB%8C%D8%A7-xss-ujtwwq6uquuq</link>
                <description> تعریف: اسکریپت بین سایتی (XSS) یک حمله تزریق کد در سمت  کلاینت است. هدف مهاجم اجرای اسکریپت های مخرب در مرورگر وب قربانی با گنجاندن کدهای مخرب در یک صفحه وب یا وب اپلیکیشن کاملا قانونی است. حمله واقعی زمانی رخ می دهد که قربانی از صفحه وب یا برنامه وب که کد مخرب را اجرا می کند بازدید کند. صفحه وب یا برنامه وب به وسیله ای برای تحویل اسکریپت مخرب به مرورگر کاربر تبدیل می شود. وسایل نقلیه آسیب‌پذیری که معمولاً برای حملات Cross-siteScripting استفاده می‌شوند، فروم‌ها، تابلوهای مرورگر پیام و صفحات وب هستند که اجازه نظرات را می‌دهند. اسکریپت بین سایتی چگونه کار می کند:+ برای اجرای کدهای مخرب جاوا اسکریپت در مرورگر قربانی، مهاجم ابتدا باید راهی برای تزریق کد مخرب (بارگذاری بار) به صفحه وب که قربانی بازدید می کند بیابد. + پس از آن، قربانی باید از صفحه وب با کد مخرب بازدید کند. اگر حمله متوجه قربانیان خاصی باشد، مهاجم می تواند از مهندسی اجتماعی و/یا فیشینگ برای ارسال یک URL مخرب به قربانی استفاده کند. انواع اسکریپت بین سایتی XSS منعکس شده:یک: Reflected XSS جایی که اسکریپت مخرب از درخواست فعلی HTTP می آید. دو: Stored XSS جایی که اسکریپت مخرب از پایگاه داده وب سایت می آید. سه: DOM-based XS جایی که آسیب پذیری در کد سمت کلاینت به جای کد سمت سرور وجود دارد. ابزارهای تست اسکن XSS:1 ~ Find XSS2 ~ XSS Mister Scanner 3 ~ Quttera4‌ ~ XSS Scanner 5 ~ Acunetix 6 ~ W3af (Plugin) 7 ~ Qualys 8 ~ Tenable 9 ~ Swascan چگونه می توان از حملات XSS جلوگیری کرد: جلوگیری از اسکریپت croSs-site در برخی موارد بی اهمیت است، اما بسته به پیچیدگی برنامه و روش هایی که داده های قابل کنترل توسط کاربر را مدیریت می کند، می تواند بسیار سخت تر باشد. + فیلتر ورودی هنگام ورود استفاده از پاسخ مناسب کدگذاری داده ها در خروجی - استفاده از فرار/رمزگذاری - آموزش و حفظ آگاهی - تنظیم پرچم HttpOnly - رعایت اصول HTML - استفاده از سرصفحه های خط مشی امنیتی محتواآیهان محمدی : @Ayhan_Mohammadi</description>
                <category>ayhan Dev</category>
                <author>ayhan Dev</author>
                <pubDate>Fri, 12 Aug 2022 12:20:51 +0430</pubDate>
            </item>
                    <item>
                <title>پیاده سازی منوی منوی متریال در بیسیک فور اندروید(B4A)</title>
                <link>https://virgool.io/@Ayhan_dev/%D9%BE%DB%8C%D8%A7%D8%AF%D9%87-%D8%B3%D8%A7%D8%B2%DB%8C-%D9%85%D9%86%D9%88%DB%8C-%D9%85%D9%86%D9%88%DB%8C-%D9%85%D8%AA%D8%B1%DB%8C%D8%A7%D9%84-%D8%AF%D8%B1-%D8%A8%DB%8C%D8%B3%DB%8C%DA%A9-%D9%81%D9%88%D8%B1-%D8%A7%D9%86%D8%AF%D8%B1%D9%88%DB%8C%D8%AFb4a-elgu5afqtlpw</link>
                <description>ابتدا کتابخانه B4XDrawer را تیک می‌زنیم.Private d_menu As B4XDrawerd_menu.Initiallze(Me, &quot;Drawer&quot;, Activity,300dip)d_menu.CenterPanel.loadLayout(&quot;main_page&quot;)d_menu.LeftPanel.loadLayout(&quot;menu&quot;)دقت داشته‌ باشید که یک لایوت نیاز دارم تا ویو های منو را در آن بسازیم که در اینجا ما اسم لایوت را menu گذاشتیم.به وسیله دستورات زیر، منو را باز کنیدd_menu.LeftOpen=not(d_menu.LeftOpen)@Ayhan_Mohammadi</description>
                <category>ayhan Dev</category>
                <author>ayhan Dev</author>
                <pubDate>Thu, 11 Aug 2022 23:05:25 +0430</pubDate>
            </item>
                    <item>
                <title>ایجاد یک فایلtxt از متن در B4A</title>
                <link>https://virgool.io/@Ayhan_dev/%D8%A7%DB%8C%D8%AC%D8%A7%D8%AF-%DB%8C%DA%A9-%D9%81%D8%A7%DB%8C%D9%84txt-%D8%A7%D8%B2-%D9%85%D8%AA%D9%86-%D8%AF%D8%B1-b4a-ugbrhovb9htt</link>
                <description>برای ایجاد یک فایل متنی از لیبل یا نوشته ای در برنامه به روش زیر عمل کنید:برای این کار می‌توانید از دستور کتابخانه file به نام WriteString استفاده کنید.طبق خط زیر عمل کنید:File.WriteString(run.GetSafeDirDefaultExternal(&quot;&quot;)&amp;&quot;/voicetotext&quot;,DateTime.Now&amp;&quot;-&quot;&amp;txt_title.Text&amp;&quot;.txt&quot;,lbl_text. Text)در این خط آمدیم یک فایل با پسوندtxt را در پوشه ای voicetotext که در حافظه داخلی ساخته شده است را ذخیره کردیم.متن این فایل از لیبل lbl_txt و نام فایل با استفاده از کتابخانه DateTime ساخته شده است  @Ayhan_Mohammadi</description>
                <category>ayhan Dev</category>
                <author>ayhan Dev</author>
                <pubDate>Sun, 07 Aug 2022 00:19:16 +0430</pubDate>
            </item>
                    <item>
                <title>انواع دیتا در جاوااسکریپت از نگاه دیگر</title>
                <link>https://virgool.io/@Ayhan_dev/%D8%A7%D9%86%D9%88%D8%A7%D8%B9-%D8%AF%DB%8C%D8%AA%D8%A7-%D8%AF%D8%B1-%D8%AC%D8%A7%D9%88%D8%A7%D8%A7%D8%B3%DA%A9%D8%B1%DB%8C%D9%BE%D8%AA-%D8%A7%D8%B2-%D9%86%DA%AF%D8%A7%D9%87-%D8%AF%DB%8C%DA%AF%D8%B1-xvvib8h0vvrk</link>
                <description>به طور کلی دیتا در جاوااسکریپت به دو دسته Refrence type یا Object Type و Primitive type تقسیم میشود. دسته Primitive type به متغیر هایی گفته می شود که مقدارشان در خودشان ذخیره می شود و در حافظه جایی ندارند. در نتیجه وقتی آن ها را به متغیر دیگه نسبت میدیم (Assign میکنیم) باعث میشه آن متغییر هم مقدار مستقل پیدا کند.  از انواع متغیر های این دسته میتوان به String, Null, Number, Undefined, Boolean و Symbol اشاره کرد.مثال زیر می تونه مفهوم بالا رو به خوبی منتقل کند :let numOne = 50;let numTwo = numOne; //numTwo=numOne=50numOne = 100;console.log(numOne); //outputs 100console.log(numTwo); //outputs 50و نکته مهم اینکه این دسته از متغیر ها با مقدارشان با هم مقایسه می شوند.دسته Refrence type یا Object Type متغیر هایی گفته میشود که مقدار آن ها در حافظه ذخیره می شود در واقع هر کدام از این متغیر ها خانه ای مستقل در حافظه دارند و آن ها را نمیتوان مانند متغیر های دسته ی Primitive type با نسبت دادنشون به متغیر دیگه، متغیر جدید را ایجاد کرد بلکه در مورد این دسته از متغیر ها، از نظر جاوا اسکریپت، هر دو متغیر به یک خانه از حافظه اشاره دارند و مقدار آن ها از یکدیگر مستقل نیست در نتیجه با تغییر مقدار هرکدام از این متغیر ها، متغیر دیگر نیز تغییر پیدا میکند. از انواع متغیر های این دسته میتوان به Object، Function، Array، Date و Collection اشاره کردمثال :let object1 = {name:&#x27;Bingeh&#x27;,age:18};let object2 = object1;//updating object1,object1.age = 20;console.log(object2); //we see that object2 also updates the age attributeاگر کد بالا را تست کنید متوجه خواهید شد که با وجود تغییر پراپرتی age در آبجکت object1؛ مقدار پراپرتی age در object2 نیز تغییر پیدا کرده است دلیل آن، یکسان بودن خانه این دو متغیر در حافظه است.این دسته از متغیر ها، از نظر رفرنس آن ها با هم مقایسه می شوند نه مقدار آن ها.@Ayhan_Mohammadi</description>
                <category>ayhan Dev</category>
                <author>ayhan Dev</author>
                <pubDate>Thu, 04 Aug 2022 21:36:44 +0430</pubDate>
            </item>
                    <item>
                <title>تفاوت پیش افزاینده و پس افزاینده در جاوا</title>
                <link>https://virgool.io/@Ayhan_dev/%D8%AA%D9%81%D8%A7%D9%88%D8%AA-%D9%BE%DB%8C%D8%B4-%D8%A7%D9%81%D8%B2%D8%A7%DB%8C%D9%86%D8%AF%D9%87-%D9%88-%D9%BE%D8%B3-%D8%A7%D9%81%D8%B2%D8%A7%DB%8C%D9%86%D8%AF%D9%87-%D8%AF%D8%B1-%D8%AC%D8%A7%D9%88%D8%A7-johecbx8mdao</link>
                <description> پس افزاینده (Post-Increment ) زمانی مناسب است که قرار باشد از مقدار فعلی داده استفاده و سپس مقدار داده افزایش پیدا کند.برای مثال:int i = 1;System.out.println(i++); // prints 1System.out.println(i); // prints 2 پیش افزاینده (Pre-Increment) بر خلاف پس افزاینده زمانی مناسب است که قرار باشد مقدار فعلی را افزایش و سپس استفاده کنیم.برای مثال:int i = 1;System.out.println(++i);// prints 2System.out.println(i); // prints 2 Ayhan Mohammadiyhan Mohammad</description>
                <category>ayhan Dev</category>
                <author>ayhan Dev</author>
                <pubDate>Mon, 01 Aug 2022 19:34:43 +0430</pubDate>
            </item>
                    <item>
                <title>کلاس StringBuffer ، جاوا</title>
                <link>https://virgool.io/@Ayhan_dev/%DA%A9%D9%84%D8%A7%D8%B3-stringbuffer-%D8%AC%D8%A7%D9%88%D8%A7-jeh7x8ru3wrp</link>
                <description>کلاس StringBuffer در جاوا یک کلاس مشابه String در رابطه با رشته ها کلاس StringBuffer میباشد. کلاس رشته همانطور که پیش تر بررسی کردیم، غیرقابل تغییر(Immutable)، دارای اندازه ثابت و... میباشد در حالی که StringBuffer قابل تغییر میباشد  و از لحاظ افزودن دنباله ای کاراکتر ها نیز منعطف عمل میکند. درباره کلاس های Immutable و Mutable از اینجا بخوانید. درباره Immutable بودن رشته ها از اینجا بخوانید.برخی از متد های پرکاربرد کلاس StringBufferappend()برای افزودن یک متن به آخر یک رشته استفاده میشود.length()طول رشته ی ایجاد شده از طریق کلاس StringBuffer را برمیگرداندcharAt()کاراکتر موجود در ایندکس موردنظر را برمیگرداند.delete()دنباله ای از کاراکتر ها را از شی ایجاد شده (از این کلاس) حذف میکند.deleteCharAt()کاراکتر موجود در ایندکس موردنظر را حذف میکند.insert()متنی را در یک موقعیت مشخص شده (ایندکس) وارد میکندreverse()رشته مورد نظر در وارون میکند.capacity()یک ظرفیت برای StringBuffer در نظر میگیردtrimToSize()میزان حافظه مصرفی برای دنباله ای از رشته ها را به اندازه سایز رشته کاهش میدهد———در ادامه یک مثال از این کلاس در رابطه با بررسی متد های این کلاس بررسی خواهیم کرد.  (خروجی هر متد بصورت کامنت امده است) (برای خوانایی بیشتر، کد رو بصورت تصویر توی کانال قرار میدم)public class Main {    public static void main(String[] args) {        //Telegram: @pieceJava        StringBuffer sb = new StringBuffer(&quot;ITHOOLOO&quot;);        //prints length of String        System.out.println(sb.length());// prints 8        //appends .comi to String        sb.append(&quot;.comi&quot;);        System.out.println(sb); // prints ITHOOLOO.comi        //removes a character at index sb.length()-1        sb.deleteCharAt(sb.length() - 1); // removes i from IT...com(i)        System.out.println(sb);// prints ITHOOLOO.com        //removes sequence of characters from index 8 to sb.length()        sb.delete(8, sb.length());//removes &quot;.com&quot;        System.out.println(sb);// prints ITHOOLOO        //reverses String        sb.reverse();        System.out.println(sb);// prints OOLOOHTI            //inserts a String at index 0        sb.insert(0, &quot;HELLO FROM &quot;);        System.out.println(sb);//prints hello from OOLOOHTI    }}تلگرام : @Ayhan_dev</description>
                <category>ayhan Dev</category>
                <author>ayhan Dev</author>
                <pubDate>Sun, 31 Jul 2022 10:10:30 +0430</pubDate>
            </item>
            </channel>
</rss>