<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
    <channel>
        <title>پست‌های انتشارات انجمن عملی مهندسی کامپیوتر دانشگاه شاهد</title>
        <link>https://virgool.io/CE-SHAHED-publication/feed</link>
        <description>اینجا محتوای منتخب (نه فقط محدود به اعضای انجمن ) و اعلامیه هامون رو قرار میدیم</description>
        <language>fa</language>
        <pubDate>2026-04-14 18:15:18</pubDate>
        <image>
            <url>https://files.virgool.io/upload/publication/y9uj3xwwejrd/4ensw3.jpeg</url>
            <title>انجمن عملی مهندسی کامپیوتر دانشگاه شاهد</title>
            <link>https://virgool.io/CE-SHAHED-publication</link>
        </image>

                    <item>
                <title>انواع تست API</title>
                <link>https://virgool.io/CE-SHAHED-publication/%D8%A7%D9%86%D9%88%D8%A7%D8%B9-%D8%AA%D8%B3%D8%AA-api-zxiybr4vdaud</link>
                <description>تست API فرآیندی است که برای اطمینان از عملکرد صحیح و ایمن API ها انجام می شود. در این بخش، 9 نوع رایج از تست API را بررسی می کنیم:  1. تست دود (Testing Smoke): این تست پس از تکمیل توسعه API انجام می شود. در این تست به سادگی بررسی می شود که آیا API ها کار می کنند و مشکلی وجود ندارد.2. تست عملکردی (Testing Functional): این تست بر اساس الزامات عملکردی، یک برنامه تست ایجاد می کند و نتایج را با نتایج مورد انتظار مقایسه می کند.3. تست یکپارچه سازی (Testing Integration): این تست، چندین فراخوانی API را برای انجام تست های سرتاسری ترکیب می کند. در این تست، ارتباطات درون سرویس و انتقال داده ها مورد بررسی قرار می گیرد.4. تست رگرسیون (Testing Regression): این تست اطمینان می دهد که رفع اشکال یا ویژگی های جدید نباید باعث خرابی رفتارهای موجود در API ها شوند.5.  تست بار (Testing Load): این تست عملکرد برنامه را با شبیه سازی بارهای مختلف مورد بررسی قرار می دهد. سپس با کمک این تست می توان ظرفیت برنامه را محاسبه کرد.6. تست استرس (Testing Stress): این تست به عمد، بارهای بالایی را روی API ها ایجاد می کند و بررسی می کند که آیا API ها قادر به عملکرد عادی هستند یا خیر.7. تست امنیتی (Testing Security): این تست، API ها را در برابر تمام تهدیداتخارجی احتمالی مورد بررسی قرار می دهد.8.  تست رابط کاربری (Testing UI): این تست، تعامل رابط کاربری با API ها را آزمایش می کند تا اطمینان حاصل شود که داده ها به درستی نمایش داده می شوند.9. تست تزریق داده مخرب (Testing Fuzz): این تست، داده های ورودی نامعتبر یا غیرمنتظره را به API تزریق می کند و سعی می کند API را خراب کند. به این ترتیب، آسیب پذ یری های API شناسایی می شوند.منبع : system-design.ir</description>
                <category>انجمن عملی مهندسی کامپیوتر دانشگاه شاهد</category>
                <author>JavadAgha</author>
                <pubDate>Sat, 08 Jun 2024 01:49:06 +0330</pubDate>
            </item>
                    <item>
                <title>مخابرات ماهواره ای (Satellite Communication )</title>
                <link>https://virgool.io/CE-SHAHED-publication/%D9%85%D8%AE%D8%A7%D8%A8%D8%B1%D8%A7%D8%AA-%D9%85%D8%A7%D9%87%D9%88%D8%A7%D8%B1%D9%87-%D8%A7%DB%8C-satellite-communication-mdaaah4fb3pj</link>
                <description>به صورت کلی اگه ارتباط بین دو ایستگاه زمینی از طریق یه ماهواره انجام بشه ، به این ارتباط «مخابرات ماهواره ای» (Satellite Communication) میگن .اگه بخوایم بیشتر توضیح بدیم ، اول از همه باید بدونیم ماهواره مخابراتی چی هست ؟ماهواره‌ مخابراتی ، با استفاده از فرکانس‌های رادیویی و میکروویو ، سیگنال‌های مخابراتی رو از نقطه‌ای از زمین دریافت میکنه ، و بعد از تقویت سیگنال ها با کمک دستگاهی به نام ترانسپوندر اونا رو به نقطه دیگری از زمین می‌فرسته. یعنی ماهواره مخابراتی واسطه ای بین فرستنده سیگنال و گیرنده اون به حساب میاد و یه شبکه ارتباطی به وجود میارهکار ترانسپوندر چیه ؟خودِ کلمه transponder ترکیبی از دو کلمه transmitter-responder (فرستنده-پاسخ دهنده) است.گفتیم که ترانسپوندر یه دستگاهیه که سیگنالی که از فرستنده میگیره رو تقویت می‌کنه و فرکانس اونو تغییر میده و برای گیرنده ارسال میکنه.چرا ؟علت تغییر فرکانس سیگنال ارسالی نسبت به سیگنال دریافتی، جلوگیری از تداخل بین این دو سیگناله. این روش سعی داره که سیگنال‌ها با هم اشتباه نشن و به هم برخورد نکنن تا از اختلالات ناخواسته حین انتقال اطلاعات جلوگیری شهدر کل ماهواره های مخابراتی چه فایده ای برامون دارند و کجا ازشون استفاده میشه ؟از این نوع ماهواره‌ها معمولا در تلویزیون، تلفن، رادیو، اینترنت و کاربردهای نظامی استفاده می‌شه .مزایاش‌  :۱ . منطقه تحت پوشش ماهواره بیشتر از سیستم های زمینی است۲ . هر گوشه از زمین رو میتونه دربربگیره۳ . هزینه انتقال ، مستقل از منطقه تحت پوششه۴ . پهنای باند بیشتر و امکان پخش بالایی دارهساده تر بگیم ؛ ارتباط بین ایستگاه‌های مخابراتی زمینی از طریق ماهواره خیلی ساده تر برقرار می‌شه ‌. چون ماهواره ها در ارتفاع مشخصی بالاتر از زمین هستند و میتونند به محدودیت مخابرات بین دو ایستگاه زمینی که ناشی از انحنای کره زمین هست ، غلبه کنند.پس اگه از ماهواره‌های مخابراتی استفاده کنیم ، نیازی نیست که از آنتن‌های واسطه استفاده بشه یا اینکه تعداد کمتری لازم میشهمی‌تونیم ماهواره مخابراتی رو نوعی تکرارگر یا اصطلاحا ریپیتر (Repeater) در نظر بگیریم که سیگنال‌های دریافتی از سوی فرستنده رو قبل از ارسال برای گیرنده، تقویت می‌کنه تا مسافت بیشتری را پوشش بده .حالا Repeater یعنی چی؟تکرارگر یا ریپیتر دستگاهیه که سیگنال‌های فرستنده رو تکرار و در نتیجه نوسازی و تقویت می‌کند تا پیش از رسیدن به مقصد، تضعیف نشنما که یه قمر طبیعی( کره ماه ) رو داشتیم ، چرا فرستنده‌ها و گیرنده‌های مخابراتی به‌جای این که در ماهواره‌ها نصب شوند، روی کره ماه نصب نشدند ؟اولین دلیلش اینه که کره ماه خیلی از زمین دوره .اگه آنتن‌های فرستنده و گیرنده روی ماه کار گذاشته می‌شد، تبادل سیگنال بین زمین و ماه طول می‌کشید و ارتباطات رو با تاخیر مواجه می‌کرد .همچنین باعث می‌شد که سیگنال ها قبل از رسیدن به زمین تضعیف بشن در صورتیکه قبلا هم اشاره کردیم ، علت بهره‌گیری از ماهواره‌های مخابراتی تقویت سیگناله ‌.یه دلیل دیگه اش اینه که موقعیت ماهواره‌های مخابراتی و رادیویی و تلویزیونی همواره نسبت به نقطه خاصی از زمین ثابته اما موقعیت ماه نسبت به زمین پیوسته در حال تغییره .لذا حتی اگه پیشرفت فناوری، مشکل های قبل رو حل می‌کرد ؛ بازم تغییر مداوم موقعیت زمین و ماه که یه اتفاق طبیعی ایه ، اجازه نمی‌داد که از ماه حداقل توی یه سری از حوزه‌های کاربردی ارتباطات بتونیم بدون چالش و دردسر استفاده کنیم منظور از ردپا (Footprint) یا سایه ماهواره در ماهواره های مخابراتی چیست؟ماهواره سیگنال رو به ناحیه خاصی از زمین ارسال می‌کنه که بهش اصطلاحا ردپا (Footprint) می‌گویند. به عبارت دیگر، Footprint محدوده ای از زمینه که سیگنال یک ماهواره اونجا دریافت میشه.قدرت سیگنال در مرکز این ناحیه بیشتر از نقاط دیگه است و هرچه از Footprint دورتر بشیم ، قدرت سیگنال کمتر میشهفناوری های مکانی یعنی چی ؟به فناوری هایی که همراه با جمع آوری، مدیریت و پردازش و نگهداری داده هاییه که به زمین مرتبط اند ، فناوری های مکانی می گوییم.در واقع فناوری مکانی، یک زمینه مطالعاتی جدید شامل  GPS، RS ، GIS و سیستم های موقعیت یابی هست که به ما کمک می کنه تا داده هایی رو به دست بیاریم که مربوط به زمین اند و برای تحلیل، مدل سازی، شبیه سازی و نمایش نتایج، مورد استفاده قرار می گیرند.سیستم اطلاعات جغرافیایی( Geographic Information System) یا GIS چیست؟گفتیم که یکی از انواع فناوری های مکانی GIS هست . GIS یک سیستم اطلاعاتی کامپیوتری برای مدیریت اطلاعات جغرافیاییه که توانایی گردآوری داده ها ، ذخیره، آنالیز و نمایش ترسیمی یا نموداری این اطلاعات رو داره .کاربرد GIS چیه ؟هدف نهایی یک سیستم اطلاعات جغرافیایی، پشتیبانی برای تصمیم‌گیری‌های پایه‌گذاری‌شده بر پایه داده‌های جغرافیایی هست و عملکرد اساسی اون به دست آوردن اطلاعاتی است که از ترکیب لایه‌های متفاوت داده‌ها با روش‌های مختلف و دیدگاه‌های گوناگون به دست میان سنجش از دور یا RS چیست ؟سنجش از دور (Remote Sensing) یکی دیگر از انواع فناوری مکانی هست که با استفاده از سنسورها و دستگاه‌هایی که توانایی دریافت اطلاعات از فاصله دور رو دارند ، اطلاعاتی رو درباره محیط زمین و سایر سیستم‌های نجومی جمع‌آوری و تحلیل می‌کنه.این تکنیک دارای ۴ نوع اصلی سنسوره :سنسور های غیر فعال شامل چند طیفی و فراطیفی و سنسور های فعال شامل LiDar و رادارسنسور های غیرفعال نور خورشید انعکاس یافته رو که قبلا از خورشید تابیده شده، اندازه گیری میکنند.سنسور های فعال منبع نور یا روشنایی خودشون رو دارند و انرژی بازتاب شده رو اندازه گیری می‌کنند.در سنسورهای فعال اصطلاحی وجود داره به نام backscatterیعنی چی ؟در سنسور فعال، پالس هایی به سمت زمین ارسال میشه ، برخورد میکنه ، سپس بازتاب میشه و مجددا به سمت سنسور بازگشته و ثبت می شود. به این پالس یا امواج برگشتی backscatter گفته میشه.در دو تصویر پایین نمونه هایی از تصاویر سنسور فعال (راداری) و سنسور غیرفعال مثل لندست رو مشاهده میکنید میبینید که تصویر حاصل از هر نوع سنسور نمایش متفاوتی داره . تصاویر سنسور های راداری به صورت سیاه و سفیدند و هر رنگی نمایانگر یک پدیده است. مثلا در تصویر راداری بالا ، رنگ سیاه ، آب رو نشون میده.در تصویر بالا میتونیم خیلی کامل تر تفاوت بین چهار نوع اصلی سنسور از راه دور رو بررسی کنیم : سنسور های غیرفعال ( مثل چند طیفی و فراطیفی) خودشون تشعشع نمی‌کنند، اما سنسور های فعال ( مانند LiDAR و رادار) خودشون تشعشع رو انجام میدنهمچنین حالت‌های غیرفعال با تعداد باندهایی که در اون تابش رو اندازه‌گیری می‌کنند، متمایز می‌شوند.در حالی که حالت‌های فعال با طول موج تابشی که ساطع می‌کنند، متمایز می‌شوند.نقشه‌برداری در سیستم‌های اطلاعات مکانی (GIS) :در این فرآیند ، ابتدا اطلاعات مکانی ( داده‌های جغرافیایی، تصاویر ماهواره‌ای، داده‌های سنجش از دور و...) جمع‌آوری و در سیستم GIS وارد میکنند و سپس با استفاده از ابزارهای GIS، در قالب نقشه‌ها و لایه‌های جغرافیایی مناسب نمایش داده میشناین نقشه‌ها و لایه‌ها می‌تونند مرزها، جاده‌ها، رودخانه‌ها، محدوده‌های زمینی، پوشش گیاهی، نقاط مهم و موارد دیگری باشنددستگاه های GPS یا Global Positioning System به معنای “سامانه موقعیت‌یاب جهانی” است. این سیستم یک شبکه از سنسورها، سیستم ماهواره‌ای و دستگاه‌هاست که برای تعیین موقعیت جغرافیایی و زمان به صورت دقیق در سراسر جهان استفاده میشهاطلاعات مکانی ماهواره ای از دستگاه‌های GPS جمع‌آوری و به عنوان منابع مکانی در سیستم GIS استفاده می‌شوند‌.استفاده از GPS در GIS به دو شکل اصلی انجام می‌شه:۱. جمع آوری داده های GPS:دستگاه‌های GPS میتونند سیگنال رو از  ماهواره‌های GPS بگیرند و موقعیت جغرافیایی دقیق خودشونو تعیین کنند. با استفاده از این دستگاه‌ها میشه اطلاعات مکانی محیط‌های مختلف رو جمع‌آوری کرد .این داده‌های GPS سپس به عنوان لایه‌های مکانی در سیستم GIS وارد میشن که برای تحلیل و نمایش در نقشه‌ها استفاده بشن ۲ .همبستگی GPS با داده‌های GIS:اطلاعات GPS می‌تونه با داده‌های GIS ای که از قبل داشتیم ترکیب بشه تا اطلاعات مکانی کاملتری به دست بیاد. مثل ترکیب داده‌های GPS با داده‌های نقشه‌ها، تصاویر ماهواره‌ای و منابع مکانی دیگر.همچنین، با استفاده از داده‌های GPS میشه موقعیت دقیق و تغییرات زمانی رو در طول زمان ردیابی کرد و نقشه‌ها و لایه‌های زمانی GIS رو بهبود بخشید‌.مدیریت پایگاه داده (Database Management) در GIS : پایگاه داده در GIS شامل تمامی داده‌های مکانی و غیرمکانی مربوط به یک سازمان یا پروژه GIS است. این داده‌ها شامل لایه‌های جغرافیایی، نقشه‌ها، تصاویر ماهواره‌ای، داده‌های سنجش از دور و ... است .مدیریت پایگاه داده در GIS شامل عملیات طراحی، ایجاد، مدیریت، به روزرسانی و استفاده از پایگاه داده مکانی میشه که به تضمین دسترسی، دقت، امنیت و کارایی داده‌ها در سیستم GIS کمک میکنهمنظور از طراحی پایگاه داده GIS چیست ؟این عملیات شامل تعریف ساختار داده‌ها، تعیین جداول، روابط و فهرست‌هاست. این طراحی باید با استفاده از استانداردها صورت بگیره تا داده‌ها به درستی ذخیره بشن و قابل بهبود باشندجمع آوری و ورود داده ها (Data Collection) :داده‌های مکانی ممکنه از منابع مختلفی مثل نقشه‌ها، تصاویر ماهواره‌ای، سنسورها، دستگاه‌های GPS و غیره به دست بیاد .فرآیندهای جمع‌آوری داده‌ها به‌عنوان جمع‌آوری داده، اتوماسیون داده، تبدیل داده، انتقال داده، ترجمه داده‌ها و دیجیتالی‌سازی نیز شناخته می‌شوند.مدیریت و به روزرسانی داده‌ها:پایگاه داده GIS باید توسط یک سیستم مدیریت پایگاه داده (DBMS) مدیریت بشه . این شامل ایجاد جداول، افزودن، حذف و به روزرسانی داده‌هاست. همچنین، برنامه‌های جانبی می‌تونند برای انجام عملیات پیچیده‌تری مانند تحلیل‌ها و استعلام‌ها بر روی داده‌ها استفاده بشه .امنیت داده‌ها در پایگاه داده GIS: در پایگاه داده GIS دسترسی به داده‌ها باید محدود باشه و مکانیزم‌های امنیتی مثل رمزنگاری و احراز هویت باید پیاده‌سازی شهPoint to Multipoint Communication (P2MP, PTMP or PMP) آنتن یک به چند (P2MP) یه نوع فرستنده شبکه است که برخلاف آنتن یک به یک ( P2P) وظیفه متصل کردن چندشعبه به یک مرکز رو داره .این آنتن نوع متمایزی از اتصال های one_to_many است .مخابرات نقطه به چند نقطه به طور معمول در اینترنت بی سیم و تلفن IP از طریق فرکانس های رادیویی گیگاهرتز استفاده میشهسیستم P2MP چطور کار میکنه ؟نحوه استفاده از سیستم P2MP  به این صورته که فرستنده آنتن یک به چند رو در مرکز قرار میده و در نقاط دیگر (شعبه ها) آنتن‌های نوع یک قرار میگیرند و جهت این آنتن‌های نوع یک رو به سمت آنتن مرکزی تنظیم میکنند .در عکس زیر طریقه قرار گیری این سیستم رو میتونید مشاهده کنید حالا یه سوال به نظر شما چطور میتونیم امنیت پایگاه داده رو توی gis بهتر کنیم؟منابع :1. Satelite Communication by Timothy Pratt , 19892. Introduction to Satellite Communication by Bruce Elbert3.https://en.m.wikipedia.org/wiki/Communications_satellite4.https://en.m.wikipedia.org/wiki/Geographic_information_system</description>
                <category>انجمن عملی مهندسی کامپیوتر دانشگاه شاهد</category>
                <author>سارا کاظم زاده عطار</author>
                <pubDate>Tue, 23 Apr 2024 17:14:15 +0330</pubDate>
            </item>
                    <item>
                <title>من به اندازه خودم تغییر ایجاد کردم ۱ - کلاس سیستم عامل ۱۴۰۲</title>
                <link>https://virgool.io/CE-SHAHED-publication/%D9%85%D9%86-%D8%A8%D9%87-%D8%A7%D9%86%D8%AF%D8%A7%D8%B2%D9%87-%D8%AE%D9%88%D8%AF%D9%85-%D8%AA%D8%BA%DB%8C%DB%8C%D8%B1-%D8%A7%DB%8C%D8%AC%D8%A7%D8%AF-%DA%A9%D8%B1%D8%AF%D9%85-%DB%B1-%DA%A9%D9%84%D8%A7%D8%B3-%D8%B3%DB%8C%D8%B3%D8%AA%D9%85-%D8%B9%D8%A7%D9%85%D9%84-%DB%B1%DB%B4%DB%B0%DB%B2-tcawxc7mi8w2</link>
                <description>داستان از چه قراره؟سلام - من دانشجوی ترم ۷ مهندسی کامپیوتر هستمتوی این ترمی که گذشت، من و دو نفر دیگه از ورودی های ۹۹ شدیم TA ( استاد یار) درس سیستم عامل.خب اگر بخوام ی آنچه گذشت از ترمی که من این درسو پاس کردم بگم: داستان از این قراره که سال قبلش وضعیت نمرات عاالییی بود (‌ افتضاح ) و تدریس استاد هم تعریفی نداشت و دانشجو ها هم علاقه ای به درس نداشتن و پیدا نکردن. به دلیل آلودگی هوا و هزار تا دلیل دیگه هیچ امتحان میانترمی از ما گرفته نشد.شب امتحان دوستان باید از ۱۰۰۰ صفحه اسلاید استاد ( تعداد صفحه های کتاب از این کمتره ) میخوندن و خب خودتون نتیجه رو میتونید حدس بزنید. نصف دانشجو ها پاس شدن. ( نیمه پر لیوان رو ببینید )البته منم با دو نمره پروژه و این حرفا شدم ۱۴.۵ (‌ بالاترین نمره ای که دیدم ۱۵ بود )با این تعاریف، اکثرا از این درس هراس داشتن - البته اینکه خیلی مفاهیم درس رو متوجه نمیشدن هم بی تاثیر نبودتقسیم وظایف بین ما TA ها به صورت زیر بود:من:‌ طرح سوال آزمونک (Quiz) و تهیه شبکه مقاهیمدیگری ۱:‌ کلاس مرور و آشنایی عملی با مفاهیمدیگری ۲:‌ تصحیح آزمونک هانتیجه کار ما حدود ۶ تا کوییز و حل ۳ نمونه سوال میانترم به همراه ۸ جلسه کلاس بود.جا داره از TA های دیگه که کلاس هارو برگزار کردن و آزمونک هارو تصحیح کردن هم تشکر کنم. خیلی از کار های هماهنگی رو اون ها انجام میدادن.حال و هواشبکه مفاهیمسعی میکردم از مطالبی که استاد درس داده شبکه مفاهیم درست کنم. ساخت نرم افزارش ( که البته تموم نشده و هنوزم دارم ادامه اش میدم ) تقریبا کل ۳ ماه تابستون ازم وقت گرفت. البته که برنامه رو open source گذاشتم!ی چیزی شبیه Mind Map هست -‌ البته تا وسطای ترم نتونستم این قسمت رو ادامه بدمشبکه مفاهیم درس سیستم عامل - هر کدوم از رنگ ها مربوط به یک فصلهکه حالا اگر روی یکی از گره ها کلیک کنید، اطلاعاتشون نمایان میشه:اطلاعات گره interrupt ( یا به فارسی: وقفه)این اطلاعات توی گره ها به صورت آزاد و با جستجو هم قابل دسترسی بودن. جستجو بر اساس برچسب ( همون tag خودمون ) انجام میشه. توی این برنامه برچسب ها میتونن icon و رنگ خصوص به خودشون رو داشته باشن.توی این تصویر پیام های مربوط به OS و جلسه ۱ جستجو شدنآزمونک هاآزمونک ها هم حضوری و قبل از شروع کلاس برگزار میشد و جوابش بعد از امتحان ( به کمک خود دانشجو ها ) توی گروه قرار میگرفت. نمره دهی و جواب ها باید مشخص میبود!دو تا میانترم برگزار شد ( میانترم هارو خود استاد طرح میکرد ) که از دوره های قبل چند تا نمونه سوال موجود بود و قبل از امتحان توی Google Docs قرار میدادیم. البته سوال ها جواب نداشتن یا جواب هاشون خیلی اشتباه داشت. راه حل؟ بعضیا رو که حوصله داشتم حل میکردم و تقریبا نصفشو خالی میذاشتم که خودشون حل کنن. به همه شون توی Google Docs دسترسی Suggestion داده بودم و میتونستن حل خودشون رو بزارن. خب حالا شاید با خودتون بگید چرا ی نفر باید همچین کاری بکنه؟ جوابش اینه که من برای کسایی که همکاری میکردن نمره امتیازی زیاد ⭐ میدادم.جواب دادن سوال ها هم اینطوری نبود که فقط متنی بنویسن یا مستقیم حل کنن. باید به منبعی که برای جل ازش استفاده کردن، استناد میکردن (‌مثلا شماره اسلاید، صفحه کتاب، اسکرین شات از ی سایت یا ... )این عکسه رو از stackoverflow برداشته بودم و تعجب کردم که دقیقا جواب همین سواله!توی آزمونک های خودمون هم به حرکات مشکوک تقلب بدون اخطار قبلی و بخشش ۰ میدادم ⭐.علاوه بر این هرکسی که توی شخصی ازم سوالی میپرسید، اگر فکر میکردم که سوالش برای بقیه هم میتونه مفید باشه، بهش میگفتم سوالتو توی گروه بپرس تا جوابتو بدم ⭐.قبل یکی از آزمونک ها چند تا موضوع به همراه لینک دادم و گفتم هرکسی بتونه یک ویدیوی حداکثر ۱۰ دقیقه خلاصه اون موضوع رو انتقال بده، نمره کامل آزمونک رو بهش میدم - موضوعات انتخابی مرتبط با درس بودخب نتیجه؟راستش نمیدونم چرا فضای دانشگاه ما (تا اونجایی که من دیدم ) خیلی علمی نیست ی جورایی اخلاق اکثریت اینطوری بود که اگر کسی چیزی رو میدونست به کسی نمیگفت مگر اینکه دوست صمیمی شون باشه. البته خیلیا حتی سوال هم نمیکردن که چیز دیگه رو بدوننبیشتر تمایل به این سمت بود که تقلب کنن، مگر اینکه طرف وجدانش بهش اجازه نده - بیشتر دنبال &quot;نمره&quot; بودنخب من سعی کردم یکم تغییرش بدم...این دو تا تصویر زیر واسه ۱ یا ۲ روز قبل از امتحان های میانترم و ترمه. من توی بحث هاشون دخالت نمیکردم. خودشون از هم دیگه سوال میپرسیدن و خودشون جواب میدادن!!!!از منابع درسی شون هم برای توضیح به همکلاسی هاشون screen shot میگرفتندرسته که تقریبا نصف شون توی فعالیت ها یا بحث های کلاسی شرکت نمیکردن، ولی این خودش قدم بزرگیه!!! حتی بعضی وقتا سوالای درسای دیگه رو هم توی این گروه میپرسیدن چون میدونستن بقیه جواب میدن خخخخخخخخخخاین سوال مربوط به درس انتقال داده میشه!!!!نظرات خودشونمن بخاطر نظر کسی کار نکردم - ولی خب ی تشکر میتونه طرف مقابل رو خوشحال کنهسخنان یکی که سال قبل افتاده بود - امیدوارم این پسره پاس شهسخنان یکی دیگه که سال قبل افتاده بود تا اومدن نتیجه نمره هاشون صبر میکنم و بعد این پست رو منتشر میکنم .... خب به نظر میرسه کسی نیفتاده </description>
                <category>انجمن عملی مهندسی کامپیوتر دانشگاه شاهد</category>
                <author>Hamid Bluri</author>
                <pubDate>Sun, 04 Feb 2024 19:18:44 +0330</pubDate>
            </item>
                    <item>
                <title>بررسی 15 موضوع متنوع و مفید در مهندسی نرم‌افزار</title>
                <link>https://virgool.io/CE-SHAHED-publication/%D8%A8%D8%B1%D8%B1%D8%B3%DB%8C-15-%D9%85%D9%88%D8%B6%D9%88%D8%B9-%D9%85%D8%AA%D9%86%D9%88%D8%B9-%D9%88-%D9%85%D9%81%DB%8C%D8%AF-%D8%AF%D8%B1-%D9%86%D8%B1%D9%85-%D8%A7%D9%81%D8%B2%D8%A7%D8%B1-flvttyaymdui</link>
                <description>1. یکپارچه مدولار (Modular Monolithic)یکپارچه مدولار یک معماری نرم‌افزار است که براساس آن سیستم به مجموعه‌ای از ماژول‌های مستقل تقسیم می‌شود؛ هر ماژول وابستگی زیادی به ماژول‌های دیگر ندارد و بدون تاثیر ماژول‌های دیگر قابل توسعه، اصلاح یا تست می‌باشد. در این معماری تغییرات سریع‌تر و آسان‌تر انجام می‌شود. همچنین توسعه مستقل ماژول‌ها باعث آسان‌تر شدن طراحی، استقرار و مدیریت می‌شود. هر ماژول از معماری لایه‌ای پیروی می‌کند بنابراین در هر ماژول، ساخت یا تغییر هر لایه بدون تاثیر بر لایه دیگر انجام می‌شود. معماری یکپارچه مدولار(منبع)2. خدمات وب آمازون (Amazon Web Services)خدمات وب آمازون یا AWS، یک شرکت تابع آمازون است که پلتفرم محاسبات ابری را برای افراد و سازمان‌ها به منظور استفاده از خدمات ابری ارائه می‌دهد. این خدمات شامل محاسبات، ذخیره‌سازی، پایگاه‌داده، ابزارهای نرم‌افزاری و غیره می‌باشد که از طریق شبکه‌ای از سرورها در سراسر جهان به مشتریان ارائه می‌شود. درواقع AWS با ارائه یک زیرساخت ابری مقیاس‌پذیر، برای کاربران این امکان را فراهم می‌کند تا بدون نیاز به استفاده از منابع فیزیکی گران قیمت، براساس نیازهای خود از خدمات ابری استفاده کنند. مشتریان می‌توانند با استفاده از امکان اندازه‌گیری خودکار برآورد هزینه و پرداخت را انجام دهند. (منبع)3. رویکرد API-firstرویکرد API-first، یک رویکرد آینده نگرانه برای توسعه نرم‌افزار توسط شرکت‌ها است. این رویکرد به این موضوع اشاره دارد که درمقابل درنظر گرفتن APIها پس از توسعه برنامه، APIها را به عنوان بلوک‌های اصلی نرم‌افزار در ابتدای توسعه اولویت بندی کرده و درنظر بگیریم. براین اساس، پیش از نوشتن کد برنامه، APIها را اولویت بندی می‌کنیم و نقش آن‌ها و شرکا را در سازمان تشخیص دهیم. این رویکرد باعث می‌شود که با برنامه‌های داخلی و خارجی به صورت یکپارچه ارتباط برقرار کرده و برای کاربران نهایی قابل دسترس باشد.از مزایای این رویکرد می‌توان به موارد زیر اشاره کرد:بهره‌وری: در این رویکرد، به دلیل اینکه فضای کاری برای توسعه‌دهندگان شناخته شده‌است و APIها متمرکز هستند، همکاری سریع‌تر بوده و بهره‌وری افزایش می‌یابد.کیفیت: استفاده از این رویکرد باعث می‌شود که اشکالات پیش از تولید رفع شوند، بنابراین توسعه‌دهندگان می‌توانند نرم‌افزاری بهتر و انعطاف‌پذیرتر در زمان کوتاه تولید کنند که این موضوع به‌طور مستقیم باعث افزایش کیفیت می‌شود.ساده‌سازی و انطباق: در این رویکرد، معماران می‌توانند قوانین طراحی و راهبری را در مرحله طراحی و توسعه پیاده‌سازی کنند. (منبع)4. پایگاه‌داده‌‌های NoSQLساختار سنتی موجود در پایگاه‌داده‌های رابطه‌ای (ساختار جدولی) به مرور زمان نیاز به انعطاف پذیری بیشتری پیدا کرد تا بتواند مجموعه داده‌های بزرگ و بدون ساختار را مدیریت کرده و مقیاس‌پذیر باشد. از این رو، NoSQL (که به‌عنوان not only SQL و non-SQL نیز شناخته می‌شود) به‌عنوان رویکردی برای طراحی پایگاه‌داده که امکان ذخیره‌سازی و بازیابی داده‌ها را در قالب ساختار داده فراهم می‌کند، پدید آمد. گسترش میکروسرویس‌ها و محدودیت استفاده از پایگاه‌داده‌های رابطه‌ای برای هر کامپوننت، باعث رشد NoSQL شده‌است.از مزایای پایگاه‌داده‌‌های NoSQL می‌توان به موارد زیر اشاره کرد:انعطاف‌پذیری: مدل داده انعطاف‌پذیر بوده و همچنین حجم زیادی از داده‌های درحال تغییر را می‌تواند مدیریت کند.قابلیت اطمینان: داده‌ها در چندین سرور ذخیره‌ شده بنابراین دربرابر از دست رفتن محافظت می‌شوند. همچنین در زمان‌های از کار افتادگی اطمینان از دسترسی وجود دارد.سرعت: امکان ذخیره‌سازی و پردازش سریع را برای استفاده کاربران فراهم می‌کند.هزینه: NoSQL باعث کاهش منابع و به حداقل رساندن هزینه‌ها می‌شود.(منبع)5. معماری بدون سرور (Serverless Architecture)معماری بدون سرور یک رویکرد طراحی نرم‌افزار است که با انتقال مسئولیت مدیریت سرورها به ارائه‌دهندگان سرور ابری (مانند AWS)، تیم توسعه به‌جای نگرانی درمورد سرورها، بر روی توسعه و استقرار کد تمرکز دارد.از مزایای این معماری می‌توان به موارد زیر اشاره کرد:هزینه: هزینه سرور ابری براساس سرورها و ماشین‌های مجازی استفاده شده درخواست می‌شود. بنابراین می‌تواند باعث کاهش هزینه شود.مقیاس‌پذیری: سرورهای ابری در مقابل تغییرات به صورت خودکار مقیاس پذیر هستند.بهره‌وری: با انتقال مسئولیت مدیریت سرورها و کاهش مسئولیت توسعه‌دهندگان، سرعت تحویل و به طورکلی بهره‌وری افزایش می‌یابد.این مزایا باعث افزایش قابل توجه استفاده شرکت‌ها کوچک و بزرگ از معماری بدون سرور شده‌است. از معایب این رویکرد می‌توان به مسائل امنیتی، عدم کنترل بر مشکلات سرور و وابستگی به ارائه‌دهنده و مشکلات مربوط به تست اشاره کرد.(منبع)6. طراحی دامنه محور (Domain Driven Design)طراحی دامنه محور یک رویکرد طراحی نرم‌افزار است که براساس آن، تمرکز اصلی بر روی دامنه و منطق تعیین شده توسط کارشناسان برنامه است. از آنجایی که نرم‌افزار براساس ویژگی‌های یک مشکل و برای حل آن طراحی شده‌است، بنابراین اجزای مختلف برنامه مانند ساختار و زبان کد نرم‌افزار باید با دامنه کسب‌وکار مطابقت داشته باشد.مفاهیم اصلی در طراحی دامنه محور به صورت زیر است:منطق دامنه: منطق دامنه، به بخشی از دامنه گفته می‌شود که نحوه دسترسی، ذخیره‌سازی و تغییر داده‌ها را مشخص می‌کند.مدل دامنه: مدل دامنه به جزئیات مشکل و راه حل آن اشاره دارد.زیر دامنه: به دلیل جزئیات زیاد دامنه و پیچیدگی آن، زیر دامنه به‌وجود آمد. سه زیر دامنه اصلی، پشتیبان و عمومی در طراحی دامنه محور وجود دارد.(منبع)7. معماری شش‌ضلعی (Hexagonal architecture)معماری شش‌ضلعی، که به آن معماری پورت‌ها و آداپتورها نیز گفته می‌شود، یک الگوی معماری برای طراحی نرم‌افزار و جایگزین معماری لایه‌ای سنتی است. هدف این معماری، ایجاد کامپوننت‌های آزاد قابل تعویض است که به سادگی با استفاده از پورت‌ها و آداپتورها به محیط نرم‌افزاری متصل شوند. این کامپوننت‌های آزاد شامل هسته برنامه، پایگاه‌داده، اسکریپت‌های تست، رابط کاربری و غیره می‌باشند. در این معماری اتصال کامپوننت‌ها از طریق پورت‌ها و باتوجه به اهداف پروتکل‌های تعریف شده انجام می‌پذیرد. معماری تمیز پیشنهاد شده توسط رابرت مارتین ترکیبی از اصول معماری شش ضلعی معماری لایه‌ای و چند معماری دیگر است.معماری شش‌ضلعی(منبع)8. منبع‌یابی رویداد (Event Sourcing)منبع‌یابی رویداد روشی برای ذخیره‌سازی وضعیت برنامه براساس تاریخچه رویدادهایی است که در گذشته اتفاق افتاده است. در روش‌های سنتی، برای ذخیره‌سازی وضعیت برنامه، فقط وضعیت فعلی ذخیره می‌شد، درصورتی‌که مسیرهای مختلفی برای رسیدن به این وضعیت وجود داشت. همچنین استفاده از یک مدل جداگانه برای ذخیره تاریخ اقدامات منجر به وضعیت فعلی، باعث بروز پیچیدگی می‌شود. در منبع‌یابی رویداد، هر رویداد نشان دهنده یک تغییر در برنامه است و به عبارت دیگر منبعی از آنچه که در برنامه اتفاق افتاده، می‌باشد.از مزایای منبع‌یابی رویداد می‌توان به موارد زیر اشاره کرد:حسابرسیآنالیزانعطاف‌پذیری طراحیگزارش‌های زمانی(منبع)9. پلتفرم‌های کم کد (Low code platforms)پلتفرم‌های کم کد، یک رویکرد توسعه نرم‌افزار است که وابستگی به رویکردهای برنامه‌نویسی سنتی را کاهش داده و با استفاده از کمترین کد برنامه‌نویسی، امکان تحویل سریع برنامه را فراهم می‌کند. در پلتفرم کم کد، خودکارسازی فرآیند توسعه با استفاده از رابط‌های کاربری گرافیکی و ویژگی کشیدن و رها کردن، به بهبود فرآیند توسعه کمک می‌کند. همچنین قابلیت‌های ابزارهای کم کد باعث بهبود فرآیند DevOps و تخصیص زمان بیشتر برای نوآوری می‌شود.در کنار پلتفرم‌های کم کد، پلتفرم‌های بدون کد نیز وجود دارد. در پلتفرم‌های بدون کد که کاربران می‌توانند بدون نیاز به مهارت‌های برنامه‌نویسی و توسعه، برنامه‌های کسب و کار خود ایجاد کنند.(منبع)10. سیستم مدیریت فرایند کسب و کار (Business Process Management Systems)سیستم مدیریت فرایند کسب و کار یا BPMS، سیستمی برای کمک به کسب و کار و بهینه‌سازی فرآیندها است. این سیستم امکان مدل سازی، طراحی، اجرا و نگهداری فعالیت‌های تجاری و کارکنان در بخش‌های مختلف را فراهم می‌کند. نحوه عملکرد این سیستم به این صورت است که امکان ایجاد فرآیند کسب و کار را در بخش‌های مختلف، نظارت برای اطمینان از کارایی فرآیند و تغییر و بهبود فرآیندهای موجود را فراهم می‌کند.(منبع)11. صف پیام (Message Queue)صف پیام امکان ذخیره‌سازی موقت پیام را در زمانی که برنامه مشغول است، برای برنامه کاربردی فراهم می‌کند. درواقع، زمانی که پیام‌ها توسط تولید کننده ایجاد می‌شوند، به صف پیام ارسال می‌شوند و تا زمانی که توسط مصرف کننده مورد استفاده قرار گیرند، نگهداری می‌شوند. انتقال پیام‌ها بین فرآیندها یا سیستم‌ها، با اضافه کردن کارگزار پیام مانند RabbitMQ، Kafka یا LavinMQ انجام می‌شود.از مزایای صف پیام می‌توان به موارد زیر اشاره کرد:افزایش قابلیت اطمینان، مقیاس‌پذیری و اطمینان‌پذیری سیستماستقلال تولید کننده و مصرف کنندهبرای محاسبات توزیع شده، زمان‌بندی وظیفه و مدیریت گردش‌کار می‌تواند مورد استفاده قرار گیرد(منبع)12. ارکستراسیون کانتینر (Container orchestration)ارکستراسیون کانتینر به طور خودکار استقرار، مدیریت، مقیاس‌بندی و راه‌اندازی شبکه برای تعداد زیادی از کانتینرها را امکان‌پذیر می‌کند. کانتینرها کامپوننت‌های سبک و اجرایی هستند که امکان اجرای برنامه‌ها در محیط‌های مختلف بدون نیاز به طراحی و ساخت مجدد را فراهم می‌کنند. از محبوب‌ترین ارکستراتورهای کانتینری می‌توان به Kubernetes ،Docker Swarm و OpenShift اشاره کرد.نحوه کار ارکستراسیون کانتینر به این صورت است که توسعه دهنده یک فایل پیکربندی که یک حالت پیکربندی مطلوب مورد نظر را تعریف می‌کند، می‌نویسد؛ سپس ارکستراتور به طور مداوم از هوش و منابع خود برای رسیدن به حالت مورد نظر استفاده می‌کند.از مهم‌ترین مزایای ارکستراسیون کانتینر می‌توان به خودکارسازی اشاره کرد. خودکارسازی، پیچیدگی و تلاش مدیریت یک برنامه بزرگ کانتینری را کاهش داده و از رویکرد چابک برای توسعه و استقرار در چرخه‌های سریع و تکراری پشتیبانی می‌کند.(منبع)13. ابزارهای مدیریت لاگ (Log Management Tools)ابزارهای مدیریت لاگ، نحوه تعامل کاربران با برنامه‌ها و سیستم‌ها را به‌صورت زمان واقعی مجسم می‌کنند. این ابزارها با جمع‌آوری، تجزیه و تحلیل و حفظ داده‌ها می‌تواند قابلیت اطمینان و امنیت را افزایش داده و قادر به نظارت و بهبود عملکرد و پیدا کردن مشکلات و نقص‌ها می‌باشند. ابزارهای مدیریت لاگ داده‌های جمع‌آوری شده را فیلتر کرده و آن‌ها را به اطلاعات قابل کنترل تبدیل می‌کند و برای درک فعالیت‌های سازمان، با استفاده از نمودارها و خلاصه‌های ساده‌ و غیره یک نمایش واضح و بصری از نحوه عملکرد سیستم را به‌صورت زمان واقعی ایجاد می‌کنند.(منبع)14. ابزارهای پایش (Monitoring tools)ابزارهای پایش برای ارزیابی و نظارت بر برنامه‌ها و سیستم‌ها و بررسی وضعیت، سلامت، عملکرد محیط و زیرساخت‌ها مورد استفاده قرار می‌گیرند. نظارت مداوم بر سیستم به مدیریت عملکرد، قابلیت اطمینان و صرفه‌جویی در زمان برای تفسیر رویدادها کمک می‌کند که در نهایت باعث رضایت مشتریان از عملکرد سیستم می‌شود.یکی از ابزارهای منبع باز برای پایش و ارزیابی برنامه‌ها، ابزار Prometheus است. این ابزار داده‌ها را در بازه‌های زمانی به عنوان معیار، جمع‌آوری و ذخیره کرد و این اطلاعات را از طریق داشبورد نمایش می‌دهد. این اطلاعات شامل آمار حجم کار، اطلاعات بحرانی، وضعیت درحال اجرا و غیره می‌باشند.جمع‌آوری این داده‌ها می‌تواند به دلایل زیر مفید باشد:هشدار و رسیدگی به مشکلات پیش از رخدادنظارت و تجزیه و تحلیل فرآیندمقایسه داده‌های پیشین(منبع)15. تجزیه و تحلیل ایستا کد (Static Code Analysis)تجزیه و تحلیل ایستا کد یک رویکرد محبوب در توسعه نرم‌افزار است که براساس آن توسعه‌دهندگان کد منبع را پیش از اجرا و در اوایل فرایند توسعه، برای شناسایی آسیب‌پذیری‌های پنهان و خطاها و رعایت دستورالعمل‌ها و استانداردهای برنامه‌نویسی، بررسی می‌کنند.از مزایای تجزیه و تحلیل ایستا می‌توان به موارد زیر اشاره کرد:سازگاری کد با استانداردهای برنامه‌نویسیامنیت بالاتر با یافتن نقص‌های امنیتی در ابتدای کارقابلیت نگهداری بهتر با رفع سریع مشکلاتصرفه‌جویی در هزینه‌هادر کنار تجزیه و تحلیل ایستا، تجزیه و تحلیل پویا قرار دارد. تجزیه و تحلیل ایستا مشکلات را پیش از اجرای برنامه شناسایی می‌کند اما در تجزیه و تحلیل پویا شناسایی مشکلات پس از اجرای برنامه انجام می‌شود.(منبع)</description>
                <category>انجمن عملی مهندسی کامپیوتر دانشگاه شاهد</category>
                <author>Fatemeh Sepahdoost</author>
                <pubDate>Thu, 23 Nov 2023 00:11:36 +0330</pubDate>
            </item>
                    <item>
                <title>معماری تمیز</title>
                <link>https://virgool.io/CE-SHAHED-publication/%D9%85%D8%B9%D9%85%D8%A7%D8%B1%DB%8C-%D8%AA%D9%85%DB%8C%D8%B2-dei0y8semgta</link>
                <description>معماری معمار نرم افزار از بهترین برنامه نویسانی است در کنار برنامه نویسی، اعضای تیم را به سمت طراحی دعوت می‌کند. به شکل یا چهارچوبی که معماران نرم افزار به یک سیستم نرم افزاری می‌دهند، معماری گفته می‌شود؛ بطوریکه شامل تقسیم آن سیستم به اجزا، نحوه چیدمان و راه‌های ارتباط آن‌ها می‌باشد. معماری یک سیستم تاثیر بسیار کمی بر روی کارکرد آن سیستم دارد، در واقع هدف اصلی معماری ساده سازی توسعه، استقرار و نگهداری سیستم نرم افزاری می‌باشد. یک معماری خوب باید از موارد زیر پشتیبانی کند:توسعه: معماری یک سیستم باید توسعه را برای تیم توسعه دهنده آسان کند، در غیر اینصورت سیستم نرم افزاری عمر طولانی نخواهد داشت. به عنوان مثال، سیستمی متشکل از چند تیم توسعه که هرکدام شامل چند توسعه دهنده می‌باشد، باید به اجزای تعریف شده و ارتباطات معین و قابل اعتماد تقسیم شود. این موضوع برای یک تیم کوچک شامل چند توسعه دهنده شاید به عنوان یک مانع به نظر می‌رسد؛ به همین دلیل بسیاری از سیستم‌ها فاقد معماری خوب است.استقرار: معماری یک سیستم باید قابل استقرار باشد؛ هرچه هزینه استقرار بیشتر باشد، سیستم کمتر مفید است. به عنوان مثال، اگر در توسعه اولیه یک سیستم براساس تصمیم توسعه دهندگان معماری میکرو سرویس انتخاب شود، اما در زمان استقرار متوجه این موضوع می‌شوند که تعداد سرویس‌های کوچک بسیار زیاد و اتصالات بین آن‌ها سخت و پر خطا شده است. از این رو، عدم توجه به استقرار منجر به معماری‌هایی با توسعه آسان و استقرار سخت می‌شود.نگهداری: نگهداری پر هزینه‌ترین جنبه یک سیستم نرم افزاری می‌باشد، چراکه نرم افزار شامل حجم زیادی از نقص‌ها، اصلاحات و اضافه کردن ویژگی‌های جدید است که نیازمند منابع انسانی بسیاری است. از این رو، معماری خوب با جداسازی سیستم به اجزای مختلف می‌تواند باعث کاهش این هزینه‌ها شود.عملکرد: تاثیر معماری سیستم بر روی عملکرد نسبت به توسعه، استقرار و نگهداری کمتر است، چراکه معماری‌هایی که مانع عملکرد می‌شوند به نسبت کم هزینه‌تر از معماری‌هایی هستند که مانع توسعه، استقرار یا نگهداری می‌شوند.باز نگه داشتن گزینه‌ها: انعطاف پذیر بودن و امکان تغییر سریع و آسان نرم افزار با باز گذاشتن گزینه‌ها حاصل می‌شود. در واقع جزئیات نباید به سیاست‌های اصلی ارتباط داشته باشند تا تصمیم‌گیری در مورد جزئیات ممکن باشد.عدم وابستگی اولین دغدغه معمار این است که معماری باید از هدف سیستم پشتیبانی کند که این به معنای پشتیبانی از موارد کاربری برنامه هدف است. همانطور که پیش از این بیان شد، معماری تاثیر زیادی بر روی عملکرد برنامه ندارد، اما مهم‌ترین کاری که معماری خوب برای عملکرد برنامه انجام می‌دهد، شفاف سازی رفتار است تا هدف سیستم در سطح معماری قابل مشاهده باشد. از آنجایی که موارد کاربری در ساختار و سطح بالای سیستم قابل مشاهده است، بنابراین توسعه دهندگان نیازی به توصیف رفتار سیستم ندارند.جداسازی لایه‌هابراساس اصول SRP و CCP، معمار باید عناصری را که به دلایل مختلف تغییر می‌کنند جدا کرده و عناصری را که به دلایل مشابه تغییر می‌کنند، باتوجه به هدف سیستم جمع آوری کند. از این رو، سیستم‌ها را براساس مواردی که به طور جدا تغییر می‌کنند، به لایه‌های افقی تقسیم می‌کنیم. در عین حال، موارد کاربری برش‌های عمودی هستند که این لایه‌های افقی را تقسیم می‌کنند. در نتیجه، با استفاده از این شیوه جداسازی، می‌توان موارد جدید را بدون تداخل با موارد قبلی به سیستم اضافه کرد. همچنین این روش باعث می‌شود مواردی که توان عملیاتی بالایی دارند، پیش از مواردی که توان عملیاتی پایینی دارند، اجرا شوند. علاوه بر موارد مذکور، این روش باعث کاهش تداخل تیم‌ها، امکان توسعه مستقل و سبب انعطاف پذیری در استقرار می‌شود. باید به این نکته توجه داشت که جداسازی یک سیستم با گذشت زمان تغییر کرده و معمار باید این تغییرات را تسهیل کند.حالت‌های جداسازی را می‌توان در سه سطح تقسیم بندی کرد:سطح منبع: در این سطح وابستگی بین ماژول‌های کد منبع به صورتی است که تغییر در یک ماژول باعث تغییر یا کامپایل مجدد ماژول‌های دیگر نمی‌شود. در این حالت همه اجزاء در فضای آدرس یکسان اجرا می‌شوند و از طریق فراخوانی توابع ارتباط برقرار می‌کنند.سطح استقرار: در این سطح وابستگی بین قسمت‌های قابل استقرار به صورتی است که تغییر در کد منبع یک ماژول باعث استقرار مجدد دیگران نشود. بسیاری از اجزاء در فضای آدرس یکسان هستند اما سایر اجزاء در فرآیندهای دیگر در همان پردازنده بوده و از طریق ارتباطات بین فرآیندی، سوکت‌ها یا حافظه مشترک ارتباط برقرار می‌کنند.سطح سرویس: در این سطح وابستگی به صورتی است که هر واحد اجرایی مستقل از تغییرات دیگران است و ارتباط فقط از طریق بسته‌های شبکه انجام می‌شود.مرزها مرزها برای جداسازی عناصر نرم افزار به کار می‌روند، به طوریکه یک طرف درمورد طرف دیگر نباید اطلاعی داشته باشد. در یک معماری خوب بین چیزهایی که اهمیت دارند و چیزهایی که اهمیت ندارند یک مرز یا خط وجود دارد تا موارد فرعی قابل تعویض باشد.به عنوان مثال در تصویر زیر، رابط کاربری گرافیکی و پایگاه داد برای قوانین تجاری اهمیت ندارد، بنابراین بین آن‌ها یک خط وجود دارد. جهت خط نیز بسیار اهمیت دارد به این معنا که پایگاه داده و رابط کاربری گرافیکی برای قوانین تجاری اهمیت ندارند اما این دو بدون قوانین تجاری وجود ندارند. باتوجه به اینکه پایگاه داده و رابط کاربری گرافیکی در اینجا به صورت پلاگین درنظر گرفته شدند، بنابراین قابل تغییر و جایگزینی هستند.عبور از مرز تابعی در یک طرف مرز است که تابعی در طرف دیگر را در زمان اجرا فراخوانی می‌کند که ایجاد آن نیازمند مدیریت وابستگی‌های کد منبع است.شکل‌های مختلف مرزها به صورت زیر است:یکپارچه: ساده‌ترین مرزهای معماری هیچ نمایش فیزیکی دقیقی ندارند. توابع و داده‌ها به صورت منظم در یک پردازنده و فضای آدرس واحد است (حالت جداسازی سطح منبع). اینکه در حالت استقرار یکپارچه، مرزها قابل مشاهده نیستند به این معنا نیست که مرزها وجود ندارند. ساده‌ترین عبور از مرز، فراخوانی تابع از سطح پایین به سطح بالا است که در این حالت وابستگی زمان اجرا و کامپایل به سمت مولفه سطح بالاتر است.فرآیندهای محلی: یک مرز معماریِ قوی‌تر است که از خط فرمان یا فراخوان سیستمی ایجاد می‌شود. فرآیندهای محلی در یک یا چند پردازنده یکسان اما در فضاهای آدرس جدا اجرا می‌شوند. بیشتر فرآیندهای محلی با استفاده از سوکت‌ها یا امکانات ارتباطی سیستم عامل بایکدیگر ارتباط برقرار می‌کنند.سرویس‌ها: قوی‌ترین مرز معماری، سرویس است که عموما از خط فرمان یا فراخوان سیستم ایجاد می‌شود و به موقعیت فیزیکی آن‌ها بستگی ندارد. می‌توان گفت یک سرویس، مجموعه‌ای از فرآیندهای محلی در حال تعامل است.سیاست و سطح سیستم‌های نرم افزاری مجموعه‌ای کامل از سیاست‌ها است که براساس آن ورودی به خروجی تبدیل می‌شود. در بیشتر سیستم‌ها، می‌توان سیاست‌ها را به عبارات کوچک‌تر تقسیم کرد. یک معمار نرم افزار خوب باید بتواند این سیاست‌ها را به صورت دقیق جدا کرده و براساس تغییراتشان، آن‌ها را در یک گراف غیر چرخه‌ای جهت‌دار، گروه بندی کند؛ بطوریکه جهت وابستگی‌ها از اجزای سطح پایین به سمت اجزای سطح بالا است. به فاصله از ورودی‌ها و خروجی‌ها، سطح می‌گویند. هرچقدر سیاست از ورودی و خروجی سیستم دورتر باشد، سطح بالاتری دارد.قوانین کسب و کار قوانین کسب و کار، قوانین یا دستورالعمل‌هایی هستند که فارغ از نحوه پیاده سازی، موجب صرفه جویی در هزینه‌ها می‌شوند. در سیستم‌های کامپیوتری، موجودیت یک شیء است که شامل مجموعه‌ای از قوانین تجاری مهم است. موارد کاربری از قوانینی تشکیل شده که نحوه و زمان استفاده از قوانین تجاری مهم در موجودیت‌ها را تعیین می‌کند. درواقع موارد کاربری نحوه نمایش سیستم برای کاربر را بیان نمی‌کند، بلکه قوانین برنامه که برروی تعامل کاربران و نهادها حاکم است را توصیف می‌کند.معماری فریاد معماری نرم افزار ساختارهایی است از موارد کاربری سیستم پشتیبانی می‌کنند، بنابراین معماری باید درمورد موارد کاربری برنامه فریاد بزند! به عنوان مثال وقتی به معماری یک کتابخانه نگاه می‌کنیم، با نگاه به قفسه‌های کتاب، میزهای مطالعه و غیره کاملا واضح است که این ساختمان کتابخانه است. معماری‌ها نباید براساس فریمورک‌ها باشند، درغیر اینصورت نمی‌توانند براساس موارد کاربری عمل کنند. معماری‌های خوب بر روی موارد کاربری متمرکز شده‌اند تا معماران بتوانند ساختارهایی را که از آن‌ها پشتیبانی می‌کنند را بدون تعهد به فریمورک‌ها، ابزارها و محیط‌ها توصیف کنند. به این ترتیب، اگر این موضوع را رعایت کنیم، می‌توانیم موارد کاربری را بدون فریمورک‌ها به صورت واحد تست کنیم.معماری تمیز در چند دهه گذشته ایده‌های مختلفی درمورد معماری سیستم‌ها مطرح شد که هدف مشترک آن‌ها تقسیم نرم افزار به لایه‌های مختلف برای جداسازی دغدغه‌ها است. این معماری‌ها دارای ویژگی‌هایی همچون عدم وابستگی به فریمورک‌ها، طراحی رابط کاربری و پایگاه داده بوده و بدون وابستگی قوانین کسب و کار به آن‌ها قابل تست هستند.لایه‌های مختلف نرم افزار به صورت دایره‌های متحدالمرکز در شکل زیر نمایش داده شده است. حلقه‌های داخلی سیاست و بیرونی مکانیزم‌ها هستند، بطوریکه وابستگی‌های کد منبع به سمت داخل و سیاست‌های سطح بالاتر است. دایره‌های درونی درمورد دایره‌های بیرونی چیزی نمی‌دانند.تعریف این لایه‌های به صورت زیر است:موجودیت‌ها: لایه موجودیت‌ها شامل قوانین حیاتی کسب و کار در سطح سازمان است که می‌توانند شیء با متد یا مجموعه‌ای از ساختار داده‌ها و توابع باشند.موارد کاربری: لایه موارد کاربری شامل قوانین تجاری خاص برنامه است که جریان داده‌های موجودیت‌ها را کنترل می‌کنند. تغییرات در این لایه نباید بر روی موجودیت‌ها اثر بگذارد یا اینکه تحت تاثیر لایه‌های خارجی قرار گیرد.آداپتورهای رابط: این لایه شامل مجموعه‌ای از آداپتورها است که فرمت موجودیت‌ها و موارد کاربری را به فرمت مناسب برای برخی عاملیت‌های خارجی مانند پایگاه داده یا وب تبدیل می‌کنند. هیچ کدی در این لایه نباید از عاملیت‌های خارجی چیزی بداند.فریمورک‌ها و درایورها: این لایه شامل فریمورک‌ها و ابزارهایی مانند پایگاه داده و وب فریمورک است.تعداد این لایه‌ها ممکن است متغییر باشد اما قانون وابستگی همواره باید اعمال شود.ترجمه و خلاصه فصل‌هایی از کتاب معماری تمیز از رابرت مارتین</description>
                <category>انجمن عملی مهندسی کامپیوتر دانشگاه شاهد</category>
                <author>Fatemeh Sepahdoost</author>
                <pubDate>Thu, 19 Oct 2023 17:24:47 +0330</pubDate>
            </item>
                    <item>
                <title>pre-mature optimization is root of all evil</title>
                <link>https://virgool.io/CE-SHAHED-publication/pre-mature-optimization-is-root-of-all-evil-m21sagxtxpyo</link>
                <description>بهینه‌سازی پیش از موعد چیست ؟نخستین بار مفهوم بهینه‌سازی پیش از موعد در حوزه مهندسی نرم‌افزار اهمیت زیادی پیدا کرد. این اصطلاح توسط «سِر تونی هوآر» استفاده شد و «دونالد ای ناث» آن را به‌شهرت رسانید. وی درباره بهینه‌سازی پیش از موعد می‌گوید:«هیچ شکی نیست که جام مقدس کارآیی به هدر رفتن منجر می‌شود. برنامه‌نویسان زمان بسیار زیادی را صرف نگرانی، تأمل و تفکر در خصوص سرعت قسمت‌های بی‌اهمیت برنامه‌های خود می‌کنند و تمام تلاش‌های انجام شده برای بالا بردن کارآیی و بازدهی در زمان دیباگ کردن و نگهداری برنامه تأثیرات منفی بسزایی را به همراه خواهد داشت. در ۹۷ درصد موارد باید کارآیی‌های کوچک را فراموش کنیم. بهینه‌سازی پیش از موعد ریشه بسیاری از شکست‌ها و خرابکاری‌ها است.یک برنامه‌نویس خوب با چنین بهینه‌سازی‌هایی احساس رضایت‌مندی و خشنودی نمی‌کند. بلکه با هوشمندی و خردمندی و با دقت زیاد به‌کدهای بحرانی برنامه نگاه می‌کند. البته فقط بعد از این‌که آن کدها شناسایی شده باشد.»چگونه از بهینه سازی پیش از موعد جلوگیری کنیم؟شما می‌توانید وظایف گوناگون خود را با در نظر گرفتن نکات اولویت‌بندی کرده و تعیین کنید، هر کار را در کدام مرحله باید انجام دهید تا مطمئن شوید، هیچ بهینه‌سازی پیش از موعدی انجام نخواهید داد.بیشتر انسان‌ها معتقدند: «بهینه‌سازی پیش از موعد ریشه تمام ضررها است.» و آن را با خود تکرار می‌کنند. اما این مسئله را فراموش می‌کنند که: «باید تقریبا در ۹۷ درصد موارد راندمان و بازدهی‌های کوچک را فراموش کنیم: بهینه‌سازی پیش از موعد ریشه تمام ضررها است. بااین‌حال نباید فرصت‌های خود را در آن سه درصد بحرانی از بین ببریم.»این مسئله می‌تواند برای ارزیابی شرایط و تصمیم‌گیری درباره بهینه‌سازی کاملا منطقی باشد، حتی اگر در مراحل کاملا ابتدایی باشیم. این مسئله می‌تواند به چند دلیل اتفاق بیافتد، شاید فکر می‌کنید یک تغییر و اصلاح کوچک مزیت قابل‌توجهی را به همراه خواهد داشت یا بهینه‌سازی به شما اجازه می‌دهد تا با گلوگاه‌هایی که در کار خود دارید روبه‌رو شوید یا دوری کردن از بهینه‌سازی به یک نقصان فنی خیلی مهم در آینده منجر می‌شود.این مفهوم در ۳ درصد موارد صدق می‌کند. به‌عنوان‌مثال، یک اصل مرسوم در این مورد، قانون ۸۰/۲۰ است. یعنی این‌که ۸۰ درصد از خروجی مثبتی که تجربه می‌کنید از ۲۰ درصد کاری که انجام می‌دهید، حاصل می‌شود .بنابراین ،مجموع مطالبی که در مورد دوری اجتناب از بهینه‌سازی پیش از موعد گفتیم به این معنا نیست که باید کلا از بهینه‌سازی دوری کنید، بلکه باید با ‌دقت بیشتری به آن فکر کنید و قبل از تصمیم‌گیری برای انجام بهینه‌سازی به‌خوبی شرایط را ارزیابی کنید . برای مثال profiler مجموعه‌ای از ابزارها برای کاوش، بهینه سازی و عیب‌یابی عملکرد است. ابزارهای Android profiler اطلاعاتی را در زمان واقعی ارائه می‌دهند تا به ما در درک اینکه برنامه ما چگونه از cpu، حافظه، شبکه و منابع باتری استفاده می‌کند کمک می کند .انواع profiler های موجود در اندروید:1 .Network Profiler فعالیت شبکه در زمان واقعی را در یک جدول زمانی نمایش می‌دهد، داده‌های ارسال شده و دریافت شده و همچنین تعداد اتصالات فعلی را نشان می‌دهد.این به شما امکان می‌دهد چگونگی و زمان انتقال داده‌های برنامه خود را بررسی کنید و کدها را به طور مناسب بهینه کنید. همچنین یک نمای thread وجود دارد که می‌توانیم ببینیم کار در کجا انجام می‌شود.2 . Energy Profilerبه ما کمک می‌کند تا مشکلاتی را که می‌تواند باعث ایجاد مشکلات مربوط به انرژی شود را پیدا کنیم. این تجزیه و تحلیل، تقسیم مصرف انرژی برآورده شده برنامه‌ها از اجزاء سیستم را نشان می‌دهد .ما می‌توانیم رویداد‌های پس‌زمینه‌ای که ممکن است باعث تخلیه باتری شود را بررسی کنیم. همچنین می‌توانیم از Energy Profiler برای یافتن وقایع سیستمی استفاده کنیم که می‌تواند بر مصرف انرژی تاثیر بگذارد، از جمله wake lock، jobs و زنگ هشدار و غیره.3. Memory Profiler مولفه‌ای است که به ما کمک می‌کند نشت حافظه را شناسایی کنیم که می‌تواند منجر به گیر کردن، فریز شدن و یا حتی خرابی برنامه می‌شود.این نمودار در زمان واقعی استفاده از حافظه برنامه شما را نشان می‌دهد و به شما امکان می‌دهد مجموعه‌ای از زباله‌ها(اجزائی که بدون استفاده در حافظه باقی مانده‌اند) را جمع‌آوری کنید، garbage collections را به زور اجرا کنید و تخصیص حافظه را ردیابی کنید.4 .CPU Profilerبهینه سازی استفاده از CPU در برنامه ما دارای مزایای بسیاری است، ازجمله ارائه تجربه کاربری سریع‌تر و نرم‌تر و حفظ عمر باتری دستگاه.</description>
                <category>انجمن عملی مهندسی کامپیوتر دانشگاه شاهد</category>
                <author>سارا کاظم زاده عطار</author>
                <pubDate>Tue, 27 Dec 2022 21:59:54 +0330</pubDate>
            </item>
                    <item>
                <title>الگوریتم KNN - نزدیکترین همسایه  - مهدی مشایخی</title>
                <link>https://virgool.io/CE-SHAHED-publication/what-is-knn-v7aw6rwxynmc</link>
                <description>الگوریتم KNN - نزدیکترین همسایه  - مهدی مشایخیالگوریتم k نزدیکترین همسایه ها که همچنین به عنوان KNN یا k-NN شناخته می شود، یک طبقه‌بندی کننده یادگیری ناپارامتریک و نظارت شده است که از نزدیکی برای انجام طبقه‌بندی یا پیش بینی در مورد گروه بندی یک نقطه داده فردی استفاده می کند. در حالی که می‌توان از آن برای مسائل رگرسیون یا طبقه‌بندی استفاده کرد، معمولاً به عنوان یک الگوریتم طبقه‌بندی استفاده می‌شود، و از این فرض استفاده می‌کند که نقاط مشابهی را می‌توان در نزدیکی یکدیگر یافت.برای مشکلات طبقه‌بندی، یک برچسب کلاس بر اساس اکثریت آرا اختصاص داده می‌شود  یعنی برچسبی که بیشتر در اطراف یک نقطه داده نشان داده می‌شود استفاده می‌شود. در حالی که این از نظر فنی &quot;رای گیری اکثریت&quot; در نظر گرفته می شود، اصطلاح &quot;رای اکثریت&quot; بیشتر در ادبیات استفاده می شود. تمایز بین این اصطلاحات این است که &quot;رای اکثریت&quot; از نظر فنی به اکثریت بیش از 50٪ نیاز دارد که در درجه اول زمانی کار می کند که فقط دو دسته وجود داشته باشد. وقتی چندین کلاس دارید - مثلاً چهار دسته، برای نتیجه‌گیری در مورد یک کلاس، لزوماً به 50٪ آرا نیاز ندارید. شما می توانید یک برچسب کلاس با رای بیشتر از 25٪ اختصاص دهید.نمودار KNN  - مهدی مشایخی
مسائل رگرسیون از مفهومی مشابه به عنوان مسئله طبقه‌بندی استفاده می‌کنند، اما در این مورد، میانگین k نزدیک‌ترین همسایه‌ها برای پیش‌بینی در مورد یک طبقه‌بندی گرفته می‌شود. تمایز اصلی در اینجا این است که طبقه‌بندی برای مقادیر گسسته استفاده می شود، در حالی که رگرسیون برای مقادیر پیوسته استفاده می شود. با این حال، قبل از انجام یک طبقه‌بندی، فاصله باید تعریف شود. فاصله اقلیدسی بیشتر مورد استفاده قرار می گیرد که در ادامه بیشتر به آن می پردازیم.همچنین شایان ذکر است که الگوریتم KNN نیز بخشی از خانواده مدل‌های «یادگیری تنبل» است، به این معنی که تنها یک مجموعه داده آموزشی را در مقابل گذراندن یک مرحله آموزشی ذخیره می‌کند. این همچنین به این معنی است که تمام محاسبات زمانی رخ می دهد که یک طبقه‌بندی یا پیش بینی انجام می شود. از آنجایی که برای ذخیره تمام داده های آموزشی خود به شدت به حافظه متکی است، از آن به عنوان یک روش یادگیری مبتنی بر نمونه یا مبتنی بر حافظه نیز یاد می شود.ایده های اولیه در مورد مدل KNN را به Evelyn Fix و Joseph Hodges نسبت داده شده است.معیارهای فاصلهبه طور خلاصه، هدف الگوریتم k نزدیکترین همسایه شناسایی نزدیکترین همسایگان یک نقطه پرس و جو است، به طوری که بتوانیم یک برچسب کلاس به آن نقطه اختصاص دهیم. برای انجام این کار، KNN چند الزام دارد:معیارهای فاصله خود را تعیین کنیدبرای تعیین اینکه کدام نقاط داده به یک نقطه پرس و جو نزدیکتر هستند، فاصله بین نقطه پرس و جو و سایر نقاط داده باید محاسبه شود. این معیارهای فاصله به شکل گیری مرزهای تصمیم کمک می کند، که نقاط پرس و جو را به مناطق مختلف تقسیم می کند. معمولاً مرزهای تصمیم را با نمودارهای ورونوی مشاهده خواهید کرد.فاصله اقلیدسی (p=2):  این رایج ترین اندازه گیری فاصله است و به بردارهای با ارزش واقعی محدود می شود. با استفاده از فرمول زیر، یک خط مستقیم بین نقطه پرس و جو و نقطه دیگر اندازه گیری می شود.فرمول فاصله اقلیدسی - مهدی مشایخی
فاصله منهتن (p=1) : این نیز یکی دیگر از معیارهای محبوب فاصله است که قدر مطلق بین دو نقطه را اندازه گیری می کند. همچنین به عنوان فاصله تاکسی یا فاصله بلوک شهر شناخته می شود زیرا معمولاً با یک شبکه تجسم می شود و نشان می دهد که چگونه می توان از یک آدرس به آدرس دیگر از طریق خیابان های شهر حرکت کرد.فرمول فاصله منهتن - مهدی مشایخی
فاصله مینکوفسکی : این اندازه‌گیری فاصله، شکل تعمیم یافته معیارهای فاصله اقلیدسی و منهتن است. پارامتر p در فرمول زیر امکان ایجاد سایر معیارهای فاصله را فراهم می کند. فاصله اقلیدسی با این فرمول نشان داده می شود که p برابر با دو باشد و فاصله منهتن با p برابر با یک نشان داده شود.فرمول فاصله مینکوفسکی -  مهدی مشایخی
تعریف (کا) های الگوریتممقدار k در الگوریتم k-NN تعیین می کند که چند همسایه برای تعیین طبقه‌بندی یک نقطه پرس و جو خاص بررسی می شود. به عنوان مثال، اگر k=1 باشد، نمونه به همان کلاس نزدیکترین همسایه اش اختصاص داده می شود. تعریف k می تواند یک عمل متعادل کننده باشد زیرا مقادیر مختلف می تواند منجر به بیش از حد برازش یا عدم تناسب شود. مقادیر کمتر k می تواند واریانس بالایی داشته باشد، اما بایاس کم و مقادیر بزرگتر k ممکن است منجر به بایاس زیاد و واریانس کمتر شود. انتخاب k تا حد زیادی به داده‌های ورودی بستگی دارد زیرا داده‌هایی با مقادیر پرت یا نویز بیشتر احتمالاً با مقادیر بالاتر k عملکرد بهتری خواهند داشت. به طور کلی، توصیه می‌شود که یک عدد فرد برای k داشته باشید تا از ارتباط در طبقه‌بندی جلوگیری شود، و تاکتیک‌های اعتبارسنجی متقابل می‌تواند به شما در انتخاب k بهینه برای مجموعه داده‌تان کمک کند. کد زیر نمونه ای از نحوه ایجاد و پیش بینی با یک مدل KNN است:from sklearn.neighbors import KNeighborsClassifier

model_name = ‘K-Nearest Neighbor Classifier’
knnClassifier = KNeighborsClassifier(n_neighbors = 5, metric = ‘minkowski’, p=2)
knn_model = Pipeline(steps=[(‘preprocessor’, preprocessorForFeatures), (‘classifier’ ,knnClassifier)])

knn_model.fit(X_train, y_train)
y_pred = knn_model.predict(X_test)کاربردهای KNN در یادگیری ماشینی - مهدی مشایخیکاربردهای KNN در یادگیری ماشینیالگوریتم KNN در کاربردهای مختلف، عمدتاً در طبقه‌بند استفاده شده است. برخی از این موارد استفاده عبارتند از:- پیش پردازش داده ها : مجموعه داده ها اغلب مقادیر گم شده ای دارند، اما الگوریتم KNN می تواند این مقادیر را در فرآیندی به نام داده های گمشده تخمین بزند.- موتورهای توصیه : با استفاده از داده های جریان کلیک از وب سایت ها، الگوریتم KNN برای ارائه توصیه های خودکار به کاربران در مورد محتوای اضافی استفاده شده است. تحقیقی انجام شده که نشان می دهد که کاربر به یک گروه خاص اختصاص داده شده است و بر اساس رفتار کاربر آن گروه، به آنها توصیه می شود. با این حال، با توجه به مسائل مقیاس‌بندی با KNN، این رویکرد ممکن است برای مجموعه داده‌های بزرگ‌تر بهینه نباشد.- مراقبت های بهداشتی : KNN در صنعت مراقبت های بهداشتی نیز کاربرد داشته است و خطر حملات قلبی و سرطان پروستات را پیش بینی می کند. این الگوریتم با محاسبه محتمل ترین عبارات ژنی کار می کند.- تشخیص الگو : KNN همچنین در شناسایی الگوها، مانند طبقه‌بندی متن و رقم کمک کرده است. این به ویژه در شناسایی شماره های دست نویسی که ممکن است در فرم ها یا پاکت های پستی پیدا کنید مفید بوده است.وبسایت من : اینجا کلیک کنید.لینک حمایت مالی برای ادامه راه : اینجا کلیک کنید.آدرس لینکدین من و جواب به سوالات شما : اینجا کلیک کنید.آدرس توییتر من برای مشارکت در گفت و گو ها : اینجا کلیک کنید.انجام پروژه های ماشین لرنینگ و یادگیری عمیق در تلگرام : Mashayekhi_Ai@منبع : https://www.ibm.com/topics/knn#:~:text=The%20k%2Dnearest%20neighbors%20algorithm%2C%20also%20known%20as%20KNN%20or,of%20an%20individual%20data%20point.</description>
                <category>انجمن عملی مهندسی کامپیوتر دانشگاه شاهد</category>
                <author>مهدی مشایخی</author>
                <pubDate>Sat, 03 Dec 2022 18:53:45 +0330</pubDate>
            </item>
                    <item>
                <title>سیستم های Push-to-Talk Over Cellular (Poc)</title>
                <link>https://virgool.io/CE-SHAHED-publication/%D8%B3%DB%8C%D8%B3%D8%AA%D9%85-%D9%87%D8%A7%DB%8C-push-to-talk-over-cellular-poc-zi3lbsepphpy</link>
                <description>بسیاری از افراد به طیف گسترده ای از راه حل های ارتباطی نیاز دارند و به دنبال آن هستند. علاوه بر سیستم های تکرار شونده ، سیستم های Push-to-Talk Over Cellular (Poc) به طور فزاینده ای در صنعت ارتباطات جهانی رواج پیدا می کنند.مزیت رادیو Poc این است که می تواند در هر فاصله ای با هم صحبت کند. برخلاف رادیو مبتنی بر شبکه خصوصی ، رادیو شبکه خصوصی به قدرت انتقال بستگی دارد و رادیو Poc به سیگنال اپراتور شبکه بستگی دارد. ارتباطات شبکه عمومی یک شبکه عمومی عمومی مبتنی بر باند فرکانس 3G / 4G / 5G است. با استفاده از فناوری Push-to-Talk برای ارائه خدمات ارتباطی trunked half duplex به مشتریان در پوشش شبکه ارتباطی موبایل از طریق تلفنهای همراه با کارکردهای ارتباطی شبکه عمومی.مزایای استفاده از رادیو Poc:1. فاصله ارتباط طولانیبرای دستگاه های بی سیم مبتنی بر شبکه های خصوصی ، برقراری ارتباط در مسافت های طولانی ، به خصوص در محیط هایی که موانع زیادی (مانند ساختمان ها ، محلات و غیره) در اطراف دارند ، بسیار دشوار است. تکرارها برای گسترش دامنه ارتباطات لازم است ، اما هزینه تکرار کننده ها زیاد است. با این وجود ، با رادیوهای Poc امکان برقراری ارتباط در مقیاس بزرگ (حتی در سطح کشور) امکان پذیر است.2. ارتباط فوریممکن است برخی از مردم بپرسند که چرا من رادیو Poc را به جای تلفن همراه انتخاب کردم و تلفن همراه نیز می تواند به ارتباطات سراسر کشور دست یابد. اما رادیوهای Poc از تلفن های همراه راحت تر هستند زیرا می توانند با لمس یک دکمه PTT فوراً با یک تیم یا افراد درون یک تیم ارتباط برقرار کنند.3. حفظ حریم خصوصی تماسرادیو Poc سیستم دیجیتالی را با محرمانه بودن تماس شدید پذیرفته و با همان فرکانس نشتی ایجاد نمی کند.4. چند منظورهعملکردهای ارتباطی غنی می توانند خدمات صوتی ، تصویری ، داده ای را تحقق بخشند. رادیوهای PoC رده بالا عملکردهای مختلفی از قبیل تماس خصوصی ، تماس تلفنی ، دوربین ، موقعیت یابی GPS ، انتقال بلوتوث و غیره دارند.صنایع قابل استفاده در رادیو Poc:1. هتل های بزرگ ، سوپر مارکت های بزرگبرقراری ارتباط مناسب تضمین اساسی برای توسعه صاف خدمات روزانه هتل و کارکنان مدیریت است. علاوه بر این ، هتل ها و سوپر مارکت ها به طور کلی دارای پوشش شبکه عمومی هستند. بنابراین ، رادیوهای Poc در هر مکان و هر زمان و در هتلها و سوپر مارکت ها قابل استفاده است.2. گردشگریاز طریق رادیو داخلی GPS Poc داخلی ، راهنمای تور می تواند اطلاعات موقعیتی اعضای گروه را در زمان واقعی مشاهده کند ، تا بتواند ارتباط نزدیک و معرفی جاذبه های گروه را در زمان واقعی حفظ کند.3. حمل و نقل تاکسیصنعت حمل و نقل تاکسی یک سرویس حمل و نقل عمومی است که به صورت 24 ساعته خدمات ارائه می دهد. با توجه به وسعت وسیع پوشش ، ارتباط با رادیوها براساس شبکه های خصوصی دشوار است. رادیو های کانتر می توانند از طریق شبکه های عمومی تلفن همراه به ارتباط بسیار طولانی برسند و به تاکسی ها امکان برقراری ارتباط با پیوندها بین تاکسی ها و تاکسی ها و شرکت ها فراهم می کند.4- مدیریت املاکبسیاری از شرکت های دارایی دارای میزهای برنامه ریزی کار مدیریت هستند ، بنابراین یک رادیو Poc با یک سیستم می تواند نیازهای عملکرد مدیریت بیشتری را برآورده سازد.</description>
                <category>انجمن عملی مهندسی کامپیوتر دانشگاه شاهد</category>
                <author>راما فیبر کیش</author>
                <pubDate>Sat, 05 Nov 2022 13:05:36 +0330</pubDate>
            </item>
                    <item>
                <title>متااسپلوییت چیست ؟</title>
                <link>https://virgool.io/CE-SHAHED-publication/%D9%85%D8%AA%D8%A7%D8%A7%D8%B3%D9%BE%D9%84%D9%88%DB%8C%DB%8C%D8%AA-%DA%86%DB%8C%D8%B3%D8%AA-imzokyvy5z1f</link>
                <description>متااسپلوییت فریم ورکی متن باز است که به صورت اختصاصی برای تسترهای نفوذ ، هکرها ، محققین امنیتی و دیگر فعالان موجود در زمینه امنیت شبکه نوشته شده است . شما با استفاده از این فریم ورک می‌توانید آسیب‌پذیری های موجود در سیستم‌ها ، شبکه‌ها و نرم افزارهای گوناگون را بکارگرفته و به این سیستم‌ها نفوذ کنید . این اپلیکیشن به صورت پیش‌فرض دارای اکسپلوییت های بسیاری می‌باشد ولی علاوه بر آن شما می‌توانید خودتان اکسپلوییت دلخواه خود را ایجاد کنید و به آن اضافه کنید . متخصصان امنیتی ، تسترهای نفوذ ، مدیران شبکه ، برنامه نویسان و همه اشخاصی که در زمینه امنیت فعالیت می‌کنند نیاز دارند تا مهارت کار با ابزار متااسپلوییت را کسب کنند . متخصصان امنیتی و تسترهای نوذ در فازهای جمع آوری اطلاعات , کشف و اسکن آسیب پذیری , بکارگیری اکسپلوییت و نفوذ و حمله به سیستم ها  ، حملات پس از بکارگیری بوسیله این ابزار می‌توانند به آسانی یک تست نفوذ را پیاده سازی کرده و هدف خود را بکارگیرند . برنامه نویسان به منظور اسکن و تست نفوذ برنامه‌های طراحی شده می‌توانند از این ابزار استفاده کنند . ابزار متااسپلوییت جعبه ای جادویی است که استفاده از آن آرمان هر هکری است و هر روز گسترده تر و کامل تر و بهینه تر می شود .نویسنده : Arvin Ghojazadehتاریخچه متاسپلویت !!ا HD Moore در اوایل کار ، شروع به کار بر روی Metasploit کرد و نسخه ۱.۰ را که با Perl نوشته شده بود را در سال ۲۰۰۳ منتشر کرد. از آن زمان به بعد ، این پروژه رشد چشمگیری داشته است به نحوی که از ۱۱ اکسپلویت اولیه به بیش از ۱۵۰۰ مورد اکسپلویت رسیده است، به علاوه حدود ۵۰۰ Payload. کمپانی امنیتی Rapid7 متاسپلویت را در سال ۲۰۰۹ خریداری کرد. مور بنیانگذار آن، این پروژه را در سال ۲۰۱۶ ترک کرد. از آن زمان به بعد متاسپلویت به رغم رقابت Canvas و Core Impact ، به چارچوبی برای توسعه بهره برداری تبدیل شد.دانلود Metasploitا  Metasploit به عنوان بخشی از Kali Linux وجود دارد ، اما همچنین می توانید آن را جداگانه در وب سایت Metasploit بارگیری کنید. Metasploit روی سیستم های  لینوکس و ویندوز اجرا می شود . کد منبع Metasploit Framework در GitHub در دسترس است. ا  Metasploit نسخه های مختلفی شامل رایگان و پولی دارد. علاوه بر چارچوب Metasploit رایگان ، Rapid7 همچنین نسخه Metasploit Community Edition ، یک رابط کاربری مبتنی بر وب رایگان برای Metasploit و همچنین Metasploit Pro با افزودنیهای غیر رایگان برای متخصصان امنیت که رابط گرافیک را ترجیح می دهند و یا کارکردهای حرفه ای تری را نیاز دارند وجود دارد .امیدوارم موفق باشید .نویسنده : آروین قوجازادهInstagram: 8Arvin6نوشته شده :  ۱۳ آبان  ۱۴۰۱</description>
                <category>انجمن عملی مهندسی کامپیوتر دانشگاه شاهد</category>
                <author>HELLANOY</author>
                <pubDate>Fri, 04 Nov 2022 23:32:35 +0330</pubDate>
            </item>
                    <item>
                <title>اتصال به گیتهاب با استفاده از پراکسی (Proxy) و دور زدن فیلترینگ</title>
                <link>https://virgool.io/CE-SHAHED-publication/%D8%A7%D8%AA%D8%B5%D8%A7%D9%84-%D8%A8%D9%87-%DA%AF%DB%8C%D8%AA%D9%87%D8%A7%D8%A8-%D8%A8%D8%A7-%D8%A7%D8%B3%D8%AA%D9%81%D8%A7%D8%AF%D9%87-%D8%A7%D8%B2-%D9%BE%D8%B1%D8%A7%DA%A9%D8%B3%DB%8C-proxy-%D9%88-%D8%AF%D9%88%D8%B1-%D8%B2%D8%AF%D9%86-%D9%81%DB%8C%D9%84%D8%AA%D8%B1%DB%8C%D9%86%DA%AF-sk7okmfgd3uc</link>
                <description>سلام از اونجایی که دیدم شاید خیلیهامون الان داریم روی یک پروژه اپن سورس کار میکنیم که روی گیتهاب قرار داره و متاسفانه به دلیل &quot;فیلترنتی&quot; امکان push کردن کامیتهامون رو نداریم.میتونیم بدون هیچ نرم افزار اضافی و فقط با استفاده از یک سرویس پراکسی رایگان و یک کامند، به راحتی اینکار رو انجام بدیم.اتصال به گیتهاب با پراکسی پمراحل اتصال پراکسی به گیتهاب:1-ابتدا به این آدرس بروید و آدرس سرور پراکسی به همراه پورت مورد نظر رو کپی کنید(در آخر بهشون Star بدید جهت حمایت :) )address: http://fodev.orgport:80182-خب حالا کافیه یه ترمینال باز کنید و کامند زیر رو توش اجرا کنین.این تنظیمات به طور global برای همه پروژه هاتون تنظیم میشه:git config --global http.proxy http://fodev.org:8118  کوتاه نوشتم چون واقعا با این وضعیت حال نوشتن هم نیست.</description>
                <category>انجمن عملی مهندسی کامپیوتر دانشگاه شاهد</category>
                <author>میلاد شیریان</author>
                <pubDate>Tue, 04 Oct 2022 12:22:03 +0330</pubDate>
            </item>
                    <item>
                <title>بارکد | چیه و چطور ساخته میشه؟</title>
                <link>https://virgool.io/CE-SHAHED-publication/barcode-afff04psd1in</link>
                <description>داناترین مردم کسی است که دانش دیگران را به دانش خود بیفزاید - پیامبر(ص)قبل از همه چیز، بهتره که از نظر لغوی این کلمه رو بررسی کنیم:Bar + code = کد میله ایتاریخچهBulls-eye barcodeفروشگاه ها کالا های زیادی داشتن و تهیه آمار و گزارش از محصولات موجود و فروخته شده، نیاز به نیروی کار انسانی داشت و زمان بر بود و البته که خطای انسانی هم وجود داشت. Norman J Woodland و Bernard Silver دو دانشجوی دانشگاه Dexel که از این موضوع خبر دار بودن، تصمیم گرفتن ی راه حلی برای این مشکل پیدا کنن.اونا یک روش برای کدگذاری و یک دستگاه برای تشخیصش اختراع کردن، که ما بهش میگیم bulls-eye barcode ( یعنی بارکدی که مثل هدف تیراندازی میمونه )عکس از https://99percentinvisible.org/episode/barcodesحالا نحوه خوندن به این صورته که از خال وسط به سمت بیرون رو حرکت میکنیم، وقتی که اولین خط سفید رو دیدیم (خط 1) مختصات خط های بعدی رو هم میتونیم تشخیص بدیم ( یعنی محل خط 1 منعطفه ولی فاصله بقیه خط ها از خط 1 به صورت استاندارد هست ). اگر توی اون مختصات ها رنگ سیاه بود، یعنی 0، اگر سفید بود یعنی 1.تصویر بالا 8 حالت مختلف سفید و سیاه بودن خط های 2و3و4 رو به تصویر میکشهنحوه خوندن این عدد ها مثل عدد باینری هست که رقم سمت چپ بیشترین ارزش و رقم سمت راست کمترین ارزش رو داره.برای مثال توی تصویر 3 (Fig 3) خط های 2 و 3 اش سفیده پس توی استاندارد 4 خطی، مقدارش میشه:1x2² + 1×2¹ + 0×2⁰ = 6به همین روش مقدار تصویر 4 میشه 5.این روش حتی توی 1952 هم ثبت اختراع شد، اما به دلیل مشکلاتش ( اندازه بزرگی داشت و اینکه پرینتر های اون موقع انقد دقیق نبودن که مرز های این خط های ریز رو دقیق چاپ کنن ( البته شکل دایره اش هم بی تقصیر نبود )) هیچ وقت مورد استفاده عمومی قرار نگرفت.KarTrak ACI (Automatic Car Identification)گذشت تا حدود سال 1960 که انجمن راه های ریلی آمریکا به همراه چند تا شرکت، با توجه به مشکل سختی و زمان بر بودن رصد قطار های ورودی و خروجی و گم شدن بعضی از اونها!، تصمیم گرفتن برای این مشکل ی راه حل ارائه بدن.نتیجه تلاششون یک استاندارد و یک دستگاه تشخیص اون استاندارد بود، اسمش رو گذاشتن KarTrak ( تغییر نوشتاری car track - یعنی رهگیری ماشین - منظور از car هم railcar هست، که یعنی ماشینی رو روی ریل حرکت میکنه ).برای شناسایی شدن قطار، چند سطر کد رنگی ی طرف بدنه قطار میچسبودن. نزدیک ایستگاه های قطار هم ی دستگاه به اندازه یخچال کوچیک بود که با لامپ مخصوص نور میتابتوند و از بازتابش کد رو تشخیص میداد. این دستگاه میتونست تا فاصله 3.5 متری کد رو تشخیص بده. مزیت این روش هزینه نسبتا کم به ازای هر قطار و تشخیص قطار موقع حرکت بود. بعد ها بجای لامپ از لیزر برای تشخیص این کار استفاده کردن که هم سرعت و هم دقتش رو افزایش میداد.عکس دو قطار که روشون این کد های karTrak چسبونده شده -  عکس سمت چپ توسط Rob Swatski از https://www.flickr.com/photos/rswatski/6934446670 عکس سمت راست توسط Quinn Rossi از  https://www.flickr.com/photos/theeskimo/4898894840    خب این استاندارد 4 تا رنگ اصلی داره ( قرمز، آبی، سیاه، شطرنجی یا checker ) که باهاش 13 کاراکتر رو پشتیبانی میکنه،این 13 تا کاراکتر که 11 تاشون واسه اعداد 0 تا 10 هستن، ی کاراکتر start و stop هم داره که مشخص بشه از کجا کد ها شروع میشه و تا کجا ادامه داره.کاراکتر های استاندارد karTrak ا - http://www.nakina.net/other/aci/aci.htmlاین سطر ها از پایین به بالا خونده میشن:سطر 13 (بالاترین) : عدد چکسطر 12: کاراکتر stopسطر 6 تا 11: شماره قطارسطر 2 تا 5: شماره صاحب قطارسطر 1 (پایین ترین): کاراکتر startتوی این استاندارد یک سطر به عنوان عدد چک شناخته میشه. دستگاه با چک کردن این عدد میتونه متوجه بشه که بقیه رقم هارو درست تشخیص داده یا نه.اگر عدد شماره سطر را با n و عدد توی خود سطر رو با dₙ نشون بدم، فرمولش به این شکل در میاد:(∑¹¹ₙ₌₂ ( dₙ × 2ⁿ⁻² ))  ≡¹¹که یعنی: باقی مانده تقسیم بر 11 جمع ( عدد هر سطر × 2^(شماره سطر - 2 ))این روش بعد از استفاده 95 درصدی ایستگاه های ریلی آمریکا، بعد از 3 سال به دلیل بعضی از مشکلات، کلا کنار کذاشته شد: حدود 20% از کد ها درست شناسایی نمیشدنتغییرات آب و هوایی ( مثل برف، بارون، گرد و غبار ) که ممکن بود روی کد بشینن و مانع تشخیص بشنLinear Barcode ( بارکد خطی )آقای Woodland ( یکی از دو مخترع bulls-eye barcode که بالاتر بهش اشاره کردم) با درس گرفتن از ویژگی ها مثبت karTrak ( مثل استفاده از عدد چک و چیدمان خطی رنگ ها و نحوه تقسیم بندی عدد ها ) و اومدن اسکنر های لیزری و البته کمک های شرکت IBM، استاندارد جدیدی رو معرفی کرد به نام UPC که مخفف Universal Product Code هست.اولین محصول با این استاندارد توی سال 1974 اسکن شد و بعد به سرعت فراگیر شد، به طوری که تا سال 1980 بیشتر فروشگاه ها ازش استفاده میکردن.بارکد انواع مختلفی داره، اساس کارشون یکسانه. من توی این مقاله فقط UPC-A رو بررسی میکنم.خب UPC ها 23 تا کاراکتر دارن، که 20 تا برای دو نوع عدد از 0 تا 9 است (7 قسمتی)، ی منطقه خالی قبل و بعد بارکد (حداقل 9 قسمتی)، ی نشونه برای ابتدا و انتهای کار (3 قسمتی) و یک نشونه وسط (5 قسمتی).چند تا نکته در مورد کاراکتر های عددی:به دو نوع گروه Parity تقسیم میشن، odd Parity یعنی تعداد خونه های سیاه فرده، even parity یعنی تعداد خونه های سیاه زوجههمیشه تعداد گروه های سیاه و سفید پشت سر هم 2 تاست (دوتا گروه سفید و دوتا گروه سیاه)از نظر پر یا خالی بودن قسمت ها، الگوری even parity و odd parity دقیقا برعکس هم هستنتوی Odd Parity قسمت اول همیشه سفید هست و توی Even Parity همیشه سیاهالگوی ساخت یک کد UPC از نظر نوع کاراکتر های مورد استفاده اینطوریه:QLOOOOOOMEEEEEERQکه Q به معنی Quiet Zone، حرف L و R به معنی Left/Right Guard، حرف M به معنی Middle Guard، حرف E به معنی Even Parity و حرف O به معنی Odd Parity هست.( اعداد سمت چپ Odd parity هستن و اعداد سمت راست Even Parity ).یکی از دلایل داشتن دو نوع عددی اینه که اگر بارکد رو برعکس به اسکنر دادیم، همچنان بتونه درست کد رو تشخیص بده. ( با توجه به تفاوت های ذکر شده چند خط بالاتر، انجام چنین کاری سخت نیست )خب حالا از لحاظ معنی کاراکتر های UPC-A رو بررسی میکنیم:http://www.barcodeart.com/science/science.htmlکدهای UPC-A، ا 12 رقم هستن که 6 رقم اول برای شماره کارخونه است (رقم اولش نوع کارخونه رو مشخص میکنه، مثلا 3 یعنی شرکت داروسازی) و پنج رقم بعدی برای شماره محصول. رقم آخر هم عدد چک هست ( توی تصویر نوشته Modulo Check Character )، که از این فرمول بدست میاد:از راست ترین عدد ( عدد 11 ام ) شروع میکنیعدد ها رو یکی در میون در 3 ضرب میکنیبعد همه رو باهم جمع میکنینزدیک ترین عدد مضرب 10 بزرگتر از جواب قسمت قبل رو از خودش کم میکنیراستش فلسفه پشت این فرمول های محاسبه عدد چک مربوط به علوم رمزنگاری میشه، که من ازش خیلی اطلاع ندارم… ولی همینقدر بدونید که اگر خط های مربوط به یک رقم هم پاک شده باشه، بازم درست تشخیص میده!مثالحالا میخوایم بارکد عدد 31205983466 رو تولید کنیم. اول باید عدد چک اش رو حساب کنیم.(3×3)+1+(2×3)+0+(5×3)+9+(8×3)+3+(4×3)+6+(6x3) =
9+1+6+0+15+9+24+3+12+6+18 = 83
90 - 83 = 7بعد با توجه به الگوی UPC-A ، کاراکتر هارو جایگزین میکنیم. [حواستون باشه که که parity اعداد سمت چپ با راست فرق داره]( خط اول الگوی UPC-A اورده شده و خط دوم عددی که داشتیم به همراه &quot;عدد چک&quot; اش. در نهایت هم قسمت های جدا رو بهم چسبوندم و با بارکد صحیح مقایسه اش کردم )مراحل تولید بارکد UPC-Aبه همین سادگی ما تونستیم از عدد 11 رقمی، یک بارکد تولید کنیم! نتیجه اش هم با این سایت مقایسه کردم، همونطور که میبینید، هیچ فرقی نداره!خب شاید واستون سوال باشه که چه کسی معنی این کد هارو مشخص میکنه؟ واقعیت اینه که شما میتونید این کد هارو تولید کنید و روی هر چیزی که میخواید بزنید ( مثلا فرودگاه ها میتونن روی چمدون های مسافر ها این کد هارو چاپ کنن)، اما اگر شما محصولی رو تولید کنید، برای اینکه همه فروشگاه ها بتونن با اسکن کردن بارکد شما اون رو شناسایی کنن، باید شرکت و دستگاهتون رو توی موسسه GS1 ثبت کنید ( توی ایران هم شعبه داره ). تعرفه هاش به ازای تعداد نوع های محصولات شما متفاوته.ی استاندارد دیگه هم وجود داره و کوچیک تر از UPC-A هست به نام UPC-E که کلیت کارش همینه ولی خب الگو ها کلا فرق میکنه. اگر خواستید میتونید اینجا و اینجا در موردش بخونید.یک نمونه بارکد UPC-E</description>
                <category>انجمن عملی مهندسی کامپیوتر دانشگاه شاهد</category>
                <author>Hamid Bluri</author>
                <pubDate>Sun, 18 Sep 2022 12:44:48 +0430</pubDate>
            </item>
                    <item>
                <title>ا Unicode چیست؟ UTF-8 چطور کار میکند؟</title>
                <link>https://virgool.io/CE-SHAHED-publication/unicode-utf8-bgp2kncgmwct</link>
                <description>علم را با نوشتن در بند كشيد - پيامبر (ص)مقدمهحتی قبل از ساخت کامپیوتر ها، انتقال اطلاعات مسئله مهمی بود. اوایل به این صورت بود که هر کسی که اطلاعات رو رد و بدل میکرد، از روش خودش برای این کار استفاده میکرد.بعد ها استانداردی به نام کد morse code اومد. به این صورت بود که فقط آوای بلند ( - ) و کوتاه ( . ) داشت.نوع لاتینش فقط شامل حروف انگلیسی ( بین بزرگ و کوچیک فرقی نمیذاشت ) و اعداد میشد. برای فاصله بین کلمات هم ی مدتی صبر میکردن.http://rsgb.org/main/files/2012/10/Morse_Code_Sheet_01.pdfتوی این سایت میتونید متن تون رو بنویسید و morse code اش رو به صورت شنیداری و تصویری تحویل بگیرید.بعد ها با استفاده بیشتر کامپیوتر ها، نیاز به ذخیره سازی این اطلاعات رو کامپیوتر ایجاد شد. یکی از اولین روش ها برای اینکار، Baudot Code بود که شامل حروف انگلیسی ( بازم بین بزرگ و کوچیک فرقی نمیذاشت ) و اعداد و چند تا کاراکتر دیگه مثل فاصله و چند تا کاراکتر نگارشی مثل ویرگول(،) و سمی کالن(;) میشد. این کد که به صورت باینری (0 و 1) ذخیره میشد، شامل 5 بیت بود و کلا 32 تا کاراکتر رو پشتبانی میکرد.و بعد ASCII یا American Standard Code for Information Interchange اومد. فرقش با Baudot Code این بود که بجای 5 بیت از 7 بیت استفاده میکرد. بازه بزرگ تر 7 بیتی این قابلیت رو بهش داده بود که بین حروف بزرگ و کوچیک لاتین فرق بزاره و هردو رو پشتیبانی کنه. علاوه بر اینها، این روش از کاراکتر های نگارشی بیشتری مثل نقل قول(&quot;) و مد(~) و براکت( [ ] و { } ) … پشتیبانی میکرد.ولی باز ی مشکل داریم، حروف غیر لاتین چی میشن پس؟ قبلا به این صورت بود که هر زبونی استاندارد خودش رو میساخت. مثلا توی آلمان، چیزی مثل ASCII ساخته بودن که فقط شامل حروف آلمانی بود.تا اینکه تصمیم بر این گرفته شد که برای هر کاراکتر ی کد مجزا اختصاص بدن، طوری شامل همه حروف زبان ها و کاراکتر های پر استفاده باشه. اسمش رو گذاشتن Unicode. این استاندارد جدید طی سال های متوالی آپدیت شده و زبان ها و قابلیت های جدیدی بهش اضافه شده و حتی از emoji هم پشتیبانی میکنه.( البته اینم بگم که unicode اولین استاندارد نیست، ولی کامل ترینه )بیشتر emoji ها مثل بقیه کاراکتر ها هستن که یک کد دارن. ولی بعضیاشون یک دنباله از کد های کاراکتری unicode هستن. ( لیست تمام emoji های پشتیبانی شده توی آخرین ورژن unicode یعنی ورژن 15 که همین سال 2022 معرفی شده رو از اینجا ببینید )مثلا ایموجی مرد نقاش (?‍?) سه تا کد داره &quot;1F468 200D 1F3A8&quot; که یعنی &quot;ایموجی مرد(?) + کاراکتر خالی + ایموجی لوح نقاشی(?)&quot;روش های ذخیره کد های Unicodeفضای Unicode کلا 1,114,112 تا کاراکتر جا داره که به چند روش زیر میتونه ذخیره بشه:ا UTF-8: توی این روش تعداد byte ها ( هر 8 بیت ) متغیر هست. بسته به نیاز و کد اون کاراکتر میتونه بین 1 تا 4 بایت تغییر کنها UTF-16: توی این روش هم تعداد بایت ها متغیر هست. بسته به نیاز و کد اون کاراکتر میتونه 2 یا 4 بایت فضا اشغال کنها UTF-32: توی این روش تعداد بایت ها ثابت و به تعداد 4 تاست.روش اول ( UTF-8 ) پر استفاده ترین روش هست. که توی ادامه کمی در موردش توضیح میدم. مزیت این روش نسبت به بقیه، کم حجم تر بودنشه.ا UTF-8 چطور کار میکنه؟بالاتر گفتم که توی روش UTF-8 هر کد به صورت 1 تا 4 بایت ذخیره میشه. نحوه دقیق ذخیره سازی اش به این صورته:هر بایت از اون محتوا رو نگاه میکنیم، اگربا 0 شروع بشه: کد ASCII استبا 110 شروع بشه: این یک کد به صورت دوتایی ذخیره شده ( خودش و بعدیش)با 1110 شروع بشه: این کد 3 تایی هستبا 11110 شروع بشه: این کد 4 تایی هستبا 10 شروع بشه: ادامه گروه 2 یا 3 یا 4 تایی هستبرای نمونه من متن زیر رو بهتون به صورت باینری نشون میدم:English
فارسی
??
∆∫واقعیت:کد های Unicode رو به صورت U+hhhh مینویسن ( که اون h جای رقم بر مبنای 16 یا hex هست )01000101 :: E (U+00045)
01101110 :: n (U+0006E)
01100111 :: g (U+00067)
01101100 :: l (U+0006C)
01101001 :: i (U+00069)
01110011 :: s (U+00073)
01101000 :: h (U+00068)
00001010 :: \n (U+0000A)
11011001 10000001 :: ف (U+00641)
11011000 10100111 :: ا (U+00627)
11011000 10110001 :: ر (U+00631) 
11011000 10110011 :: س (U+00633) 
11011011 10001100 :: ی (U+006CC)
00001010 :: \n (U+0000A)
11110000 10011111 10010010 10101001 :: ? (U+1F4A9)
11110000 10011111 10100100 10100011 :: ? (U+1F923) 
00001010 :: \n (U+0000A)
11100010 10001000 10000110 :: ∆ (U+02206)
11100010 10001000 10101011 :: ∫ (U+0222B)کاراکتر n\ به معنی خط بعد هستکدی که باهاش خروجی بالا رو تولید کردم میتونید اینجا ببینیدتوجه به این نکته موقع برنامه نویسیزبون های برنامه نویسی از نظر آگاهی به Unicode به 2 دسته آگاه و ناآگاه تقسیم میشن.معمولا زبون های سطح سیستم ناآگاه هستن ولی زبون های سطح بالا آگاه هستن.مثال زبون های ناآگاه: C و C++ و Nim و Rust و…مثال زبون های آگاه: Java و Python و Javascript و PHP و Ruby و …توی ادامه تفاوت هاشون رو توی چند تا سناریو توضیح میدم.سناریوی اول :: اندازه رشتهفرض کنید که یک emoji مثلا ? رو به صورت رشته ( string ) توی یک مغیر ذخیره کردید و حالا میخواید اندازه اون رشته رو بدست بیارید:رفتار زبون آگاه از Unicode: بهتون مقدار 1 رو بر میگردونه.رفتار زبون ناآگاه: عدد 4 که نشون دهنده تعداد byte ها هست رو برمیگردونه (بالا توی مثال نوشتم که این کاراکتر توی UTF-8 به صورت 4 بایت ذخیره میشه )سناریوی دوم :: تغییر یک کاراکتر توی رشتهفرض کنید که متن &quot;سلام&quot; رو به صورت رشته ( string ) توی یک مغیر ذخیره کردید و حالا میخواید کاراکتر دوم رو با حرف فاصله جایگزین کنید.رفتار زبون آگاه از Unicode: به درستی حرف دوم رو با فاصله عوض میکنه: &quot;س ام&quot;رفتار زبون ناآگاه: خروجی میده &quot; لام&quot; (کاراکتر نامرئی + فاصله + &quot;لام&quot;) - قبل از فاصله یک کاراکتر نامرئی وجود داره - ( همونطور که بالاتر اوردم، کاراکتر های فارسی از دو تا بایت تشکیل شدن )سناریوی سوم :: برعکس کردن رشتهفرض کنید که میخواید متن &quot;?️??&quot; که شامل 3 تا ایموجی پرچم است رو برعکس کنید.رفتار زبون آگاه از Unicode: به درستی ترتیب پرچم هارو برعکس میکنه: &quot;???️&quot;رفتار زبون ناآگاه: ی چیز عجیب غریب خروجی میدهنکاتالبته این رو هم در نظر داشته باشید که توی زبون های ناآگاه کتابخونه ای برای کار با Unicode وجود داره، رفتاری که بالاتر توضیح دادم، رفتار پیشفرض هست.معمولا زبون های آگاه از Unicode فقط از Unicode های تک کاراکتری آگاه هستن، یعنی مثلا ایموجی مرد نقاش (?‍?) [ که همونطور که بالاتر گفتم شامل 3 تا کاراکتر میشه ] رو به صورت 3 تا کاراکتر unicode در نظر میگیرن.توی بعضی زبون های آگاه مثل Python ، نوع دیگه ای از داده به نام byte string وجود داره که اگر رشته رو توی اون ذخیره کنید، رفتار ها به صورت ناآگاه انجام میشه.منابعMorse code - Wikipediawhat character encodings were used before 1963? - Super UserASCII (American Standard Code for Information Interchange)UTF-8, UTF-16, and UTF-32 - Stack OverflowUnicode lookupUTF-8 :: Jenkov</description>
                <category>انجمن عملی مهندسی کامپیوتر دانشگاه شاهد</category>
                <author>Hamid Bluri</author>
                <pubDate>Mon, 05 Sep 2022 11:12:05 +0430</pubDate>
            </item>
                    <item>
                <title>از همین امروز شروع کنید و برای زندگی خود معنا بسازید!</title>
                <link>https://virgool.io/CE-SHAHED-publication/%D8%A7%D8%B2-%D9%87%D9%85%DB%8C%D9%86-%D8%A7%D9%85%D8%B1%D9%88%D8%B2-%D8%B4%D8%B1%D9%88%D8%B9-%DA%A9%D9%86%DB%8C%D8%AF-nby2amnw6z0k</link>
                <description>روزی که تصمیم می‌گیرید برای زندگی خود معنایی بسازید که شما را به جلو پرتاب کند دیگر نیاز نیست هر روز با خود کلنجار بروید که چرا اصلا باید زندگی کنید!چرا اصلا باید سرکار بروید و چرا اصلا باید از خواب بیدار بشوید و چرا باید اصلا درس بخوانید! به آنچه باید بشوید فکر کنید اما برای آن در امروز کاری کنید.درمورد آن مطالعه کنید؛ مقدمات لازم را برایش فراهم کنید؛ در موردش با افراد آگاه صحبت کنید و همه جا به آن فکر کنید تا با آن همه جا زندگی کنید.زندگی شما می‌تواند از همین لحظه و با یک انتخاب خوب و آگاهانه شروع شود.لینک سایت خودم</description>
                <category>انجمن عملی مهندسی کامپیوتر دانشگاه شاهد</category>
                <author>میم مثل مهسا</author>
                <pubDate>Fri, 29 Jul 2022 15:16:27 +0430</pubDate>
            </item>
                    <item>
                <title>رگراسیون خطی به زبان ساده</title>
                <link>https://virgool.io/CE-SHAHED-publication/%D8%B1%DA%AF%D8%B1%D8%A7%D8%B3%DB%8C%D9%88%D9%86-%D8%AE%D8%B7%DB%8C-%D8%A8%D9%87-%D8%B2%D8%A8%D8%A7%D9%86-%D8%B3%D8%A7%D8%AF%D9%87-pkfbvbpaj2cn</link>
                <description>سلام (= راستش تصمیم گرفتم هماهنگ با مطالعه های خودم توی حوزه ی هوش مصنوعی و یادگیری ماشین، یه سری مفاهیمی که ممکنه کمی پیچیده باشن رو به زبون ساده توضیح بدم. این پست درباره ی «Linear Regression» یا «رگراسیون خطی» هست که یکی از متدهای یادگیری ماشینه. قبل از اینکه برم سراغ مفاهیم و تعاریف، بهتره بگم اصن قضیه چیه و میخوایم چیکار کنیم! ما در واقع میخوایم به سیستم، یه دیتاست بدیم و سیستم اون رو بررسی کنه و الگویی رو ازش کشف کنه. حالا اگه یه داده ای که توی دیتای اولیه نیست رو از سیستم بخوایم، سیستم باید بتونه با توجه به الگوریتم هاش حدس مناسبی رو برای ما انجام بده، که با بقیه دیتاست همخوانی داشته باشه. به نمودار پایین نگاه کنین. این نمودار فرضی میزان فروش یه بستنی فروشی رو در دماهای مختلف در طول سال نشون میده:به طور کلی میتونیم حدس بزنیم که وقتی هوا سردتره، فروش بستنی کمتره و وقتی هوا گرمتر میشه، فروش هم بیشتر میشه. اما برای این قاعده فرمول دقیقی وجود نداره! از طرفی، برای میزان فروش در دماهایی مثل 21 یا 24 درجه سانتیگراد، اطلاعاتی در نمودار نیست و باید حدسشون بزنیم! این حدس رو میسپاریم به یادگیری ماشین! و اینجاست که رگراسیون خطی وارد میشه. قبل از شروع بذارید این ترکیب کلمات رو تعریف کنم. رگراسیون (Regression) یعنی پیشبینی مقداری که پیوستگی داره. حالا این ینی چی؟ بذارین نقطه مقابلش هم تعریف کنم: «طبقه بندی» یا «Classification» که یعنی پیشبینی مقداری که پیوستگی نداره و گسسته اس. رگراسیون با پیشبینی عدد سروکار داره و یه مقدار کمّی خروجی میده، درحالی که طبقه بندی بین دو یا چند چیز(مثل Yes و No، یا مرد و زن) که کیفی هستن تصمیم گیری میکنه. به این مثال دقت کنین:این یه نمونه از طبقه بندی هست که با توجه به میزان قد و وزن، جنسیت هر نفر رو حدس میزنه. نقاط مثلثی مرد و نقاط دایره ای زن هستن. پس سیستم بین این دو تصمیم میگیره. ولی ما اینجا با رگراسیون کار داریم، که قراره یه عدد برامون خروجی بده! مثلا دمای هوا رو به عنوان ورودی بگیره و میزان فروش رو حدس بزنه. و یا برعکسش! خب، حالا بریم سراغ رگراسیون خطی. به نمودار پایین دقت کنین:این همون نمودار فروش بستنی بر حسب دماییه که بالاتر داشتیم. اما اینجا یه خط به نمودار اضافه کردیم و این خط میتونه مقادیر مجهولمون(مثل فروش برای دمای 21 و 24 درجه سانتیگراد) رو حدس بزنه! اما این خط از کجا اومده و چرا این خط؟! ما به کمک رگراسیون خطی و یه سری الگوریتم میتونیم چنین خطی رو برای نمودارمون درنظر بگیریم که بتونه به ازای هر ورودی معتبر، حدس معقولی رو به ما تحویل بده. حالا این خط چه خصوصیاتی باید داشته باشه؟ منطقاً اینکه تا حد امکان به نقاط روی نمودار نزدیک باشه تا جواب عجیب و غریب بهمون تحویل نده! برای مثال، مشخصا خط های نمودار زیر انتخاب خوبی نیستن:برای اینکه خط مورد نظر تا حد امکان به نقاط نمودار نزدیک باشه و ازشون عبور کنه، یه تعریف داریم: مجموع فواصل نقاط تا خط باید حداقل باشد. که منطقی هم به نظر میاد. هرچی فاصله خط از نقاط کمتر، حدس دقیقتر! حالا چجوری این تعریف رو به زبان ریاضی بنویسیم؟ به این فرمول نگاه کنین:قبل از اینکه از قیافه ترسناک این فرمول ناامید شین و صفحه رو ببندین، اجازه بدین توضیحش بدم. قرار بود فاصله هر نقطه از خط رو حساب کنیم، جمعشون کنیم و حداقل این مجموع ها رو بین تمامی خطوط ممکن پیدا کنیم. عبارت توان دار توی فرمول هم فاصله هر نقطه ی y ⁽ⁱ⁾ روی نمودار رو از نقطه ای که خط براش پیشبینی کرده محاسبه میکنه. سیگما مجموع این فواصل رو به اندازه ی m (که تعداد داده ها یا همون نقطه ها باشه) رو محاسبه میکنه و ترم 1/2m هم این مقدار رو کوچیکتر و استانداردتر میکنه. به این تابع J( θ₀ , θ₁ ) میگیم تابع  هزینه یا کاست (Cost Function). ریاضی به ما میگه که مقدار این تابع عجیب به ازای θ₀ و θ₁  باید حداقل باشه. حالا این θ₀ و θ₁ چی هستن؟! تتا یک و تتا صفر ضرایبی هستن که به ترتیب شیب خط و مکان این خط در صفحه مختصات رو مشخص میکنن. و ما میتونیم معادله ی خط مورد نظرمون رو به کمک این دو عدد بنویسیم. یعنی به صورت مقابل : y = θ₀ + θ₁x . این معادله ی خطی که نوشتم، همون عبارت hθ توی فرمول بالاست. صرفا بدونین به این تابع که تابع خطمون هست میگیم فرض یا Hypothesis. خب حالا کافیه برای این تابع هزینه مون، یه مینیموم پیدا کنیم. الگوریتم هایی هست برای اینکه این مینیموم پیدا بشه؛ مثلا اینکه یه خط فرضی درنظر بگیریم، به یه جهت بچرخونیمش(یا درواقع θ₁ رو تغییر بدیم) و تابع هزینه رو حساب کنیم و تاجایی چرخش رو ادامه بدیم که به حداقل تابع هزینه برسیم. و حالا باید مکان این خط رو مشخص کنیم یا همون θ₀. به اندازه ای θ₀ رو تغییر بدیم تا تابع هزینه باز هم حداقل بشه. و درنهایت ما مینیمم تابع هزینه رو پیدا کردیم. روشهای خوشگلتری مثل کاهش گرادیانی (Gradient Descent) هم هست که خب، بهتره خودتون دربارش بخونید (= توی این پست هم پیاده سازی این الگوریتم رو در پایتون، مفصّصّصّل توضیح دادم (=</description>
                <category>انجمن عملی مهندسی کامپیوتر دانشگاه شاهد</category>
                <author>Amir Mohammad Piran</author>
                <pubDate>Thu, 21 Jul 2022 23:21:32 +0430</pubDate>
            </item>
                    <item>
                <title>ندانستن عیب نیست، &quot;نپرسیدن&quot; عیب است</title>
                <link>https://virgool.io/CE-SHAHED-publication/question-yxipiixkrqxb</link>
                <description>در ویدئوی زیر، آقای Simon Sinek خاطره ای از خود در خصوص اهمیت &quot;سوال پرسیدن&quot; تعریف میکند. https://www.aparat.com/v/YI0Jg لینک ویدئو در آپارات - مدت زمان ویدئو :: حدود 3 دقیقه وقتی طرف مقابلم داره حرف میزنه (میتونه معلمم باشه یا همکلاسی ام، فرقی نداره) این اتفاق برای من خیلی میفته که درست متوجه منظورش نمیشم یا طوری حرف میزنه که برای من نقطه های ابهام زیادی داره.بهترین راه برای رفع این مشکل، پرسیدن هست، کاری که قبلا انجام نمیدادم ولی کم کم متوجه شدم که خود سوال پرسیدن به تنهایی، فایده های زیادی داره:برای سوال پرسیدن، شما باید چیز هایی که شنیدی یا یادگرفتی ( که به صورت پراکنده توی ذهن شما قرار گرفته ) رو اول توی ذهن خودت مرتب کنی تا بتونی اون رو از طرف مقابلت بپرسی - بعضی موقع ها من حین سوال پرسیدن، جواب رو فهمیدم ( قبل از این طرف مقابل جواب بده ) چون بعد از مرتب کردن اطلاعات توی ذهنم و بیانش، به ارتباط بینشون پی بردم.سوال من میتونه سوال خیلی های دیگه هم باشه که به هر دلیلی اون رو نپرسیدن ( مثل خاطره آقای Simon Sinek توی ویدئو )ندونستن چیزی که در آینده بهش نیاز پیدا میکنی، ممکنه واست گرون تموم بشهجوابی که میشنوی، ممکنه ذهنت رو بیشتر باز کنه و اون موضوع رو عمیق تر درک کنیسوال تو به خودت نشون میده که آیا مطالبی که پایه و اساس این مطلب جدید هست رو با چه کیفیتی درک کردیقبلنا بخاطر ترس یا خجالت سوالم رو نمیپرسیدم - ولی بعد که با خودم فکر کردم، دیدم ترس و خجالت من هیچ دلیلی نداره چون بدترین اتفاقی که ممکنه بیفته اینه که:طرف مقابل بگه نمیدونماستاد بگه قبلا توضیح دادم، برو درسای قبل رو بخونطرف مقابل بگه بعدا بپرس / توی اینترنت بزنطرف مقابل جواب نده ( بیشتر توی مجازی این اتفاق میفته )سوال پرسیدن در احادیثاهمیت سوال پرسیدنیادته گفتم قبل از سوال پرسیدن باید مطالب پراکنده توی ذهنت رو مرتب کنی ؟کسی که سوال بپرسه، یک دقیقه نادانه، ولی که که سوال نپرسه یک عمر ...منابععکس های حدیثویدئو خاطره آقای Simon Sinek</description>
                <category>انجمن عملی مهندسی کامپیوتر دانشگاه شاهد</category>
                <author>Hamid Bluri</author>
                <pubDate>Wed, 25 May 2022 07:49:56 +0430</pubDate>
            </item>
                    <item>
                <title>برای رفتن تا سر کوچه سوار هواپیما نمی‌شوند!</title>
                <link>https://virgool.io/CE-SHAHED-publication/%D8%A8%D8%B1%D8%A7%DB%8C-%D8%B1%D9%81%D8%AA%D9%86-%D8%AA%D8%A7-%D8%B3%D8%B1-%DA%A9%D9%88%DA%86%D9%87-%D8%B3%D9%88%D8%A7%D8%B1-%D9%87%D9%88%D8%A7%D9%BE%DB%8C%D9%85%D8%A7-%D9%86%D9%85%DB%8C-%D8%B4%D9%88%D9%86%D8%AF-yantsw7gjsqc</link>
                <description>مدیر پروژه ای می‌خواست بره و پروژه اش را به بنده محول کرده بودند. مشتری از افتادن سرویس شاکی بود لذا وارد موضوع شدم تا دلیل را بفهمم گویا تنظیمات zookeeper مشکل داشت و سرویس kafka دچار مشکل می‌شد! خب چی کار کنیم؟‌ درستش کنیم؟ اصلا zookeeper چیه ؟  kafka برای کجای پروژه استفاده شده؟جالبه پروژه دچار کلی چالش شده بود صرفا برای اینکه برنامه نویس تصور کرده بود اگر یه روزی قرار باشه این سرویس توسعه پیدا بکنه نیاز به messaging داره لذا kafka می خواد و خب یکی هم باید ترتیب بالا اومدن سرویس و بالا نگه داشتنش را نظارت کنه پس zookeeper میخواد! با حذف کافکا و زوکیپر کلی از منابع مورد استفاده برنامه کاسته شد مشکلات افتادن سرویس هم حل شد! آیا واقعا برنامه نویس این سرویس‌ها را با فکر وارد پروژه کرده بود؟‌یا صرفا چون توی تنظیمات پیش فرض فریم‌ورکش بود دست نزده بود؟ جواب دقیقش را نمی‌دونم ولی دوست برنامه نویس من برای رفتن تا سر کوچه سوار هواپیما نمی‌شن! فریم‌ورکت خفنه کلی کتابخانه داره کلی امکانات داره؟ دمش گرم اما برای اینکه تا سر کوچه بری یه دوچرخه کافیه! لطفا به جای اینکه دنبال فریم‌ورک خفن و معماری توپ بگردی صورت مساله ت را بشناس و براش راه حل پیدا کن!</description>
                <category>انجمن عملی مهندسی کامپیوتر دانشگاه شاهد</category>
                <author>راستگو</author>
                <pubDate>Sun, 15 May 2022 10:58:48 +0430</pubDate>
            </item>
                    <item>
                <title>پلتفرم / گذرگاه مدیریت API</title>
                <link>https://virgool.io/CE-SHAHED-publication/%D9%BE%D9%84%D8%AA%D9%81%D8%B1%D9%85-%D8%AF%D8%B1%D9%88%D8%A7%D8%B2%D9%87-%D9%85%D8%AF%DB%8C%D8%B1%DB%8C%D8%AA-api-pfrv79jdcofd</link>
                <description>تعریف API :رابط برنامه‌نویسی کاربردی (Application Programming Interface) است که از طریق آن در بستر شبکه (اینترنت/اینترانت) امکان تبادل داده (متن، عکس، فیلم و غیره) بین دو سیستم با معماری و تکنولوژی متفاوت را فراهم می نماید.چرا مدیریت API مهم است؟با افزایش تعداد برنامه‌های کاربردی که دنیای دیجیتال را تحت سلطه خود درآورده‌اند، شرکت‌ها به سمت مدیریت API روی آورده‌اند تا داده‌های بیشتری را در معرض دید قرار دهند تا بتوانند تجربیات شخصی‌سازی‌شده‌تری را برای مشتریان، شرکا و کاربران داخلی فراهم کنند. APIها رشد تصاعدی برای شرکت ها ایجاد می کنند و آنها را قادر می سازند تا اهداف تجاری را سریعتر از همیشه انجام دهند. مدیریت API ثابت کرده است که سازمان ها را با افزایش کارایی، تقویت تلاش های نوآوری و کمک به آنها برای ارائه سریعتر خدمات و محصولات جدید به بازار، متحول می کند.گذرگاه مدیریت API  چیست؟گذرگاه مدیریت API (API Management Gateway) ابزاری که بین مجموعه ای از سرویس های قابل ارائه در  Back-end و یک کلاینت قرار گرفته و ارتباط بین سرویس گیرنده (کلاینت) و سرویس دهنده شامل APIهای Back-end و میکروسرویس های داخلی و خارجی را فراهم می نماید. یک گذرگاه مدیریت API امنیت را اعمال می کند، مقیاس پذیری الاستیک و در دسترس بودن بالا را فراهم می کند و به سطوح عملکرد کمک می کند. با کامپایل کردن تمام درخواست‌های API از یک کلاینت، یک گذرگاه API می‌تواند تعیین کند که کدام خدمات ضروری هستند و آنها را در یک تجربه واحد و یکپارچه برای کاربر ترکیب کند.مزایای مدیریت API چیست؟1. بهبود تجربه مشتری: مدیریت API به شرکت ها کمک می کند تا یک تجربه مشتری غنی و شخصی سازی شده ایجاد کنند، زیرا ارائه سطوح جدیدی از راحتی و پاسخگویی آسان تر است، بنابراین شرکت ها را قادر می سازد تا خدمات ارزش افزوده ایجاد کنند.2. امنیت: دسترسی، API ها را آسیب پذیر می کند. با یک راه حل مدیریت API، داده های حساس محافظت می شوند و مجوزها تخصیص داده می شوند و مدیریت می شوند تا از هرگونه نظارت امنیتی که در غیر این صورت مدیریت آن در سطح سازمانی چالش برانگیز است، جلوگیری شود. علاوه بر این، امنیت API از شرکت شما در برابر تهدیدات داخلی و خارجی محافظت می کند. هنگامی که عملکرد حیاتی کسب و کار در معرض دید مشتریان قرار می گیرد، یک گذرگاه مدیریت API می تواند سطوح دسترسی هر برنامه را برای تأیید هویت کنترل کند، همچنین می تواند ناهنجاری ها را برای حذف تقلب شناسایی کند.3. مقیاس پذیری: در عصر امروزی، شرکت ها و کارمندان آنها به طور مداوم با برنامه ها و داده ها تعامل دارند. مدیریت API دسترسی را افزایش می دهد و بار فنی مرتبط با چرخه عمر API معمولی را کاهش می دهد.4. استفاده از API: یک راه حل مدیریت API باید بینش هایی در مورد مصرف کنندگان API یک شرکت ارائه دهد و تصمیمات استراتژیک تجاری را آسان تر کند. با به دست آوردن درک عمیق تر از الگوهای استفاده، و سایر تجزیه و تحلیل ها مانند انواع دستگاه یا اطلاعات جغرافیایی، مدیریت API می تواند به شرکت ها کمک کند تا استراتژی های تجاری را برای برآورده کردن خواسته های مشتری تنظیم کنند.5. چابکی: مدیریت API امکان داشتن یک اکوسیستم به راحتی سازگار و چابک را فراهم می کند. داشتن یک سیستم مدیریت API به شرکت‌ها کمک می‌کند تا در زمان کمتری API ایجاد کنند در حالی که به طور همزمان خدمات را بسیار سریع‌تر ارائه می‌کنند. با ایجاد سریع خدمات جدید، رضایت مشتری افزایش می یابد و کسب و کارها از سود بیشتری بهره مند می شوند.6. اکوسیستم انعطاف پذیر: برای موفقیت در یک تحول دیجیتال، داشتن اکوسیستمی که خود را به سازگاری، نوآوری و انعطاف پذیری وامی دارد، ضروری است. یک سیستم مدیریت API برای یک اکوسیستم حیاتی است، زیرا راه حلی برای کمک به شرکت ها برای دستیابی به چابکی تجاری مورد نیاز است.7. سیستم های قدیمی اهرمی: سازمان ها مجبور نیستند سیستم های قدیمی موجود را که ممکن است عمیقاً در شرکت آنها تعبیه شده اند کنار بگذارند. در عوض، سیستم‌های قدیمی را می‌توان در دسترس API قرار داد . مدیریت API امکان ترجمه پروتکل‌های امنیتی قدیمی را به پروتکل‌های مدرن‌تر که استاندارد و کاربرپسند هستند، می‌دهد.8. خدمات به راحتی در دسترس: با یک سیستم مدیریت API، می توانید با در دسترس قرار دادن خدمات در هر زمان و از هر مکان، تجربه کاربری یکپارچه را برای مشتریان خود تضمین کنید.9. پیکربندی ساده: پیکربندی مدیریت API آسان است و می‌توان آن را بر روی APIهای جدید یا موجود به روشی یکسان اعمال کرد.10. انطباق: استانداردهای انطباق برای بسیاری از صنایع بسیار سختگیرانه هستند. مدیریت API تضمین می کند که استفاده از API با استانداردهای دولتی و سازمانی مطابقت دارد.چگونه موفقیت تلاش های مدیریت APIخود را اندازه گیری کنم؟برای ارزیابی موفقیت تلاش‌های مدیریت API، مهم است که این اهداف کلیدی عملکرد را در نظر بگیرید:1. سرعت: برای اندازه‌گیری سرعت می‌توان از سرعت و تأخیر دسترسی استفاده کرد. throttling یا caching می تواند بر سرعت تأثیر بگذارد.2. انعطاف‌پذیری: برای توسعه‌دهندگان، انعطاف‌پذیری به معنای تلاش بیشتر و همچنین هزینه بیشتر هنگام پذیرش API است.3. قابلیت اطمینان: به زبان ساده، قابلیت اطمینان به در دسترس بودن یک API برای توسعه دهندگان مربوط می شود و با خرابی ها و سهمیه ها اندازه گیری می شود. اینکه هر چند وقت یک‌بار یک API برای استفاده در دسترس است و تعداد تماس‌های API که یک توسعه‌دهنده می‌تواند در یک چارچوب زمانی خاص انجام دهد، مدیریت آن را قابل پیش‌بینی‌تر می‌کند. توسعه دهندگان به این نیاز دارند که یافتن APIها در سازمان آسان باشد.4. کیفیت : در واقع کیفیت نرخی است که رفتار API انتظارات یک توسعه دهنده را برآورده می کند. در حالت ایده آل، یک گذرگاه مدیریت API باید مدت زمانی را که یک توسعه دهنده برای اتخاذ یک API طول می کشد کاهش دهد.5. هزینه: اندازه گیری هزینه ها راهی برای به دست آوردن بهترین ارزش برای پول شما است.ویژگی های ابزارها و پلتفرم های نرم افزار مدیریت APIویژگی های رایج یک ابزار مدیریت API عبارتند از:1. امنیت2. محیط سندباکس3. در دسترس بودن بالا4. گزارش استفاده5. سازگاری به عقب6. تبدیل URL ها و داده ها7. داشبورد و تجزیه و تحلیل8. مسیریابی و پروکسی9. سیاست ها و محدودیت ها10. ابزارهای توسعه دهنده (مانند تولیدکنندگان اسناد)برترین پلتفرم های مدیریت APIمنبع باز در سال 2021سرویس APIها در دنیای توسعه نرم‌افزار و برنامه‌های تلفن همراه همه‌جا حضور پیدا کرده‌اند. درست از راه‌حل‌های خصوصی گرفته تا برنامه‌های خدمات عمومی و ادغام شرکا، همه جا وجود دارد. آنها به توسعه دهندگان در ایجاد برنامه هایی کمک می کنند که مجموعه متنوعی از نیازهای مشتری را برآورده کنند. آنها در حال تغییر الگوهای معماری با رویکرد بسیار پیچیده توسعه اپلیکیشن موبایل هستند.به دلیل این حضور برجسته، همه به دنبال این هستند که بهترین راهنماهای توسعه API را تنظیم کنند و از بینش ها برای ارائه یک تجربه فوق العاده پیشرفته و یکپارچه به مخاطبان هدف خود استفاده کنند.به دلیل این حضور برجسته، همه به دنبال این هستند که بهترین راهنماهای توسعه API را تنظیم کنند و از بینش ها برای ارائه یک تجربه فوق العاده پیشرفته و یکپارچه به مخاطبان هدف خود استفاده کنند.اما، آیا به همین سادگی است؟خوب، اگر فکر می کردید ایجاد یک API دشوار است، مدیریت آن بدتر است. با این حال، چیزی که کار را آسان‌تر می‌کند، استفاده از پلتفرم‌های مدیریت API منبع باز است. در ذیل فهرستی از ابزارها و پلتفرم های مدیریت API برتر را بررسی کنیم.1. API Umbrellaنرم افزار API Umbrella یک پلتفرم مدیریت API منبع باز پیشرو برای مدیریت API ها و میکروسرویس ها است. این پلتفرم سازمان‌ها را قادر می‌سازد تا تحت یک چتر کار کنند و با ایجاد مجوزهای مدیریت متفاوت برای دامنه‌های مختلف، فعالیت کنند همچنین امکاناتی مانند Rate limiting، کلیدهای API، حافظه پنهان، تجزیه و تحلیل بلادرنگ و در دسترس بودن یک رابط وب مدیریت را فراهم می کند.2. Gravitee.ioنرم افزار Gravitee.io یک پلت فرم منبع باز برای مدیریت API ها است که ماهیتی انعطاف پذیر و سبک وزن دارد. ویژگی‌های خارج از جعبه مانند محدود کردن نرخ، فیلتر IP، اشتراک‌گذاری منابع متقاطع، گزینه‌های plug-and-play، پورتال توسعه‌دهنده APIمنبع باز با خط‌مشی‌های OAuth2 و JSONوب توکن‌ها، متعادل‌سازی بار و موارد دیگر را ارائه می‌دهد. با این حال، ویژگی اصلی این ابزار مدیریت API ، توانایی آن در ایجاد گزارش های دقیق برای درک داده های استفاده از APIهای مورد نیاز است.3. APIman.io نرم افزار APIman.io که توسط Red Hat معرفی شده است، یکی از برترین پلتفرم های مدیریت API است که باید هنگام انتخاب بهترین پشته فناوری برای برنامه خود در نظر بگیرید. این پلتفرم که به راحتی در مخزن GitHub در دسترس است، فرصت های فراوانی را به توسعه دهندگان در مرحله توسعه backend می دهد که عبارتند از:1- زمان اجرا سریع2- حکمرانی مبتنی بر سیاست با موتور خط مشی جداشدنی3- قابلیت ناهمزمان4- صورتحساب و گزینه های تجزیه و تحلیل پیشرفته5- در دسترس بودن یک REST APIبرای مدیریت6- محدود کردن نرخ4. WSO2 API Managerنرم افزار WSO2 API Manager یک پلت فرم مدیریت API چرخه حیات کامل است که می تواند در هر مکان و هر زمان اجرا شود. توسعه دهندگان را قادر می سازد از امکان توزیع و استقرار API در هر دو فضای ابری داخلی و خصوصی لذت ببرند.جدای از این، فرصت های مختلف دیگری را نیز به همراه دارد. که تعدادی از آنها عبارتند از:1- سفارشی سازی بالاتر2- سهولت سیاست های حاکمیتی3- امکان طراحی و نمونه سازی برای SOAP یا RESTful API4- کنترل دسترسی بهتر و امکانات کسب درآمد5. Kong Enterpriseنرم افزار Kong یک ابزار API میکروسرویس منبع باز است که به طور گسترده پذیرفته شده است که به توسعه دهندگان امکان می دهد همه چیز را سریع، آسان و ایمن مدیریت کنند. ویژگی‌ها و قابلیت‌هایی نسخه Enterpriseآن عبارتند از:1- در دسترس بودن افزونه های منبع باز2- سهولت عملیات با یک کلیک3- قابلیت زیرساخت زبان مشترک4- تجسم عالی برای نظارت5- نرم افزار منظم بررسی سلامت6- درون نگری OAuth2.0و حمایت از جامعه گسترده تر6. Tyk.ioنرم افزار Tyk.io که به زبان برنامه نویسی Go نوشته شده است، یک گذرگاه API منبع باز شناخته شده است که باید مراقب آن باشید. همراه با یک پورتال توسعه‌دهنده APIمنبع باز، یک مستندات دقیق، داشبورد برای تجزیه و تحلیل API، محدود کردن نرخ برای APIها، احراز هویت، و مشخصات مختلف دیگری از این دست است که به سازمان‌ها کمک می‌کند تا روی محیط‌های میکروسرویس و کانتینری‌سازی تمرکز کنند. با این حال، خدمات مبتنی بر تجاری آن فقط برای نسخه های پولی موجود است.7. Fusioنرم افزار Fusio یکی از محبوب ترین ابزارهای مدیریت API منبع باز است که به توسعه دهندگان اجازه می دهد API های RESTرا از انواع داده های مختلف ایجاد و نگهداری کنند. دارای ویژگی‌های مدیریت چرخه عمر کارآمد مانند داشبورد درونی برای کنترل سرپرست، مستندات دقیق، اعتبارسنجی JSON برای درخواست‌های ورودی، و مدیریت محدوده برای برآورده کردن مجوزهای کاربر است.علاوه بر این، این پلت فرم APIMبه طور خودکار نیازمندی های OAI و RAML را ایجاد می کند و یک SDKمشتری سفارشی را مطابق طرح تعریف شده ایجاد می کند.8. Apigilityنرم افزار Apigility که توسط فریمورک Zend طراحی و نگهداری می شود، چارچوب منبع باز بعدی است که برای مدیریت API در نظر گرفته می شود. این پلتفرم شرکت‌های توسعه‌دهنده اپلیکیشن موبایل را تشویق می‌کند تا برای کدهای خود، نمایندگی‌های JSON را ایجاد و به نمایش بگذارند. همچنین گزینه‌های مختلف نسخه‌سازی، همراه با سهولت احراز هویت با OAuth2 و مستندسازی برای پذیرش API Blueprint را در اختیار آنها قرار می‌دهد.9. SwaggerHubنرم افزار SwaggerHub که توسط بیش از 40 سازمان برای مدیریت APIها در نظر گرفته شده است، یکی از بهترین راه حل های مدیریت API منبع باز است که می توان به آن اعتماد کرد. این پلتفرم طیف گسترده ای از گزینه ها را در اختیار طراحان و توسعه دهندگان در حوزه توسعه درونی قرار می دهد. این یک ویرایشگر قوی و بصری برای آنها فراهم می کند که با حفظ ثبات طراحی، کارایی و سرعت بالاتری را ارائه می دهد. همچنین، از فرصت بازخورد خطای هوشمند، تکمیل خودکار نحو، و در دسترس بودن اعتبار سنج های چندگانه استفاده می کند.10. API Axleنرم افزار API Axle که توسط Exiconپشتیبانی می‌شود، یک پروکسی منبع باز، ساده و سبک دیگر است که به توسعه دهندگان مزایای فراوانی می دهد که برخی از آنها عبارتند از:1- تجزیه و تحلیل زمان واقعی2- احراز هویت قوی3- ثبت ترافیک API برای آمار و گزارش4- سهولت ایجاد و مدیریت کلیدهای API5- پشتیبانی از طراحی REST API6-  استفاده از کتابخانه های Go، PHP و Node.js11. IBM Bluemix APIاین ابزار مدیریت API به توسعه دهندگان این امکان را می دهد تا از بیش از 200 الگوی نرم افزاری و میان افزاری برای ساخت برنامه های قابل حمل و سازگار برای ابر هیبریدی استفاده کنند. همچنین خدمات از پیش ساخته شده مختلف و مکانیزمی قوی برای تنظیم دسترسی API، کنترل نسخه های API متعدد، حفظ محدودیت های نرخ، و پیگیری معیارهای عملکرد و تجزیه و تحلیل هر API درگیر ارائه می دهد.12. Reposeنرم افزار Repose یک پلتفرم میان‌افزار RESTful منبع باز است که نقشی اساسی در تغییر آناتومی بازار API ایفا می‌کند. این پلتفرم امکانات مختلف پردازش API از جمله احراز هویت، اعتبارسنجی API، محدود کردن نرخ و ثبت درخواست HTTP را در اختیار سازمان‌ها قرار می‌دهد.این پلتفرم مدیریت API با هدف ارائه خدمات پایین دستی برای اعتماد به درخواست های دریافتی در زمانی که به خوبی شکل گرفته و تأیید شده است، کار می کند. و ماهیت آن بسیار توسعه پذیر و مقیاس پذیر است، به این معنی که توسعه دهندگان می توانند به راحتی آن را مطابق با تقاضاها و نیازهای رو به رشد به کار گیرند.13. SnapLogic Enterprise Integration Cloudنرم افزار SnapLogic یک ابزار یکپارچه سازی چشمگیر به عنوان یک سرویس (iPaaS) است که به سازمان ها در به دست آوردن، حفظ و رشد پایگاه مشتریان خود کمک می کند. ویژگی هایی که این امکان را فراهم می کند عبارتند از:1- سریع، چند نقطه‌ای است و دارای گزینه‌ای برای رسیدگی به نیازهای یکپارچه‌سازی داده‌های برنامه‌های دسته‌گرا و بلادرنگ است.2- دارای یک معماری مقیاس پذیر است که مانند وب سرورها عمل می کند، اما گزینه ای برای پذیرش تطبیق پذیری نیز ارائه می دهد.3- با راه‌حل‌های نوآورانه جریان داده ارائه می‌شود که سازمان‌ها را تشویق می‌کند تا برنامه‌های معروف SaaS مانند SugarCRM و Salesforce را به فرآیندهای سنتی خود اضافه کنند.14. DreamFactoryپلتفرم مدیریت API DreamFactory یکی از بهترین ابزارهای رایگان و منبع باز است که می توانید برای توسعه پروژه های خود در نظر بگیرید. و مجموعه ای از دلایل محبوبیت آن عبارتند از:1-  به توسعه دهندگان این امکان را می دهد تا از API های کدگذاری دستی برای توسعه برنامه های تلفن همراه فرار کنند.2- توسعه دهندگان را قادر می سازد تا هر پایگاه داده SQL/NoSQL، سرویس HTTP/SOAPخارجی، یا سیستم ذخیره سازی فایل را در محیط DreamFactoryادغام کنند و به طور خودکار یک REST APIجامع، انعطاف پذیر، کاملا مستند و آماده برای استفاده را دریافت کنند.3- یک REST API دقیق برای پایگاه‌های داده SQL، علاوه بر دسترسی به پارامترهای API برای صفحه‌بندی، فیلترهای پیچیده، کلیدهای خارجی مجازی، اتصالات جدول مرتبط و موارد دیگر ارائه می‌کند.4- درخواست JSON را بلافاصله به SOAP تبدیل می کند و بالعکس.5- تجربه بسیار ایمن را در قالب سهولت مدیریت کاربر، احراز هویت SSO، CORS، توکن‌های وب JSON، ادغام SAML، کنترل دسترسی مبتنی بر نقش در نقاط پایانی API، OAuth و LDAPارائه می‌کند.15. 3Scaleابزار 3Scale یکی از ابزارهای مدیریت API است که متعلق به Red Hat است و  به شرکت‌های کوچک و بزرگ این امکان را می‌دهد تا با ویژگی‌هایی مانند:1- از یک لایه ابری توزیع شده استفاده می کند که کنترل برنامه API را متمرکز می کند. این امر کنترل تجزیه و تحلیل، دسترسی، گردش کار توسعه دهندگان، کسب درآمد و غیره را آسان تر می کند.2- از آنجایی که روی یک لایه میزبان ابر توزیع شده میزبانی می کند، استفاده از آن بسیار انعطاف پذیر و مقیاس پذیر است.3- ویژگی OpenShift یکپارچه سازی 3Scale API شما را قادر می سازد تا برنامه های با کارایی بالا را به صورت خودکار و محدود اجرا کنید.4- این پلتفرم مدیریت API چرخه عمر کامل به توسعه دهندگان این امکان را می دهد تا برنامه ریزی، طراحی، اعمال، انتشار، مدیریت، تجزیه و تحلیل، بهینه سازی و بازنشستگی API های شما را در هر زمان برای ارائه یک تجربه استثنایی انجام دهند.5- این قدرت را دارد که داده ها، خدمات و محتوای سازمان شما را از طریق وب یا برنامه های تلفن همراه به راحتی به اشتراک بگذارد.6- مهمتر از همه، پلتفرم مدیریت API 3scale این فرصت را برای شما فراهم می کند تا طیف گسترده ای از پروتکل های رمزگذاری، احراز هویت و مجوز را در محیط توسعه القا کنید. این به خدمات توسعه نرم‌افزار پشتیبان قدرت می‌دهد تا تجربه برنامه‌های موبایلی بسیار ایمن را متناسب با پایگاه کاربر هدف خود ارائه دهند.16. Gloo Edgeنرم افزار Gloo Edge نسل بعدی گذرگاه API بومی ابری است که از برنامه های قدیمی، میکروسرویس ها و همچنین بدون سرور پشتیبانی می کند. با محیط شما یکپارچه می شود و به شما امکان می دهد ابزارهای مورد علاقه خود را برای برنامه ریزی، تداوم و امنیت انتخاب کنید. گذرگاهAPI ورودی و خروجی را کنترل می کند، زیرا نقطه ورود برای اتصالات و پاسخ های ورودی است. Gloo Edgeهمچنین از پروژه‌های منبع باز برتر مانند GraphQL، gRPC، OpenTracing، NATS و غیره برای ارائه ویژگی‌های با کیفیت بالا استفاده می‌کند.17. Akanaنرم افزار Akana یکی دیگر از بهترین گذرگاه های API منبع باز است. این یک پلت فرم مدیریت API سرتاسری را فراهم می کند. با استفاده از این پلتفرم می توانید API ها را طراحی، ایمن، پیاده سازی، نظارت و انتشار دهید. می توان آن را در محل یا در فضای ابری مستقر کرد. برخی از ویژگی های قابل توجه این پلتفرم API عبارتند از:1- حفاظت از تهدید2- پلتفرم مدیریت API منبع باز پیشرو3- مدیریت میکروسرویس ها و DevOps4- کمک به مدیریت ترافیک5- امنیت برنامه را با شناسایی آسیب‌پذیری‌ها در کد یا در طول زمان اجرا فراهم می‌کند6- پشتیبانی منبع باز ارائه می دهد18. Masheryنرم افزار Mashery قابلیت‌های مدیریت APIچرخه عمر کامل پیشرو در بازار را برای شرکت‌هایی که شیوه‌های توسعه و استقرار بومی ابری را اتخاذ می‌کنند، مانند DevOps، Microservices، و Containersارائه می‌کند. مجموعه غنی از قابلیت های آن شامل ایجاد API، تولید، امنیت، و تجزیه و تحلیل برنامه APIشما و جامعه توسعه دهندگان است. برخی از ویژگی های قابل توجه Mashery عبارتند از:1- پشتیبانی از وارد کردن مشخصات Swagger 2.02- پشتیبانی از ادغام با API Fortressبرای ارائه قابلیت های آزمایش API گسترده3- کنترل در محل خاتمه SSLو مدیریت اسرار را فعال می کند.19. Azureنرم افزار Microsoft Azure مدیریت API سرتاسری را در فضای ابری، داخلی یا ترکیبی ارائه می‌کند. شما می توانید مدیریت API را به صورت برنامه ای از طریق REST API و SDK مدیریت کنید. همچنین می‌توانید زبان توصیف خدمات وب (WSDL) سرویس SOAPآنها را وارد کنید و Azure یک SOAP front-end ایجاد می‌کند. آنها تمام ویژگی های استاندارد از جمله کسب درآمد را ارائه می دهند. همچنین می توانید با استفاده از اصول مدیریت API، قابلیت کشف و استفاده از میکروسرویس ها را در سازمان خود افزایش دهید.20. KrakenDنرم افزار KrakenD یکی از بهترین گذرگاه API منبع باز است. عملکرد اصلی آن ایجاد یک API است که به عنوان جمع کننده بسیاری از ریزسرویس ها در نقاط پایانی واحد عمل می کند و کارهای سنگین را به طور خودکار برای شما انجام می دهد که برخی از آنها عبارتند از جمع، تبدیل، فیلتر، رمزگشایی، دریچه گاز، احراز هویت، و موارد دیگر. این ابزار یک راه اعلامی برای ایجاد نقاط پایانی ارائه می دهد. این ابزار به خوبی ساختار یافته و لایه بندی شده است و برای گسترش عملکرد خود با استفاده از میان افزار plug-and-playکه توسط جامعه یا داخلی توسعه یافته است، باز است.چگونه پلتفرم مدیریت API منبع باز مناسب را انتخاب کنیم؟1. ویژگی هاوقتی نوبت به یافتن پاسخی برای &quot;چگونه بهترین راه حل مدیریت API (APIM) را انتخاب می کنید&quot; می رسد، مهمترین عاملی که باید در نظر بگیرید ویژگی های پلت فرم های مدیریت APIاست. هر ابزار مدیریت API منبع باز دارای الزامات و محدودیت های پیاده سازی خاصی است. بنابراین، انجام یک مقایسه پلت فرم مدیریت APIاز نظر نیازهای فنی و غیر فنی شما می تواند واقعا مفید باشد.2. پیچیدگی استقراروقتی صحبت از استقرار به میان می‌آید، برخی از گذرگاه ها به یک گره نیاز دارند در حالی که برخی دیگر برای راه‌اندازی پایگاه داده بر روی چندین نوع گره اجرا می‌شوند. علاوه بر این، برخی از گذرگاه ها با پایگاه‌های داده زیادی کار می‌کنند، که مدیریت آن می‌تواند کار پیچیده‌ای باشد. بنابراین، تمرکز بر پیچیدگی استقرار نیز می تواند به شما در یافتن ابزار منبع باز مدیریت API مناسب کمک کند.3. میزبانی On-Premise vs Cloudابزارهای On-Premise، همانطور که از نام نشان داده شده است، در محوطه فیزیکی یک شرکت قرار دارند. می توان زمان بیشتری را به فرآیند استقرار و نگهداری اضافه کرد اما، در مورد Cloud-hosted، ابزارهای منبع باز مدیریت API در یک مکان مجازی قرار دارند و خدمات آن از طریق رایانش ابری در دسترس است. آنها می توانند تاخیر بیشتری را به دلیل پرش اضافی ایجاد کنند و حتی در زمان پایین آمدن سرویس گیرنده، در دسترس بودن سرویس شما را کاهش دهند. بنابراین، تجزیه و تحلیل مزایا و معایب هر دو گزینه برای تعیین اینکه کدام ابزار مدیریت API منبع باز را بپذیرید نیز می تواند یک ایده سودآور باشد.4. حمایت از بهره بردارانآخرین اما نه کم اهمیت، داشتن ایده از نوع پشتیبانی بهره برداران که هر ابزار منبع باز مدیریت API نیاز دارد نیز به انتخاب مناسب کمک می کند. هر چه یک انجمن بزرگتر و فعال باشد، شانس دریافت به روز رسانی ها و راه حل های سوالات شما بیشتر است. در نهایت منجر به یک تجربه بهتر می شود.در صورت نیاز به مشاوره در انتخاب و استقرار پلتفرم مدیریت API درخوست خود را از طریق پیام یا پست الکترونیک ارسال نمائید.https://a-hashemi.blogsky.com/</description>
                <category>انجمن عملی مهندسی کامپیوتر دانشگاه شاهد</category>
                <author>علیرضا هاشمی</author>
                <pubDate>Sun, 08 May 2022 15:52:10 +0430</pubDate>
            </item>
                    <item>
                <title>تقدس گرایی؛ عامل بدبختی برنامه نویسان!</title>
                <link>https://virgool.io/CE-SHAHED-publication/%D8%AA%D9%82%D8%AF%D8%B3-%DA%AF%D8%B1%D8%A7%DB%8C%DB%8C-%D8%B9%D8%A7%D9%85%D9%84-%D8%A8%D8%AF%D8%A8%D8%AE%D8%AA%DB%8C-%D8%A8%D8%B1%D9%86%D8%A7%D9%85%D9%87-%D9%86%D9%88%DB%8C%D8%B3%D8%A7%D9%86-uexx8qjmt2pw</link>
                <description>این زبون برنامه نویسی از بقیه بهتره؛ کامل تره؛ نوشتنش راحت تره؛ محبوب تره؛ خوشگلتره و بقیه چرت و پرتن!براتون آشناس؟ چندبار این جمله رو شنیدین؟ از چند نفر؟ خودتون هم همین قضیه رو برای زبونی که کار میکنین قبول دارین؟متاسفانه اکثر برنامه نویسان آماتور و متوسط زبون برنامه نویسی شون رو میپرستن و آنقدر بهش عشق میورزن که حاضرن حتی براش چه آنلاین چه فیزیکی بجنگن ! تجربه کردم که میگم XD یادمه اوایل کارم بود، تو تلگرام یه گروه داشتیم که داخلش بحثای برنامه نویسی میکردیم؛ سر اینکه زبون کی بهتره؛ کدوم قوی تره، کدوم محبوب تره و . . . متاسفانه این چیزیه که برای اکثریت اتفاق میفته، در واقع فکر میکنیم زبون ما جزئی از خانواده ماست و باید تحت هر شرایطی ازش دفاع کنیم حتی اگه واقعیت تلخی رو راجبش بشنویم. واقعا وقتی به اون روزا فک میکنم تاسف میخورم ( کل کل و کوری خوندن حال میداد ولی خیلی از وقت و انرژی ارشمندمون رو میگرفت)این تعصب بیجا و بی مورد باعث ضررای زیاد و مختلفی میشه؛ از جمله اینکه:1- راجب زبون های دیگه کنجکاو نمیشیم و راجبشون &quot;بی طرف&quot; تحقیق نمیکنیم.2- بحث های بیجا و بی مورد میکنیم و نتیجه شون فقط از بین رفتن زمان، انرژی و آرامش روانی ماست . سودی نداره.3- از بقیه برنامه نویسان فاصله میگیریم صرفا چون زبونی که مینویسن رو قبول نداریم.4- همیشه نسبت به زبون های جدید گارد داریم حتی با اینکه میدونیم خیلیاشون دارن پیشرفت میکنن.5- حتی اگه خدای نکرده زبون ما در حال منسوخ شدنه انقدر بهش وابسته ایم که حاضریم باهاش به ته دریا بریم و غرق بشیم ولی سراغ بقیه زبونا نریم!صرفا جهت خنده :) قصد توهین به برنامه نویسان اچ تی ام ال رو ندارم XDیکی از مهمترین ویژگی هایی که یک برنامه نویس موثر و حرفه ای باید داشته باشه اینه که کنجکاو باشه، نه اینکه تا زبون جدیدی معرفی شد سریع زبون خودش رو کنار بگذاره یا به قول معروف از این شاخه به اون شاخه بپره و زبونش رو دائم عوض کنه؛ بلکه منظورم از کنجکاوی اینه که اگه ببینه زبون برنامه نویسی جدیدی ارائه شده(یا زبون دیگه ای هستش که توجهش رو جلب کرده) که به خوبی داره ازش استقبال میشه و تمام معیارهای یک زبون برنامه نویسی با پیشرفت صعودی رو داره (پشتیبانی معتبر، قدرت، سادگی و . . . ) راجبش تحقیق کنه و اگه صلاح دونست شروع کنه به یادگیریش.برای مثال همه شاهدیم زبونایی مثل &quot;فلاتر&quot; و &quot;گو&quot; زبونایی بودن که رشد صعودی خیلی خوبی کردن و الان هم در ایران بازار خوبی دارن.تعصب کورکورانه نه تنها تو دنیای برنامه نویسی بلکه همجا باعث دید بسته و ضررهای زیادی میشه؛ مخصوصا تو دنیای برنامه نویسی و تکنولوژی خیلی مهمه که گوش تون تیز باشه و همیشه منتظر آپدیت های جدید برای ابزارهای فعلی یا معرفی تکنولوژی های جدید باشین؛ اینجا کسی از بقیه جلوتره که تو یادگیری انعطاف پذیرتر و آماده پذیرش تغییرات جدید باشه.امیدوارم از این مقاله استفاده کرده باشین ؛)خوشحال میشم نظرتون رو کامنت کنین ارتباط با من:تلگرام</description>
                <category>انجمن عملی مهندسی کامپیوتر دانشگاه شاهد</category>
                <author>محمدمهدی زارعی</author>
                <pubDate>Wed, 06 Apr 2022 21:56:21 +0430</pubDate>
            </item>
                    <item>
                <title>رابط برنامه نویسی کاربردی یا  API (Application Programming Interface)</title>
                <link>https://virgool.io/CE-SHAHED-publication/%D8%B1%D8%A7%D8%A8%D8%B7-%D8%A8%D8%B1%D9%86%D8%A7%D9%85%D9%87-%D9%86%D9%88%DB%8C%D8%B3%DB%8C-%DA%A9%D8%A7%D8%B1%D8%A8%D8%B1%D8%AF%DB%8C-%DB%8C%D8%A7-api-application-programming-interface-po4jorrbtqp6</link>
                <description>درود دوستان امیدوارم حال دلتون خوب باشه.یه مدتی نبودم ولی با دست پر برگشتم :)یه مسئله ای که برای من سخت جا افتاد، همین API بود. گفتم شاید بتونم برای شما تفهیمش کنم که کار شما آسون بشه :)Application Programming Interfaceاول از همه سوال پیش میاد API چی هست اصلا!! جوابش رو با سوال میدم؛ شما فرض کن یه برنامه نوشتی که میخوای قیمت لحظه ای ارز یا بیتکوین رو در اختیار مخاطبین خودت بذاری. خودت میری یه برنامه مینویسی براش؟منطقا نه! خب پس میری از یه سایتی که کار اصلیش اینه و دارای API هست، اطلاعات مد نظر رو میگیری و میاری تو برنامه یا سایت خودت.خب پس تا الان تعریف API شد اینکه شما با برنامه ای که نوشتی، در اصل داری با برنامه شخص دیگری هم ارتباط میگیری(مثل همین ای پی آی بیتکوین یا ارز ها)یعنی دقیقا User میاد تو سایت شما و درخواست میده که بگید الان قیمت بیتکوین چه مقداره و شما مستقیما میری پیش اون سایت که این اطلاعات رو داره و ازش میپرسید، قیمت بیتکوین چنده‌؟جواب رو به شما میده و نهایتا شما اطلاعات رو میدید به کاربر؛ ساده ش این شد که نقش میانجی(واسطه) رو دارید.بخوایم فنی تر بگیم اتفاقی که میوفته اینه:Client:Send a &quot;GET&quot; HTTP RequestServer:&quot;Process&quot; HTTP RequestSend a Responseیعنی چی حالا! خب وقتی Client مرورگر رو بازمیکنه وارد سایت شما میشه در اصل داره یک درخواست HTTP با متد GET میفرسته به سرور شما.مثلا میگه صفحه محصولات رو میخوام، سرور(Server) این درخواست رو چک میکنه و اگر اوکی باشه در جواب چیزی که میخواد رو به عنوان پاسخ (Response) میده به مرورگر که در این مثال میشه همون صفحه محصولات.خب ولی در این شرایط ما گفتیم خودمون یه سایت داریم که میره اطلاعات مد نظر رو از یه سایت دومی میگیرهدر این صورت پیچیدگی یه مرحله بیشتره! یعنی علاوه بر درخواستی که مخاطب شما به سرور داد، شما هم باید یه درخواست بدید به سایت اصلی و اطلاعات رو بگیرید و نهایتا اطلاعات رو بدید به کاربر نهایی خودتون.بازم ساده تر بگیم:اصلا چرا از API استفاده کنیم؟الان گرسنه شدیم! میتونیم بریم از مغازه هر خرت و پرتی نیاز داریم، بخریم بیاریم خونه و شروع کنیم غذا درست کنیم! خب کار سختیه دیگه مگه نه ؟یا میتونیم بریم رستوران، که یه آشپز حرفه ای داره و هر مواد اولیه ای که نیاز هست بخریم هم، خودش داره!ولی آشپز نمیذاره بریم تو آشپزخونه و  به همه چیزش دسترسی داشته باشیم(حالا به دلایل امنیتی یا هرچیزی) مثل باب اسفنجی و آقای خرچنگ که نمیذارن دستور پخت همبرگر خرچنگی لو بره :)))اینجاست که گارسون یا پیشخدمت (Waiter/Waitress) به دادمون میرسه.بیایید فرض کنیم رفتیم یک رستوران؛ نشستیم منتظر گارسون تا بیاد و سفارش ما رو بگیرهاینجا ما مشتری هستیم یعنی دقیقا همون Client/User و مصرف کنندهآشپز دقیقا نقش سرور رو داره، درخواستی از طرف مشتری براش میاد از طریق گارسون هم به دستش میرسهگارسون API هست! چرا‌؟ چون دقیقا نقش واسطه و میانجی رو داره بین مشتری و آشپزیعنی میاد سفارش رو از ما میگیره، تحویل میده به آشپز! آشپز هم طبق درخواست مشتری، غذایی که درخواست کرده رو درست میکنه و میده به گارسون، گارسون هم میاره تحویل مشتری میده.فکر کنم ساده تر از این نمیشه گفت :)))یه مثال ملموس از ای پی آي هم اینه که تو سایت ها میخوای ثبت نام کنی، میتونی از طریق Facebook- Gmail و ... سریعا ثبت نام کنی.HTTP Request Methodبرای اینکه بتونید درک بهتری داشته باشید، نیازه که یه مقداری با پروتوکل های وب آشنا بشیدمهم ترینش همین HTTP هست! همونطور که بالاتر توضیح دادم هر کاری که میکنید به عنوان یک کسی که داره تو وب میگرده، دائما دارید درخواست های HTTP میفرستید به سایت ها.اچ تی تی پی (HTTP) چندین متد داره، پرکاربرد هاشو میگم براتون:GETPOSTPUTPATCHDELETEمتد GETخب اولی GET هست. درخواست برای گرفتن چیزی هست از اسمش هم مشخصهیعنی شما اومدی سایت ویرگول و رو این پست من کلیک کردید ( یک ریکوئست HTTP با متد  GET به سرور سایت ویرگول فرستادید )متد POSTبعدی POST هست. اینم اسمش روش هست‌؛ وقتی که شما یک پست مینویسید و انتشار میدید یا وقتی در سایتی فرمی رو پر میکنید، وقتی که گزینه ارسال، ثبت یا هرچیز مشابه رو میزنید، با متد POST درخواستی به سرور میفرستید! ولی ایندفعه اطلاعاتی از سرور نمیخواید بلکه اطلاعاتی بهش دادید تا ثبت بشه.اطلاعات اگر با متد GET ارسال بشه، در اصل تو بخش URL سایت به صورت Query-String فرستاده میشه که میتونیم واضح ببینیمش.یعنی میگیم:https://www.google.com/search?q=apiبخش بالا از علامت سوال به بعد یک کوئری استرینگ هست که با متد گت فرستاده شدهالان گفتیم گوگل جان برو بخش سرچ کردن و API رو پیدا کن برامونبرا همین وقتی اطلاعات مهمی داریم میدیم نباید از متد GET  استفاده کنیم! بجاش از POST استفاده میکنیم و اطلاعات دیگه تو URL رد و بدل نمیشه، بجاش تو بدنه HTTP Request ذخیره میشه که امن هست.متد PUTدر اصل همون POST هست، اما برای موقعی که اطلاعات وجود داره و میخواد از اول کاملا ویرایش بشهفرض کنید یک اطلاعاتی وارد کردیم در یک سایتی، حالا میخوایم عوضشون کنیممتد PATCHاین هم مثل PUT اما فرق اصلیش در اینه که برای Partial-Update استفاده میشه!یعنی دیگه نیاز نیست تمام اطلاعات وارد شده از قبل رو آپدیت کنیم، فقط میخوایم یه بخشی از اطلاعات قبلی رو عوض کنیم.متد DELETEاز اسم این مشخصه صرفا درخواستی هست برای حذف کردن اطلاعاتی که قبلا وجود داشته.انواع APIرابط های برنامه نویسی کاربردی مدل های مختلفی هم دارن مثل:SOAPRESTRPC --&gt; gRPCهرکدوم اینا میتونن یه پست مجزا باشن، پس واقعا از حوصله این بخش کارمون خارجهاحتمالا بعدتر برای هرکدوم یه پست بذارم :)ولی الان در این حد بدونید که SOAP و RPC  پروتوکل هستند ولی REST یک معماری.هرکدوم اینها روشی برای نوشتن و ساختن API هستند! قطعا هرکدوم مزیت ها و کاستی هایی دارن!وقتی با API اطلاعاتی رد و بدل میشه بین مخاطب و سرور، در یک قالب اطلاعاتی باید داده قرار بگیره دیگهاگه با JSON یا XML و  ... آشنا باشید کارمون آسون تره!معمولا SOAP برای کارهایی که امنیت حیاتیه زیاد استفاده میشه، مثل کار ها بانکیو سازگار ترین قالب جا به جایی اطلاعاتش هم (Data Interchange) ایکس ام ال (XML) هست.اصولا معماری REST پرکاربرد ترینه تو وب برای API ها. سازگار ترین (Data Interchange) هم براش JSON هست که یک دیتا استراکچر هست که از زبان برنامه نویسی جاوا اسکریپت بوجود اومده.بعدی gRPC یعنی (Google Remote Procedure Call) هست که برای ساختن API استفاده میشه و سازگارترین قالب جا به جایی اطلاعاتش (Data Interchange) براش چیزیه به اسم Protobuff یا اسم کاملش Protocol buffer.خب همینجا مبحث رو تموم میکنیمامیدوارم مفید واقع بشه براتون؛ خوشحال میشم اگه پیشنهادی داشتید بگید و سوالاتتون رو بپرسیدسعی میکنم تو پست های آتی این مباحث انواع API رو مطرح کنم و با پایتون روش عملی کار کنیم :)</description>
                <category>انجمن عملی مهندسی کامپیوتر دانشگاه شاهد</category>
                <author>Mosihere</author>
                <pubDate>Sun, 03 Apr 2022 05:21:52 +0430</pubDate>
            </item>
                    <item>
                <title>تاخیر ها در برنامه نویسی</title>
                <link>https://virgool.io/CE-SHAHED-publication/%D8%AA%D8%A7%D8%AE%DB%8C%D8%B1-%D9%87%D8%A7-%D8%AF%D8%B1-%D8%A8%D8%B1%D9%86%D8%A7%D9%85%D9%87-%D9%86%D9%88%DB%8C%D8%B3%DB%8C-jc8gkhnudrnp</link>
                <description>-توی برنامه نویسی یک سری از زمان ها هستند که شما به عنوان کسی که دارید برنامه می نویسید، باید از اونها اطلاع داشته باشید(این اعداد خیلی دقیق نیستند اما برای مطاله کردن  منبع خوبی میتونه باشه )کار انجام شده=============================زمان تاخیر ارجاع حافظه کش (L1)---------------------------------------------0.5نانو ثانیهپیش بینی شاخه اشتباه--------------------------------------------- 5 نانوثانیهارجاع حافظه کش (L2) --------------------------------------------- 7 نانو ثانیهقفل کردن/بازکردن (mutex) -------------------------------------- 17 نانوثانیهارجاع ( RAM ) --------------------------------------------------------  100 نانوثانیه+فشرده کردن یک فایل 1 کیلوبایتی با(zippy) ------- 2000نانو ثانیه (2میکروثانیه)ارسال 2 کیلوبایت داده با سرعت 1 گیگابیت بر ثانیه ------- 88000 نانو ثانیه (88میکروثانیه)خواندن تصادفی (SSD) --------------------------------------------- 160000نانوثانیه(160میکروثانیه)خواندن یک مگابایت پشت سر هم از (RAM) --------------- 5000نانوثانیه(5 میکروثانیه) زمان رفت و برگشت از یک مرکز داده --------------------------- 500000 نانوثانیه(500 میکرو ثانیه)خواندن 1 مگابایت داده پشت سر هم از(SSD)------------- 78000نانوثانیه(78 میکرو ثانیه)تغییر مکان اشاره گر (HDD)------------------------------------- 3000000نانوثانیه(3 میلی ثانیه)خواندن یک مگابایت از داده پشت سر هم از (HDD)----- 10000000نانوثانیه(1 میلی ثانیه)رفت و برگشت یک بسته داده از کانادا به هلند------------ 150000000نانوثانیه(150 میلی ثانیه)اگر فرض کنیم که SSD با سرعت  1گیگابایت بر ثانیه(1GB/s) داریم :اطلاعات مربوط به سال 2018 استحالا برای اینکه این اعداد رو بهتر متوجه بشید، میایم اونا رو در 500 میلیون ضرب میکنیم و شباهتشون رو به وقایع حقیقی دور و برمون ببینیم:در ابعاد دقیقه:ارجاع حافظه کش (L1) --------------------  0.5 ثانیه --------------- یک ضربان قلب                  پیش بینی شاخه اشتباه -------------------   1.5 ثانیه--------------- خمیازه کوتاهارجاع حافظه کش (L2) ----------------------  2ثانیه ---------------- باز کردن در رانی (:))قفل کردن/بازکردن (mutex) --------------- 34 ثانیه -------------- بوت شدن(بالاآمدن) یک تلفن همراهدر ابعاد ساعت: ارجاع ( RAM )------------------------------------------ 500 ثانیه ----------- بالا آمدن ویندوز 10 با  Hdd (خیلی طول میکشه)زمان رفت و برگشت از یک مرکز داده------------- 0.27 ساعت ---------- انجام ورزش روزانهخواندن یک مگابایت پشت سر هم از (RAM)---- 45 دقیقه ----------- یک سری fifa بازی کردن با رفقاارسال 2 کیلوبایت داده با سرعت (1Gb/s)-------- 5.09 روز ------------ یک هفته کاری در ایران78در ابعاد روز:فشرده کردن یک فایل 1 کیلوبایتی با(zippy) ------ 2.7ساعت ---------- یک سفر هوایی از اروپا به خاورمیانهخواندن 1 مگابایت داده پشت سر هم از(SSD)---- 10.8ساعت--------- سفر از اصفهان به بندرعباسارسال 2 کیلوبایت داده با سرعت(1Gb/s) ----------- 12ساعت----------- نصف روزخواندن تصادفی (SSD)-----------------------------------  22ساعت------------دو ساعت کمتر از یک روز کامل       در ابعاد هفته :زمان رفت و برگشت از یک مرکز داده -------------------- 2.9 روز ------------ یک اردوی مشهدخواندن یک مگابایت از داده پشت سر هم از (HDD)----- 5.74 روز -------- یک هفته کاریدر ابعاد ماهتغییر مکان اشاره گر (HDD) ----------------------------  2.48 هفته------- فاصله بین دو ترم دانشگاهیدر ابعاد سال:رفت و برگشت یک بسته داده از کانادا به هلند-------- 2.4 سال-------------- اتمام دوره کاردانی یا کارشناسی ناپیوسته     با توجه به چیزی که دیدید، وقتی که قصد بهینه کردن سرعت اجرای یک برنامه رو دارید، بهتره روی مورد هایی تمرکز کنید که بیشترین تاثیر و تاخیر رو دارن.منابع :https://colin-scott.github.io/personal_website/research/interactive_latency.htmlhttps://gist.github.com/hellerbarde/2843375#minute</description>
                <category>انجمن عملی مهندسی کامپیوتر دانشگاه شاهد</category>
                <author>Mohammad Taha</author>
                <pubDate>Thu, 31 Mar 2022 13:05:59 +0430</pubDate>
            </item>
            </channel>
</rss>