i ++ – Telegram
80 subscribers
55 photos
15 videos
17 files
61 links
Yourself ++
Download Telegram
#linux
#storage
#LVM


Logical Volume Manager (LVM)
Let’s start with LVM itself. The Logical Volume Manager is the software layer responsible for managing the logical volume infrastructure. It provides tools and utilities to create, resize, and manage logical volumes, volume groups, and physical volumes. LVM facilitates dynamic allocation and resizing of storage resources without requiring downtime.

Physical Volume (PV)
A physical volume refers to a physical storage device or LVM partition, such as a hard disk drive (HDD) or solid-state drive (SSD). LVM utilizes these physical volumes as building blocks for logical volume management.

Volume Group (VG)
A volume group is a collection of one or more physical volumes that are combined to form a single storage pool. It acts as a container for logical volumes and provides a higher level of abstraction for storage management. Within a volume group, available physical extents are pooled together.

Physical Extent (PE)
A physical extent is the smallest unit of allocation within a volume group. It represents a fixed-size block of storage space, typically a few megabytes in size, and is used for allocating logical volumes. The physical extents from different physical volumes are combined to form a single pool of available extents within a volume group.


Advantages of LVM:

Dynamic Storage Allocation
Logical Volume Snapshots
Striping and Mirroring
Volume Group Aggregation
Online Data Relocation
Backup and Restore Flexibility



pvcreate /dev/sdX
vgcreate myvg /dev/sdX

lvcreate -L 10G -n mylv myvg
#ParallelProcessing


متد های مختلف موازی سازی
Flynn classification:

SISD
SIMD
MISD
MIMD

Enslow:
#database
#partitioning
#oracle

بریم سراغ یکی از قابلیت‌های دیتابیس‌ها که تو حجم بالای داده، خیلی به دردمون می‌خوره. پارتیشنینگ. پارتیشنینگ میاد برامون جدول‌ها و ایندکس های خیلی بزرگ رو میشکنه به قسمت‌های کوچیک‌تر تا بتونیم مدیریت بهتری روشون داشته باشیم و کارایی رو ببریم بالا.
با یه مثال ادامه بدیم. فرض کنین مدیر یه کتابخونه هستین و تعداد زیاااادی کتاب زیر دستتون هست که باید با سرعت بالایی کتاب مورد نظرتون رو پیدا کنین و بدین به درخواست کننده. خب برای این کار یکی از راه‌هاش اینه که یه قفسه بزررررگ داشته باشین که همه کتاب‌ها توی اون قفسه باشه و هر بار که میخواین یه کتابی رو پیدا کنین از اول تا آخر بگردین که بتونین اون کتاب رو پیدا کنین و برش دارین. ولی خب همونطور که دیدین هیچ کتابدار عاقلی این حرکت رو نمیزنه!:) یکی از راه‌هایی که می‌تونیم این کار رو به صورت بهینه تر انجام بدیم و بهمون کمک می‌کنه که بتونیم مدیریت بهتری روی کتاب‌ها داشته باشیم، اینه که بیایم اون قفسه بزررررگ رو به قفسه‌های کوچک‌تری بشکنیم و توی هر قفسه یه سری کتاب خاص رو قرار بدیم که وقتی نیاز داشتیم به اون نوع کتاب‌های خاص بدونیم باید بریم سراغ کدوم قفسه. مثلا بیایم کتاب‌ها رو بر اساس سال چاپ بذاریم توی قفسه‌های مختلف. یا اینکه بر اساس موضوع بذاریم توی قفسه‌های مختلف یا ... . به این کار کتابدار توی دیتابیس میگن پارتیشنینگ. حالا همین چطوری جدا کردن این قفسه‌ها خودش می‌تونه روش‌های مختلفی داشته باشه که باعث می‌شه پارتیشنینگ‌های مختلفی داشته باشیم:
Range Partitioning
Interval Partitioning
List Partitioning
Hash Partitioning
Refrence Partitioning
Composite Partitioning

قبل از اینکه این موارد رو یه توضیح مختصری بدیم نیازه که با Partition Key آشنا بشیم. Partition Key یک یا مجموعه‌ای از ستون‌ها هست که با توجه به اون ها تصمیم گرفته میشه که یه ردیف از داده، توی کدوم پارتیشن قرار بگیره. هر ردیف داده، به صورت یکتا توی یک پارتیشن قرار میگیره.
خب بریم سراغ این انواع پارتیشن‌ها:
Range Partitioning:
توی این دسته، دیتابیس ردیف‌های داده رو بر اساس یه رنجی از مقدار Partitioning Key به پارتیشن‌ها میده که ذخیره کنند. این دسته معمولا بر اساس تاریخ و زمان هست. مثلا پارتیشنینگ بر اساس سال ایجاد اون سطر داده‌، انجام بشه و همه داده‌های سال ۲۰۲۰ توی یه پارتیشن و ۲۰۲۱ توی یه پارتیشن و ... باشه.
Interval Partitioning:
این مدل از پارتیشنینگ، یه اکستنشن از Range Partitioning هست که ما رو از مشخص کردن دقیق رنج پارتیشن‌ها معاف می‌کنه. یعنی نیاز نیست که حتما همه رینج‌هایی که نیاز داریم رو تعریف کنیم، بلکه با تعریف یکسری Range و یک Interval، در صورتی که داده مورد نظر، توی اون Range نبود، دیتابیس خودش بر اساس اون Interval، یک پارتیشن ایجاد می‌کنه و داده رو در اون قرار میده.

List Partitioning:
توی این دسته، برای هر پارتیشن، یک لیستی از مقادیر برای هر پارتیشن، مشخص میشه که بر اساس مقدار Partitioning Key داده‌ها، در اون پارتیشن قرار می‌گیره یا نه. مثلا می‌تونیم بگیم نوع محصولات خوراکی رو بریز توی یه پارتیشن و نوع محصول پوشیدنی رو بریز توی یه پارتیشن دیگه.
Hash Partitioning:
توی این دسته، دیتابیس به کمک یک تابع Hash داخلی، تصمیم میگیره که داده رو بین پارتیشن‌ها تقسیم کنه. تو این مورد ما نمی‌تونیم بگیم که کدوم داده‌ها رو توی کدوم پارتیشن‌ها ذخیره کن بلکه فقط میگیم که داده‌ها رو توی چند تا پارتیشن قرار بده. دیگه دیتابیس خودش میدونه و مقدار خروجی تابع Hashش.:)
Refrence Partitioning:
این روش Partitioning داره میگه که هر استراتژی‌ای که برای ذخیره جدول‌های parrent توی دیتابیس هست، توسط جدول‌های child هم برقرار باشه. مثلا فررض کنین یک جدول Student داشته باشیم و یک جدول Code که کد های دانشجو‌ها توش نگهداری میشه به این صورت که هر سطر داده در جدول Code یک Student_id به عنوان کلید خارجی داره و نشون‌دهنده این هست که هر کد مال کدوم دانشجو هست. در این صورت هر ردیف داده در جدول Code در همون پارتیشنی ذخیره میشه که داده متانظر Student_id ش ذخیره شده. این کار باعث میشه که پرفورمنس جوین بین جداول بالا بره.

Composite Partitioning:
این دسته، شامل ترکیبی از انواع پارتیشنینگ که تا حالا باهاشون آشنا شدیم، میشه. به این صورت که می‌تونیم بعد از تعریف یه Partitioning خاص برای جدول، برای هر پارتیشن یک Subpartition هم تعریف کنیم. مثلا متد Composite Hash-Range Partitioning می‌تونه Subpartitionهای خودش رو را با Hash Partitioning از پارتیشن‌های ایجاد شده توسط Range Partitioning، ایجاد کنه.

و در آخر برای ادامه بازم لینک و داکیومنت جذاب و قشنگ...:)
می‌تونین برای آشنایی بیشتر با این مبحث، این لینک رو مطالعه کنین.
#soft_skill
#presentation

چند تا نکته کلا درباره ارائه دادن و حرف زدن

۱. یونیک کردن ارائه با اضافه کردن نظرات خود ارائه دهنده
درگیر کردن ذهن مخاطب با سوال

۲. تن صدای مناسب و فراز و نشیب

۳. تماس چشمی با مخاطب

۴. انسان ها از طریق هیجانات با هم صحبت میکنند:)

۵. قاعده آلبرت مهرابیان

۶. زبان بدن مثل طاووس
i ++ pinned «به نام یگانه برنامه نویس عالم:) هر نکته ای ک ارزش یاداشت شدن داشته باشه رو مینویسم اینجا... از هرکی... از هرجا:) به عبارتی هر چی که Navid رو ++ کنه:) متن باز (open source) هم میکنم شاید به درد کس دیگ هم خورد... :) @navidnasyry»
#فیلم
#maze_runner
#movie

فیلم Maze runner
سه تاشو دیدم:)
یکم بگم ازش که مقداری هم اسپویل توش هست و اول فیلمو ببینین بعد ....:)
اگر بخوام ازش چند خط بنویسم، اول اینکه عشق خاصی توی فیلم نبود و خیلی تمرکزش روی عشق و عاشقی نبود بر خلاف خیلی فیلمای دیگه. و باز هم مثل خیلی فیلمای دیگه یه سوپرمنی بود که راهی رو میرفت بر خلاف راه عام مردم. انتخابی رو میکرد برخلاف انتخاب بقیه و کاری رو میکرد که بقیه انتظارش رو ندارن. یه چیز دیگه هم که جالب بود و کمتر توی فیلما پیدا میشد، از دست دادن عزیزان نقش اصلی بود توی این سه قسمت. توی هرکدوم از قسمت هاش یه جورایی نزدیک ترین دوستش رو از دست میداد و در آخر قسمت آخرش هم که هیچ:)
ته فیلم رو هم نفهمیدم آخرش بدون دارو دیگه طوریشون نشد یا چی ولی فکر کنم اخرش کسایی که فرار کرده بودن نجات پیدا کردن و کسایی هم که یه عمری جنگیدن برا پیدا کردن یه راه درمان ویروس، همشون مردن به جز اونایی که موفق شدن فرار کنن:)
راه درمانش هم از خون فقط یه نفر بود:)
جالبه
چرا خون یه نفر؟ چرا زندگی یه نفر باید نجات میافت کلا؟ و کلی چرای دیگه از جزییات که مجال گفتن نیست:)

خلاصه در کل همون که اول هم گفتم....جنگیدن برای زنده موندن...برای نمردن...برای دوستان همین:)
#مشورت
#تجربه
#آینده

امروز یه صحبتی با مستر حقیقت داشتم که یه خلاصه نکاتش رو بد نیس مرور کنم:)
صحبت درباره آینده کار و دانشگاه بود بیشتر. اینکه اول یه مقایسه ای داشته باشیم بین دانشگاه و کار و اینکه میشه یه پا تو دانشگاه باشه یه پا تو شرکت...که گویا نمیشه. شرکت داشتن و کار کردن و کار به درد بخور کردن یه کار فول تایمه با تمرکز کامل. و اینکه کار شرکتی فقط کار فنی نیست یا فقط کار R&D نیست و خیلی کارای دیگه هم در خیلش هست. نمیدونم کارای hr ای، کارای حقوقی، کارای اجرایی و ... . تو دانشگاه بخوای ادامه بدی و درس بخونی تقریبا تک بعدیه...فقط درس و ریسرچ و مقاله و h-index و ... . لذا یه استاد که دغدغش h-index ش هست نمیتونه دغدغه کامل شرکت رو هم داشته باشه اونم یه شرکت بزرگ تو اسکیل ۵۰۰ نفر به بالا. مگر اینکه یه شرکت کوچول موچول داشته باشه که با چند تا دانشجوی کوچول موچول که دور خودش جمعشون کرده و یه پروژه ای برداشتن با سنگر و اسم داشنگاه که انجامش بدن و بعد از یه مدتی...اگر فیل هم نشه ولی یه کار قوی بعیده بشه.
(تقریبا قبول دارم تا بخشی. بعضی پروژه‌هایی که خودم داشتم با استادا و موقع دانشجوییم با اینکه بسی خون و دل خوردم سرش و وقت گذاشتم و فلان و بهمان...ولی الان میدونم داره خاک میخوره و استفاده نمیشه. البته لازم به ذکره که بعضیاشونم داره استفاده میشه و زیر باره با قدرت و هنوزم دارم لذت میبرم از بزرگ کردن چنین بچه‌هایی:))‌ ولی خب اسکیلش به اندازه محصولات یه شرکت بزرگ نیست منطقا)
دیگه اینکه یه حرف دیگه هم زده شد که جذاب بود برام. اینکه استاده یا کاری که تو دانشگاه داره انجام میشه، داره پشت دانشگاه انجام میشه و برای بقاش نمیجنگه. ولی وقتی توی یه شرکتی هستی باید توی رقابتای سنگین واقعا بجنگی برای بقا. کارای دانشگاهی و اینا میتونه خروجی داشته باشه میتونه نداشته باشه ولی کار صنعتی باید خروجی داشته باشه...باید کاری انجام بده وگرنه خورده میشه و هضم میشه و در نهایت...میمیره و تامام:) لذا اون روحیه جنگندگی و بدو بدو و اینا...فکر میکنم تو شرکت و صنعت بیشتر تقویت بشه. چون داری خروج یکارت رو میبینی...چون داری میبینی به درد میخوره این کارت ...چون داری میبینی این چند خط کدت چقدر تاثیر داره توی کشور، زندگی مردم و حتی خودت:) اره چند خط کد توی خود آدم هم تاثیر میذاره که دیگه بحثشو باز نمیکنم:)
دیگه اینکه تجربه خارج کشور...اگرم میخوای داشته باشی به کم قانع نشو:)
گزینه خارج تو مورد تحصیلیش که عملا داری باز میدویی دنبال مقاله پقاله و خروجی کار و تاثیرش شدیدا کمتره و من خودم آدم صرف مقاله ای نیستم و نمیتونم کاری نکنم و فقط دنبال ریسرچ و مقاله باشم. لذا هسیم فعلا به اندازه کافی و لازم:)
والسلام
1👍1🔥1
ملت شعار اسکی میرن...:)
😁21
#ParallelProcessing
#OpenMP

OpenMP
یه کتابخونه برای پردازش موازی بر پایه Shared Memory هست که توی c , cpp و fortran میشه ازش استفاده کرد.
پردازش‌های موازی معمولا یا بر پایه Shared Memory اند یا بر پایه Message Passing. بخوام بگم این دو تا چین خیلی خلاصه، روش ارتباط بین پردازنده‌ها. ما زمانی که میریم سراغ پردازش‌ موازی، نیاز داریم که خیلی موقع ها پردازنده‌هامون باهم ارتباط داشته باشن ...متغیر بگیرن بدن یا روی یه سری متغیر مشترک پردازش انجام بدن. زمانی که پردازش موازی مون بر پایه Shared Memory عه، میایم یه مموری مشترک میذاریم اون وسط میگیم همه پردازنده ها (یا ترد‌های هر پردازنده) به اون دسترسی داشته باشن و متغیرهای مشترک رو هم اونجا بنویسن و بخونن (البته با احتیاط:) ). زمانی هم که این پردازش موازیمون بر پایه Message Passing عه، با یه Interconnection Network ای، پردازنده‌ها (یا ترد‌ها) با هم ارتباط میگیرن و دیتا برا همدیگه میفرستن. مثال سادش میشه مثلا روی شبکه اینترنت یا اینترانت بیان دیتا‌هاشون رو بفرستن برا هم و معمولا برای پردازش‌های موازی توی کلاستر ها و روی چند تا نود بیشتر کاربرد داره.
خب برگردیم سر بحث اول. OpenMp مخفف Open Multiprocessing Programming هست. وقتی با این کتابخونه یه برنامه مینویسیم،‌ میتونیم بهش دقیقا مشخص کنیم که کجاها رو موازی کنه، چطوی موازی کنه،‌ از کجا به بعد دیگ موازی نباشه و خیلی چیزای دیگه. یعنی مستقیم به کامپایلر میگیم اقا تو فلان جای کد رو با اینقدر ترد موازیش کن و کامپایلر هم فایل‌های اجرایی مربوط به اون رو ایجاد میکنه و میده سیستم‌عامل که انجامش بده. وقتی به کمک OpenMP موازی کد میزنیم، عملا کدمون میشه مجموعه‌ای از Threadها که با fork و join ایجاد یا ادغام میشن. یه ترد مستر داریم همیشه که Thread 0 هست. بعد از اینکه fork زدیم، میاد یک سری ترد‌های اسلیو هم ایجاد میکنه که Thread >=1 رو شامل میشه.
حیفه درباره پردازش موازی صحبت بشه و درباره خطرش صحبت نشه:)
اگه حواسمون به متغیر‌های مشترک نباشه ممکنه یه جایی رو بترکونیم:))
لذا یا با استفاده از lock یا متغیر‌های پرایوت (متغیر‌هایی که مخصوص هر ترد میشه) و اشتراکی (متغیر های اشتراکی ترد‌ها) یا مشخص کردن critical section یا single thread region یا ‌‌Barrierها یا عملیات‌های atomic، جلوی مشکلا رو باید گرفت تا پردازش درست انجام بشه:)
چند تا ریسورس:
منبع ۱
منبع ۲

و یک نمونه کد بدون شرح:
#include <stdio.h>
#include <stdlib.h>
#include <omp.h>


int main()
{

int th_id, num;
omp_set_num_threads(2);

#pragma omp parallel for
for (int i=0 ; i < 10 ; i++)
{
num = omp_get_num_threads();
th_id = omp_get_thread_num();

printf("thread Id : %d/%d Threads, Assigned Loop Index: %d\n", th_id, num, i);
}

return 0;
}
👍1🔥1
#softskill

مینی سافت اسکیل:)

شنونده خوبی باشیم:)))
یکم ایدت:
چطوری شنونده خوبی باشیم؟ نپریم وسط حرف
چطوری شنونده خوبی باشیم؟ یه ack بدیم با دست یا بدن یا سر به گوینده بفهمه داریم میشنویم و میفهمیم
چطوری شنونده خوبی باشیم؟ ارتباط چشمی داشته باشیم (که من بلد نیستم اینو:)‌ )
چطوری شنونده خوبی باشیم؟ ...
❤‍🔥1👍1🔥1
#Reinforcement_Learning
#RL
#AI
#هوش_مصنوعی
#یادگیری_تقویتی

یادگیری تقویتی
قسمت اول: مقدمه


یکم درباره این شاخه از هوش بنویسیم‌ (اصلا هم برا این نیست که فردا میانترمشو دارم:)) )
خیلی ساده بخوام بگم، اینجا یه ایجنت داریم،‌ یه محیط داریم که اون ایجنت بر اساس یکسری policy یا سیاست‌هایی توی اون محیط داره عمل یا actionهایی رو انجام میده که در نتیجه اون اکشن، ممکنه یه پاداش یا rewardای از محیط دریافت کنه و state ایجنت عوض بشه.
این کلیدواژه‌هایی که گفتم توی بند قبلی تقریبا توی کل الگوریتم‌های RL هست و فقط با اینا بازی بازی کردن:)
action, state, reward, ...

هر جور فکر میکنم حسش نیست وارد جزییات ریاضیات و فرمولای الگوریتماش بشم پس صرفا چند تا تایتل معرفی میکنم بعدا شاید بیشتر دیتیل نوشتم ازشون.

multi-armed Bandits
Markov Decision Processes
Dynamic Programming
Monte Carlo Method
Temporal-Difference Learning
n-step bootstrapping

البته حیفه حرف از RL بشه و سخنی از کتابخونه gym openai زده نشه:)

و البته اینم جذابه برا کد زدن و دید گرفتن:)
q-learning
🔥1😁1
#csharp
#dotnet
#backend

دو برابر شدن سرعت لوپ توی c# با استفاده از Span...!!!
البته با احتیاط باید استفاده بشه و لیستی ک روش میخوایم لوپ بزنیم سایزش رو تغییر ندیم و...

لینک
🔥1🕊1🍾1
#ansible
#infra
#linux

Ansible is a powerful automation tool that allows you to automate tasks, configure systems, deploy applications, and more. Here are some steps to get started with Ansible:

1. Install Ansible on your system: You can install Ansible on your local machine or a control node. Ansible is available for all major operating systems. You can find installation instructions on the official Ansible documentation website

2. Understand the basics of Ansible:

Playbooks: Playbooks are files written in YAML format that define a set of tasks to be executed on remote hosts.

Inventory: The inventory file contains a list of hosts on which you want to run your tasks.

Modules: Modules are small programs that Ansible invokes on remote hosts to perform tasks.

Tasks: Tasks define the actions you want to perform on remote hosts.
Start writing your first playbook: You can create a simple playbook to perform basic tasks like installing packages, creating users, or managing files. You can refer to Ansible documentation and examples to get started.

3. Run your playbook: Once you have written your playbook, you can run it using the ansible-playbook command. Make sure to specify the inventory file containing the list of hosts on which you want to run the playbook.

4. Explore advanced features: Ansible has a lot of advanced features like roles, variables, conditionals, loops, and more. You can gradually explore these features as you become more comfortable with Ansible.

example:

inventory.ini

[my_nodes]
1.1.1.1
2.2.2.2
3.3.3.3
4.4.4.4
5.5.5.5
execute_noscript.yml

- name: Transfer and execute a noscript on specific nodes
hosts: my_nodes
become: yes # To execute commands with sudo privileges

tasks:
- name: Transfer the noscript
copy:
src: /path/to/mynoscript.sh # Replace with the actual path to your noscript
dest: /home/user/mynoscript.sh
mode: '0755' # Set appropriate permissions

- name: Execute the noscript
shell: sh /home/user/mynoscript.sh
🤯21🔥1
MrMohammadi_cluster (1).aac
20.3 MB
#تجربه
#ابررایانش
#آقای_محمدی
#clustering
#cloud
#proxmox

یه گپی زدیم با آقای محمدی مسئول ابررایانش شیخ‌ بهایی دانشگاه صنعتی و اندکی کسب اطلاعات جذاب :)

موضوع هایی ک صحبت کردیم روش :

کلاستر کردن ویندوز با Microsoft HPC Pack

کلاستر کردن لینوکس‌ها با Cluster Management و Provisioning
به کمک ابزار warewulf

زمانبندی جاب‌ها با ابزار Slurm و دارو دستش

و ارائه دادن جوپیتر نوتبوک و دسکتاپ با OnDemand

و چالش‌های accounting , scheduling, queue

چالش‌های proxmox و ارائه دادن vm
🔥2👍1
#linux
#windows
#msys2

یه متاع پیدا کردم برا لینوکس یوزرایی که روی ویندوزن :))
لینک خودش
لینک ابزار‌هایی که داره و میشه نصبشون کرد

MSYS2 is a collection of tools and libraries providing you with an easy-to-use environment for building, installing and running native Windows software.

It consists of a command line terminal called mintty, bash, version control systems like git and subversion, tools like tar and awk and even build systems like autotools, all based on a modified version of Cygwin. Despite some of these central parts being based on Cygwin, the main focus of MSYS2 is to provide a build environment for native Windows software and the Cygwin-using parts are kept at a minimum. MSYS2 provides up-to-date native builds for GCC, mingw-w64, CPython, CMake, Meson, OpenSSL, FFmpeg, Rust, Ruby, just to name a few.

To provide easy installation of packages and a way to keep them updated it features a package management system called Pacman, which should be familiar to Arch Linux users. It brings many powerful features such as dependency resolution and simple complete system upgrades, as well as straight-forward and reproducible package building. Our package repository contains more than 3000 pre-built packages ready to install.
Media is too big
VIEW IN TELEGRAM
#بدون_تعارف

نظرات جالبی بود از یک پزشک...:)
1
#SOLID
#code
#clean_code
یه مروری بکنیم روی اصول SOLID که بسی مهم و کاربردیه توی کد زدن:)


Single-Responsibility Principle
هر کلاس یا ماژول فقط و فقط یک دلیل برای تغییر باشد داشته باشه. یعنی هر کلاس تنها مسئول یک و فقط یک کار هست و سعی کنه اون کار رو خوب انجام بده:)
فایده‌هایی که داره:‌ کد رو ماژولار میکنه و بخش‌های مختلف رو جدا می‌کنه از هم و دیباگ رو هم حتی راحت تر میکنه. تست پذیری بسی بهتر میشه و در نهایت تغییر یک قسمت از یک کد تاثیر روی بقیه کد نمیذاره.
پس هر جا دیدیم یه کلاسی داره دو تا یا چند تا کار رو با هم انجام میده خیلی سریع میشکنیمش به چند تا کلاس:))

Open-Closed Principle
میگه که open for extensions but close for modifications. وقتی کدی میزنیم باید بتونیم رفتار کد رو گسترش بدیم بدون اینکه تغییری در کد‌های موجود بدیم. یعنی در واقع فیچر ها رو با اضافه کردن کد و کلاس‌های جدید بدیم نه اینکه با تغییر کد و کلاس‌های قبلی.
اینطور کد زدن کد رو استیبل تر نگه‌میداره و قابل پیش‌بینی تر و احتمال ایجاد باگ رو کمتر میکنه. مثلا ایفمالیزیشن کد زدن باعث میشه کدمون open-close نباشه و برای اضافه کردن یه شرط جدید، هربار باید اون ایفمالیزیشن رو عوضش کرد.


Liskov Substitution Principle
این اصل میگه فرزند‌ها باید بتونن جایگزین پدر‌ها بشن!!!:))
درد واقع هر شی فرعی یا فرزند باید بتونه بجای نمونه‌ای از نوع پایه خود بدون تاثیر بر صحت برنامه، استفاده بشه. این اصل ما رو مطمئن می‌کنه وقتی که داریم با نوع شئ های مختلفی کار می‌کنیم، رفتار کد تغییری نکنه. برای رعایت این اصل، همیشه باید مطمئن بشیم که هر کلااس فرزند، رفتاری شبیه پدرش داره. (توضیحش سخته ولی همینه تقریبا:) )
فایده‌هایی که داره: maintainable, flexibility, scalability, robustness

Interface Segregation Principle
یک کلاس نباید مجبور باشه اینترفیسی پیاده‌سازی کنه که استفاده نمی‌کنه. یک کلاس باید فقط اینترفیسی پیاده‌سازی کنه که نیاز داره و داره ازش استفاده می‌کنه.
باعث میشه وابستگی و کاپلنیگ توی کد کم بشه. بس اینترفیس‌هایی هم که استفاده می‌کنیم ممکنه شکسته بشه و به چند تا اینترفیس تبدیل بشه. لذا خوبه که سعی کنیم اینترفیس‌های کوچیکی تعریف کنیم.
خوبی های زیادی هم داره دیگه:))
عوض کردن رفتار یه کلاس تاثیری دیگه نمیذاره روی بقیه کلاس‌ها و رفتار‌ها و میدونیم دقیقا کجا رو باید تغییر بدیم برا یه کلاس

Dependency Inversion Principle

در گذشته‌های نزدیک، وقتی ملت کد میزدن کلاس‌هایی که توشون منطق بود و پیاده‌سازی داشت، از هم ارث میبردن ولی این اصل میگه این کارو نکنین و بجای این کار بیاین یه اینترفیس میانی بسازین و توی دوتا کلاس از اون استفاده کنین..
این کار باعث میشه هیچ دو کلاسی که پیاده‌سازی دارن به هم وابسته نشن و فقط بدونن که چنین کلاس‌هایی وجود داره و کامل مستقل میشه از جزییات پیاده‌سازی همدیگه:)
خوبی‌هاشم تست رو راحت تر میکنه و وابستگی رو کم و کد رو انعطاف‌پذیر.

یه سری لینک که می‌تونه کمک کنه کلا تو این زمینه:
لینک ۱
لینک ۲
لینک ۳
اینم یه نمونه کد که تو سه تا فایل بررسی کرده. اصلا اصول رعایت نشده، رعایت نشده، رعایت شده:))
1🔥1
#linux
#copy
#paste
#terminal
#xsel

بالاخره یکی یه راه قشنگ گفت برا کار کردن تو ترمینال با کلیپبرد:)

لینک

پ ن: این داشمون هم عالیه... یه جورایی جادی خارجیاس:)
🔥1👨‍💻1
#تجربه
#تدریس



اگه یه روز خواستم تدریس کنم.... ده ها روش تدریس دیدم که نباید اونطوری باشم:))
یه لیستی از باید ها و نباید ها تو درس دادن و یاد دادن میخوام بنویسم (آپدیت میشه به مرور) :))

1. به هیچ وجه تن صدای ثابتی نباید داشت... ملت خوابشون میبره
2. شدیدا نیازه انرژی بذاری... تدریس بدون انرژی به درد عمه گرامی هم نمیخوره:)
3. زبون مخاطب ها رو بفهم و با زبون خودشون بهشون درس بده
4. هیچوقت مثال رو هوا نزن! اگه مثال میزنی دقیق باشه مثالا که کامل حس بده... تو خود مثال، مثال نباشه باز! :))
5. امممم مممم ااااااا کردن ممنوع:))
6. شدیدا تسلط کافی و لازم روی مبحث نیازه و با گچ و تخته و تابلو برا حس دادن به مخاطب استفاده بشه
7. اگه کد زدن داره مبحث شده چند خط کد زده بشه که کامل ملت حس بگیرن نسبت به کار و ترسشون بریزه:)
8. اسلاید خالی و کد خالی توضیح دادن و رد شدن و فقط خوندن از روش... تدریس نکنی سنگین تره
9. تجربه های عملی از چیزی ک درس میدی داشته باشی و بگی به ملت... باید مخاطب بفهمه چیزی ک دداره میخونه به درد میخوره و به چه دردایی میخوره:))
10. اهمیت بده به سوال ملت... بحث کن و قانع کن اگه بلدی:)
11. مفهوم یاد بده نه نمونه:)
12. فقط درس خالی نده... هر از گاهی تجربه بگو... مثال بزن... از شکست ها و پیروزی ها بگو... حتی شعر بخون و از رمان هایی ک خوندی صحبت کن:)