🖼 تصاویری از دورهمی 1402 آکادمی.
از همه عزیزانی که زحمت کشیدند و تشریف آوردند تشکر میکنم و امیدوارم که به زودی فرصت ملاقات و گفتوگوی مجدد داشته باشیم.
از همه عزیزانی که زحمت کشیدند و تشریف آوردند تشکر میکنم و امیدوارم که به زودی فرصت ملاقات و گفتوگوی مجدد داشته باشیم.
« کارگاه Refactoring پروژه های Legacy بزرگ »
یکی از بزرگترین مشکلات دوره های Refactoring، ساده بودن مثال ها در مقایسه با پیچیدگی های پروژه های واقعی است. به همین دلیل بسیاری از دوره های این حوزه نمی توانند آورده چندانی برای مخاطب داشته باشند. برای حل این مشکل، راه حل جدیدی را برای برگزاری این برنامه آموزشی در نظر گرفته ایم. در این کارگاه، هر دانشجو می تواند پروژه خود را بر روی کامپیوتر شخصی خود به همراه آورده و مباحث و تکنیک ها را پس از یادگیری بر روی آن اعمال کند. همچنین از آنجا که دانشجو با Domain پروژه خود آشناست، زمان یادگیری ماهیت پروژه به حداقل می رسد و دانشجو فرصت این را دارد که به صورت کاملا عملی، بهبود ساختار و Refactor یک پروژه واقعی را تجربه کند. این کارگاه به صورت فشرده و در 3 روز برگزار می شود.
▪️روز اول - Analysis & Planning
سوال کلیدی: «چه چیزی را باید Refactor کنم؟ از کجا باید Refactoring را شروع کنم؟»
در روز اول به بررسی تکنیک ها، روش ها و رویکردهای شناسایی مشکلات و نقاط کلیدی پروژه جهت Refactoring می پردازیم. در این جلسه با مباحث Code Analysis در دو قالب Behavioral & Static آشنا می شویم.
▪️روز دوم – Test
سوال کلیدی: «چطور برای پروژه Legacy تست بنویسم تا Refactoring امنی داشته باشم، در حالی که پروژه تست پذیر نیست؟»
در روز دوم بر روی نحوه تست نویسی در پروژه های Legacy و ساخت Safety net جهت اعمال Refactoring به 3 روش Example-Based Testing ، Property-Based Testing و Approval Testing خواهیم پرداخت.
▪️روز سوم – Refactoring Techniques
سوال کلیدی: «چطور یک پروژه Legacy بزرگ را بدون متوقف کردن جریان توسعه، در دراز مدت و به صورت Iterative بهبود بدهم؟»
در روز آخر به بررسی تکنیک های Long-Term Refactoring و نحوه اعمال تغییرات ساختاری بزرگ در سطوح مختلف طراحی خواهیم پرداخت.
▪️ قالب: حضوری و فشرده – 3 روز کامل
▪️تاریخ و ساعت: روزهای 24 -25 - 26 آبان – از ساعت 9 تا 17
▪️محدوده غرب تهران
▪️ظرفیت محدود (20 نفر)
▪️به همراه ناهار و پذیرایی
جهت ثبت نام در این برنامه آموزشی، لطفا به اکانت @AhmadiAcademySupport پیام ارسال بفرمایید.
یکی از بزرگترین مشکلات دوره های Refactoring، ساده بودن مثال ها در مقایسه با پیچیدگی های پروژه های واقعی است. به همین دلیل بسیاری از دوره های این حوزه نمی توانند آورده چندانی برای مخاطب داشته باشند. برای حل این مشکل، راه حل جدیدی را برای برگزاری این برنامه آموزشی در نظر گرفته ایم. در این کارگاه، هر دانشجو می تواند پروژه خود را بر روی کامپیوتر شخصی خود به همراه آورده و مباحث و تکنیک ها را پس از یادگیری بر روی آن اعمال کند. همچنین از آنجا که دانشجو با Domain پروژه خود آشناست، زمان یادگیری ماهیت پروژه به حداقل می رسد و دانشجو فرصت این را دارد که به صورت کاملا عملی، بهبود ساختار و Refactor یک پروژه واقعی را تجربه کند. این کارگاه به صورت فشرده و در 3 روز برگزار می شود.
▪️روز اول - Analysis & Planning
سوال کلیدی: «چه چیزی را باید Refactor کنم؟ از کجا باید Refactoring را شروع کنم؟»
در روز اول به بررسی تکنیک ها، روش ها و رویکردهای شناسایی مشکلات و نقاط کلیدی پروژه جهت Refactoring می پردازیم. در این جلسه با مباحث Code Analysis در دو قالب Behavioral & Static آشنا می شویم.
▪️روز دوم – Test
سوال کلیدی: «چطور برای پروژه Legacy تست بنویسم تا Refactoring امنی داشته باشم، در حالی که پروژه تست پذیر نیست؟»
در روز دوم بر روی نحوه تست نویسی در پروژه های Legacy و ساخت Safety net جهت اعمال Refactoring به 3 روش Example-Based Testing ، Property-Based Testing و Approval Testing خواهیم پرداخت.
▪️روز سوم – Refactoring Techniques
سوال کلیدی: «چطور یک پروژه Legacy بزرگ را بدون متوقف کردن جریان توسعه، در دراز مدت و به صورت Iterative بهبود بدهم؟»
در روز آخر به بررسی تکنیک های Long-Term Refactoring و نحوه اعمال تغییرات ساختاری بزرگ در سطوح مختلف طراحی خواهیم پرداخت.
▪️ قالب: حضوری و فشرده – 3 روز کامل
▪️تاریخ و ساعت: روزهای 24 -25 - 26 آبان – از ساعت 9 تا 17
▪️محدوده غرب تهران
▪️ظرفیت محدود (20 نفر)
▪️به همراه ناهار و پذیرایی
جهت ثبت نام در این برنامه آموزشی، لطفا به اکانت @AhmadiAcademySupport پیام ارسال بفرمایید.
آکادمی طراحی و معماری نرم افزار هادی احمدی
Photo
« کارگاه Practicing Domain-Driven Design »
قصد داریم یک کارگاه آموزشی جهت تمرین کردن DDD برگزار کنیم. این کارگاه به صورت یک کار تیمی و گروهی، به صورت حضوری و عملی برگزار می شود. در این کارگاه ما با مسالهای شبه-واقعی روبرو هستیم و فردی به عنوان Domain Expert برای انتقال مساله در کنار ما خواهد بود. افراد حاضر در کارگاه باید در قالب تیمهای مختلف، مسیر طراحی را با رویکرد Design Driven-Domain طی کنند.این کارگاه به صورت فشرده و در قالب 3 روز کامل برگزار می شود. برنامه روزها به صورت زیر می باشد:
▪️روز اول Knowledge Crunching & Collaborative Modeling
در روز اول به طور دسته جمعی به صحبت، تحلیل، کاوش، جستجو و اکتشاف در حوزه مساله میپردازیم. سعی میکنیم مفاهیم را شناسایی و درک و نقاط ابهام را رفع کنیم و به عمق قابل قبولی از دانش در مورد مساله دست پیدا کنیم. در این روز دوست خوبم مسعود بهرامی هم به عنوان منتور حوزه Collaborative Modeling در کنار ما حضور خواهند داشت.
▪️روز دوم - Strategic Design
در روز دوم به صحبت و کاوش در مورد ابعاد راهبردی و استراتژیک مساله میپردازیم. در مورد استراتژی کسب و کار و زنجیره ارزش صحبت میکنیم، Domain ها و Sub-Domain ها را شناسایی میکنیم و نهایتا به طراحی Bounded Context ها و ارتباطات بین آنها میپردازیم.
▪️روز سوم - Tactical Design
در روز سوم بر روی Modeling و طراحی Building Block ها در هر BC تمرکز میکنیم. سپس بسته به معماری انتخاب شده برای هر BC، به طراحی و پیاده سازی آن مشغول میشویم.
🔹فرمت: حضوری و فشرده - 3 روز کامل
🔹تاریخ و ساعت: روزهای 20-21-22 دی ماه – از ساعت 9 تا 17
🔹محدوده غرب تهران
🔹ظرفیت محدود (16 نفر)
🔹به همراه ناهار و پذیرایی
جهت ثبت نام در این برنامه آموزشی، لطفا به اکانت @AhmadiAcademySupport پیام ارسال بفرمایید.
قصد داریم یک کارگاه آموزشی جهت تمرین کردن DDD برگزار کنیم. این کارگاه به صورت یک کار تیمی و گروهی، به صورت حضوری و عملی برگزار می شود. در این کارگاه ما با مسالهای شبه-واقعی روبرو هستیم و فردی به عنوان Domain Expert برای انتقال مساله در کنار ما خواهد بود. افراد حاضر در کارگاه باید در قالب تیمهای مختلف، مسیر طراحی را با رویکرد Design Driven-Domain طی کنند.این کارگاه به صورت فشرده و در قالب 3 روز کامل برگزار می شود. برنامه روزها به صورت زیر می باشد:
▪️روز اول Knowledge Crunching & Collaborative Modeling
در روز اول به طور دسته جمعی به صحبت، تحلیل، کاوش، جستجو و اکتشاف در حوزه مساله میپردازیم. سعی میکنیم مفاهیم را شناسایی و درک و نقاط ابهام را رفع کنیم و به عمق قابل قبولی از دانش در مورد مساله دست پیدا کنیم. در این روز دوست خوبم مسعود بهرامی هم به عنوان منتور حوزه Collaborative Modeling در کنار ما حضور خواهند داشت.
▪️روز دوم - Strategic Design
در روز دوم به صحبت و کاوش در مورد ابعاد راهبردی و استراتژیک مساله میپردازیم. در مورد استراتژی کسب و کار و زنجیره ارزش صحبت میکنیم، Domain ها و Sub-Domain ها را شناسایی میکنیم و نهایتا به طراحی Bounded Context ها و ارتباطات بین آنها میپردازیم.
▪️روز سوم - Tactical Design
در روز سوم بر روی Modeling و طراحی Building Block ها در هر BC تمرکز میکنیم. سپس بسته به معماری انتخاب شده برای هر BC، به طراحی و پیاده سازی آن مشغول میشویم.
🔹فرمت: حضوری و فشرده - 3 روز کامل
🔹تاریخ و ساعت: روزهای 20-21-22 دی ماه – از ساعت 9 تا 17
🔹محدوده غرب تهران
🔹ظرفیت محدود (16 نفر)
🔹به همراه ناهار و پذیرایی
جهت ثبت نام در این برنامه آموزشی، لطفا به اکانت @AhmadiAcademySupport پیام ارسال بفرمایید.
🔹مشخصات رویداد
قالب: رویداد حضوری
مکان: محدوده غرب تهران
تاریخ و زمان: 10 اسفند – از ساعت 14:30 تا 19:00
لینک ثبت نام:
https://evnd.co/lHKYR
قالب: رویداد حضوری
مکان: محدوده غرب تهران
تاریخ و زمان: 10 اسفند – از ساعت 14:30 تا 19:00
لینک ثبت نام:
https://evnd.co/lHKYR
آکادمی طراحی و معماری نرم افزار هادی احمدی
🔹مشخصات رویداد قالب: رویداد حضوری مکان: محدوده غرب تهران تاریخ و زمان: 10 اسفند – از ساعت 14:30 تا 19:00 لینک ثبت نام: https://evnd.co/lHKYR
بعد از دورهمی امسال آکادمی، قرار گذاشتیم که شرایطی را فراهم کنیم که رویدادها و برنامههای حضوری بیشتری داشته باشیم. با کمک دوستان برای اسفند ماه رویدادی را برنامهریزی کردیم و سعی کردیم تا ترکیبی از «انتقال دانش و تجربه»، «بحث و تحلیل» و «شبکه سازی» باشد.
برنامه با ارائهای از دوست عزیزم محمد رشیدی، با عنوان «تصمیمهای حیاتی» آغاز میشود. هدف از این ارائه بررسی برخی از مدلهای ذهنی و تاثیر آنها بر فرآیندهای تصمیمگیری در مهندسی نرمافزار است. در ادامه، ارائهی دیگری از سهیل کرمی عزیز با عنوان «انتزاع و هزینه» خواهیم داشت که تحلیلی بر نقش انتزاع در طراحی و نگهداری نرمافزار است. این ارائه قصد دارد تا نشان دهد که چگونه با استفاده از انتزاع صحیح در مساله میتوان سادهتر با تغییرات همگام شد و به نیازهای جدید پاسخ داد. در انتها با دوست خوبم ابراهیم نبیئی، گفتگویی در مورد مساله «بازدهی تیمهای نرمافزاری» خواهیم داشت و در مورد این مساله صحبت خواهیم کرد که چرا بسیاری از کسبوکارها از بازدهی تیمهای فنی خود راضی نیستند. چه مشکلاتی در مسیر بازدهی وجود دارد و این مشکلات عمدتا ریشه در کجا دارد و چگونه قابل بهبود است.
در این بین هم حدودا 70 دقیقهای فرصت برای ارتباط، تعامل، شبکهسازی و استفاده از تجربیات یکدیگر داریم. ظرفیت رویداد حدود 150 نفر است و مهلت ثبت نام آن تا « 7 اسفند» است.
برنامه با ارائهای از دوست عزیزم محمد رشیدی، با عنوان «تصمیمهای حیاتی» آغاز میشود. هدف از این ارائه بررسی برخی از مدلهای ذهنی و تاثیر آنها بر فرآیندهای تصمیمگیری در مهندسی نرمافزار است. در ادامه، ارائهی دیگری از سهیل کرمی عزیز با عنوان «انتزاع و هزینه» خواهیم داشت که تحلیلی بر نقش انتزاع در طراحی و نگهداری نرمافزار است. این ارائه قصد دارد تا نشان دهد که چگونه با استفاده از انتزاع صحیح در مساله میتوان سادهتر با تغییرات همگام شد و به نیازهای جدید پاسخ داد. در انتها با دوست خوبم ابراهیم نبیئی، گفتگویی در مورد مساله «بازدهی تیمهای نرمافزاری» خواهیم داشت و در مورد این مساله صحبت خواهیم کرد که چرا بسیاری از کسبوکارها از بازدهی تیمهای فنی خود راضی نیستند. چه مشکلاتی در مسیر بازدهی وجود دارد و این مشکلات عمدتا ریشه در کجا دارد و چگونه قابل بهبود است.
در این بین هم حدودا 70 دقیقهای فرصت برای ارتباط، تعامل، شبکهسازی و استفاده از تجربیات یکدیگر داریم. ظرفیت رویداد حدود 150 نفر است و مهلت ثبت نام آن تا « 7 اسفند» است.
آکادمی طراحی و معماری نرم افزار هادی احمدی
Photo
طراحی سیستمهای توزیعشده همواره با چالشهای بسیاری همراه است. این چالشها در ابعاد مختلفی از طراحی، پیادهسازی، تست، استقرار، نگهداری، افراد و تیمها و ... بروز پیدا میکنند. این کارگاه آموزشی با تمرکز بر چندین حوزه کلیدی از این مسائل، تلاش دارد تا فضایی عملی برای تمرین و یادگیری طراحی موثر مایکروسرویسها ارائه کند.
مواردی که در این کارگاه آموزشی پوشش داده میشوند عبارتند از:
▪️طراحی سرویسها
طراحی سرویسها، شناسایی مرز بین آنها و تفکیک آنها از یکدیگر را میتوان یکی از اساسیترین موضوعات طراحی سیستمهای توزیع شده مبتنی بر معماری Microservices دانست. موضوعاتی که در این بخش مورد بحث و تمرین قرار میگیرند عبارتند از:
▫️تحلیل Sub-Domain های موجود در مساله
▫️طراحی سرویسها و Boundary ها
▫️روابط (Relations) و ارتباطات (Communications) بین سرویسها
▫️مساله Adaptability سرویسها با استراتژیهای کلان کسبوکار
▫️مساله Evolvability و مطالعه و ارزیابی تکاملپذیری معماری
▫️استقلال و Autonomy سرویسها
▫️وابستگی و Coupling بین سرویسها
▫️مساله مقیاس و مشخصههای Scalability و Elasticity در طراحی سرویسها
▫️برخورد با Failure و مساله Resiliency
▫️موضوع Service Composability و ترکیب سرویسها
▪️ارتباط بین سرویسها
یکی دیگر از حوزههای فعالیت این کارگاه، ارتباط بین سرویسها و روشهای مختلف Integrate کردن سرویسها با تمرکز بر Event-Driven Architecture است که شامل موارد زیر میشود:
▫️طراحی Integration بین سرویسها در سناریوهای مختلف
▫️استفاده از الگوهای مختلف Messaging (مانند Splitter، Aggregator و ...)
▫️طراحی Saga ها و Process Manager ها
▫️مساله Eventual Consistency و روشهای مدیریت آن
❌ این کارگاه صرفا بر روی دانش و مهارت شرکتکنندگان در حوزه «طراحی سرویسها و ارتباط و Integration بین آنها» تمرکز خواهد کرد، اما این حوزه به تنهایی کافی نخواهد بود. استفاده موثر از معماری Microservices، نیازمندی دانش و مهارت در حوزههای متفاوتی است که پرداختن به بسیاری از آنها جزء اهداف این کارگاه نخواهد بود. برای مثال: حوزه تست، حوزه Deployment و Delivery، مباحث Containerization، طراحی API ها، مباحث زیرساختی مانند Distributed Logging، Tracing و ... .
🔹فرمت: به صورت حضوری و عملی
📅 زمان و تاریخ: روزهای 5-6-7 اردیبهشت از ساعت 8 تا 17
📖 پیشنیاز: این کارگاه برای افرادی طراحی شده است که با مفاهیم بنیادین طراحی و معماری سیستمهای توزیعشده آشنا بوده و به دنبال کسب تجربه عملی و افزایش مهارت و دانش خود در این حوزه هستند. لذا ثبتنام در کارگاه بدون مطالعه و آشنایی قبلی، ابدا توصیه نمیشود. پیشنهاد میشود در صورت عدم اطمینان، قبل از قطعی کردن ثبتنام با مدرس دوره مشورت کنید.
لطفا جهت ثبتنام و دریافت اطلاعات بیشتر، با شماره 09923434009 تماس گرفته و یا به اکانت تلگرام @AhmadiAcademySupport پیام ارسال بفرمایید.
مواردی که در این کارگاه آموزشی پوشش داده میشوند عبارتند از:
▪️طراحی سرویسها
طراحی سرویسها، شناسایی مرز بین آنها و تفکیک آنها از یکدیگر را میتوان یکی از اساسیترین موضوعات طراحی سیستمهای توزیع شده مبتنی بر معماری Microservices دانست. موضوعاتی که در این بخش مورد بحث و تمرین قرار میگیرند عبارتند از:
▫️تحلیل Sub-Domain های موجود در مساله
▫️طراحی سرویسها و Boundary ها
▫️روابط (Relations) و ارتباطات (Communications) بین سرویسها
▫️مساله Adaptability سرویسها با استراتژیهای کلان کسبوکار
▫️مساله Evolvability و مطالعه و ارزیابی تکاملپذیری معماری
▫️استقلال و Autonomy سرویسها
▫️وابستگی و Coupling بین سرویسها
▫️مساله مقیاس و مشخصههای Scalability و Elasticity در طراحی سرویسها
▫️برخورد با Failure و مساله Resiliency
▫️موضوع Service Composability و ترکیب سرویسها
▪️ارتباط بین سرویسها
یکی دیگر از حوزههای فعالیت این کارگاه، ارتباط بین سرویسها و روشهای مختلف Integrate کردن سرویسها با تمرکز بر Event-Driven Architecture است که شامل موارد زیر میشود:
▫️طراحی Integration بین سرویسها در سناریوهای مختلف
▫️استفاده از الگوهای مختلف Messaging (مانند Splitter، Aggregator و ...)
▫️طراحی Saga ها و Process Manager ها
▫️مساله Eventual Consistency و روشهای مدیریت آن
❌ این کارگاه صرفا بر روی دانش و مهارت شرکتکنندگان در حوزه «طراحی سرویسها و ارتباط و Integration بین آنها» تمرکز خواهد کرد، اما این حوزه به تنهایی کافی نخواهد بود. استفاده موثر از معماری Microservices، نیازمندی دانش و مهارت در حوزههای متفاوتی است که پرداختن به بسیاری از آنها جزء اهداف این کارگاه نخواهد بود. برای مثال: حوزه تست، حوزه Deployment و Delivery، مباحث Containerization، طراحی API ها، مباحث زیرساختی مانند Distributed Logging، Tracing و ... .
🔹فرمت: به صورت حضوری و عملی
📅 زمان و تاریخ: روزهای 5-6-7 اردیبهشت از ساعت 8 تا 17
📖 پیشنیاز: این کارگاه برای افرادی طراحی شده است که با مفاهیم بنیادین طراحی و معماری سیستمهای توزیعشده آشنا بوده و به دنبال کسب تجربه عملی و افزایش مهارت و دانش خود در این حوزه هستند. لذا ثبتنام در کارگاه بدون مطالعه و آشنایی قبلی، ابدا توصیه نمیشود. پیشنهاد میشود در صورت عدم اطمینان، قبل از قطعی کردن ثبتنام با مدرس دوره مشورت کنید.
لطفا جهت ثبتنام و دریافت اطلاعات بیشتر، با شماره 09923434009 تماس گرفته و یا به اکانت تلگرام @AhmadiAcademySupport پیام ارسال بفرمایید.
Forwarded from انجمن DDD ایران
انجمن DDD ایران همراستا با مسئولیت خود جهت بسترسازی گفتگو و اشتراک تجربهی علاقهمندان به DDD، میزبان Vlad Khononov شده است.
میهمان این گفتگو، نویسنده کتاب Learning Domain-Driven Design است. کتابی ساده و روان که برای علاقهمندان به موضوع DDD محتوای ارزشمندی فراهم کرده است.
برای آشنایی بیشتر با Vlad اینجا را ببینید:
https://vladikk.com/page/about/
میزبان وبینار: هادی احمدی
زمان برگزاری: پنجشنبه ۱۳ اردیبهشت - ساعت ۱۸:۳۰
برای ثبتنام به لینک زیر مراجعه کنید:
https://evand.com/events/chat-with-vlad-khononov
شرکت در وبینار رایگان است.
- انجمن DDD ایران
@DDD_IRAN
میهمان این گفتگو، نویسنده کتاب Learning Domain-Driven Design است. کتابی ساده و روان که برای علاقهمندان به موضوع DDD محتوای ارزشمندی فراهم کرده است.
برای آشنایی بیشتر با Vlad اینجا را ببینید:
https://vladikk.com/page/about/
میزبان وبینار: هادی احمدی
زمان برگزاری: پنجشنبه ۱۳ اردیبهشت - ساعت ۱۸:۳۰
برای ثبتنام به لینک زیر مراجعه کنید:
https://evand.com/events/chat-with-vlad-khononov
شرکت در وبینار رایگان است.
- انجمن DDD ایران
@DDD_IRAN
Forwarded from انجمن DDD ایران
انجمن DDD ایران
Photo
بهتر است که ارتشی کوچک از نیروهای قوی و گرانقیمت بسازم و یا ارتشی بزرگ از نیروهای ضعیف و ارزان؟ بازی تدافعی و تمرکز بر اقتصاد خود مهمتر است و یا بازی تهاجمی و ضربه به اقتصاد حریف؟ تسلط بر نقاط استراتژیک و کنترل نقشه مهمتر است یا تمرکز بر پیشرفتهای فناوری؟ تجارت و تبادل با بازیکنان دیگر منطقیتر است و یا انحصار و تحریم بازیکنان دیگر؟
اگر اهل بازیهای استراتژیک باشید (چه Board Game و چه Video Game) احتمالا در حین بازی به طور مداوم با این نوع سوالات روبرو خواهید شد. بازیهای استراتژیک نیازمند تصمیمگیری مداوم هستند. تصمیمگیری مؤثر در این بازیها نیازمند تحلیل دقیقی از Context (شرایط خود بازیکن، حریفان، امتیازها، نقشه و ...)، شناسایی گزینهها، ارزیابی و Trade-off گزینهها، توسعه استراتژی و به کارگیری تاکتیکهای مناسب در راستای آن استراتژیهاست. بدون در نظر گرفتن شرایط بازی، احتمالا نتوان اصولی را برای این نوع بازیها ارائه کرد، اما میتوان پیشنهادات، نکات، راهنماییها و رهیافتهایی را ارائه کرد که سطح بازی بازیکن را ارتقا داده و او را به برنده شدن نزدیکتر کند.
برای مثال در بازی شطرنج:
▪️در ابتدای بازی، تمرکز را بر توسعه مهرههای خود قرار دهید.
▪️تلاش کنید تا هرچه بیشتر مرکز صفحه بازی را کنترل کنید.
▪️مهره وزیر خود را زود بازی نکنید.
یادگیری و شروع بازیهای استراتژیک آسان اما برنده شدن در آنها دشوار است. پیچیدگی، عدم قطعیت و جنبههای ناشناخته بازی، بازیکن را مجبور میسازد که بر مجموعهای از رهیافتها (Heuristics) برای تصمیمگیری تکیه کند. این رهیافتها، برنده شدن بازیکن را تضمین نمیکنند و کاملا به شرایط و Context و نحوه به کارگیری آنها وابسته هستند. حتی ممکن است بعضا با هم در تضاد باشند. اما در Context صحیح، توصیههای درستی هستند و میتوانند باعث برنده شدن و یا حداقل تسهیل برد بازیکن شوند.
اگر تجربه فعالیت در حوزه مهندسی نرمافزار را داشته باشید، به سرعت متوجه میشوید که این وضعیت شباهت بسیاری با تصمیمگیری در این فضا دارد. به بیان کاملتر، Heuristicها را میتوان یکی از اصلیترین اجزای هر رشته مهندسی دانست. Billy Vaughn Koen در کتاب The Discussion of the Method طراحی مهندسی (Engineering Design) یا روش مهندسی (Engineering Method) را اینگونه تعریف میکند:
در این کارگاه آموزشی قصد داریم تا با کمک گرفتن از Board Gameهای استراتژیک، مهارتهای شناخت، توسعه و بهکارگیری Heuristicها را در علاقهمندان به طراحی و معماری نرمافزار تقویت کنیم. در این کارگاه با مفهوم Heuristic آشنا میشویم، بازیهای متفاوتی را تجربه میکنیم، آنها را تحلیل میکنیم و سعی میکنیم تا شبکهای منسجم از Heuristicها را طراحی کرده و آنها را در قالب یک Patterns Language مستند کنیم.
🔹 فرمت: به صورت حضوری - در قالب ارائه آموزشی و انجام عملی بازیها
🔹 تاریخ و زمان: 1 تیر - ساعت 9 تا 18
🔹 مربی: هادی احمدی
🔹 محل برگزاری: کارخانه نوآوری آزادی
🔹 میزبان: شرکت سفرهای علی بابا - قاف کامیونیتی
🔹 مخاطبین کارگاه: برنامهنویسان ارشد، طراحان و معماران نرمافزار
🔹 پیشنیاز: تجربه قبلی در Board Game های استراتژیک
🔹هزینه: این کارگاه یک برنامه آموزشی رایگان بوده و تنها مبلغ حداقلی بابت پوشش هزینههای جاری و خرید بازیها از شرکتکنندگان دریافت میشود.
🔹 ظرفیت: 24 نفر
🔹 مهلت ثبتنام: 18 خرداد
🔹 لینک پیش ثبتنام:
https://survey.porsline.ir/s/kwWEsAT
❗️به علت محدودیت ظرفیت، متاسفانه ناچار هستیم از لیست افراد علاقهمند تعداد محدودی را انتخاب کنیم. معیار انتخاب افراد تجربه آنها در Board Game های استراتژیک و همچنین انگیزه آنها برای شرکت در این کارگاه آموزشی خواهد بود. بنابراین پیشاپیش از عزیزانی که در لیست شرکتکنندگان قرار نمیگیرند، عذرخواهی میکنیم.
لیست افراد انتخاب شده تا تاریخ 25 خرداد اعلام خواهد شد.
اگر اهل بازیهای استراتژیک باشید (چه Board Game و چه Video Game) احتمالا در حین بازی به طور مداوم با این نوع سوالات روبرو خواهید شد. بازیهای استراتژیک نیازمند تصمیمگیری مداوم هستند. تصمیمگیری مؤثر در این بازیها نیازمند تحلیل دقیقی از Context (شرایط خود بازیکن، حریفان، امتیازها، نقشه و ...)، شناسایی گزینهها، ارزیابی و Trade-off گزینهها، توسعه استراتژی و به کارگیری تاکتیکهای مناسب در راستای آن استراتژیهاست. بدون در نظر گرفتن شرایط بازی، احتمالا نتوان اصولی را برای این نوع بازیها ارائه کرد، اما میتوان پیشنهادات، نکات، راهنماییها و رهیافتهایی را ارائه کرد که سطح بازی بازیکن را ارتقا داده و او را به برنده شدن نزدیکتر کند.
برای مثال در بازی شطرنج:
▪️در ابتدای بازی، تمرکز را بر توسعه مهرههای خود قرار دهید.
▪️تلاش کنید تا هرچه بیشتر مرکز صفحه بازی را کنترل کنید.
▪️مهره وزیر خود را زود بازی نکنید.
یادگیری و شروع بازیهای استراتژیک آسان اما برنده شدن در آنها دشوار است. پیچیدگی، عدم قطعیت و جنبههای ناشناخته بازی، بازیکن را مجبور میسازد که بر مجموعهای از رهیافتها (Heuristics) برای تصمیمگیری تکیه کند. این رهیافتها، برنده شدن بازیکن را تضمین نمیکنند و کاملا به شرایط و Context و نحوه به کارگیری آنها وابسته هستند. حتی ممکن است بعضا با هم در تضاد باشند. اما در Context صحیح، توصیههای درستی هستند و میتوانند باعث برنده شدن و یا حداقل تسهیل برد بازیکن شوند.
اگر تجربه فعالیت در حوزه مهندسی نرمافزار را داشته باشید، به سرعت متوجه میشوید که این وضعیت شباهت بسیاری با تصمیمگیری در این فضا دارد. به بیان کاملتر، Heuristicها را میتوان یکی از اصلیترین اجزای هر رشته مهندسی دانست. Billy Vaughn Koen در کتاب The Discussion of the Method طراحی مهندسی (Engineering Design) یا روش مهندسی (Engineering Method) را اینگونه تعریف میکند:
«استفاده از Heuristic ها جهت اعمال بهترین تغییر در محیط و وضعیتی ناشناخته با منابع محدود»
در این کارگاه آموزشی قصد داریم تا با کمک گرفتن از Board Gameهای استراتژیک، مهارتهای شناخت، توسعه و بهکارگیری Heuristicها را در علاقهمندان به طراحی و معماری نرمافزار تقویت کنیم. در این کارگاه با مفهوم Heuristic آشنا میشویم، بازیهای متفاوتی را تجربه میکنیم، آنها را تحلیل میکنیم و سعی میکنیم تا شبکهای منسجم از Heuristicها را طراحی کرده و آنها را در قالب یک Patterns Language مستند کنیم.
🔹 فرمت: به صورت حضوری - در قالب ارائه آموزشی و انجام عملی بازیها
🔹 تاریخ و زمان: 1 تیر - ساعت 9 تا 18
🔹 مربی: هادی احمدی
🔹 محل برگزاری: کارخانه نوآوری آزادی
🔹 میزبان: شرکت سفرهای علی بابا - قاف کامیونیتی
🔹 مخاطبین کارگاه: برنامهنویسان ارشد، طراحان و معماران نرمافزار
🔹 پیشنیاز: تجربه قبلی در Board Game های استراتژیک
🔹هزینه: این کارگاه یک برنامه آموزشی رایگان بوده و تنها مبلغ حداقلی بابت پوشش هزینههای جاری و خرید بازیها از شرکتکنندگان دریافت میشود.
🔹 ظرفیت: 24 نفر
🔹 مهلت ثبتنام: 18 خرداد
🔹 لینک پیش ثبتنام:
https://survey.porsline.ir/s/kwWEsAT
❗️به علت محدودیت ظرفیت، متاسفانه ناچار هستیم از لیست افراد علاقهمند تعداد محدودی را انتخاب کنیم. معیار انتخاب افراد تجربه آنها در Board Game های استراتژیک و همچنین انگیزه آنها برای شرکت در این کارگاه آموزشی خواهد بود. بنابراین پیشاپیش از عزیزانی که در لیست شرکتکنندگان قرار نمیگیرند، عذرخواهی میکنیم.
لیست افراد انتخاب شده تا تاریخ 25 خرداد اعلام خواهد شد.
Forwarded from سنتز | Synthesis
در عصر پیشرفتهای سریع دنیای دیجیتال که در آن نرمافزارها به سرعت بزرگتر، پیچیدهتر و کلیدیتر میشوند، اهمیت به اشتراکگذاری دانش و تجربیات در میان مهندسین نرمافزار بیش از پیش احساس میشود. رویداد «استادکار» فضایی برای به اشتراکگذاری دانش و تجربه، تعامل نزدیک با سایر متخصصان و کشف فرصتهای جدید برای رشد است.
رویداد استادکار 2، برای علاقهمندان به مهندسی نرمافزار با لیست برنامههای زیر ارائه میشود:
▪️ ارائه اول: هندسه فراکتال طراحی نرمافزار
ایلماز سورانی - مهندس نرمافزار
▪️ ارائه دوم: فریمها و سوگیریهای شناختی در طراحی نرمافزار
کیوان علیمحمدی - Engineering Manager at Sanppfood
▪️ ارائه سوم: DDD و تکامل مدل و زبان
هادی احمدی - طراح و معمار نرمافزار
▪️ پنل گفتوگو: چگونه بهتر شکست بخوریم؟
سهیل مقدم – CTO سابق گروه دیجیکالا
ابراهیم نبیئی – CTO گروه علی بابا
مسعود بهرامی – مهندس و مشاور نرمافزار
📅 جمعه - 19 مرداد
🕒 ساعت 11 تا 18
📍تهران، مفتح، دانشکده الهیات دانشگاه تهران
لینک ثبتنام:
https://evnd.co/ogFWD
مهلت ثبتنام: 15 مرداد
رویداد استادکار 2، برای علاقهمندان به مهندسی نرمافزار با لیست برنامههای زیر ارائه میشود:
▪️ ارائه اول: هندسه فراکتال طراحی نرمافزار
ایلماز سورانی - مهندس نرمافزار
▪️ ارائه دوم: فریمها و سوگیریهای شناختی در طراحی نرمافزار
کیوان علیمحمدی - Engineering Manager at Sanppfood
▪️ ارائه سوم: DDD و تکامل مدل و زبان
هادی احمدی - طراح و معمار نرمافزار
▪️ پنل گفتوگو: چگونه بهتر شکست بخوریم؟
سهیل مقدم – CTO سابق گروه دیجیکالا
ابراهیم نبیئی – CTO گروه علی بابا
مسعود بهرامی – مهندس و مشاور نرمافزار
📅 جمعه - 19 مرداد
🕒 ساعت 11 تا 18
📍تهران، مفتح، دانشکده الهیات دانشگاه تهران
لینک ثبتنام:
https://evnd.co/ogFWD
مهلت ثبتنام: 15 مرداد
دوره سبکهای معماری نرمافزار
▪️مجموعا 63 ساعت
▪️15 جلسه آموزشی - 6 جلسه Case Study
▪️دوشنبهها از ساعت 18 تا 21
▪️برگزاری به صورت آنلاین
▪️شروع دوره از 16 مهر
▪️مهلت ثبتنام تا 10 مهر
🔹 لینک سرفصل:
https://edu.hadiahmadi.ir/Courses/09/Software-Architecture-Styles/
🔹 لینک ثبت نام:
https://evnd.co/70CYe
✨عزیزانی که در برنامههای آموزشی قبلی آکادمی حضور داشتند، میتوانند جهت دریافت کد تخفیف به اکانت تلگرام @AhmadiAcademySupport پیام ارسال فرمایند.
▪️مجموعا 63 ساعت
▪️15 جلسه آموزشی - 6 جلسه Case Study
▪️دوشنبهها از ساعت 18 تا 21
▪️برگزاری به صورت آنلاین
▪️شروع دوره از 16 مهر
▪️مهلت ثبتنام تا 10 مهر
🔹 لینک سرفصل:
https://edu.hadiahmadi.ir/Courses/09/Software-Architecture-Styles/
🔹 لینک ثبت نام:
https://evnd.co/70CYe
✨عزیزانی که در برنامههای آموزشی قبلی آکادمی حضور داشتند، میتوانند جهت دریافت کد تخفیف به اکانت تلگرام @AhmadiAcademySupport پیام ارسال فرمایند.
آکادمی طراحی و معماری نرم افزار هادی احمدی
دوره سبکهای معماری نرمافزار ▪️مجموعا 63 ساعت ▪️15 جلسه آموزشی - 6 جلسه Case Study ▪️دوشنبهها از ساعت 18 تا 21 ▪️برگزاری به صورت آنلاین ▪️شروع دوره از 16 مهر ▪️مهلت ثبتنام تا 10 مهر 🔹 لینک سرفصل: https://edu.hadiahmadi.ir/Courses/09/Software-Architecture…
در این دوره، قصد داریم تا به بررسی مفهوم سبک یا Style در معماری نرمافزار بپردازیم و در کنار آن، سبکهای رایج معماری نرمافزار را بررسی کنیم.
عبارت Architectural Style اولین بار در مقالهای با عنوان «مبانی مطالعه معماری نرمافزار» که در سال 1992 توسط Dewayne Perry و Alexander Wolf نوشته شد، معرفی و توضیح داده شد. Wolf و Perry سبک را «شیوه سازماندهی ساختاری» سیستمهای نرمافزاری تعریف کردند و بیان کردند که یک سبک معماری اجزا، روابط بین آنها، و همچنین محدودیتها و اصول طراحی و ساخت و ترکیب آنها را مشخص میکند.
سبکها ممکن است مجموعهای از Heuristic ها را به همراه داشته باشند: مانند تاکید بر Autonomy و استقلال (هم در طراحی، هم در اجرا) در سبکهای توزیع شده. سبکها ممکن است مدلها و راهحلهای طبقهبندی شدهای را به همراه داشته باشند: مانند انواع الگوهای حوزه Service-Orientation که در این سبکها مورد استفاده قرار میگیرد. اما مهمتر از همه، سبکها عمدتا مجموعهای از پارادایمها را به همراه میآورند: مانند نوع نگاه به مساله Consistency در سبکهای توزیع شده نسبت به سبکهای Monolithic.
🟥 هدف اصلی این دوره، درک مفهوم Style و ابعاد مختلف آن از طریق مطالعه سبکهای رایج معماری است. این دوره به دنبال معرفی سبکهای رایج نیست و به دنبال تحلیل و بررسیهای عمیقتری است. از همین جهت از مخاطب انتظار میرود آشنایی قبلی و پیشزمینه مطالعاتی در مورد سبکها و تجربه عملی در بهکارگیری آنها داشته باشد، حتی اگر این تجربه محدود و حداقلی باشد.
این دوره برای افراد زیر مناسب نخواهد بود:
● افرادی که دانش و فهم عمیق و اصولی از مبانی طراحی و معماری نرمافزار ندارد.
● افرادی که پیشزمینه مطالعاتی در مورد سبکهای معماری ندارند.
● افرادی که قصد دارند بر یک سبک خاص (مثلا Microservices) مسلط شوند و آن را در همه ابعاد مطالعه کنند. این کلاس همچین هدفی ندارد و به دنبال ارائه جامع و کامل هیچ سبکی نیست. هدف نهایی این کلاس، فهم عمیق از مفهوم سبک و تقویت دانش طراحی در حوزههای مرتبط با آن است.
● افرادی که با تحلیل و بررسی و مباحث نظری رابطه خوبی ندارند و صرفا به دنبال یادگیری مجموعهای از الگوها، راهحلها و تکنیکها هستند، احتمالا بخشهای زیادی از دوره برایشان «صرفا تئوری» به نظر برسد.
● افرادی که وابستگی زیادی به یادگیری مفاهیم طراحی از دیدن تمام جزییات پیادهسازی و کد دارند، احتمالا از روند ارائه مطالب راضی نخواهند بود.
عبارت Architectural Style اولین بار در مقالهای با عنوان «مبانی مطالعه معماری نرمافزار» که در سال 1992 توسط Dewayne Perry و Alexander Wolf نوشته شد، معرفی و توضیح داده شد. Wolf و Perry سبک را «شیوه سازماندهی ساختاری» سیستمهای نرمافزاری تعریف کردند و بیان کردند که یک سبک معماری اجزا، روابط بین آنها، و همچنین محدودیتها و اصول طراحی و ساخت و ترکیب آنها را مشخص میکند.
سبکها ممکن است مجموعهای از Heuristic ها را به همراه داشته باشند: مانند تاکید بر Autonomy و استقلال (هم در طراحی، هم در اجرا) در سبکهای توزیع شده. سبکها ممکن است مدلها و راهحلهای طبقهبندی شدهای را به همراه داشته باشند: مانند انواع الگوهای حوزه Service-Orientation که در این سبکها مورد استفاده قرار میگیرد. اما مهمتر از همه، سبکها عمدتا مجموعهای از پارادایمها را به همراه میآورند: مانند نوع نگاه به مساله Consistency در سبکهای توزیع شده نسبت به سبکهای Monolithic.
🟥 هدف اصلی این دوره، درک مفهوم Style و ابعاد مختلف آن از طریق مطالعه سبکهای رایج معماری است. این دوره به دنبال معرفی سبکهای رایج نیست و به دنبال تحلیل و بررسیهای عمیقتری است. از همین جهت از مخاطب انتظار میرود آشنایی قبلی و پیشزمینه مطالعاتی در مورد سبکها و تجربه عملی در بهکارگیری آنها داشته باشد، حتی اگر این تجربه محدود و حداقلی باشد.
این دوره برای افراد زیر مناسب نخواهد بود:
● افرادی که دانش و فهم عمیق و اصولی از مبانی طراحی و معماری نرمافزار ندارد.
● افرادی که پیشزمینه مطالعاتی در مورد سبکهای معماری ندارند.
● افرادی که قصد دارند بر یک سبک خاص (مثلا Microservices) مسلط شوند و آن را در همه ابعاد مطالعه کنند. این کلاس همچین هدفی ندارد و به دنبال ارائه جامع و کامل هیچ سبکی نیست. هدف نهایی این کلاس، فهم عمیق از مفهوم سبک و تقویت دانش طراحی در حوزههای مرتبط با آن است.
● افرادی که با تحلیل و بررسی و مباحث نظری رابطه خوبی ندارند و صرفا به دنبال یادگیری مجموعهای از الگوها، راهحلها و تکنیکها هستند، احتمالا بخشهای زیادی از دوره برایشان «صرفا تئوری» به نظر برسد.
● افرادی که وابستگی زیادی به یادگیری مفاهیم طراحی از دیدن تمام جزییات پیادهسازی و کد دارند، احتمالا از روند ارائه مطالب راضی نخواهند بود.
Forwarded from سنتز | Synthesis
هر سازمانی که اقدام به طراحی یک سیستم میکند، ناگزیر طرحی ارائه میدهد که ساختارش بازتابی از ساختار ارتباطی همان سازمان است.
این جملهی کلیدی، اساس قانون کانوی (Conway’s Law) را شکل میدهد. این قانون، فراتر از دنیای نرمافزار، نگاهی بنیادین به طراحی هر نوع سیستم انسانی ارائه میدهد. به بیان ساده، هر سیستمی که انسانها طراحی میکنند، شکلی شبیه به شیوهی همکاری و ارتباط خودشان پیدا میکند.
مقالهی «کمیتهها چگونه اختراع میکنند؟» نوشتهی Melvin Conway، یکی از تأثیرگذارترین و مهمترین متون در تاریخ طراحی سیستمهاست. اثری کلاسیک که فراتر از مهندسی نرمافزار، به موضوعاتی چون ساختار سازمانی، تصمیمگیری، و رفتار مدیریتی نیز میپردازد.
خواندن این مقاله به همه علاقهمندان طراحی سیستمها توصیه میشود.
(لینک و فایل در پست بعدی)
این جملهی کلیدی، اساس قانون کانوی (Conway’s Law) را شکل میدهد. این قانون، فراتر از دنیای نرمافزار، نگاهی بنیادین به طراحی هر نوع سیستم انسانی ارائه میدهد. به بیان ساده، هر سیستمی که انسانها طراحی میکنند، شکلی شبیه به شیوهی همکاری و ارتباط خودشان پیدا میکند.
مقالهی «کمیتهها چگونه اختراع میکنند؟» نوشتهی Melvin Conway، یکی از تأثیرگذارترین و مهمترین متون در تاریخ طراحی سیستمهاست. اثری کلاسیک که فراتر از مهندسی نرمافزار، به موضوعاتی چون ساختار سازمانی، تصمیمگیری، و رفتار مدیریتی نیز میپردازد.
خواندن این مقاله به همه علاقهمندان طراحی سیستمها توصیه میشود.
(لینک و فایل در پست بعدی)
Forwarded from سنتز | Synthesis
how-do-committees-invent-mel-conway-persian-translation.pdf
1.5 MB
◾️ عنوان: کمیتهها چگونه اختراع میکنند؟
◾️ نویسنده: Melvin E. Conway
◾️ مترجم: هادی احمدی
◾️ انتشار اولیه: مجله Datamation – آوریل ۱۹۶۸
◾️ نسخهی فارسی: سنتز – ویرایش 1.0 – اردیبهشت ۱۴۰۴
🔗 نسخه اصلی:
https://www.melconway.com/Home/pdf/committees.pdf
🔗 نسخه ترجمه:
https://dl.santez.tv/articles-papers/how-do-committees-invent-mel-conway-persian-translation.pdf
◾️ نویسنده: Melvin E. Conway
◾️ مترجم: هادی احمدی
◾️ انتشار اولیه: مجله Datamation – آوریل ۱۹۶۸
◾️ نسخهی فارسی: سنتز – ویرایش 1.0 – اردیبهشت ۱۴۰۴
🔗 نسخه اصلی:
https://www.melconway.com/Home/pdf/committees.pdf
🔗 نسخه ترجمه:
https://dl.santez.tv/articles-papers/how-do-committees-invent-mel-conway-persian-translation.pdf
با سلام و عرض ادب خدمت دوستان و همراهان گرامی 🌹
دامنه دانلود ویدیوهای کلاس از dl.hadiahmadi.ir به dl.hadi-ahmadi.com تغییر کرده است.
تمامی ویدیوهای قبلی با همان URLها و همچنین نام کاربری / رمز عبور سابق، از طریق دامنه جدید قابل دسترس هستند.
🔹 همچنین سایت قبلی که شامل سرفصلهای دورهها بود، در حال حاضر در دسترس نیست و به زودی مجددا فعال خواهد شد.
#پست_موقت
دامنه دانلود ویدیوهای کلاس از dl.hadiahmadi.ir به dl.hadi-ahmadi.com تغییر کرده است.
تمامی ویدیوهای قبلی با همان URLها و همچنین نام کاربری / رمز عبور سابق، از طریق دامنه جدید قابل دسترس هستند.
🔹 همچنین سایت قبلی که شامل سرفصلهای دورهها بود، در حال حاضر در دسترس نیست و به زودی مجددا فعال خواهد شد.
#پست_موقت
سومین دوره از مسیر معماری نرمافزار
✨ معماری نرمافزار در گذر زمان ✨
دنیایی که نرمافزار در آن فعالیت میکند هرگز ثابت نیست، به همین دلیل معماری نیز باید یک فعالیت مستمر، ادامهدار و تکاملی باشد. این دوره بررسی میکند که چه اقداماتی لازم است تا معماری یک سیستم نرمافزاری با تغییرات پیرامون خود همراه شود و همزمان با این تغییرات در طول زمان منسجم بماند.
▪️ 20 جلسه (14 جلسه آموزشی، 6 جلسه عملی)
▪️مجموعا 60 ساعت
▪️یکشنبهها از ساعت 18 تا 21 – به وقت تهران
▪️برگزاری به صورت آنلاین
▪️شروع دوره از 1 شهریور 1405
🔗 مطالعه سرفصل دوره
🔗 لینک ثبتنام دوره
✨ معماری نرمافزار در گذر زمان ✨
دنیایی که نرمافزار در آن فعالیت میکند هرگز ثابت نیست، به همین دلیل معماری نیز باید یک فعالیت مستمر، ادامهدار و تکاملی باشد. این دوره بررسی میکند که چه اقداماتی لازم است تا معماری یک سیستم نرمافزاری با تغییرات پیرامون خود همراه شود و همزمان با این تغییرات در طول زمان منسجم بماند.
محورهای اصلی دوره
Continuous Architecture و Evolutionary Architecture
▪️ 20 جلسه (14 جلسه آموزشی، 6 جلسه عملی)
▪️مجموعا 60 ساعت
▪️یکشنبهها از ساعت 18 تا 21 – به وقت تهران
▪️برگزاری به صورت آنلاین
▪️شروع دوره از 1 شهریور 1405
🔗 مطالعه سرفصل دوره
🔗 لینک ثبتنام دوره
دوره معماری نرمافزار در گذر زمان
مهلت ثبتنام: شنبه ۳۱ مرداد، ساعت ۲۲:۰۰
شروع دوره: یکشنبه ۱ شهریور
سرفصل دوره
لینک ثبتنام
مهلت ثبتنام: شنبه ۳۱ مرداد، ساعت ۲۲:۰۰
شروع دوره: یکشنبه ۱ شهریور
سرفصل دوره
لینک ثبتنام