TheCodəPod
289 subscribers
269 photos
103 videos
7 files
165 links
باما همیشه بروز باشید =)
Download Telegram
👨‍💻 برنامه نویسی رو از صفر مطلق یاد بگیر با ساخت پروژه های واقعی و حل تمرین ها

هوش مصنوعی OpenLume مثل یه معلم خصوصی برات نقشه راه شخصی میچینه و قدم به قدم کمکت میکنه

➖ اول سطح دانش تو رو میسنجه و بعد براساسش یه برنامه آموزشی با کیس های واقعی میسازه
➖ هر پایه ای که لازم داشته باشی از الگوریتم و ساختمان داده ها گرفته تا فریم ورک ها و کتابخونه های تخصصی
➖ بدون هیچ روتین و درس خسته کننده همه چی رو در عمل حل میکنی و یاد میگیری
➖ سرویس حتی با صدا هم باهات حرف میزنه مثل یه معلم مهربون ولی جدی دقیق بهت میگه کجا اشتباه کردی

#ai
👍2🔥1
بررسی کد فقط در چند دقیقه!

سرویسی اومده که با استفاده از هوش مصنوعی، کد رو اسکن می‌کنه، آسیب‌پذیری‌ها رو پیدا می‌کنه و حتی با ابزارهای پنتست حمله رو شبیه‌سازی می‌کنه.

در واقع Strix به‌صورت خودکار پروژه‌ت رو بررسی می‌کنه، مشکلات رو رفع می‌کنه و گزارش آماده می‌کنه — کاملاً امن و روی سیستم خودت اجرا می‌شه.
🔥4👍1
This media is not supported in your browser
VIEW IN TELEGRAM
👨‍💻کتابخونه Muuri: جادوگر چیدمان‌های وب! ✨

تا حالا شده بخوای یه گالری عکس بسازی که بشه عکس‌ها رو با Drag-and-drop توش جابه‌جا کرد؟ یا یه داشبورد که کاربر خودش بتونه کارت‌ها رو بچینه؟ اگه اینجور کارها به نظرت سخت میاد، Muuri دقیقاً همون چیزیه که دنبالشی!

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

کتابخونه Muuri هم خیلی قدرتمنده و هم خیلی سبکه، برای همین عملکردش عالیه و با فریم‌ورک‌هایی مثل React و Vue هم به خوبی هماهنگ میشه. اگه دنبال یه راه ساده و حرفه‌ای برای ساختن چیدمان‌های تعاملی و زیبا هستی، حتماً یه سر بهش بزن!

🔗 https://muuri.dev

#library #js
❤3🔥1
تایپ‌هینتینگ (Type Hinting) در پایتون 🐍

پایتون ذاتاً داینامیک تایپ هست یعنی وقتی یه متغیر تعریف می‌کنی، لازم نیست نوعش رو مشخص کنی:
x = 10       # از نوع عددی
y = "Hi" # از نوع رشته

✅ نکته مثبت: این موضوع داینامیک بودن سرعت کدنویسی رو بالا می‌بره

❌ اما تو پروژه‌های بزرگ می‌تونه باعث خطاهای سردرگم بشه (مثلاً خطا میده ولی نمی‌دونی مشکل از کجاست)


🫟 ورود Type Hinting

اینجاست که Type Hinting به کمکت میاد. در واقع این مفهوم میگه که تو می‌تونی به طور پیش‌فرض نوع داده رو مشخص کنی.

مثال ساده
name: str = "CodePode"
age: int = 1
height: float = 1.88
is_active: bool = True

مثال در توابع
def add(a: int, b: int) -> int:
return a + b

اینجا گفتیم متغیرهای a و b از نوع عددی باشن و خروجی تابع هم عددی باشه



📦 مثال پیچیده‌تر
def process_items(items: list[str]):
for item in items:
print(item)

اینجا گفتیم پارامتر items باید از نوع لیست رشته‌ای باشه



⚠️ یک نکته خیلی مهم

در واقع Type Hinting فقط راهنماست پایتون خودش جلو اجرای کد رو نمی‌گیره
def add(a: int, b: int) -> int:
return a + b


print(add("5", "10")) # اجرا میشه
print(add(5, "10")) # خطا میده (TypeError)

🔹 همونطور که می‌بینید خروجی تابع می‌تونه خلاف چیزی باشه که تعریف کردی ولی ابزارهایی مثل mypy یا IDEها (مثل PyCharm و VS Code) بهت اخطار میدن


🛠 موارد پرکاربرد در Type Hinting

۱. Optional (مقدار می‌تونه None باشه)
from typing import Optional

def greet(name: Optional[str]) -> str:
return f"Hello {name}" if name else "Hello Stranger"

Optional[str] ?
یعنی پارامتر name می‌تونه رشته (str) یا None باشه

اگر هیچ مقداری بهش ندی یا مقدارش None باشه، تابع همچنان درست اجرا میشه.

۲. Union (چند نوع مختلف مجاز)
from typing import Union

def square(x: Union[int, float]) -> float:
return x * x

Union[int, float] ?

یعنی پارامتر x می‌تونه عدد صحیح (int) یا اعشاری (float) باشه

یعنی تابع می‌تونه با هر دو نوع کار کنه و خروجی رو به صورت float برگردونه
۳. Any (هر نوعی قبول کنه)
from typing import Any
def log(data: Any) -> None:
print(data)

Any ?
یعنی پارامتر data می‌تونه از هر نوعی باشه: عدد، رشته، لیست، دیکشنری، حتی شیء

در واقع هیچ محدودیتی روی نوع داده وجود نداره.

🚀 نسخه‌های جدید پایتون (3.9+)

از پایتون 3.9 به بعد نوشتن Type Hint ساده‌تر شد:
def process(data: list[int]) -> dict[str, int]:
return {str(i): i for i in data}

دیگه لازم نیست از typing.List یا typing.Dict استفاده کنی.


🏆 چرا Type Hinting مهمه؟

🔍 خطاها رو زودتر پیدا می‌کنیم (قبل از اجرا).

🧑‍🤝‍🧑 کار تیمی راحت‌تر میشه

📝 مستندات کد واضح‌تر و خواناتر میشن.

🤖 ابزارهایی مثل mypy یا VS Code کمک می‌کنن سریع‌تر دیباگ کنیم


📌 جمع‌بندی

استفاده از Type Hinting اجباری نیست، اما توی پروژه‌های جدی شدیداً توصیه میشه.
بهتره حتی تو پروژه‌های کوچیک هم کم‌کم ازش استفاده کنی، تا وقتی کدت بزرگ‌تر شد مدیریت راحت‌تر باشه
🔥6❤‍🔥1
Forwarded from Geek Engineers ([ Taha. Dostifam ])
این هم از زبان برنامه نویسی Cyrus که ما موفق به ساختش شدیم.

قدیمیای کانال از روند توسعه ش خبر دارن :)
منتها حقیقتا راه دور و درازی در پیش داریم که توسعه کامپایلر مصیبت های خودشو داره. منتها با کمک و همراهی شما دوستان پیشرفت خیلی زیادی داشتیم و امیدواریم که از پس جبران حمایت های شما بر بیایم.

در حال حاضر داریم type system رو تست میکنیم تا اینکه تا حدی stable بشه. هر موقع استیبل بشه به ادامه دولوپ فیچر های high level مثل error handling و macro ها و generic type ها خواهیم پرداخت انشالله.

#cyrus
@cyrus_lang
https://github.com/cyrus-lang/Cyrus
❤1😁1
باینری :
حالت خاصی از ،داده‌های دسته‌بندی‌شده با دو دسته مقادیر (0/1 ، درست/نادرست)
❤2👍1
Forwarded from EBooks World
اگر همیشه کنجکاو بوده‌اید که پشت صحنه‌ی مدل‌های زبانی بزرگ مثل ChatGPT چه می‌گذرد، کتابی که به دنبالش بودید همین‌جاست!
کتاب Build a Large Language Model (From Scratch) نوشته‌ی Sebastian Raschka، فرصتی بی‌نظیر برای یادگیری ساخت یک مدل زبانی از صفر است—کاملاً کاربردی، گام‌به‌گام، و مناسب اجرا روی لپ‌تاپ شخصی شما.
در این کتاب، نه‌تنها با مفاهیم اصلی مانند معماری ترنسفورمر و مکانیزم توجه آشنا می‌شوید، بلکه از پیش‌پردازش داده‌ها تا آموزش و تنظیم دقیق مدل برای وظایف خاص مثل طبقه‌بندی متن و پاسخ به دستورات انسانی را به‌صورت کامل پیاده‌سازی خواهید کرد.


🔗
https://www.ebooksworld.ir/post/index/1032
❤3
code usually means a system for transferring infor-mation among people, between peop-le and computers, or within compu-ters themselves


کد معمولاً به معنای سیستمی برای انتقال اطلاعات بین افراد، بین افراد و کامپیوترها، یا درون خود کامپیوترها است
❤2👍1
خط بریل برای نابینایان:

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

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

نحوه کد گذاری:
در بریل، هر نمادی که در زبان نوشتاری معمولی استفاده می‌شود به طور خاص، حروف، اعداد و علائم نگارشی - به صورت یک یا چند نقطه برجسته در یک خانه دو در سه کدگذاری می‌شود
نقاط خانه معمولاً از ۱ تا ۶ شماره‌گذاری می‌شوند
❤2
TheCodəPod
خط بریل برای نابینایان: در دهه‌های اخیر، خط بریل برای عموم مردم آشناتر شده است، زیرا آسانسورها و دستگاه‌های خودپرداز از بریل برای دسترسی آسان‌تر استفاده کرده‌اند(نمومش در آدامس های ایرانی ) این سیستم از الگویی از نقاط برجسته روی کاغذ ضخیم استفاده میکنه…
مثال :
نقاط ۱، ۳ ،۵ برجسته هستند و نقاط ۲، ۴ و ۶ برجسته نیستند

دلیل اینکه این موضوع مطرح کردم و برای ما جالب هست این موضوع است، که نقاط دودویی هستند(مثل 0 و 1) یک نقطه یاصافه یا برجسته
❤3
وقتی کسی ازت میپرسه "با چه زبانی برنامه نویسی رو شروع کنم؟"
صرفا زبان مورد علاقه خودت رو بهش پیشنهاد نده!

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

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

خلاصه که درست راهنمایی کنید 🫡
🤣3🤝3🖕1
🤔2
TheCodəPod
Photo
خب خب خب… داستان این منطق عجیب جاوااسکریپت چیه؟! 🤔

برای اینکه بفهمیم چه اتفاقی میفته، باید یه کمی عملگرهای + و - رو زیر ذره‌بین ببریم.


💡 عملگر + یا Binary Plus

عملگر + رفتار متفاوتی نسبت به نوع داده operandها داره:

• وقتی هر دو operand عدد باشن ← ساده و منطقی جمع می‌کنه:

2 + 2 = 4


• وقتی هر دو operand رشته (string) باشن ← اونها رو به هم می‌چسبونه (concat):

"2" + "2" = "22"


• اما وقتی یکی عدد و یکی رشته باشه…
اینجاست که داستان عجیب میشه:

"2" + 2 = "22"


دلیلش اینه که عملگر + وقتی نوع operandها یکی نباشه، اونها رو به رشته تبدیل می‌کنه.

"2" + 2 → "2" + "2" → "22"



💡 عملگر - یا Binary Minus

داستان عملگر - کمی فرق داره:

• وقتی هر دو operand عدد باشن ← درست مثل تفریق ریاضی عمل می‌کنه:

10 - 2 = 8


• وقتی یکی یا هر دو operand رشته باشن ← جاوااسکریپت اونها رو به عدد تبدیل می‌کنه و بعد تفریق می‌کنه:

"10" - 4   → 10 - 4 → 6  
"10" - "4" → 10 - 4 → 6



🔑 جمع‌بندی رفتار + و - در جاوااسکریپت

• عملگر + ← وقتی نوع‌ها یکی نباشن، operandها رو تبدیل به string می‌کنه.
• باقی عملگرها مثل - * / operandها رو تبدیل به number می‌کنن و عملیات ریاضی انجام میدن.


📚 چند مثال جذاب

مثال ۱ – عدد ساده:

2 + 2 - 2 → 4 - 2 → 2


مثال ۲ – ترکیب رشته و عدد:

"2" + 2 - 2 → "22" - 2 → 22 - 2 → 20


اینجا ابتدا عملگر + رشته و عدد رو تبدیل به "22" می‌کنه، بعد - اونها رو به عدد تبدیل می‌کنه و نتیجه 20 میشه.

✅ جمع‌بندی نهایی

• عملگر + ← ترکیب رشته‌ها یا جمع اعداد. وقتی نوع operand ها ترکیبی از رشته و عدد باشه، هر دو به رشته تبدیل میشن.
• عملگر - ← تفریق اعداد. اگه هر دو operand یا یکی از اونها رشته باشن، جاوااسکریپت اونها رو به عدد تبدیل می‌کنه.
• اولویت اجرای عملگرهای + و - از چپ به راست هست و همین باعث میشه بعضی ترکیب‌ها عجیب به نظر برسن!
👍2👏2
TheCodəPod
خب خب خب… داستان این منطق عجیب جاوااسکریپت چیه؟! 🤔 برای اینکه بفهمیم چه اتفاقی میفته، باید یه کمی عملگرهای + و - رو زیر ذره‌بین ببریم. 💡 عملگر + یا Binary Plus عملگر + رفتار متفاوتی نسبت به نوع داده operandها داره: • وقتی هر دو operand عدد باشن ← ساده…
این موضوع توی پایتون هم اینجوریه که :

وقتی تو پایتون مینویسید
print(2 + 2)

توجه کردید چرا خروجی 4 است و نه 22 ؟ در واقع پشت این اتفاق ساده یک فلسفه قدرتمند در پایتون پنهان شده است فلسفه ای به نام
Object-Oriented Programming
یا برنامه نویسی شئ گرایی
​در پایتون همه چیز یک شئ (Object) است از اعداد و رشته‌ها گرفته تا توابع هر شیء دارای نوع (Type) و متدهای (Methods) خاص خودشو داره
​مکانیسم داخلی پایتون

🫆​شناسایی نوع داده:
وقتی شما عبارت 2 + 2 را می‌نویسید، پایتون ابتدا داده‌های اطراف عملگر + را بررسی می‌کند. پایتون تشخیص می‌دهد که هر دو 2 شیءهایی از نوع int (عدد صحیح) هستند
❗️​فراخوانی متد add:
با توجه به اینکه هر دو شیء از نوع int هستند پایتون به سراغ کلاس int و متد مخصوص add رو که مربوط به این کلاس هست رو اجرا میکنه
این متد کد اجرا میکنه که عملیات جمع ریاضی را انجام میده

​حالا فرض کنید کد زیر را بنویسید:
print("2" + "2")

این حالت، پایتون نوع داده‌ها را از نوع str (رشته) تشخیص میده حالا پایتون به سراغ کلاس str میره و متد add مربوط به این کلاس را اجرا میکنه متد add در کلاس str که کد اون دو رشته به یکدیگر میچسبونه نه جمع ریاضی که تو متد add از کلاس int هست به همین دلیل خروجی این کد 22 خواهد بود

توجه کردید تو هردوتا مسله + بود ولی جواب متفاوت ؟
ویژگی پلی مورفیسم (Polymorphism):
سعنی یک عملگر(مثل +) رفتارهای مختلف داره
​این ویژگی پایتون که یک عملگر (مثل +) رفتارهای متفاوتی بر اساس نوع داده‌های اطراف خود داره، پلی‌مورفیسم (Polymorphism) نام دارد
پلی‌مورفیسم باعث می‌شود که کدهای پایتون بسیار انعطاف‌پذیر و قابل فهم باشه چون عملگرها رفتار خود را با توجه به نوع شیء مورد نظر تنظیم می‌کنند
❤‍🔥3👍2
تبدیل آبجکت به Primitive توی جاوااسکریپت

خب خب خب…
تا حالا فکر کردی وقتی دو تا آبجکت رو با هم جمع می‌کنی (obj1 + obj2) یا از هم کم می‌کنی (obj1 - obj2) چه اتفاقی میفته؟ 🤔

✋ اول اینو بدون
برخلاف زبان‌هایی مثل پایتون یا ++C، توی جاوااسکریپت نمی‌تونی بیای رفتار عملگرها رو مستقیم تغییر بدی.
یعنی خبری از متدهای جادویی (Magic Methods) مثل __add__ یا __sub__ تو پایتون نیست.
پس نمی‌تونی بگی: "آبجکت من وقتی با + جمع شد، فلان کارو بکن!"

👈 جاوااسکریپت قبل از هر عملیات، آبجکت‌هارو خودکار تبدیل به primitive می‌کنه. بعد تازه میره سراغ اجرای اون عملگر.

📌 حالا اصلا primitive یعنی چی؟
توی جاوااسکریپت دو نوع داده اصلی داریم:

نوع اول 👈 Primitive ها: ساده‌ترین نوع داده‌ها مثل number, string, boolean, null, undefined, symbol, bigint.

نوع دوم 👈 Objects: هر چیزی غیر از primitive ها! مثل object {} و array []

حالا وقتی جاوااسکریپت نیاز داره روی یه آبجکت عملیاتی انجام بده (مثل جمع، تفریق، یا پرینت)، باید اون رو تبدیل کنه به یکی از primitive ها.

🔑 ماجرا با هینت (hint) شروع میشه

جاوااسکریپت بسته به شرایط مختلف، از سه تا hint استفاده می‌کنه تا بفهمه آبجکت رو به چی تبدیل کنه:

حالت اول 👈 "string": وقتی انتظار رشته داره.
مثال:
alert(user);  
anotherObj[user] = 123;


حالت دوم 👈 "number": وقتی نیاز به عدد هست.
مثال:
let n = +obj;  
let delta = date1 - date2;
let bigger = user1 > user2;


حالت سوم 👈 "default": وقتی جاوااسکریپت مطمئن نیست (مثل عملگر + که هم جمع عددی انجام میده هم رشته‌ها رو بهم می‌چسبونه).
مثال:
let total = obj1 + obj2;  
if (user == 1) { ... }


⚙️ الگوریتم تبدیل

وقتی یه آبجکت توی همچین موقعیتی باشه، جاوااسکریپت این مراحل رو میره جلو:

اگه متد obj[Symbol.toPrimitive](hint) وجود داشته باشه 👈 از همون استفاده می‌کنه.

اگه هینت string باشه 👈 اول متود toString() رو صدا می‌زنه، اگه وجود نداشت میره سراغ متود valueOf().

اگه هینت number یا default باشه 👈 اول متود valueOf() رو صدا می‌زنه، و اگه وجود نداشت میره سراغ متود toString().

📦 اگه چیزی پیاده‌سازی نکنیم چی؟
متود toString() برای یه آبجکت معمولی به صورت پیش فرض این رو برمی‌گردونه:
[object Object]

مثال:
let user = { name: "Ali" };

alert(user); // [object Object]
alert(user + 1); // [object Object]1


متود valueOf() هم خود آبجکت رو برمی‌گردونه (که بی‌مصرفه) 🫤


🔧 مثال کاستومایز شده

حالا اگه بخوای رفتار رو کنترل کنی:
let user = {
name: "Ali",
money: 100,

[Symbol.toPrimitive](hint) {
return hint === "string" ? `{User: ${this.name}}` : this.money;
}
};

alert(user); // "{User: Ali}" (string hint)
alert(+user); // 100 (number hint)
alert(user + 50); // 150 (default hint)


⚠️ نکته مهم:

متود های [Symbol.toPrimitive](hint)، toString() و valueOf() باید به عنوان خروجی یک primitive برگردونن


📊 مقایسه با زبان‌های دیگه

توی پایتون یا ++C می‌تونی مستقیماً رفتار عملگرها رو تغییر بدی (__add__، __str__ و …).

ولی توی جاوااسکریپت، عملگرها دست‌کاری نمی‌شن.
فقط می‌تونی تعیین کنی وقتی آبجکت به primitive تبدیل شد، دقیقا چه مقداری برگرده.


📝 جمع‌بندی

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

سه حالت داره: "string", "number", "default".

متدهای کلیدی: Symbol.toPrimitive, toString, valueOf.
❤3
❤2👍1
❤1👍1😢1
❤2👍1
❤2👍1