<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
    <channel>
        <title>نوشته های Mehdi Teymorian</title>
        <link>https://virgool.io/feed/@teymorian</link>
        <description></description>
        <language>fa</language>
        <pubDate>2026-04-15 04:39:37</pubDate>
        <image>
            <url>https://files.virgool.io/upload/users/36799/avatar/KBYwUP.jpg?height=120&amp;width=120</url>
            <title>Mehdi Teymorian</title>
            <link>https://virgool.io/@teymorian</link>
        </image>

                    <item>
                <title>بررسی نقشه مغزی با استفاده از دانش شبکه‌های پیچیده پویا با هدف تشخیص بیماری</title>
                <link>https://virgool.io/@teymorian/%D8%A8%D8%B1%D8%B1%D8%B3%DB%8C-%D9%86%D9%82%D8%B4%D9%87-%D9%85%D8%BA%D8%B2%DB%8C-%D8%A8%D8%A7-%D8%A7%D8%B3%D8%AA%D9%81%D8%A7%D8%AF%D9%87-%D8%A7%D8%B2-%D8%AF%D8%A7%D9%86%D8%B4-%D8%B4%D8%A8%DA%A9%D9%87-%D9%87%D8%A7%DB%8C-%D9%BE%DB%8C%DA%86%DB%8C%D8%AF%D9%87-%D9%BE%D9%88%DB%8C%D8%A7-%D8%A8%D8%A7-%D9%87%D8%AF%D9%81-%D8%AA%D8%B4%D8%AE%DB%8C%D8%B5-%D8%A8%DB%8C%D9%85%D8%A7%D8%B1%DB%8C-pvn28bmlkypb</link>
                <description>استاد راهنما: دکتر صادق علی‌اکبریمحقق: مهدی تیموریاندانشکده: دانشکده مهندسی کامپیوتر دانشگاه شهید بهشتی سال ۱۴۰۳چکیدهعلم شبکه‌های پیچیده و کانکتومیکس با بهره‌گیری از نظریه گراف، تحلیل اختلالات شبکه‌ای و یادگیری ماشین تحول چشمگیری در درک سیستم‌های زیستی و عصبی ایجاد کرده‌اند. این مطالعه نشان می‌دهد که چگونه شبکه‌های متابولیکی و مغزی با داشتن ویژگی‌های دنیای کوچک، ماژولاریتی و سازمان‌دهی سلسله‌مراتبی امکان مدل‌سازی پیش‌بینانه برای تشخیص و درمان بیماری‌ها را فراهم می‌کنند. در علوم اعصاب، تحلیل کانکتوم اختلالات شبکه‌ای در بیماری آلزایمر را شناسایی کرده و آن را از پیری طبیعی متمایز می‌سازد. به‌طور مشابه، تحلیل شبکه‌های متابولیکی مسیرهای کلیدی بیوشیمیایی را برای کشف دارو و پزشکی دقیق تعیین می‌کند. با یکپارچه‌سازی داده‌های چندمقیاسی و مدلسازی محاسباتی، این حوزه‌ها روشی قدرتمند برای تشخیص زودهنگام، کشف بیومارکرها و مداخلات درمانی ارائه می‌دهند.مقدمهمغز انسان با حدود ۸۶ میلیارد نورون و بی‌شمار سیناپس که شبکه‌ای وسیع از ارتباطات را شکل می‌دهند، یکی از پیچیده‌ترین ساختارهای شناخته‌شده در علم به شمار می‌آید. درک چگونگی شکل‌گیری فرایندهای شناختی، حافظه و رفتار از میان این ارتباطات پیچیده، همچنان یکی از بزرگ‌ترین چالش‌های علوم اعصاب است. روش‌های سنتی عموماً برای تحلیل چنین ساختار عظیمی کافی نیستند؛ ازاین‌رو، به کارگیری روش‌های محاسباتی برای کشف الگوها در این شبکه عظیم ضروری می‌باشد.در این میان، پیشرفت‌های صورت‌گرفته در علوم کامپیوتر و نظریه شبکه‌های پیچیده، ابزارها و مدل‌های قدرتمندی را برای ترسیم، مصورسازی، و تحلیل داده‌های اتصال در سیستم عصبی فراهم آورده‌اند. با مدل‌سازی مغز به‌عنوان گرافی متشکل از گره‌ها (نورون‌ها یا نواحی مغزی) و یال‌ها (سیناپس‌ها یا مسیرهای ارتباطی)، پژوهشگران می‌توانند با استفاده از الگوریتم‌های مختلفی نظیر اندازه‌گیری مراکز مهم (Centrality) و تشخیص خوشه‌ها (Community Detection)، ساختارهای کلیدی شبکه را شناسایی و الگوهای درونی و گسترده‌ای را کشف کنند که زیربنای فرایندهای شناختی و رفتاری است.این همگرایی بین کانکتومیکس و تحلیل شبکه‌های پیچیده نه‌تنها به فهم عمیق‌تر کارکردهای سالم مغز کمک می‌کند، بلکه زمینه‌ساز شناخت بهتر اختلالات عصبی نیز می‌شود. برای نمونه، به‌هم‌ریختگی در ساختار توپولوژیک شبکه مغزی سبب بروز بیماری‌هایی همچون آلزایمر، اسکیزوفرنی و صرع می‌شود. رویکرد مبتنی بر شبکه در بررسی این اختلالات، شناسایی نشانگرهای زیستی (Biomarkers) و تدوین راهکارهای درمانی را تسهیل می‌کند.مطالعه نقشه مغز امکان می‌دهد تا هاب‌های کلیدی را در ساختار اتصالات مغزی شناسایی کنیم؛ هاب‌هایی که اطلاعات را در میان چندین ناحیه مغزی یکپارچه و توزیع می‌کنند. همچنین این رویکرد به کشف ساختارهای ماژولاری می‌انجامد که نواحی مغزی مرتبط به لحاظ عملکردی را در کنار هم قرار می‌دهد. با محاسبه معیارهایی مانند مرکزیت گره، ضریب خوشه‌بندی و طول مسیر، می‌توان تعیین کرد کدام نواحی در انتقال سیگنال‌های عصبی بیشترین نقش را ایفا می‌کنند. این دیدگاه نشان می‌دهد که ماژول‌های تخصصی مغز چگونه با یکدیگر در ارتباط هستند و فرایندهای محلی به چه صورت از عملکردهای شناختی کلی حمایت می‌کنند.با وجود پیشرفت‌های قابل توجه در روش‌های تصویربرداری و بازسازی، دستیابی به یک کانکتوم کامل از مغز انسان همچنان دور از دسترس است و دلیل آن، نیاز فوق‌العاده بالا به توان پردازشی و فضای ذخیره‌سازی است. در یک کانکتوم با وضوح بالا، باید میلیاردها نورون و تریلیون‌ها سیناپس نقشه‌برداری شوند که حجمی در حد پتابایت (یا حتی اگزابایت) داده را تولید می‌کند. پردازش این داده‌ها، از قطعه‌بندی و هم‌ترازسازی گرفته تا تحلیل نهایی، همگی به منابع عظیم محاسباتی و زمان بسیار طولانی نیاز دارند که حتی ابررایانه‌های مدرن نیز با مشکل روبرو می‌شوند. زیرساخت ذخیره‌سازی و پهنای باند لازم برای مدیریت، بایگانی و اشتراک این داده‌ها در میان پژوهشگران نیز چالش دیگری است. در نتیجه، ساخت یک کانکتوم کامل در سطح سیناپس برای کل مغز انسان فراتر از توانمندی‌های فعلی فناوری است.ادبیات موضوعنوروآناتومی و کانکتومیکسنوروآناتومی به مطالعه ساختار و دستگاه عصبی می‌پردازد و بررسی می‌کند که چگونه نورون‌ها و سیناپس‌ها در قالب مدارهای پیچیده شکل می‌گیرند. در کانکتومیکس، این مدارها در سطوح مختلف (از نورون‌های منفرد در سطح میکروسکوپی تا ناحیه‌های وسیع در سطح ماکروسکوپی) نقشه‌برداری می‌شوند. تصاویری که از طریق میکروسکوپ الکترونی یا روش‌هایی مانند تصویربرداری پخششی (Diffusion MRI) به دست می‌آیند، جزئیات ظریفی از اتصالات نورونی را نمایش می‌دهند. این داده‌ها سپس بازسازی می‌شوند تا کانکتوم را شکل دهند و نقشه جامعی از اتصالات مغز ارائه دهند. بررسی این نقشه‌ها راهی برای درک پیوند بین ساختار مغز و عملکردهای آن فراهم می‌کند.نحوه نمایش داده در علوم اعصابدر علوم اعصاب، داده‌های حاصل از تصویربرداری یا رکوردهای الکتریکی، اغلب به ساختارهای ریاضی یا محاسباتی تبدیل می‌شوند. یکی از معمول‌ترین این روش‌ها، استفاده از ماتریس‌های مجاورت است که در آن سطرها و ستون‌ها نشان‌دهنده نورون‌ها یا نواحی مغزی و مقادیر درون ماتریس نشان‌دهنده ارتباطات آن‌ها هستند. گاهی نیز از نمودار گراف برای نشان دادن گره‌ها (نورون‌ها یا مناطق مغزی) و یال‌ها (اتصالات) استفاده می‌شود. در صورت وجود داده‌های کمی، میزان قدرت یا نوع اتصال به صورت وزن روی یال ثبت می‌شود. این شیوه نمایش داده، تحلیل شبکه‌ای و مقایسه الگوهای متفاوت کانکتوم‌ها را تسهیل می‌کند.شبکه‌های پیچیده در علوم کامپیوترشبکه‌های پیچیده، سیستم‌هایی با تعداد زیادی مؤلفه در حال تعامل هستند که از دید نظریه گراف مورد مطالعه قرار می‌گیرند. در این تحلیل، معیارهایی مانند درجه (Degree)، ضریب خوشه‌بندی (Clustering Coefficient)، و متریک‌های مرکزیت (نظیر Betweenness یا Eigenvector) برای بررسی ساختار شبکه استفاده می‌شوند. روش‌های شناسایی جامعه (Community Detection) نیز برای یافتن خوشه‌های متراکم گره‌ها کاربرد دارند که وجود زیرساختارها یا ماژول‌های وظیفه‌ای در مغز را تایید می‌کنند. در شبکه‌های دینامیک، این شاخص‌ها در طول زمان ردیابی می‌شوند تا تغییرات و روندهای شبکه بررسی شوند و بتوان رفتار آینده را پیش‌بینی کرد.تبدیل تصاویر بدست آمده به شبکه مغزیتبدیل داده‌های MRI به یک کانکتوم معمولاً با تعریف نواحی مغزی مورد علاقه (ROI) بر اساس یک اطلس آناتومیکی یا عملکردی آغاز می‌شود. برای ساخت کانکتوم ساختاری، از داده‌های تصویربرداری پخششی (diffusion MRI) استفاده می‌شود تا مسیرهای الیاف ماده‌سفید با کمک الگوریتم‌های تراکتوگرافی بازسازی گردند. سپس وزن هر یال برحسب تعداد یا تراکم تراکت‌های بین جفت ناحیه‌های مغزی تعیین شده و ماتریس مجاورت به دست می‌آید. در کانکتوم عملکردی، از fMRI استفاده می‌شود و پس از استخراج سیگنال زمانی هر ROI، شاخص‌های شباهت (مانند ضریب همبستگی) میان این سیگنال‌ها محاسبه می‌گردد. سرانجام، این ماتریس‌ها که نشان‌دهنده میزان ارتباط ساختاری یا عملکردی میان ناحیه‌های مختلف هستند، به عنوان کانکتوم در نظر گرفته می‌شوند.مقالات در این حوزه در زمینه تشخیص بیماریزیرگونه‌های جدید بیماری آلزایمر بر اساس اتصال عملکردی مغز در پروژه کانکتوم انسانیاین مطالعه بر شناسایی زیرگونه‌های بیماری آلزایمر (AD) بر اساس اتصال عملکردی مغز (FC) تمرکز دارد و از تکنیک‌های خوشه‌بندی و تحلیل نظریه گراف استفاده می‌کند. پژوهش، یک خودرمزگذار مبتنی بر خوشه‌بندی سلسله‌مراتبی را برای دسته‌بندی بیماران آلزایمر بر اساس الگوهای اتصال عملکردی آنها پیشنهاد می‌دهد. شناسایی دو زیرگونه بیماری آلزایمر بر اساس اتصال عملکردی:زیرگونه I (بدخیم): دچار اختلال عملکردی گسترده در سراسر مغز است که نشان‌دهنده فروپاشی شبکه‌ای در سطح جهانی می‌باشد.زیرگونه II (خوش‌خیم): فقط دچار اختلال موضعی در سیستم لیمبیک (LS) بوده و ساختار شبکه‌ای نسبتاً دست‌نخورده‌ای دارد.تحلیل شبکه‌ای مغز با استفاده از نظریه گراف:پژوهش از معیارهای نظریه گراف برای ارزیابی تفاوت‌های بین زیرگونه‌ها بهره می‌برد.ضریب خوشه‌بندی، k-coreness، کارایی محلی و قدرت گره‌ها تفاوت‌های چشمگیری بین دو زیرگونه نشان می‌دهند.سیستم لیمبیک (LS) و شبکه حالت پیش‌فرض (DMN) به عنوان مناطق حیاتی در پیشرفت بیماری شناسایی شده‌اند.تفاوت‌های چشمگیر در ویژگی‌های شبکه‌ای بین زیرگونه I و گروه کنترل نشان می‌دهد که فروپاشی شبکه‌ای در مقیاس بزرگ، نشانه‌ای از موارد شدید آلزایمر است.بررسی اتصال عملکردی و مدژولار بودن شبکه در آلزایمر:زیرگونه I کاهش چشمگیری در اتصال عملکردی تمام شبکه‌های اصلی دارد که نشان‌دهنده اختلال در جداسازی و یکپارچگی عملکردی است.زیرگونه II دارای ساختار شبکه‌ای مدژولارتر است که احتمالاً نشان‌دهنده مکانیسم‌های جبرانی مغز برای تأخیر در پیشرفت بیماری می‌باشد.در این مطالعه مشاهده می‌شود که انعطاف‌پذیری شبکه‌ای در زیرگونه II ممکن است به عنوان استراتژی مداخله زودهنگام مورد استفاده قرار گیرد.استفاده از خودرمزگذار برای کاهش ابعاد در تحلیل شبکه مغز:به جای خوشه‌بندی مستقیم ماتریس‌های اتصال عملکردی با ابعاد بالا، یک خودرمزگذار برای استخراج ویژگی‌ها استفاده شده است که باعث کاهش نویز و بهبود عملکرد خوشه‌بندی می‌شود.این رویکرد یادگیری عمیق، دسته‌بندی مبتنی بر شبکه را بهبود می‌بخشد و راهی نوین برای تحلیل شبکه‌های مغزی در بیماری‌های تحلیل‌برنده عصبی ارائه می‌دهد.تأثیر سن و نمرات شناختی بر ساختار شبکه‌ای:همبستگی منفی بین اتصال درون‌شبکه‌ای و افزایش سن در زیرگونه I مشاهده شد، در حالی که این همبستگی در زیرگونه II ضعیف‌تر بود.اتصال سیستم لیمبیک با عملکرد حافظه مرتبط است و حفظ عملکرد این سیستم می‌تواند به تأخیر در زوال شناختی کمک کند. ساختار توپولوژیکی کانکتوم در مقیاس کلان مکانیسم‌های زیستی و ارتباط آن با اختلال عملکرد مغز در بیماری آلزایمراین پژوهش رویکردی مبتنی بر شبکه‌های پیچیده برای درک سازمان‌دهی ساختاری و عملکردی مغز در بیماری آلزایمر ارائه می‌کند. در این راستا، شبکه تشابه رادیومیکس منطقه‌ای (R2SN) معرفی شده است که شبکه‌های تشابه مورفولوژیکی را از داده‌های MRI استخراج می‌کند. این شبکه قادر است تغییرات سلسله‌مراتبی ظریف در بیماری آلزایمر را که با روش‌های سنتی قابل تشخیص نیستند، شناسایی کند.گرادیان‌های توپولوژیکی مغز و اختلالات آن‌هااین پژوهش از تکنیک جاسازی نقشه انتشار  برای استخراج گرادیان‌های مغزی استفاده کرده است که سازمان‌دهی سلسله‌مراتبی فضایی مغز را نمایش می‌دهد.گرادیان اصلی R2SN با شبکه‌های عملکردی، ژنتیکی و ریزساختاری مغز همبستگی دارد که نشان‌دهنده اطلاعات زیستی معنادار در این الگوها است.در بیماری آلزایمر، اختلالات قابل توجهی در نواحی زیرقشری و شبکه مد پیش‌فرض (DMN) مشاهده شده است که مسئول یکپارچگی اطلاعات در مغز هستند. این یافته‌ها نشان می‌دهد که سازمان‌دهی شبکه‌ای مغز در بیماری آلزایمر دچار تغییرات ساختاری خاصی می‌شود.تفاوت‌های شبکه‌ای عملکردی و ساختاری بین آلزایمر و پیری طبیعیبرخلاف پیری طبیعی که بیشتر با اختلال در انتقال یون‌های غیرآلی در غشای سلولی مرتبط است، بیماری آلزایمر بیشتر با نقص در انتقال سیناپسی شیمیایی در ارتباط است.در مقایسه با پیری طبیعی و سایر بیماری‌های عصبی مانند پارکینسون و دمانس فرونتوتمپورال (FTD)، تخریب شبکه‌ای در آلزایمر الگوی خاصی دارد.یافته‌ها از این ایده پشتیبانی می‌کنند که بیماری آلزایمر ناشی از اختلال در سازمان‌دهی سلسله‌مراتبی شبکه‌های مغزی است، به‌ویژه در نواحی کلیدی که اطلاعات را پردازش و ادغام می‌کنند.ارتباط گرادیان‌های مغزی با امضاهای مولکولیپژوهشگران از روش ترانسکریپتومیکس تصویری برای مرتبط کردن تغییرات گرادیان R2SN با الگوهای بیان ژنی از اطلس مغزی آلن استفاده کردند.در بیماری آلزایمر، تغییرات شدیدی در سیستم انتقال‌دهنده‌های عصبی، به‌ویژه گیرنده‌های سروتونین (5-HT) و دوپامین مشاهده شد که نشان‌دهنده اختلال در یکپارچگی شبکه‌ای مغز است.تصویربرداری PET/SPECT از سیستم‌های انتقال‌دهنده عصبی نیز تأیید می‌کند که بیماری آلزایمر با عدم تعادل‌های عصبی‌شیمیایی خاصی مرتبط است.استفاده از شبکه‌های پیچیده برای تشخیص زیستی آلزایمراین پژوهش پیشنهاد می‌دهد که گرادیان R2SN می‌تواند به‌عنوان یک نشانگر زیستی تصویربرداری برای تشخیص زودهنگام آلزایمر به کار رود.برخلاف روش‌های سنتی که بیشتر بر کاهش حجم مناطق خاصی از مغز تمرکز دارند، تحلیل‌های شبکه‌محور، تصویر دقیق‌تری از پیشرفت بیماری ارائه می‌دهد.به‌جای بررسی تغییرات مجزا در هر منطقه، تحلیل شبکه‌ای نشان می‌دهد که چگونه اختلال در یک ناحیه، شبکه‌های بزرگ‌تر مغزی را تحت تأثیر قرار می‌دهد.اتصال متابولیکی و نقش آن در پیش‌بینی، تشخیص و درمان بیماری‌های پیچیدهاین مقاله نشان می‌دهد که شبکه‌های متابولیکی از متابولیت‌های درهم‌تنیده تشکیل شده‌اند که مسیرهای بیوشیمیایی پیچیده‌ای را ایجاد می‌کنند. این شبکه‌ها دارای ویژگی‌های دنیای کوچک، ماژولاریتی و ساختارهای سلسله‌مراتبی هستند که مشابه سایر شبکه‌های زیستی و اجتماعی می‌باشند.مدل‌های شبکه و معیارهای تحلیل:در این پژوهش، نظریه گراف برای مدل‌سازی شبکه‌های متابولیکی به کار رفته است که در آن، گره‌ها نماینده متابولیت‌ها و یال‌ها نشان‌دهنده واکنش‌های بیوشیمیایی هستند.معیارهای علوم شبکه‌های پیچیده مانند درجه مرکزی، ضریب خوشه‌بندی، کوتاه‌ترین مسیر و مرکزیت بینابینی برای تحلیل توپولوژی شبکه متابولیکی استفاده شده‌اند.ماژولاریتی برای شناسایی خوشه‌های عملکردی در شبکه متابولیکی به کار رفته که زیربخش‌های مهمی را در عملکرد سلولی نشان می‌دهد.مکانیسم‌های بیماری و اختلالات شبکه‌ای:این پژوهش از تحلیل شبکه‌ای تفاضلی برای مقایسه وضعیت متابولیکی در شرایط سالم و بیمار استفاده کرده است.با بررسی اختلالات شبکه‌ای، متابولیت‌ها و مسیرهای کلیدی مرتبط با بیماری‌هایی مانند سرطان، دیابت و اختلالات نورودژنراتیو شناسایی شده‌اند.این تحقیق نشان می‌دهد که شبکه‌های متابولیکی مشابه سیستم‌های تحمل‌پذیر در برابر خرابی عمل می‌کنند، جایی که متابولیت‌های هاب نقش کلیدی در حفظ پایداری ایفا می‌کنند.پیش‌بینی و تشخیص از طریق نشانگرهای زیستی مبتنی بر شبکه:این مقاله پیشنهاد می‌کند که شبکه‌های متابولیکی می‌توانند برای پیش‌بینی شروع بیماری از طریق شناسایی نشانگرهای زیستی شبکه‌ای که به طور قابل توجهی از حالت عادی منحرف می‌شوند، استفاده شوند.روش‌های طبقه‌بندی مبتنی بر شبکه از جمله خوشه‌بندی بر اساس همبستگی و یادگیری ماشین، برای تشخیص زودهنگام بیماری‌ها استفاده شده‌ است.کشف دارو از طریق تحلیل شبکه‌های متابولیکی:این پژوهش از نظریه کنترل‌پذیری شبکه برای شناسایی اهداف دارویی از طریق تعیین گره‌های با تأثیر بالا در مسیرهای متابولیکی استفاده کرده است.تحلیل کشندگی مصنوعی (Synthetic Lethality Analysis) برای پیش‌بینی آسیب‌پذیری‌های متابولیکی در سلول‌های سرطانی به کار رفته و در هدف‌گذاری مجدد داروها کمک می‌کند.شبکه متابولیکی با تحلیل ساختاری ادغام شده است تا اثرات جانبی داروها پیش‌بینی شود و بدین ترتیب، عوارض جانبی کاهش یافته و استراتژی‌های درمانی بهبود یابند.ارزیابیآینده علم شبکه‌های پیچیده و علوم کانکتوم در مسیر تحول درک ما از سیستم‌های زیستی قرار دارد، به‌ویژه با بهره‌گیری از مدل‌های پیشرفته شبکه‌ای، یکپارچه‌سازی داده‌های چندمقیاسی، و تحلیل‌های مبتنی بر هوش مصنوعی. کانکتومیکس، به‌ویژه در علوم اعصاب، از یک نمایش ایستا از اتصال‌های مغزی به یک چارچوب پویا و چندلایه تغییر جهت داده است که تعاملات بیوشیمیایی، ساختاری و عملکردی را در نظر می‌گیرد. تحقیقات آینده احتمالاً بر مدل‌سازی پیش‌بینانه متمرکز خواهد بود، جایی که رویکردهای شبکه‌های پیچیده می‌توانند پیش‌بینی‌هایی درباره پیشرفت بیماری، انعطاف‌پذیری عصبی، و عملکرد شناختی ارائه دهند. با ظهور بیومارکرهای مبتنی بر شبکه، تشخیص زودهنگام بیماری‌هایی مانند آلزایمر و اختلالات متابولیکی با دقت بیشتری انجام خواهد شد و از این طریق، پزشکی شخصی‌سازی‌شده با تحلیل کانکتوم هر فرد تسهیل می‌شود.تا به امروز، این حوزه‌ها از نظریه گراف، یادگیری ماشین و پردازش داده‌های حجیم به‌شدت بهره‌مند شده‌اند. مدل‌سازی متابولیکی مبتنی بر گراف به کشف داروها کمک شایانی کرده و امکان شناسایی گره‌های کلیدی در مسیرهای بیوشیمیایی را فراهم آورده است که در نتیجه، درمان‌های هدفمندتری توسعه یافته‌اند. به‌طور مشابه، در علوم اعصاب، یکپارچه‌سازی تصویربرداری fMRI، داده‌های ژنتیکی و تحلیل شبکه‌های انتقال‌دهنده عصبی الگوهای اتصال مغزی متمایزی را آشکار کرده است که بیماری‌های نورودژنراتیو را از روند پیری طبیعی تفکیک می‌کند. پیشرفت‌هایی در حوزه نقشه‌برداری پخشی (Diffusion Map Embedding)، تحلیل مرگ سلولی مصنوعی (Synthetic Lethality Analysis)، و تئوری کنترل‌پذیری شبکه (Network Controllability Theory) به درک عمیق‌تر از نحوه حفظ پایداری و سازگاری سیستم‌های زیستی در برابر اختلالات منجر شده است. در آینده، ترکیب میان شبکه‌های پیچیده، هوش مصنوعی و بیوانفورماتیک احتمالاً منجر به استراتژی‌های درمانی نوین، بهینه‌سازی روش‌های توان‌بخشی عصبی و اصلاح مدل‌های محاسباتی هوش خواهد شد.جمع‌بندیتقاطع علم شبکه‌های پیچیده و کانکتومیکس پیشرفت‌های چشمگیری در درک سیستم‌های زیستی و عصبی، به‌ویژه در زمینه‌های پیش‌بینی، تشخیص و راهکارهای درمانی بیماری‌ها ایجاد کرده است. با بهره‌گیری از نظریه گراف، تحلیل اختلالات شبکه‌ای و یادگیری ماشین، پژوهشگران توانسته‌اند روابط پیچیده‌ای را در شبکه‌های متابولیکی و عصبی شناسایی کنند که نشان می‌دهد چگونه اختلال در این سیستم‌ها به بیماری‌هایی مانند آلزایمر، سرطان و سندرم‌های متابولیکی منجر می‌شود. یکپارچه‌سازی مدل‌های شبکه‌ای چندمقیاسی، شامل داده‌های ژنومی، پروتئومیک و متابولومیک، دیدگاهی جامع‌تر از مکانیسم‌های بیماری ارائه داده است و از رویکردهای سنتی تقلیل‌گرایانه فراتر رفته است.در آینده، تحقیقات در حوزه علم شبکه‌های زیستی و پزشکی با پیشرفت در مدل‌سازی محاسباتی، تحلیل‌های مبتنی بر هوش مصنوعی و پزشکی دقیق شکل خواهد گرفت. توانایی نقشه‌برداری، تحلیل و اصلاح شبکه‌های پیچیده زیستی نه تنها موجب بهبود تشخیص زودهنگام بیماری‌ها می‌شود، بلکه مداخلات درمانی هدفمندتری را با کارایی بالاتر امکان‌پذیر می‌کند. در علوم اعصاب، تغییر رویکرد از مدل‌های تحلیل موضعی تخریب مغزی به رویکردهای شبکه‌ای گسترده چارچوبی جامع‌تر برای درک زوال شناختی و اختلالات مغزی ارائه خواهد داد. به‌طور مشابه، در تحقیقات متابولیکی، کشف داروهای جدید مبتنی بر شبکه باعث اصلاح و بهینه‌سازی راهکارهای درمانی از طریق شناسایی آسیب‌پذیری‌های کلیدی متابولیکی خواهد شد. با پیشرفت این حوزه‌های میان‌رشته‌ای، هم‌افزایی میان علم شبکه‌های پیچیده، بیوانفورماتیک و هوش مصنوعی مرزهای جدیدی را در تحقیقات پزشکی باز خواهد کرد و در نهایت منجر به راهکارهای درمانی شخصی‌سازی‌شده و مؤثرتر خواهد شد.مراجعJ. Sheng, Y. Xin, Q. Zhang, Z. Yang, L. Wang, Q. Zhang, and B. Wang, “Novel Alzheimer’s disease subtypes based on functional brain connectivity in human connectome project,” Scientific Reports, vol. 14, no. 14821, 2024.K. Zhao, D. Wang, D. Wang, P. Chen, Y. Wei, L. Tu, Y. Chen, Y. Tang, H. Yao, B. Zhou, J. Lu, P. Wang, Z. Liao, Y. Chen, Y. Han, X. Zhang, and Y. Liu, &quot;Macroscale Connectome Topographical Structure Reveals the Biomechanisms of Brain Dysfunction in Alzheimer’s Disease,&quot; Sci. Adv., vol. 10, no. eado8837, Oct. 2024.W. Meng, H. Pan, Y. Sha, X. Zhai, A. Xing, S. S. Lingampelly, S. R. Sripathi, Y. Wang, and K. Li, “Metabolic Connectome and Its Role in the Prediction, Diagnosis, and Treatment of Complex Diseases,” Metabolites, vol. 14, no. 2, p. 93, Jan. 2024A. W. Toga, K. A. Clark, P. M. Thompson, D. W. Shattuck, and J. D. Van Horn, &quot;Mapping the Human Connectome,&quot; Neurosurgery, vol. 71, no. 1, pp. 1–5, Jul. 2012S. Aliakbary, Complex Dynamic Networks, Shahid Beheshti University, Course Lecture Slides</description>
                <category>Mehdi Teymorian</category>
                <author>Mehdi Teymorian</author>
                <pubDate>Fri, 07 Feb 2025 23:11:53 +0330</pubDate>
            </item>
                    <item>
                <title>بررسی موضوعات پایه‌ای در حوزه توسعه نرم‌افزار</title>
                <link>https://virgool.io/@teymorian/%D8%A8%D8%B1%D8%B1%D8%B3%DB%8C-%D9%85%D9%88%D8%B6%D9%88%D8%B9%D8%A7%D8%AA-%D9%BE%D8%A7%DB%8C%D9%87-%D8%A7%DB%8C-%D8%AF%D8%B1-%D8%AD%D9%88%D8%B2%D9%87-%D8%AA%D9%88%D8%B3%D8%B9%D9%87-%D9%86%D8%B1%D9%85-%D8%A7%D9%81%D8%B2%D8%A7%D8%B1-ouksqwkaj3wq</link>
                <description> در این پست با موضوعات پایه‌ای حوزه توسعه نرم‌افزار آشنا میشویم.Modular Monolithicروشی است که در آن بخش‌های مختلف یک سرویس به ماژول‌های مستقل تبدیل میشوند که همه اجزا مورد نیاز هر ماژول در آن وجود دارد ولی همچنان درون یک سرویس هستند و یک بستر را به اشتراک میگذارند. این روش بین حالت Monolithic و حالت Microservice قرار میگیرد. در حالت Monolith همه اجزا در کنار هم هستند و به عنوان یک جز شناخته میشود. در حالت Microservice، بخش‌های مختلف یک سرویس ممکن است به سرویس‌های کوچکتر شکسته شوند. مثلا یک نرم‌افزار فروشگاه میتواند به ماژول‌های مشتریان، سفارشات، و محصولات تقسیم شود. از خوبی های Modular Monolithic میتوان به تفکیک کار و اجازه برای کار کردن موازی بر روی بخش‌های نرم‌افزار اشاره کرد. یکی از معایب این روش نیز نبود قابلیت استفاده از تکنولوژی‌های مختلف برای ماژول‌های مختلف است.AWSیک سرویس ابری است که خدمات مختلفی از جمله Iaas، Paas، Saas ارائه میکند. یعنی شما میتواند به صورت pay as you go و با کمترین هزینه مدیریتی خدمات زیرساختی مثل حافظه، مموری، قدرت پردازشی یا خدمات پلتفرمی مثل یک سیستم ویندوزی یا خدمات نرم‌افزاری مثل ایمیل دریافت کنید. از معروف‌ترین خدمات AWS میتوان به سرویس EC2 اشاره کرد که یک فضای محاسباتی ابری به شما ارائه داده میشود که میتوان بر اساس نیاز از پلن‌های مختلف آن استفاده کرد و منعطف بودن آن تغییر منابع سرویس را در هر لحظه ممکن میکند.API-first Approachدر این روش API به عنوان بلاک‌های اصلی سازنده یک نرم‌افزار شناخته میشود و قبل از بخش‌های دیگر توسعه داده میشود. با ساخت API در قدم اول مطمئن میشویم که ارتباطات بین بخش‌های مختلف نرم‌افزار به صورت درونی و بیرونی به درستی برقرار میشود. همچنین در این روش API ها دارای ارزش هستند و لایه بیزینس درون آن‌ها وجود دارد. این مدل توسعه در مقابل مدل‌های قدیمی قرار میگیرد که در آن بعد از ساخت نرم‌افزار API صرفا جهت برقراری ارتباط استفاده میشود.NoSQL Databasesنوعی از دیتابیس‌ها هستند که برای ذخیره داده با اسکیما منعطف استفاده میشوند. داده به صورت کلید-مقدار، سند، و گراف ذخیره میشود. از ویژگی‌های این مدل دیتابیس‌ها میتوان به منعطف بودن، مقایس‌پذیری، و عملکرد بالا اشاره کرد. یکی از معروف‌ترین دیتابیس‌های این دسته MongoDB است.Serverless Architectureدر این روش نرم‌افزار بدون نیاز به مدیریت زیرساخت، ساخته و تولید میشود. یعنی تمرکز تیم توسعه بر روی بیزینس و هسته اصلی قرار میگیرد و نگه‌داری از دیتابیس و مقایس کردن نرم‌افزار به عهده سرویس ارائه دهنده زیرساخت می‌باشد. با توسعه نرم‌افزار به صورت serverless وقت زیادی صرفه جویی میشود چرا که انجام کارهای زیرساخت نیازمند وقت و حتی نیروی اختصاصی است. در این مدل توسعه منابع و هزینه‌ها صرف نیازمندی‌های کسب و کار میشود و با پرداخت هزینه کمی به سرویس ابری میتوان از بابت زیرساخت مطمئن بود. یکی از ارائه کننده‌های serverless architecture سرویس AWS است که خدمات متنوعی از جمله AWS Lambda ارائه میکند.Domain Driven Designروشی برای توسعه نرم‌افزار است که در آن کسب و کار به دامنه‌های معنا داری تعریف میشود. هر کدام از این دامنه‌ها مدل‌ها و منطق خود را دارند و به تنهای قابل استفاده هستند. اگرچه این به معنی ایزوله بودن کامل هر دامنه نیست بلکه در دامنه‌ها ممکن است مواردی مشابه وجود داشته باشد. مثلا در یک سامانه خرید آنلاین کالا بخش پشتیبانی و فروش وجود دارد. هر کدام از این‌ها میتواند یک دامنه باشد. مفاهیم مشتری یا کالا در هر دو یکسان است. با تعریف دامنه‌ها در توسعه نرم‌افزار به یک زبان مشترک بین بیزینس و تیم توسعه میرسیم که از کلمات یکسان برای توصیف اجزا نرم‌افزار استفاده میکنیم.Hexagonal architectureیکی از معماری‌های توسعه نرم‌افزار می‌باشد که در آن منطق و قواعد کسب و کار در هسته نرم‌افزار قرار میگیرد که از همه بخش‌های دیگر نرم‌افزار ایزوله است. همچنین port هایی وجود دارد تا رفتارهای هسته را به بیرون به صورت انتزاعی و از طریق interface ها ارائه کنند. مورد دیگر adapter ها است که برای اتصال کامپوننت‌هایی مانند دیتابیس، درگاه بانکی، اس‌ام‌اس، و غیره استفاده میشود و عملا نقش مترجم را بازی میکنند. یعنی درخواست‌های خارجی را به داده قابل فهم برای هسته ترجمه میکنند و برعکس.Event Sourcingدر این روش وضعیت سیستم به صورت مجموعه‌ای از رخدادها ذخیره میشود. این رخدادها غیرقابل تغییر و نمایانگر یک اقدام در سیستم هستند. با داشتن لاگ این رخداد میتوان وضعیت سیستم را در هر لحظه از زمان ایجاد کرد. همچنین این روش مقایس‌پذیر است چون میتوان دسترسی‌های خواندن و نوشتن را جدا کرد.Low code platformsپلتفرم‌هایی برای ساخت نرم‌افزار هستند که نیاز به کدنویسی ساده و خیلی کم دارند. اکثر این پلتفرم‌ها دارای رابط کاربری هستند و به صورت drag and drop عمل میکنند. یعنی یک پلتفرم با کامپوننت‌های از قبل آماده وجود دارد و شما صرفا با انتخاب کامپوننت‌های مختلف نرم‌افزار را درست میکنید. البته ممکن است در بعضی جاها برای اتصال بخش‌های مختلف نیاز به برنامه‌نویسی نیز باشد. از نمونه این پلتفرم‌ها به wix.com میتوان اشاره کرد.Business Process Management Systems (BPMS)نرم‌افزای است که پروسه‌های کسب و کار را مدیریت میکند. یعنی شما با استفاده از BPMS میتوانید تمامی رویه‌ها و پروسه‌هایی که درون سیستم وجود دارد از طریق دیاگرام و فلوچارت ایجاد کنید و در یک سامانه مدیریت کنید. همچنین این سیستم به خوبی با دیگر نرم‌افزارها متصل میشود تا بتواند یک سامانه یکپارچه را ایجاد کند. باید به این نکته نیز اشاره کرد که سیستم‌های BPMS با تعریف یکسری قوانین از قبل نوشته شده، جلوی هرگونه تداخل و یا اقدام غیرقانونی نیز میگیرند.Message Queue (such as Kafka and RabbitMQ)یکی از روش‌های ارتباطات بین بخش‌های مختلف نرم‌افزار است که در آن قسمت‌های مختلف از طریق گذاشتن پیام‌های غیرهمزمان با یکدیگر ارتباط برقرار میکنند. این کار به تفکیک سیستم به بخش‌های کوچکتر کمک میکند چون که به بخش‌های مختلف اجازه میدهد تا در هر زمانی که نیاز شد از پیام فرستاده شده توسط یک بخش دیگر استفاده کنند و نیاز به تعامل لحظه‌ای ندارند.مدل‌های مختلفی برای پیاده‌سازی صف پیام وجود دارد اما میتوان به روش های نقطه به نقطه و ارسال کننده/دریافت کننده اشاره کرد. در روش نقطه به نقطه یک فرستنده و یک گیرنده حتما دخیل هستند. اما در روش ارسال کننده/دریافت کننده پیام فرستاده میتواند چندین دریافت کننده داشته باشد.از نکات مهم این قسمت میتوان به تضمین ارسال نیز اشاره کرد. بعضی از صف‌های پیام به تضمین میکنند که پیام ارسال شده حتما به دست گیرنده میرسد اما در بعضی نیز به صورت fire and forget هستند. یعنی بعد از ارسال پیام تضمینی برای رسیدن حتمی به گیرنده نیست و بعد از ارسال پیام از صف پاک میشود.Container orchestration (such as Kubernetes)برای توضیح این مورد نیاز هست که بدانم container چیست. Container یک جزه مستقل و پورتبل است که نرم‌افزار و نیازمندی‌های آن را درون خود دارد تا قابلیت نصب آسان بر روی زیرساخت‌های مختلف را داشته باشد. Container orchestration یک سرویس است که وظیفه مدیریت کانتینرها را به عهده دارد تا به درستی ایجاد شوند و به صورت مفید از منابع استفاده کنند. همچنین این سرویس شامل یک زیرساخت شبکه‌ای می‌باشد که ترافیک را از خارج به کانتینر متناسب و بالعکس به خارج منتقل میکند. همچنین از طریق این سرویس میتوان کانتینرها را مانیتور کرد و همینطور از لحاظ سکیوریتی اقداماتی را انجام داد.برای اینکه یک اپلیکیشن بر روی یک سرویس ابری نصب شود به یک منیفست ابری به نام pod نگاشت میشود. همچنین pod ها زیرمجموعه منیفست دیگری به اسم deployment هستند. ارتباط با دیپلویمنت از طریق منیفست Service انجام میشود. همچنین ترافیک خارج از کلاستر نیز از طریق route به داخل و به سرویس آن کانتینر منتقل میشود. البته که این ماجرا مفصل تر است اما به صورت خلاصه و با نگاه کلی داستان بدین شکل است.Log Management Tools (such as ELK)ابزاری برای مدیریت لاگ‌های نرم‌‌افزار است که لاگ‌ها در یک سیستم یکپارچه برای بررسی اتفاقات و رخدادهای سیستم ذخیره میشوند. اگر الستیک را به عنوان نمونه ابزار در نظر بگیریم، لاگ‌ها از بخش‌های مختلف سیستم وارد الستیک میشوند و سپس طبق الگوهای خاصی که کاربر آن‌ها را تعریف میکنند اطلاعات مفید از این لاگ‌ها استخراج و در ایندکس‌هایی ذخیره میشوند. ایندکس کردن این لاگ‌ها به دسترسی سریع‌تر در آینده و همچنین کوئری زدن بر روی آن‌ها کمک میکند.از طریق الستیک میتوان داشبوردهای مختلفی را از لاگ‌های نرم‌افزار ایجاد کرد. مثلا تعداد درخواست های موفق در یک روز میتواند موردی باشد که از لاگ‌ها استخراج شود و به در داشبوردها وجود داشته باشد. همچنین با تعریف دیگر بخش‌ها در داشبورد، میتوان از وضعیت سیستم در یک نگاه مطلع شد.همچنین میتوان سیستم تعریف کرد در صورتی که بعضی حالات خاص رخ داد به ما از طریق پلتفرم‌های پیام‌رسانی اطلاع داده شود.Monitoring tools (such as Prometheus)ابزاری است مانیتور کردن سرویس‌های مختلف نرم‌افزاری است که به خوبی در محیط‌های ابری مثل Kubernetes عمل میکند. نحوه عملکرد بدین صورت است که هر نرم‌افزار برای خود یکسری متریک تعریف میکند. هر متریک نمایانگر یک وضعیت از سیستم است. مثلا تعداد درخواست‌های در حال انجام، یا میزان مصرف مموری سیستم، و غیره. سپس این متریک‌ها در یک خروجی به همراه زمان ثبت نوشته میشوند. پرومتئوس در بازه‌های زمانی مشخص این داده‌ را جمع‌آوری و در خود ذخیره میکند. حال قابلیت کوئری زدن و ساخت داشبورد بر روی این دیتا وجود دارد. میتوان از طریق آن نرخ گیری کرد یا نمودار خطی دیتا را رسم کرد. پرومتئوس دیاگرام‌های مختلفی را پشتیبانی میکند که متناسب با داده میتوان آن‌ها را انتخاب کرد.همچنین دارای یک سیستم هشدار دهی است تا در صورتی که یک متریک دارای شرایط خاصی بود هشدار داده و شخصی را مطلع کند تا جلوی حادثه گرفته شود.Static Code Analysis (such as SonarQube)روشی است که در آن بدون نیاز به اجرا، کد بررسی میشود تا باگ‌های احتمالی و آسیب پذیری‌ها کشف شوند. این روش کمک میکند تا پروسه بررسی کد به صورت خودکار انجام شود و همینطور کد نوشته با استاندارد‌های صنعت مقایسه شود و در صورت وجود ایراد امنیتی، سینتکسی و غیره، شناسایی و برطرف شوند. بخاطر خودکار بودن این پروسه میتوان آن را در رویه CI نرم افزار قرار داد تا هر زمان که تغییری بر روی سیستم اعمال میشود به صورت اتوماتیک کد بررسی شود.با تشکر از اینکه مطالعه کردید.</description>
                <category>Mehdi Teymorian</category>
                <author>Mehdi Teymorian</author>
                <pubDate>Fri, 24 Nov 2023 22:50:59 +0330</pubDate>
            </item>
                    <item>
                <title>خلاصه‌ای از بخش معماری کتاب معماری تمیز</title>
                <link>https://virgool.io/@teymorian/%D8%AE%D9%84%D8%A7%D8%B5%D9%87-%D8%A7%DB%8C-%D8%A7%D8%B2-%D8%A8%D8%AE%D8%B4-%D9%85%D8%B9%D9%85%D8%A7%D8%B1%DB%8C-%DA%A9%D8%AA%D8%A7%D8%A8-%D9%85%D8%B9%D9%85%D8%A7%D8%B1%DB%8C-%D8%AA%D9%85%DB%8C%D8%B2-x58jlsfuatpt</link>
                <description>در این ویرگول هر فصل بخش معماری کتاب معماری تمیز رو خلاصه کردم.فصل ۱۵: معماری چیستهمه معماران نرم‌افزار برنامه‌نویس هستن. اینکه با معمار شدن، برنامه‌نویسی کنار گذاشته میشه تا به مسائل سطح بالاتر رسیدگی بشه، یک اشتباه هست. اتفاقا معماران برنامه‌نویس‌های بسیار خوبی هستن. شاید به اندازه دیگر برنامه‌نویسان کد ننویسند اما قطعا اینکارو انجام میدن در حالی که دارن تیم‌ رو هدایت میکنن تا عملکرد بهتری داشته باشن.میتونیم بگیم معمار کسی هست که یک سیستم نرم‌افزاری رو به کامپوننت‌ها تقسیم میکنه و نحوه‌ی ارتباط این کامپوننت‌ها با هم رو مشخص میکنه. هدفمون از معماری کردن یک نرم‌افزار اینه که بتونیم چرخه تولید نرم‌افزار رو ساده کنیم.چرخه تولید شامل این موارد میشه:توسعه و برنامه نویسیدیپلوی یا اجرایی کردن برنامهبخش عملیاتنگه‌داری نرم‌افزاریک معماری خوب آپشن‌های زیادی برای یه مدت طولانی به ما میده که دستمون باز باشه بتونیم تصمیمات مختلف بگیرم حین تولید نرم‌افزار بگیریم.هدف نهایی معماری هم کم کردن هزینه‌های سیستم و بالا بردن بهره‌وری برنامه‌نویسان هست.توسعه نرم‌افزاریک سیستم نرم‌افزاری باید برای تیم توسعه باید به راحتی قابل توسعه باشد. ? ساختار تیم‌های مختلف معماری‌های مختلفی را نیاز دارد. مثلا یک تیم پنج نفره میتونه روی از معماری Monolith استفاده کنه بدون اینکه کامپوننت خاصی تعریف کنه. اما پروژه و تعداد تیم‌ها که بزرگتر میشه نیاز به معماری اهمیت بیشتری پیدا میکنه.دیپلویمثل مورد قبل، دیپلوی هم باید ساده باشه تا موثر باشه. هرچی هزینه دیپلوی پایین‌تر باشه، سیستم کاربردی‌تر هست. معمولا این هزینه اول پروژه در نظر گرفته نمیشه که بعدا دیپلوی کردن رو سخت میکنه. برای مثال معماری میکروسرویس تعداد زیادی سرویس داره که هر کدوم نیاز به برنامه دیپلوی و تنظیمات جداگونه دارن و این دیپلوی کردن رو سخت میکنه.عملیاتمعماری تاثیر بیشتی بر روی توسعه، دیپلوی، و نگه‌داری دارد تا بخش عملیاتی. یک معماری ناکارامد را میتوان با اضافه کردن حافظه و سرور‌های بیشتر بهتر کرد.نگهدارینگهداری پرهزینه‌ترین بخش توسعه نرم‌افزار است. اضافه کردن فیچرهای جدید و یا حذف مشکلات نیازمند منابع زیادی هستن. ریسک و جستوجو در کد برای پیدا کردن محل تغییرات هزینه‌ی زیادی دارن. تقسیم سیستم به کامپوننت‌ها و ایزوله کردنشون از طریق اینترفیس‌ها کمک میکنه تا ریسک‌ها و هزینه رو کم کنیم.فصل ۱۶: استقلالیوزکیسمعماری یک سیستم باید از عملکردهایی که برای آن تعریف شده پشتیبانی کند. یک معماری خوب رفتار سیستم را به خوبی نشان میدهد و توسعه دهندگان باید بتوانند به آسانی رفتار سیستم را تشخیص دهند.عملیاتمعماری نقش حیاتی در مرحله عملیاتی سیستم دارد. باید نیازمندی های غیرعملکردی را برآورده کند. مثلا تعداد درخواست‌های زیادی را در ثانیه پردازش کند. معماری خوب آپشن توسعه سیستم را از طریق ایزوله کردن کامپوننت‌ها برای تغییرات آینده باز میگذارد.توسعهقانون کانووی میگه طراحی سیستم، تصویری از ساختار ارتباط در یک شرکت رو نشون میده. بنابراین یک شرکت با چندین تیم باید معماری داشته باشه که اون تیم‌ها به صورت مستقل بتونن فعالیت کنند. تقسیم کامپوننت‌ها به بخش‌های ایزوله اجازه این کار رو میده.دیپلویمعماری خوب دیپلوی در لحظه رو آسون میکنه و نیازی به تنظیمات دستی یا ساخت فایل نیست. تقسیم سیستم به کامپوننت‌های ایزوله اجازه همچین کاری رو میده (این جمله در همه بخش‌ها نوشته شده?)آپشن‌ها رو باز بگذاریمطراحی معماری خوب سخته چون بیشتر مواقع نیازمندی‌ها، محدودیت‌ها، ساختار تیم‌ها، و محیط نهایی رو کامل نمیدونیم که چطور هستن. اما میتونیم با تقسیم سیستم به کامپوننت‌های ایزوله آپشن‌ها رو تا جای ممکن باز بگذاریم. :)))))) تفکیک لایه‌هامعمار باید تمرکزش رو بگذاره روی تفکیک سیستم به کامپوننت‌هایی که با هم تغییر نمیکنن و کنار هم قرار دادن اجزایی که با هم تغییر میکنن. رابط کاربری و قاعده‌های بیزینس باید به نحوی طراحی بشن که موقع تغییر روی هم تاثیر نگذارن. همچنین جزئیات فنی مثل دیتابیس، کوئری‌ها، و غیره باید از بقیه اجزا سیستم جدا باشه که استقلال سیستم رو حفظ کنه.تفکیک نیازمندی‌هانیازمندی‌ها روشی برای تفکیک سیستم هستند اما هر کدوم با نرخ و دلایل متفاوتی تغییر میکنن. برای اینکه به خوبی تفکیک کنیم، باید ظاهر، قاعده‌های بیزینس، و دیتابیس رو برای هر نیازمندی تفکیک کنیم. اگر اینکارو انجام بدیم میتونیم تغییراتی بدیم تداخلی با کدهای قبلی نداشته باشه.فصل ۱۷ و ۱۸متاسفانه این دو بخش زمان نوشتن با یه بک ساده محو شدن :(فصل ۱۹: پالسی و سطحساخت یک معماری نرم‌افزار شامل جدا کردن پالسی‌ها به بخش‌های کوچکتر و گروه‌بندی اون‌ها بر اساس نحوه تغییر کردنشون میشه. یعنی یک گراف بدون جهت درست کنیم که گره‌ها کامپوننت‌ها هستن و یال‌ها وابستگی بین اون‌ها. جهت یال‌ها از سمت کامپوننت سطح پایین به سطح بالا هست.سطحیکی از روش‌های دسته‌بندی میتونه میزان فاصله‌ای که هر پالسی از ورودی و خروجی سیستم داره باشه.فصل ۲۰: قواعد کسب و کارقواعد بیزینس رویه‌هایی هستند که برای شرکت پول میارن یا حفظ میکنن. قواعد اساسی اون‌هایی هستن که وجود دارن حتی اگر سیستمی نباشه که اون‌ها رو اتوماتیک کنه. این قاعده رو میتونیم برای دیتای اساسی هم تعریف کنیم.موجودیتموجودیت‌ها شی‌هایی درون سیستم هستند که قواعد و دیتا اساسی بیزینس رو شامل میشن. اینترفیس یه موجودیت شامل توابع اساسی میشه که قواعد اصلی بیزینس رو روی دیتا انجام میدن.یوزکیسبعضی از قواعد بیزینس رو نمیشه به صورت دستی انجام داد و حتما باید اتوماتیک انجام بشن. به صورت کلی هم یوزکیس‌ها یه سری قواعد در سطح اپلیکیشن هستن که ارتباط بین موجودیت‌ها و کاربران رو مشخص میکنن.مدل‌های درخواست و جوابیوزکیس‌ها نباید از نحوه انتقال اطلاعات به کاربر مطلع باشن. باید یک درخواست ساده از اطلاعات مورد نیاز گرفته بشه و در جواب فقط اطلاعات مورد نیاز برگردونده بشه. وابسته کردن درخواست و جواب به مدل‌های موجودیت‌ها قواعدی مثل Common Closure و Single Responsibility principle رو نقض میکنه.فصل ۲۱: معماری جیغووقتی به نقشه یه ساختمان نگاه میکنیم بر روی موارد مهمی که در معماری اون ساختمان وجود داره، اشاره میکنه. همینطور که وقتی معماری یک ساختمان رو نگاه میکنیم به ما میگه کاربرد و هدفش چی هست، معماری نرم‌افزا هم به همین صورت باید باشه. یعنی وقتی به ساختار کلی پروژه نگاه میکنیم باید بفهمیم مقصود سیستم چی هست.تم معماریآقای Jacobson میگن که معماری باید یوزکیس‌های سیستم رو شامل بشه و بر اساس فریمورک‌ها ساخته نشه چون اون‌ها یه سری ابزار هستن و نباید معماری رو دیکته کنن.هدف معمارییک معماری خوب بر اساس یوزکیس‌ها نوشته شده و وابسته به فریمورک، ابزار، و محیط خاصی نیست. همچنین تصمیمات درباره موارد جانبی رو به تعویق بندازیم و این کمک میکنه که بعدا بتونیم به راحتی تغییراتی که در ذهنمون هست رو اعمال کنیم.وبوب که یک روشی برای ارائه نرم‌افزا هست نباید معماری رو به ما دیکته کنه و یا محدودیتی برای ما ایجاد کنه. اپلیکیشن باید به نحوی ساخته بشه که بتونیم در محیط ترمینال، وب، و یا دسکتاپ ارائه‌اش کنیم.فریمورکفریمورک‌ها ابزارهای کاربردی و قویی هستن اما نباید بهشون اتکا کنیم و حواسمون به هزینه‌ها باشه. همیشه باید در نظر داشته باشیم که فریمورک جای معماری رو نگیره و تمرکز رو بگذاریم روی یوزکیس‌های اساسی بیزینس.معماری قابل تستاگر تمرکز رو بگذاریم روی یوزکیس‌ها و برنامه رو به خوبی تفکیک کنیم، تست کردن نرم‌افزار کار بسیار راحتی هست و توسعه‌دهندگان میتونن به آسونی هر بخشی رو تست کنن و براش unit test بنویسن.فصل ۲۲: معماری تمیزدر طی سالیان معماری‌های زیادی از جمله hexagonal, DCI, BCE ساخته شدن که همه این‌ها تمرکزشون بر جدا کردن بخش‌های مختلف نرم‌افزار به لایه‌های مختلف هست و حداقل یک لایه مربوط به قواعد بیزینس و یک لایه به اینترفیس‌های سیستم و کاربر اختصاص داده میشه. نتیجه این معماری‌ها عدم وابسته بودن سیستم به فریمورک‌ها و عوامل خارجی هست که سیستم رو قابل تست میکنه و به راحتی میشه تغییرات جدید رو روش اعمال کرد.قاعده وابستگیدر هر لایه از نرم‌افزار باید به لایه درونی با سطح بالاتر وابستگی وجود داشته باشد.فصل ۲۳: ارائه دهنده Presenterلایه ارائه دهنده شبیه پترن Humble Object هست که برای جداسازی رفتارهایی با تست سخت از رفتارهایی با تست آسون بود. یک بخش شامل همه قسمت‌های پیچیده و اساسی میشد و بخش دیگه شامل رفتارهایی که قابل تست هستند.فصل ۲۴: مرزهای جزئیدر بعضی از بخش‌های نرم‌افزار یکسری مرز‌های جزئی تعریف میشه که فکر میکنیم بعدا ممکنه نیاز به اون محدودیت‌ها داریم. اینکار نقض قاعده YAGNI هست اما بعضی وقتا نیازه همچین کاری رو انجام بدیم.قدم آخر رو بیخیالمرز جزئی هم به میزان محدودیت‌های کاملی که بین کامپوننت‌ها میگذاریم نیاز به برنامه نویسی و طراحی داره اما اون بخش مدیریت کامپوننت‌های مختلف رو نداره چون ماژول‌ها رو داخل یک کامپوننت نگهداری میکنیم.فصل ۲۵: لایه‌ها و محدودیت‌هاتوی این فصل یک مثال زده شده از بازی Hunt the Wumpus که میشه اونو توی ۲۰۰ خط نوشت اما براش کلی لایه بندی و مرز کشیده شده و برنامه به شکل مسخره‌ای بزرگ شده. تفسیر این قضیه اینه که مرزها همه جا هستن و ما باید تشخیص بدیم که کجا نیاز میشن و باید اون مرزها رو قرار بدیم.پس به صورت کلی مرزها رو جایی قرار میدیم که هزینه پیاده‌سازی کمتر از هزینه اهمیت ندادن هست.فصل ۲۶: کامپوننت اصلیکامپوننت اصلی جایی هست که اجزای مختلف برنامه رو چسب کاری میکنیم به هم و اونجا برنامه سر هم میشه. حتی هر کامپوننت میتونه Main خودش رو داشته باشه.فصل ۲۷: سرویس‌ها کوچک و بزرگروش‌هایی مثل میکروسرویس اخیرا خیلی معروف شدن و علتش تفکیک بودن سرویس‌ها از هم و مستقل بود در توسعه و دیپلوی هست. اما تبدیل برنامه به سرویس‌ها نمیتونه به تنهایی یه معماری باشه چون بعضی از این سرویس‌ها ممکنه از لحاظ معماری خیلی بزرگ باشن و بعضی‌ها هم یکسری توابع با هزینه زیاد باشن که تبدیل به یه سرویس جدا شدن.پس معماری با محدودیت‌ها و وابستگی‌هایی که از این محدودیت‌ها رد میشن تعریف میشه، نه به وسیله تفکیک فیزیکی سیستم به سرویس‌های کوچکتر.فصل ۲۸: مرز تستتست‌ها هم بخشی از سیستم هستن و باید برای اون‌ها هم مرزهایی تعیین بشه. اگر با تست‌ها جوری برخورد بشه که انگار بخشی از سیستم نیستن، معمولا خیلی حساس میشن و نگهداری اون‌ها خیلی سخت میشه. (تست تراپی)فصل ۲۹: معماری نهفته تمیزافرادی که در حوزه توسعه نرم‌افزار برای سیستم‌های نهفته کار میکنن میتونن از معماری نرم‌افزار در حوزه‌های دیگه الگو بگیرن. اینکه همه کد بخشی از firmware بشه یا اینکه کد فقط برای یک سخت‌افزار قابل اجرا باشه اصلا خوب نیست و باید یک معماری درست حسابی داشته باشه.</description>
                <category>Mehdi Teymorian</category>
                <author>Mehdi Teymorian</author>
                <pubDate>Fri, 20 Oct 2023 16:49:59 +0330</pubDate>
            </item>
                    <item>
                <title>برداشتی از کتاب طاعون نوشته آلبر کامو</title>
                <link>https://virgool.io/@teymorian/the-plague-albert-camus-utdkyevwdjlq</link>
                <description>برای درک بهتر، قبل از مطالعهِ برداشت، پیرامون اصطلاح اگزیستانسیالیسم مطالعه‌ای داشته باشید.در ژانویه سال 1941 آلبر کامو 28 ساله فرانسوی کار خود را بر روی رمانی درباره یک اپیدمی آغاز کرد که توسط حیوانات به انسان منتقل می‌شود و باعث مرگ نیمی از جمعیت یک شهر مدرن شد. اسم این کتاب طاعون بود که در نهایت در سال 1947 منتشر شد و عنوان بهترین ناول اروپایی پس از جنگ را به خود اختصاص داد.نثر کتاب به صورت پراکنده و گیرا، ما را به دل فاجعه‌ای مسری در شهر داستانی‌ی به اسم اوران، نزدیک ساحل الجزایر می‌برد (شخص نویسنده نیز در الجزایر به دنیا امده و بزرگ شده) و ما را به تماشای اتفاقات افتاده از چشم قهرمان داستان، ریو، می‌گذارد. قابل ذکر است که شخصیت کامو در قهرمان داستان طنین‌انداز شده است.نویسنده، کتاب را با توصیفی از شهر اوران آغاز می‌کند و اینطور می‌گوید که اوران، یک شهر معمولی در حواشی ساحل الجزایر است و حال و هوایی بیهوده بر شهر سلطنت می‌کند. ساکنان شهر، مردمی هستند که پول ذهن و چشمان‌شان را گرفته و هویت‌هایشان عوض شده، به صورتی که به ندرت متوجه این می‌شوند که زنده هستند.با یک هیجانی گذرا، وحشت آغاز می‌شود؛ شخصیت اصلی داستان، دکتر ریو، به صورت متواتر به موش‌های مرده برخورد می‌کند و در یک چشم به هم زدن شهر به نحوی مرموزانه‌ای مملو از هزاران موش‌مرده می‌شود. مردم، مقامات را خاطی این می‌دانند که عملکرد سریعی نداشتند. مسئولان موش‌ها از سطح شهر جمع می‌کنند و خیال همه کمی راحت‌تر می‌شود. اما دکتر ریو به شک و گمانه‌زنی‌های خود ادامه می‌دهد و می‌داند که این پایان کار نیست.  در ادامه، بیماری تمام گوشه و نقاط شهر را تصاحب می‌کند و با خود ترس و وحشت را برای مردم به ارمغان می‌آورد.در فلسفه و دیدگاه او، همه ما به صورت نامعلومی در یک طاعون زندگی می‌کنیم. مانند یک مرگ همه‌گیر، خاموش و نامرئی که در هر زمان که بخواهد به سراغ شخصی می‌رود و زندگی که فکر می‌کند استوار است را نابود می‌کند. او بر این باور است که اتفاقات تاریخی که ما آنها را با اسم بلا می‌شناسیم، نمونه‌هایی از یک قانون همیشگی است که ما همیشه نسبت به اتفاقات، حوادث و اشتباهات همنوعان خودمان آسیب‌پذیر هستیم. قرارگرفتن در معرض بیماری مثل طاعون، عمق دیدگاه کامو را درباره بنیان زندگی‌هایمان می‌رساند که همیشه ما بر لبه پوچی زندگی می‌کنیم. اگرچه، این پوچی نباید دلیلی باشد تا ما به آسمان ناامیدی زل بزنیم؛ بلکه باید آن را به درستی درک کنیم و از این پوچی به رستگاری برسیم.همانند مردم شهر اورانِ قبل از طاعون، انسان‌ها زندگی خود را به نحوی می‌گذرانند که انگار ابدی هستند و رفتارهای ساده‌‌لوحانه‌ای مثل سنگ‌دلی، دغدغه لقب، پرهیز از شادی و قدردانی و همچنین تمایل شدید به قضاوت را دارند.مردم اوران که در عصر تلفن‌ و هواپیما‌ها زندگی می‌کنند و خود را متمدن می‌دانند، احتمال نمی‌دهند که از بیماری قدیمی مثل طاعون بمیرند و این مطلب در وجودشان نفوذ کرده اما مرگ با آن‌ها هم عقیده نیست. طاعون یا غیرطاعون، مرگی همیشگی انتظارمان را می‌کشد تا با گذاشتن نقطه‌ای بر انتهای جمله زندگیمان، آن را به یک رویداد بی‌معنی تبدیل کند.در ادامه داستان، مردم سرنوشت خود را حاشا می‌کنند. حتی زمانی که یک چهارم مردم شهر مرده‌اند، همه‌ش به دنبال دلایلی هستند که چرا مرگ به سراغ آن‌ها نرفته است.هدف کتاب ترساندن ما نیست، چرا که ترس یک موقعیت کوتاه جامه است که می‌تواند در نهایت به امنیت منجر شود. اما با حضور همشگی مرگ، هیچگونه امنیتی وجود ندارد و به همین دلیل است که کامو عقیده دارد هرکس باید به دیگری علاقه بورزد و بدون درنظرگرفتن امیدواری یا ناامیدی برای بهبود رنج تلاش‌کند.در نهایت قهرمان کامو، به این سوال که چه چیزی باعث می‌شود که زندگی قابل تحمل شود، اینطور پاسخ می‌دهد که من رقصیدن، عشق، طبیعت، بوی گل‌ها و رنگ‌های غروب را ستایش می‌کنم.بعد از یک سال، طاعون از شهر اوران سایه برمی‌دارد و روزمرگی‌ به زندگی مردم باز می‌گردد. اما کامو معتقد است که بلایی یا حادثه‌ای مثل طاعون همیشه در کمین است و آماده فرستادن خطابه اعدام برای شادی‌هایمان است.حال، می‌بینیم که در سال 2020 مرگی که کامو از آن صحبت میکرد، کاسه صبرش لبریز شده و با داسی از جنس یک اپیدمی، مشتاقانه دارد جان هزاران نفر را میگیرد. زمانی که بخش‌های متفاوت کتاب را مطالعه می‌کنید، اتفاقات اکنونِ دوره اپیدمیِ کرونا، با شباهت بالا درون کتاب یافت می‌شود؛ که انگار کامو آن‌ها را پیش‌بینی کرده‌باشد؛ و این هنر کامو را نشان می‌دهد که این کتاب با اینکه یک واقعه تاریخی را شرح داده اما می‌تواند زمان حال و حتی آینده را نیز در بر بگیرد.جملاتی از کتابراه ساده برای آشنایی با یک شهر این است که انسان بداند مردم آن چگونه کار می‌کنند، چگونه عشق می‌ورزند و چگونه می‌میرند.یگانه راه مبارزه با طاعون شرافت است.فهمیده‌ام همه بدبختی انسان‌ها از این است که به زبان صریح و روشن حرف نمی‌زنند. از این رو تصمیم گرفته‌ام که صریح حرف بزنم و صریح رفتار کنم تا در راه درست بیفتم.گمان می‌کنم که من قهرمانی و تقدس را زیاد نمی‌پسندم. آنچه برایم جالب است انسان بودن است.</description>
                <category>Mehdi Teymorian</category>
                <author>Mehdi Teymorian</author>
                <pubDate>Sun, 26 Apr 2020 22:38:05 +0430</pubDate>
            </item>
                    <item>
                <title>نصب جاوا و اجرای یک برنامه ساده در CMD</title>
                <link>https://virgool.io/javacup/install-java-v8sxtdc1ywnn</link>
                <description>در این پست روند نصب جاوا و تنظیمات مرتبط با آن رو بررسی میکنیم. همچنین برنامه‌ای رو در command prompt به وسیله دستورات javac و java اجرا میکنیم.این آموزش مرتبط با Windows می‌باشد.نصب جاوااز طریق یکی از سایت‌های soft98 یا سایت رسمی جاوا، نسخه مورد نیاز خود را دانلود‌کنید.از طریق فایل exe آن را نصب کنید و منتظر بمانید تا نصب آن به اتمام برسد.نصب جاوابعد از اتمام، درون سرچ ویندوز کلمه Environment Variables را سرچ کنید و بر روی Edit the system environment variables کلیک کنید.Searchbarدر پنجره System properties بر روی دکمه Environment Variables کلیک کنید.System propertiesدر پنجره باز شده در قسمت System variables به دنبال Path بگردید. سپس بر روی آن دابل‌-کلیک‌کنید.Environment variablesدر پنجره جدید بر روی دکمه New کلیک کنید و در ردیفی که به تازگی اضافه شده، آدرس پوشه bin جاوا خود را درون آن قرار‌دهید. سپس تغییرات را ذخیره کنید.معمولا جاوا در آدرس زیر قرار‌دارد مگر اینکه هنگام نصب، محل نصب آن را تغییر داده باشید. C:\Program Files\Java\jdk-[VERSION]\binEdit environment variablesاجرای یک برنامه جاوایک فایل با پسوند java بسازید. در مثال زیر اسم فایل Program.java می‌باشد. کد زیر را درون فایل Program.java کپی کنید.public class Program{
	public static void main(String[] args) {
		System.out.println(&amp;quotHello world!&amp;quot);
	}
}ترمینال(cmd) را جایی که فایل برنامه شما قرار‌دارد، باز‌کنید. سپس دستورات زیر را درون cmd به ترتیب اجرا‌کنید.javac Program.java
java Programاجرا‌کردن برنامه جاوانکاتی که باید رعایت کنید.اسم فایل و اسم کلاس باید یکسان باشند.به کوچک و بزرگی حروف دقت‌کنید. جاوا زبانی حساس به کوچک و بزرگی حروف می‌باشد.دستور اول(javac) برای کامپایل کردن و تبدیل فایل به بایت‌کد استفاده می‌شود و بعد از اجرای آن یک فایل با نام فایل اصلی با پسوند class. ساخته می‌شود.دستور دوم(java) برای اجرا‌کردن برنامه استفاده‌میشود. دقت‌شود هنگام استفاده از این دستور اسم فایل باید بدون پسوند استفاده شود.</description>
                <category>Mehdi Teymorian</category>
                <author>Mehdi Teymorian</author>
                <pubDate>Tue, 11 Feb 2020 14:20:29 +0330</pubDate>
            </item>
            </channel>
</rss>