Dev Perfects
40 subscribers
9.23K photos
1.26K videos
468 files
13K links
بخوام خیلی خلاصه بگم
این کانال میاد مطالب کانالای خفن تو حوزه تکنولوژی و برنامه نویسی رو جمع میکنه

پست پین رو بخونید
https://t.iss.one/dev_perfects/455


ارتباط:
https://t.iss.one/HidenChat_Bot?start=936082426
Download Telegram
Forwarded from کداکسپلور | CodeExplore (𝙰𝚖𝚒𝚗)
👋‏Cookiecutter یه ابزار خیلی خوب واسه برنامه‌نویس‌هاست که کمک می‌کنه پروژه‌های جدید رو سریع‌تر و با ساختار درست شروع کنن. این ابزار با پایتون ساخته شده، ولی می‌تونی واسه هر زبانی ازش استفاده کنی.

👀 Cookiecutter چجوری کار می‌کنه؟

1⃣ تمپلیت‌ها (Templates): Cookiecutter از یه سری الگوها استفاده می‌کنه که شامل پوشه‌ها، فایل‌ها و کدهای اولیه‌ی پروژه هستن. این الگوها معمولاً روی گیت‌هاب ذخیره می‌شن و می‌تونی از اینترنت دانلودشون کنی یا خودت بسازی.

2⃣ سوال و جواب: وقتی یه پروژه جدید با Cookiecutter درست می‌کنی، ازت یه سری سوال می‌پرسه (مثل اسم پروژه، اسم نویسنده و اینجور چیزا) و با توجه به جواب‌های تو، الگو رو شخصی‌سازی می‌کنه.

3⃣ ساخت پروژه: بعد از جواب دادن به سوالا، Cookiecutter یه پروژه جدید می‌سازه که همه چی رو توش تنظیم کرده و آماده‌ست. این پروژه شامل فایل‌ها، پوشه‌ها و کدهای اولیه هست که با توجه به تنظیمات تو درست شده.

💥 چرا باید از Cookiecutter استفاده کنی؟

- سرعت: سریع می‌تونی پروژه‌های جدید رو راه بندازی.
- استاندارد بودن: همه‌ی پروژه‌هات یه ساختار و تنظیمات مشابه دارن.
- سفارشی‌سازی: می‌تونی تمپلیت‌های مخصوص به خودت رو بسازی.

⚡️ چطور از Cookiecutter استفاده کنی؟

1. نصب Cookiecutter:

   pip install cookiecutter


2. ایجاد پروژه جدید با استفاده از یه تمپلیت:

   cookiecutter gh:cookiecutter/cookiecutter-pypackage


اینجا gh: یعنی الگو از GitHub میاد و cookiecutter-pypackage هم اسم یه تمپلیت معروف واسه ساخت پکیج‌های پایتون هست.

بعدش سوالا رو جواب میدی و پروژه آماده میشه!

#software #cookiecutter
☕️ @CodeExplore
Please open Telegram to view this post
VIEW IN TELEGRAM
👍1
Forwarded from Go Casts 🚀
معرفی یه دوره ناب

چهار سال پیش به توصیه استاد عزیز مصطفی جان صولتی شروع کردم به دیدن دوره ویدیویی uncle bob

و نمیتونم بگم دیدن این دوره، حتی در حد ۱۰، ۱۵ جلسه اولش، چقدر به شما دید خوبی میده در مورد مسائل مختلف مهندسی نرم افزار

این دوره رو نبینید که نکاتش رو حفظ کنید، این دوره رو ببینید که از قدرت تحلیل بهره مند بشید.

اصلا مهم نیست چقدر uncle bob رو قبول دارید یا نه، و اصلا مهم نیست که در نهایت قبولش خواهید داشت یا نه، مهم اینه که شنیدن حرف هاش به عنوان یه برنامه نویس با تجربه به شما قدرت تحلیل میده، حتی اگه در نهایت خروجی تحلیل شما باهاش متفاوت بشه، مهم بهره مند شدن از قدرت تحلیل هست و نه خروجی تحلیل…

اون موقع وقت و حوصله بیشتر بود و نکته برداری میکردم و تحلیل میکردم، به همه تون دیدن این سری ویدیویی رو توصیه میکنم

https://cleancoders.com/library/all


توضیحات «دوره + تیمسازی بکند و گولنگ Go Casts» و تخفیف ۵۰ درصدی رو در این پست میتونید بخونید 👇
https://t.iss.one/gocasts/515


@gocasts


#uncle_bob #clean_architecture #clean_code #software
خب خب خب ارایه ها

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

چطوری یه آرایه بسازیم؟ 🤔
تو بیشتر زبان‌های برنامه‌نویسی، آرایه‌ها باید نوع داده‌ی یکسانی داشته باشن و معمولا موقع تعریف، نوع داده‌شون مشخص می‌شه. اما تو پایتون این محدودیت وجود نداره و می‌تونیم آرایه‌ای کاملا داینامیک بسازیم:
my_array = [] # آرایه خالی در پایتون 

مثال از C/C++:
int my_array[4]; // آرایه‌ای از ۴ عدد صحیح 

در واقع، لیست‌های پایتون جایگزینی برای آرایه‌ها هستن ولی برای راحتی، بهشون آرایه می‌گیم.

چطور به داده‌های آرایه دسترسی داشته باشیم؟ 👀
در بیشتر زبان‌ها این کار خودکار هندل می‌شه و می‌تونیم به کمک ایندکس داده‌ی موردنظرمون رو بخونیم:
my_array = [1, 2, 3]
print(my_array[2]) # خروجی: 3

ولی به‌طور کلی، آدرس یک عنصر در حافظه این‌جوری حساب می‌شه:
Loc = (سایز هر عنصر × ایندکس) + آدرس شروع آرایه

چطور مقدار آرایه رو تغییر بدیم؟ 🔄

🔹 اضافه کردن مقدار جدید:
my_array.append(4) # اضافه کردن مقدار ۴ به آخر آرایه 

🔹 حذف مقدار خاصی از آرایه:
del my_array[2] # حذف مقدار سوم آرایه

🔹 تغییر مقدار یک خانه:
my_array[0] = 6 # مقدار اولین عنصر رو ۶ می‌کنیم 

سرعت اجرای عملیات‌ها

🔹 خواندن یک مقدار از آرایه:
دسترسی به آرایه‌ها با توجه به فرمول بالا O(1) یعنی ثابت هست، چون مستقیماً به آدرسش توی حافظه دسترسی داریم و با تغییر تعداد داده ها هیج تغییری ایجاد نمیشه.

🔹 اضافه و حذف کردن مقدار:
اگر مقدار رو به آخر آرایه اضافه یا حذف کنیم → O(1)
ولی اگر بخوایم مقدار رو از وسط یا اول آرایه حذف کنیم یا جابه‌جا کنیم، باید همه‌ی مقدارهای بعدی هم جابجا شن که وابسته به تعداد ایتم هامون هست و هر چی بیشتر باشه سرعت پایینتری داریم → O(n)

جمع‌بندی
آرایه یه ساختار داده‌ی خطی برای ذخیره داده‌های مشابهه.
خواندن داده از آرایه خیلی سریع انجام می‌شه.
اضافه/حذف مقدار زمان‌بر هست، مخصوصا اگر تعداد داده‌ها زیاد باشه.
آرایه حافظه‌ی از پیش تخصیص داده‌شده داره، پس ممکنه فضای اضافی هدر بره.
توی پست‌های بعدی میریم سراغ ساختارهای دیگه مثل لیست پیوندی.

#️⃣ #programming #software



🥷 CHANNEL | GROUP
class Subject:
def __init__(self):
self._observers = [] # لیست ناظرها

def attach(self, observer):
self._observers.append(observer)

def notify(self, message):
for observer in self._observers:
observer.update(message)

class Observer:
def __init__(self, name):
self.name = name

def update(self, message):
print(f"{self.name} received: {message}")

# تست کردن
subject = Subject()
observer1 = Observer("کاربر ۱")
observer2 = Observer("کاربر ۲")

subject.attach(observer1)
subject.attach(observer2)
subject.notify("پیام جدید اومد!")

Subject لیستی از ناظرها رو نگه می‌داره و با attach می‌تونین ناظر جدید اضافه کنین.
وقتی notify صدا زده می‌شه، متد update همه‌ی ناظرها اجرا می‌شه و پیام رو دریافت می‌کنن.
این الگو باعث می‌شه ارتباط بین اشیاء پویا و منعطف باشه.

🔍 چرا Design Patterns مهم هستن؟
کد تمیزتر:
با استفاده از الگوها، کدتون ساختارمند و قابل‌فهم‌تر می‌شه.

نگهداری آسون‌تر:
چون از راه‌حل‌های استاندارد استفاده می‌کنین، بعداً تغییر دادن یا گسترش کد راحت‌تره.

ارتباط بهتر:
برنامه‌نویس‌ها با اسم الگوها می‌تونن سریع منظور همدیگه رو بفهمن.

بهینه‌سازی زمان:
به جای اختراع دوباره‌ی چرخ، از راه‌حل‌های تست‌شده استفاده می‌کنین.


جمع‌بندی
Design Patterns مثل یه جعبه‌ابزار برای برنامه‌نویس‌ها هستن. این الگوها فقط یه بخش کوچیک از دنیای بزرگ Design Patterns هستن و تو کتاب Gang of Four، ۲۳ الگوی مختلف معرفی شده که هر کدوم کاربرد خاص خودشون رو دارن.

#️⃣ #programming #software


🥷 CHANNEL | GROUP
👩‍💻 10 تکنیک مقیاس‌بندی پایگاه داده 👩‍💻

1. ایندکس‌گذاری (Indexing):
افزودن ساختارهای داده مثل B-Tree یا Hash برای سرعت بخشیدن به جستجو و کاهش نیاز به اسکن کامل جدول.


2. مقیاس‌پذیری عمودی (Vertical Scaling):
ارتقای سخت‌افزار سرور (CPU قوی‌تر، RAM بیشتر، دیسک سریع‌تر) برای افزایش توان پایگاه داده بدون تغییر معماری.


3. کش کردن (Caching):
ذخیره‌سازی نتایج پرس‌وجوهای پرتکرار در حافظه (مثل Redis یا Memcached) برای کاهش بار روی دیتابیس.


4. شاردینگ (Sharding):
تقسیم داده‌ها بین چند پایگاه داده مستقل بر اساس کلید (مثلاً User ID) برای پخش بار و جلوگیری از تمرکز.


5. تکرار داده (Replication):
کپی‌کردن داده‌ها روی چند سرور (Master/Slave یا Primary/Replica) برای تحمل خطا و افزایش سرعت خواندن.


لایک و شیر کنید تا پارت دوم هم درست کنم❤️⚡️

#سیستم_دیزاین #مهندسی_نرم_افزار #دیتابیس #میلاد_خسروی #software_engineering #system_design

📱 @MilwadKhosravi
Please open Telegram to view this post
VIEW IN TELEGRAM