برنامه نویسی
Open in Telegram
5 434
Subscribers
No data24 hours
-87 days
-2230 days
Posts Archive
5 434
🔸 کد Todo CLI با ذخیره در JSON (لیست کارها در ترمینال)
import json
from dataclasses import dataclass, asdict
from datetime import datetime
from pathlib import Path
from typing import List
DATA_FILE = Path("todos.json")
@dataclass
class Todo:
id: int
title: str
created_at: str
done: bool = False
def load_todos() -> List[Todo]:
if not DATA_FILE.exists():
return []
with DATA_FILE.open("r", encoding="utf-8") as f:
data = json.load(f)
return [Todo(**item) for item in data]
def save_todos(todos: List[Todo]) -> None:
with DATA_FILE.open("w", encoding="utf-8") as f:
json.dump([asdict(t) for t in todos], f, ensure_ascii=False, indent=2)
def add_todo(title: str) -> Todo:
todos = load_todos()
next_id = max((t.id for t in todos), default=0) + 1
todo = Todo(
id=next_id,
title=title,
created_at=datetime.now().isoformat(timespec="seconds"),
done=False,
)
todos.append(todo)
save_todos(todos)
return todo
def list_todos(show_done: bool = True) -> List[Todo]:
todos = load_todos()
if show_done:
return todos
return [t for t in todos if not t.done]
def mark_done(todo_id: int) -> bool:
todos = load_todos()
updated = False
for t in todos:
if t.id == todo_id:
t.done = True
updated = True
break
if updated:
save_todos(todos)
return updated
def delete_todo(todo_id: int) -> bool:
todos = load_todos()
new_todos = [t for t in todos if t.id != todo_id]
if len(new_todos) == len(todos):
return False
save_todos(new_todos)
return True
def _print_todos(todos: List[Todo]) -> None:
if not todos:
print("No todos yet.")
return
for t in todos:
status = "✅" if t.done else "⏳"
print(f"{t.id:3d} | {status} | {t.title} ({t.created_at})")
def main():
import argparse
parser = argparse.ArgumentParser(description="Simple Todo CLI")
subparsers = parser.add_subparsers(dest="command", required=True)
# add
p_add = subparsers.add_parser("add", help="Add a new todo")
p_add.add_argument("title", help="Title of the todo")
# list
p_list = subparsers.add_parser("list", help="List todos")
p_list.add_argument("--pending", action="store_true", help="Show only pending todos")
# done
p_done = subparsers.add_parser("done", help="Mark todo as done")
p_done.add_argument("id", type=int, help="Todo ID")
# delete
p_del = subparsers.add_parser("delete", help="Delete a todo")
p_del.add_argument("id", type=int, help="Todo ID")
args = parser.parse_args()
if args.command == "add":
todo = add_todo(args.title)
print(f"Added todo #{todo.id}: {todo.title}")
elif args.command == "list":
todos = list_todos(show_done=not args.pending)
_print_todos(todos)
elif args.command == "done":
if mark_done(args.id):
print(f"Marked todo #{args.id} as done.")
else:
print("Todo not found.")
elif args.command == "delete":
if delete_todo(args.id):
print(f"Deleted todo #{args.id}.")
else:
print("Todo not found.")
if __name__ == "__main__":
main()
🔅 یک ابزار ساده در ترمینال که میتوانی:
- کار جدید اضافه کنی
- کارهای انجامنشده رو ببینی
- کارها رو انجامشده علامت بزنی
- کارها رو حذف کنی
✨ همه چیز در یک فایل JSON ذخیره میشود و ثابت میماند.
کاربرد: مدیریت کارهای روزانه برنامهنویسی، ایدهها، وظایف و…
🆔 @RezaDolati015 434
🔸 رزومه یک برنامهنویس باید چی داشته باشه؟
رزومه برنامهنویسی باید کوتاه، شفاف و مهندسیوار باشه. مهمترین بخشها:
🔹 ۱) معرفی کوتاه (Summary)
۳–۲ جمله درباره تخصصت:
«پایتون + بکاند + API طراحی»
🔹 ۲) مهارتها (Skills)
دقیق و دستهبندیشده:
Python, Django, FastAPI
SQL, PostgreSQL
Git, Docker
Linux basics
🔹 ۳) پروژهها (Projects)
مهمترین بخش رزومه برنامهنویس!
برای هر پروژه بنویس:
چیکار میکنه؟
مشکل چی بود؟
چه تکنولوژیهایی استفاده کردی؟
نتیجه چه شد؟ (مثلاً ۳۰٪ سریعتر)
🔹 ۴) تجربه کاری (Experience)
اگر سابقه داری → خلاصه، نتیجهمحور، نه توضیح اضافه.
🔹 ۵) لینکها
لینک GitHub / LinkedIn / وبسایت / پورتفولیو
🎯 نکته طلایی:
رزومه طولانی نمیخواهد؛ شفافیت + پروژه واقعی = رزومه قوی.
🆔 @RezaDolati01
5 434
🚨 «اگر اینترنت ۱ روز قطع بشه، دقیقاً چی میشه؟»
فکر کن یه روز صبح بیدار میشی و… اینترنت نیست!
حالا ببینیم تو دنیای برنامهنویسها چه فاجعهای رخ میده 😂👇
💥 ۱) برنامهنویسها اولش فکر میکنن مودم خرابه
۵ دقیقه ریست مودم…
۳ بار خاموشروشن لپتاپ…
بعد تازه میفهمن مشکل جهانیه 😅
💥 ۲) گیت هاب رسماً تبدیل میشه به سنگنوشته
نه Pull، نه Push، نه Clone
هیچکس نمیفهمه دیشب چی کامیت کرده!
💥 ۳) و ChatGPT unavailable → وحشت جمعی
۱۰٪ برنامهنویسها: «اوکی، خودم کد میزنم»
۹۰٪ برنامهنویسها: «ای وای 😭 الان باید فکر کنم؟»
💥 ۴) فرانتاندها برمیگردن به دوران تاریک: CDNها لود نمیشن
بوت استرپ: ❌
گوگل فونتز: ❌
ریکت: ❌
وبسایتها: بدون استایل زشتتر از همیشه
💥 ۵) دواپسها دقیقاً نمیدونن چی خراب شده ولی خیلی استرس دارن
چون همیشه مقصرن—even وقتی اینترنت قطع باشه 😎
💥 ۶) جالبیش؟ خیلی از اپها حتی بالا نمیان
چون هزار جا API دارن که همشون Down شدن.
⭐️ اما جدی… چطور آفلاین دوام بیاریم؟
🔹 اولا Docs آفلاین نصب کن
Python Docs / Django Docs / MDN / DevDocs
(حواست باشه که DevDocs آفلاین عالیه)
🔹 پروژههات رو طوری بساز که بدون اینترنت اجرا بشن
وابستگیهای حیاتی رو لوکال نگه دار.
🔹 تمرین حل مسئله بدون گوگل
گاهی جوابها تو مغزته، نه تو سرچ.
🔹 نسخههای لوکال دیتابیس و ابزارها رو داشته باش
مثل SQLite، Postgres، Redis لوکال
🆔 @RezaDolati01
5 434
🔸 4 کتابخانه کاربردی که احتمالاً تا حالا اسمشون رو نشنیدی
1) کتابخانه Schedule — اجرای کارها در زمانبندی ساده
یک کرونجاب کوچک داخل پایتون:
schedule.every().day.at("12:00").do(job)
برای رباتها، مانیتورینگ، اتوماسیون.
2) کتابخانه Tenacity — ریترای هوشمند
اگر یک درخواست API یا عملیات شبکه Fail شد، Tenacity با استراتژیهای مختلف (backoff, exponential) خودش دوباره تست میکنه.
3) کتابخانه Textual — ساخت UI در ترمینال
یک فریمورک مدرن برای ساخت اپهای ترمینالی شبیه VSCode! دکمه، پنجره، تب، انیمیشن… همه داخل ترمینال.
4) کتابخانه Faker — ساخت دادههای جعلی
برای تست پروژهها داده تصادفی تولید میکند: نام، ایمیل، شماره، تاریخ، آدرس، متن، دیتای فروشگاهی و…
🆔 @RezaDolati015 434
🛠 ابزار DevToys — جعبهابزار برنامهنویسها
اگر تا حالا بین سایتهای مختلف دنبال Base64 Encoder، JSON Formatter، UUID Generator، Regex Tester و… میگشتی، دیگه لازم نیست!
ابزار DevToys یک ابزار All-in-One آفلاین برای ویندوز/لینوکس/macOS هست که ۳۰+ ابزار ضروری رو یکجا بهت میده.
🔹 JSON → مرتبسازی، ولیدیشن
🔹 JWT Decoder
🔹 Diff ابزار برای مقایسه دو متن یا فایل
🔹 Hash Generator (MD5, SHA256, …)
🔹 URL Encoder/Decoder
🔹 Number Base Converter
🔹 Text Cleaner
رایگان، سریع، بدون نیاز به اینترنت.
🎯 چرا خفنه؟
چون نصف کارهایی که هر روز گوگل میکردی رو همین تو انجام میده!
🆔 @RezaDolati01
5 434
🔸 کد Password Generator حرفهای (با انتخاب طول، عدد، سمبل)
import random
import string
def generate_password(length=12, use_digits=True, use_symbols=True):
if length < 4:
raise ValueError("Password length should be at least 4.")
letters = string.ascii_letters
digits = string.digits if use_digits else ""
symbols = "!@#$%^&*()-_=+[]{};:,.<>/?\\" if use_symbols else ""
all_chars = letters + digits + symbols
if not all_chars:
raise ValueError("No characters available to generate password.")
password_chars = []
# حداقل یک حرف
password_chars.append(random.choice(letters))
# حداقل یک عدد
if use_digits:
password_chars.append(random.choice(string.digits))
# حداقل یک سمبل
if use_symbols:
password_chars.append(random.choice(symbols))
while len(password_chars) < length:
password_chars.append(random.choice(all_chars))
random.shuffle(password_chars)
return "".join(password_chars)
if __name__ == "__main__":
try:
length_str = input("Password length (default 12): ").strip()
length = int(length_str) if length_str else 12
use_digits = input("Include digits? (y/n, default y): ").strip().lower() != "n"
use_symbols = input("Include symbols? (y/n, default y): ").strip().lower() != "n"
pwd = generate_password(length, use_digits, use_symbols)
print("Generated password:", pwd)
except Exception as e:
print("Error:", e)
🔅 این اسکریپت یک پسورد امن برات میسازه. میتونی تعیین کنی طول پسورد چقدر باشه، آیا عدد داشته باشه یا سمبل، و در نهایت یک رمز تصادفی قوی میده.
کاربرد: ساخت پسوردهای امن برای اکانتها، پروژهها، API keys و…
🆔 @RezaDolati015 434
🔸 کُدهایی که واقعاً دنیا رو میسازن (قسمت ۲)
این بار بریم سراغ الگوریتمهای سطح بالا؛ چیزهایی که واقعاً دنیای دیجیتال رو میچرخونن 👇👇🔥
🗺 ۱) گوگل مپ چطور مسیر کوتاهتر رو پیدا میکنه؟
وقتی مسیر میگیری، گوگلمپ پشتصحنه از نسخههایی از الگوریتم دایکسترا و A✱ استفاده میکنه.
فرمول سادهسازیشده A*:
f(n) = g(n) + h(n) g(n) → فاصله طیشده h(n) → حدس فاصله باقیمانده (Heuristic)همین ایده «حدس + مسیر واقعی» باعث میشه سریعترین مسیر پیدا بشه. بدون این الگوریتم، هیچ مسیریاب جهانی کار نمیکرد. 🎬 ۲) الگوریتمهای پیشنهاددهنده Netflix / TikTok چگونه کار میکنند؟ اسمشون سنگینه، اما پایهشون سادهست: Similarity + Feedback Loop فرمول نمونه شباهت:
similarity = dot(user_vector, item_vector)اگر فیلم/ویدئوهایی که دوست داشتی مشابه X باشن → یهو برایت پرش میکنه! تیک تاک از سیستمهای وزندهی لحظهای استفاده میکنه: چقدر نگاه کردی اسکرول کردی؟ لایک کردی؟ چند بار برگشتی؟ همه اینها به یک عدد تبدیل میشه ، پست بعدی که میبینی انتخاب میشه. 🎯 پشتپرده پلتفرمهای عظیم دنیا، از همین الگوریتمهای ساده ساخته شده، ترکیبی از ریاضی پایه + داده + کمی هوش مصنوعی. 🆔 @RezaDolati01
5 434
🔸 کُدهایی که واقعاً دنیا رو میسازن (قسمت ۱)
🌍 همیشه فکر میکنیم دنیا رو مدیرها و سیاستگذارها میگردونن…
ولی واقعیت اینه که دنیا روی چند خط کد میچرخه!
این شما و این ۳ مثال واقعی 👇
🚦 ۱) کدی که چراغ راهنمایی شهر رو کنترل میکنه
همین الان که داری این پست رو میخونی، هزاران چراغ راهنمایی با الگوریتمی ساده کار میکنن:
if traffic_density > threshold:
extend_green_light(10)
else:
normal_cycle()
همین چند خط ساده میتونه:
ترافیک رو کم کنه، تصادف کم کنه، آلودگی کاهش بده
دنیا خیلی وقتها با همین if-else میچرخه!
💳 ۲) الگوریتمی که بانکی بودن یا نبودن کارت رو چک میکنه
همون لحظهای که کارت میکشی، یک الگوریتم قدیمی اما فوقمهم فعال میشه:
Luhn Algorithm
def luhn(card):
s = 0
for i, d in enumerate(card[::-1]):
if i % 2:
d = d * 2
if d > 9: d -= 9
s += d
return s % 10 == 0
اگر این الگوریتم نبود؟
تقریباً تمام پرداختهای دیجیتال دنیا از کار میافتاد.
🍔 ۳) کدی که صف رستورانها رو مدیریت میکنه
رستورانهای زنجیرهای از سادهترین ساختار داده استفاده میکنن:
queue.append(customer)
serve(queue.pop(0))
نتیجه؟
صف منظم، مشتری راضی، مدیریت دقیق زمان سرویسدهی
گاهی یک queue ساده = میلیونها دلار مدیریت بهتر.
🎯 پشت پرده دنیا، همین الگوریتمهای سادهست.
🆔 @RezaDolati015 434
🚀 رودمپ کامل مهندس هوش مصنوعی (AI Engineer Roadmap)
مسیر از صفر تا حرفهای
(کاملاً عملی، واقعی و مطابق بازار کار)
🎯 فاز 1: پایههای ضروری کامپیوتر
قبل از وارد شدن به AI باید این ۴ مهارت رو بلد باشی:
1) ریاضی ضروری برای AI
(نیازی به ریاضیات دانشگاهی خیلی سنگین نیست؛ همینا کافیه)
🔅 جبر خطی: ماتریس، بردار، eigenvector، dot product
🔅 حساب دیفرانسیل: مشتق، گرادیان، زنجیرهای
🔅 آمار و احتمال: توزیعها، میانگین، واریانس، Bayes
🔅 بهینهسازی (Optimization): گرادیاندیسانت
📌 ابزارهای یادگیری: Khan Academy, 3Blue1Brown
🎯 فاز 2: Python برای هوش مصنوعی
مهندس AI بدون پایتون = تقریباً غیرممکن
چیزهایی که باید یاد بگیری:
🔅 سینتکس پایه، توابع، OOP
🔅 پکیج Numpy
🔅 پکیج Pandas
🔅 پکیج Matplotlib / Seaborn
🔅 آشنایی با Jupyter Notebook
🔅 و Virtualenv / pip
📌 پروژهها:
🔅 تحلیل دیتای ساده
🔅 رسم نمودار
🔅 فیلتر و تمیزکاری دادهها
🎯 فاز 3: مبانی یادگیری ماشین (Machine Learning)
باید ML رو عمیق و اصولی یاد بگیری
1) مفاهیم پایه
🔅 یادگیری Supervised / Unsupervised
🔅 مفاهیم Overfitting / Underfitting
🔅 درک Train / Validation / Test
🔅 مفاهیم Bias–Variance
🔅 آشنایی با Cross Validation
2) الگوریتمها
🔅 کار با Linear Regression
🔅 و Logistic Regression
🔅 یادگیری SVM
🔅 درک Decision Tree & Random Forest
🔅 یادگیری Naive Bayes
🔅 آشنایی با KNN
🔅 یادگیری Clustering (KMeans)
3) ابزارها
🔅 پکیج scikit-learn
🔅 و MLflow (اختیاری)
📌 پروژهها:
🔅 پیشبینی قیمت خانه
🔅 تشخیص اسپم
🔅 دستهبندی تصاویر ساده (با classical ML)
🎯 فاز 4: مبانی Deep Learning
جایی که هوش مصنوعی جدی شروع میشود
مهارتهای مورد نیاز:
🔅 کار با TensorFlow یا PyTorch (ترجیحاً PyTorch)
🔅 یادگیری Backpropagation
🔅 اهمیت Activation Functions
🔅 آشنایی با Optimization: Adam, SGD
🔅 مفهوم Loss Functions
🔅 و GPU Training
📌 تمرینها:
🔅 ساخت یک MLP ساده
🔅 تشخیص دستنویس MNIST
🔅 ساخت autoencoder کوچک
🎯 فاز 5: شبکههای عصبی پیشرفته
سطحی که مهندسان AI واقعی واردش میشن
1) شبکههای CNN (بینایی ماشین)
🔅 Conv, Pooling
🔅 Transfer Learning
🔅 VGG, ResNet, EfficientNet
📌 پروژه: تشخیص اشیاء پایه با CNN
2) شبکههای RNN
🔅 شبکه RNN, LSTM, GRU
کاربرد: متن، گفتار، سری زمانی
3) شبکههای Transformers
🔅 Attention
🔅 Encoder / Decoder
🔅 BERT, RoBERTa, GPT
📌 پروژه: Sentiment Analysis با Transformer
🎯 فاز 6: مدلهای تخصصیتر
زمانی که وارد حوزههای جدیتر و کاربردی میشی
Computer Vision
🔅 Object Detection (YOLO, SSD)
🔅 Segmentation (U-Net)
🔅 Face Recognition
🔅 NLP
🔅 Tokenization
🔅 Word Embeddings
🔅 HuggingFace Transformers
🔅 Fine-tuning LLMs
🔅 Speech / Audio
🔅 MFCC
🔅 Spectrogram
🔅 Speech Emotion Recognition
🔅 Whisper Models
🎯 فاز 7: ابزارهای مهندسی هوش مصنوعی (AI Engineering)
این بخش شما را از "صرفاً مدلساز" جدا میکند
🔅 MLOps
🔅 Docker
🔅 Git
🔅 MLflow
🔅 DVC
🔅 CI/CD
🔅 Kubernetes (اختیاری)
🔅 Deployment
🔅 API با FastAPI
🔅 Serving با TorchServe / TF Serving
🔅 Streamlit / Gradio برای UI سریع
🔅 Data Engineering پایه
🔅 SQL
🔅 Airflow
🔅 Spark (اختیاری)
🎯 فاز 8: پروژههای واقعی (Portfolio)
برای استخدام، پروژهها مهمتر از مدرکاند
پروژههای پیشنهادی:
🔅 مدل تشخیص چهره
🔅 طبقهبندی متن با BERT
🔅 تحلیل احساسات شبکه اجتماعی
🔅 مدل پیشبینی سری زمانی
🔅 اپلیکیشن AI با FastAPI
🔅 داشبورد هوش مصنوعی با Streamlit
🔅 فاین تیونینگ یک مدل LLM کوچک
🎯 فاز 9: مهارتهای ویژه مهندس AI
🔅 درک معماری مدلها
🔅 مدیریت GPU
🔅 بهینهسازی مدلها
🔅 کار با دیتاستهای بزرگ
🔅 خواندن مقالات ML (ArXiv)
🔅 و Ray / Distributed Training
🎯 فاز 10: ورود به بازار کار
مسیرهای شغلی:
🔅 AI Engineer
🔅 Machine Learning Engineer
🔅 Deep Learning Engineer
🔅 MLOps Engineer
🔅 NLP Engineer
Computer Vision Engineer🔅
رزومهات باید شامل:
✔️ پروژههای کاربردی
✔️ گیت هاب فعال
✔️ تسلط بر ML + DL
✔️ یک حوزه تخصصی (CV یا NLP)
🆔 @Rezadolati01
5 434
🔸 معرفی jsonplaceholder — API آماده برای تمرین
🛠 jsonplaceholder.typicode.com یک API رایگان برای تست و تمرین:
📌 Endpoints آماده:
/posts
/comments
/users
/todos
/photos
مناسب برای تمرین:
🔅 تمرین Front-End (React, Vue, Next)
🔅 و Postman، Insomnia
🔅 آموزش REST API
🔅 تست fetch / axios
هیچ ثبتنامی نداره، فقط URL رو بزن → داده میده
🆔 @Rezadolati01
5 434
🔸 ساخت API کوچک با FastAPI
🔹 سریع، تمیز و فقط چند خط کد!
pip install fastapi uvicorn
🔹 فایل main.py:
from fastapi import FastAPI
app = FastAPI()
@app.get("/")
def home():
return {"message": "Hello API!"}
🔹 اجرا:
uvicorn main:app --reload
🔹 حالا API آمادهست
باز کن: http://localhost:8000
🔹 کمترین کد برای ساخت یک سرویس واقعی!
🆔 @Rezadolati015 434
🔸 خلاصه کتاب Clean Code در 15 نکته
کتاب Clean Code میگه:
«کدی بنویس که از خواندنش لذت ببری، نه اینکه لعنتش کنی!» 😄
این 15 اصل مهمش:
1️⃣ اسمگذاری واضح و معنیدار
اسمها باید بگن دقیقاً چیکار میکنن:
مثلا calculate_total بهتر از ct عه
2️⃣ توابع کوتاه، یککارِه
هر تابع باید فقط یک مسئولیت داشته باشه.
هرچی کوتاهتر: بهتر.
3️⃣ کاهش تعداد پارامترها
3 تا پارامتر اوکیه، 5 تا یعنی مشکل داری.
وقتی زیاد شد: احتمالاً باید یک کلاس بسازی.
4️⃣ عدم تکرار کد (DRY)
اگه کدی رو کپی میکنی، یعنی داری اشتباه میکنی.
تابع بساز، abstraction بساز.
5️⃣ کامنتها = آخرین راه
کد خوب نیازی به کامنت نداره.
اگه مجبور شدی توضیح بدی، یعنی کدت مفهوم نیست.
6️⃣ کد خوانا مهمتر از کد کوتاه
یک خطیهای عجیب = دشمن Clean Code
کد باید ساده و قابل فهم باشه.
7️⃣ کلاسها باید کوچک باشند
یک کلاس = یک مسئولیت
اگر کلاس ۲۰۰۰ خطه: باید تیکهتیکه بشه.
8️⃣ استفاده از Exception بهجای کدهای خطا
کدهای if زیاد خوانایی رو میکشن.
در واقع Exceptionها تمیزتر و قابل مدیریتتر هستند.
9️⃣ مدیریت استثنا تمیز
چیزی مثل:
except:
pass
گناه نابخشودنیه 😄
حداقل Log بذار.
🔟 وابستگیها را تا حد ممکن کم کنید
کلاسها نباید بهم قفل بشن.
استفاده از Interface / Dependency Injection خیلی کمک میکنه.
1️⃣1️⃣ کدهای مرده را حذف کن
توابع بلااستفاده، printها، تستهای نصفه…
اگه لازم شد از گیت میاری. حذف کن.
2️⃣1️⃣ ساختار پوشهها مثل داستان باید قابل دنبالکردن باشه
کد باید منطقی گروهبندی بشه:
مثلا : models / services / utils / api
3️⃣1️⃣ تستنویسی = کد تمیز
کد تمیز بدون تست کامل نیست.
Unit Test = بهترین دوست توسعهدهنده.
4️⃣1️⃣ و Refactor همیشه ادامه دارد
کد «تمیز شده» وجود ندارد.
کد «تمیزتر» داریم.
هرچی جلوتر میری، بهتر رفرکتور کن.
5️⃣1️⃣ سادگی = پیچیده نکردن الکی
پترن استفاده نکن فقط چون اسمش باکلاسه.
وقتی لازم شد: استفاده کن.
🆔 @Rezadolati015 434
🔸 معرفی regex101: تست آنلاین Regex با توضیح خط به خط
🔍 وبسایت regex101.com بهترین سایت برای تست و یادگیری Regex به صورت زنده.
✨ ویژگیها:
- توضیح هر قسمت Regex بهصورت خودکار
- هایلایت قسمتهایی که match میشن
- پشتیبانی از Python, JS, PHP, Golang و…
- ساخت Regex و ذخیرهسازی و share
اگه با regex درگیر میشی → ۱۰ برابر سریعتر کارتو راه میندازه!
🆔 @Rezadolati01
5 434
🔸 ساخت PDF ساده با پایتون
🔹 با کتابخانهٔ reportlab میتونی در ۵ دقیقه PDF بسازی:
pip install reportlab
🔹 مثال:
from reportlab.pdfgen import canvas
c = canvas.Canvas("hello.pdf")
c.drawString(100, 750, "Hello from Python!")
c.save()
🔹 خروجی: یک PDF با یک جمله داخلش.
🔹 میتونی چند صفحه، فونت، یا جدول هم اضافه کنی.
🔹 کاربرد: فاکتور، گزارش، رسید.
🆔 @Rezadolati015 434
🔸 معرفی سایت roadmap.sh: نقشه راه همهٔ برنامهنویسها
🌐 وبسایت roadmap.sh یکی از بهترین سایتها برای دیدن مسیر یادگیری هر حوزهست:
برنامهنویسی وب، DevOps، مهندسی داده، هوش مصنوعی، امنیت و دهها مسیر دیگه.
⭐️ امکانات مهم:
- نقشه راه تصویری و قابل دنبال کردن
- منابع پیشنهادی برای هر مهارت
- آپدیتهای منظم
- نسخه interactive که تیک میزنی تا مسیرت مشخص بشه
اگر نمیدونی از کجا شروع کنی → این سایت بهترین نقطه شروعه.
🆔 @Rezadolati01
