✔️ بزرگترین مجموعه ورکفلوهای آماده برای n8n
اگه با n8n کار میکنی یا دنبال راهی سریع برای ساخت اتوماسیونهای کاربردی هستی، این مخزن گیتهاب رو از دست نده:
https://github.com/Zie619/n8n-workflows
▪️دارای بیش از ۲۰۰۰ ورکفلو واقعی و قابل استفاده
▪️پوشش بیش از ۳۶۵ سرویس مثل Gmail، Slack، Telegram، Google Sheets و...
▪️ دستهبندی بر اساس نوع تریگر (مانند Webhook، Manual، Cron و ...)
▪️ جستجوی خیلی سریع بین ورکفلوها (با SQLite FTS5)
▪️ امکان نمایش نمودار گرافی، پیشنمایش، و خروجی JSON هر ورکفلو
@Teachify | برنامه نویسی
اگه با n8n کار میکنی یا دنبال راهی سریع برای ساخت اتوماسیونهای کاربردی هستی، این مخزن گیتهاب رو از دست نده:
https://github.com/Zie619/n8n-workflows
▪️دارای بیش از ۲۰۰۰ ورکفلو واقعی و قابل استفاده
▪️پوشش بیش از ۳۶۵ سرویس مثل Gmail، Slack، Telegram، Google Sheets و...
▪️ دستهبندی بر اساس نوع تریگر (مانند Webhook، Manual، Cron و ...)
▪️ جستجوی خیلی سریع بین ورکفلوها (با SQLite FTS5)
▪️ امکان نمایش نمودار گرافی، پیشنمایش، و خروجی JSON هر ورکفلو
@Teachify | برنامه نویسی
❤🔥8❤1👍1
✔️ چطور پایتون آرگومانها رو به توابع پاس میده؟
خیلی وقتا وقتی دربارهی ارسال آرگومان به توابع صحبت میشه، میشنویم:
Pass by Value (ارسال کپی)
Pass by Reference (ارسال خود متغیر)
اما پایتون یه مدل مخصوص خودش داره به اسم:
Pass by Object Reference
یا همون: Pass by Assignment
یعنی چی؟ بذار با یه مثال ساده توضیح بدیم:
فرض کن یه صندوق داری که توش وسیلهس (مثل یه object پایتونی مثلاً list)
آدرسش رو روی یه کاغذ نوشتی و گذاشتی جیبت (این میشه reference)
وقتی یه تابعی میخواد از اون object استفاده کنه، پایتون یه کاغذ جدید درمیاره و همون آدرس رو روش مینویسه و میده به تابع.
تابع با اون آدرس میتونه بره سراغ همون صندوق.
اگه چیزی از توش برداره یا تغییر بده، تو هم میبینی، ولی اگه یه صندوق جدید بسازه، فقط خودش اون رو داره
این دقیقاً میشه تفاوت بین mutable و immutable بودن objectها:
Mutable object (مثل list): تابع میتونه محتوای اصلی رو تغییر بده.
Immutable object (مثل int): تابع نمیتونه خودش رو تغییر بده، باید یه نسخهی جدید بسازه.
مثال کد:
خروجی بعد از اجرای تابع:
در نتیجه:
> تو پایتون ما نه Pass by Value داریم، نه Pass by Reference
بلکه داریم: Pass by Object Reference
یعنی reference به object ارسال میشه، ولی خود reference به صورت value پاس میشه!
#پایتون #Python #برنامهنویسی
@Teachify | برنامه نویسی
خیلی وقتا وقتی دربارهی ارسال آرگومان به توابع صحبت میشه، میشنویم:
Pass by Value (ارسال کپی)
Pass by Reference (ارسال خود متغیر)
اما پایتون یه مدل مخصوص خودش داره به اسم:
Pass by Object Reference
یا همون: Pass by Assignment
یعنی چی؟ بذار با یه مثال ساده توضیح بدیم:
فرض کن یه صندوق داری که توش وسیلهس (مثل یه object پایتونی مثلاً list)
آدرسش رو روی یه کاغذ نوشتی و گذاشتی جیبت (این میشه reference)
وقتی یه تابعی میخواد از اون object استفاده کنه، پایتون یه کاغذ جدید درمیاره و همون آدرس رو روش مینویسه و میده به تابع.
تابع با اون آدرس میتونه بره سراغ همون صندوق.
اگه چیزی از توش برداره یا تغییر بده، تو هم میبینی، ولی اگه یه صندوق جدید بسازه، فقط خودش اون رو داره
این دقیقاً میشه تفاوت بین mutable و immutable بودن objectها:
Mutable object (مثل list): تابع میتونه محتوای اصلی رو تغییر بده.
Immutable object (مثل int): تابع نمیتونه خودش رو تغییر بده، باید یه نسخهی جدید بسازه.
مثال کد:
def demonstrate_passing_behavior(my_list, my_int):
my_list.append(4) # تغییر مستقیم در لیست اصلی
my_list = list(my_list) # ساخت کپی جدید
my_int = my_int + 10 # ساخت int جدید، بدون تغییر عدد اصلی
original_list = [1, 2, 3]
original_int = 5
demonstrate_passing_behavior(original_list, original_int)
خروجی بعد از اجرای تابع:
original_list تغییر کرده (چون mutable بوده)
original_int همون قبلیه باقی مونده (چون immutable بوده)
در نتیجه:
> تو پایتون ما نه Pass by Value داریم، نه Pass by Reference
بلکه داریم: Pass by Object Reference
یعنی reference به object ارسال میشه، ولی خود reference به صورت value پاس میشه!
#پایتون #Python #برنامهنویسی
@Teachify | برنامه نویسی
👍5
از بس درگیر پروژه و کارم که اصلا وقت هیچی رو ندارم
ببخشید بابت کم کاری🙏
به زودی جبران میکنم.
@Teachify | برنامه نویسی
ببخشید بابت کم کاری🙏
به زودی جبران میکنم.
@Teachify | برنامه نویسی
❤🔥13👌5❤4
من اون باگم که فقط توی پروداکشن خودشو نشون میده.
من اون ارور ۴۰۴ام که وسط دیباگ شدن پیدام میکنی.
من اون تب اضافیام که کل فرمت کدتو بهم میزنه.
من اون dependencyایم که موقع آپدیت همهچی رو میترکونه.
من اون merge conflictـم که درست وقتی عجله داری ظاهر میشم.
من اون تیکه کُدیم که باعث میشه قهوت یخ کنه
من اون فانکشنیام که هیچوقت کال نمیشه ولی پاکش هم کنی همهچی میریزه بهم.
من اون logـم که فقط وقتی نمیخوای دیده بشه، تو کنسول میمونه.
@Teachify | برنامه نویسی
من اون ارور ۴۰۴ام که وسط دیباگ شدن پیدام میکنی.
من اون تب اضافیام که کل فرمت کدتو بهم میزنه.
من اون dependencyایم که موقع آپدیت همهچی رو میترکونه.
من اون merge conflictـم که درست وقتی عجله داری ظاهر میشم.
من اون تیکه کُدیم که باعث میشه قهوت یخ کنه
من اون فانکشنیام که هیچوقت کال نمیشه ولی پاکش هم کنی همهچی میریزه بهم.
من اون logـم که فقط وقتی نمیخوای دیده بشه، تو کنسول میمونه.
@Teachify | برنامه نویسی
🗿15🤣4💔3😭2❤1
✔️ کمپانی xAI مدل Grok 2.5 رو متنباز کرده!
حالا همه میتونن به کدهاش دسترسی داشته باشن، تغییرش بدن یا نسخه شخصی بسازن. این حرکت یه گام مهم برای آزادتر شدن هوش مصنوعیه. همچنین اعلام شده تا شش ماه دیگه مدل قدرتمندتر Grok 3 هم متنباز میشه.
https://huggingface.co/xai-org/grok-2
@Teachify | برنامه نویسی
حالا همه میتونن به کدهاش دسترسی داشته باشن، تغییرش بدن یا نسخه شخصی بسازن. این حرکت یه گام مهم برای آزادتر شدن هوش مصنوعیه. همچنین اعلام شده تا شش ماه دیگه مدل قدرتمندتر Grok 3 هم متنباز میشه.
https://huggingface.co/xai-org/grok-2
@Teachify | برنامه نویسی
❤🔥8❤2
✔️یک ریپازیتوری که کل مسیر طراحی یک سیستم یادگیری ماشین (ML) رو پوشش میده
گام های اصلی:
- Project setup
- Data pipeline
- Modeling: selecting, training, and debugging
- Serving: testing, deploying, and maintaining
Source: Github
#هوش_مصنوعی
@Teachify | برنامه نویسی
گام های اصلی:
- Project setup
- Data pipeline
- Modeling: selecting, training, and debugging
- Serving: testing, deploying, and maintaining
Source: Github
#هوش_مصنوعی
@Teachify | برنامه نویسی
👌3❤2
✔️ همه فقط نوک کوه یخ رو میبینن...
چند خط کد، یه لپتاپ، یه لیوان قهوه و یه اپلیکیشن جذاب.
اما واقعیت خیلی عمیقتر از این حرفاست!
پایینتر که بری تازه میبینی خبری از اون تصویرای رویایی نیست...
جلسههای بیپایان، استرس ریلیز، باگهایی که نصف شب پیداشون میشه، جنگ با Dependencyها و معماریهای پیچیدهای که گاهی نفس آدمو میگیره.
جادوی واقعی همونجایی اتفاق میفته که هیچکس نمیبینه؛
زیر سطح آب... جایی که همه سختیها، یادگیریها و رشدهای واقعی شکل میگیره.
شما بگید؛ زیر این کوه یخ، برای شما سختترین بخش برنامهنویسی چی بوده؟
@Teachify | برنامه نویسی
چند خط کد، یه لپتاپ، یه لیوان قهوه و یه اپلیکیشن جذاب.
اما واقعیت خیلی عمیقتر از این حرفاست!
پایینتر که بری تازه میبینی خبری از اون تصویرای رویایی نیست...
جلسههای بیپایان، استرس ریلیز، باگهایی که نصف شب پیداشون میشه، جنگ با Dependencyها و معماریهای پیچیدهای که گاهی نفس آدمو میگیره.
جادوی واقعی همونجایی اتفاق میفته که هیچکس نمیبینه؛
زیر سطح آب... جایی که همه سختیها، یادگیریها و رشدهای واقعی شکل میگیره.
شما بگید؛ زیر این کوه یخ، برای شما سختترین بخش برنامهنویسی چی بوده؟
@Teachify | برنامه نویسی
❤14👍3👎1
✔️ مستند پایتون منتشر شد!
بالاخره مستند رسمی پایتون با عنوان
Python: The Documentary | An origin story
منتشر شد!
این مستند داستان شکلگیری پایتون رو روایت میکنه؛ از ایدهی اولیهی خیدو فن روسوم در دهه ۹۰ میلادی تا تبدیل شدن به یکی از پرکاربردترین زبانهای دنیا در هوش مصنوعی، وب، دیتا و هزاران پروژهی دیگه.
توی این مستند چهرههای سرشناس کامیونیتی پایتون مثل Guido van Rossum، Travis Oliphant، Barry Warsaw و خیلیهای دیگه حضور دارن.
بخشهای جذابی مثل "Zen of Python" هم بررسی میشه.
انتشار رسمی این مستند در تاریخ ۲۸ اوت ۲۰۲۵ بوده و الان به صورت رایگان قابل مشاهدهست.
لینک تماشا در یوتیوب:
https://youtu.be/GfH4QL4VqJ0?si=KOs9QrvwFq9BlGlR
@Teachify | برنامه نویسی
بالاخره مستند رسمی پایتون با عنوان
Python: The Documentary | An origin story
منتشر شد!
این مستند داستان شکلگیری پایتون رو روایت میکنه؛ از ایدهی اولیهی خیدو فن روسوم در دهه ۹۰ میلادی تا تبدیل شدن به یکی از پرکاربردترین زبانهای دنیا در هوش مصنوعی، وب، دیتا و هزاران پروژهی دیگه.
توی این مستند چهرههای سرشناس کامیونیتی پایتون مثل Guido van Rossum، Travis Oliphant، Barry Warsaw و خیلیهای دیگه حضور دارن.
بخشهای جذابی مثل "Zen of Python" هم بررسی میشه.
انتشار رسمی این مستند در تاریخ ۲۸ اوت ۲۰۲۵ بوده و الان به صورت رایگان قابل مشاهدهست.
لینک تماشا در یوتیوب:
https://youtu.be/GfH4QL4VqJ0?si=KOs9QrvwFq9BlGlR
@Teachify | برنامه نویسی
❤11👍1👌1
✔️ معرفی ابزار SlimToolkit (DockerSlim سابق)
اگه با Docker کار کرده باشی، میدونی که حجم ایمیجها بعضی وقتا خیلی بزرگ میشه و این باعث مشکلاتی مثل سرعت پایین در Pull/Push یا مصرف زیاد منابع میشه.
اینجاست که SlimToolkit به کمکت میاد! این ابزار متنباز (به زبان Go) میتونه بدون هیچ تغییری در ایمیج اصلی، حجمش رو تا ۳۰ برابر کوچیکتر کنه
ویژگیهای مهم SlimToolkit:
+ کاهش چشمگیر حجم ایمیجها
+ ساخت خودکار پروفایلهای امنیتی (مثل AppArmor و Seccomp)
ابزارهای کاربردی مثل:
xray (تحلیل محتویات ایمیج)
lint (بررسی بهینه بودن ایمیج)
build (ساخت ایمیج بهینه)
debug و چند ابزار دیگه...
slimtoolkit.org
@Teachify | برنامه نویسی
اگه با Docker کار کرده باشی، میدونی که حجم ایمیجها بعضی وقتا خیلی بزرگ میشه و این باعث مشکلاتی مثل سرعت پایین در Pull/Push یا مصرف زیاد منابع میشه.
اینجاست که SlimToolkit به کمکت میاد! این ابزار متنباز (به زبان Go) میتونه بدون هیچ تغییری در ایمیج اصلی، حجمش رو تا ۳۰ برابر کوچیکتر کنه
ویژگیهای مهم SlimToolkit:
+ کاهش چشمگیر حجم ایمیجها
+ ساخت خودکار پروفایلهای امنیتی (مثل AppArmor و Seccomp)
ابزارهای کاربردی مثل:
xray (تحلیل محتویات ایمیج)
lint (بررسی بهینه بودن ایمیج)
build (ساخت ایمیج بهینه)
debug و چند ابزار دیگه...
slimtoolkit.org
@Teachify | برنامه نویسی
❤5👍2
❤19
✔️ تابع getattr در پایتون
گاهی اوقات لازم داریم به یک ویژگی (Attribute) یا متد (Method) از یک شیء دسترسی پیدا کنیم، بدون اینکه اسم آن را مستقیم در کد بنویسیم. اینجا تابع getattr به کمک ما میآید.
ساختار کلی:
مثال ساده:
+ اگر ویژگی یا متد وجود داشته باشد، مقدارش برمیگردد.
+ اگر وجود نداشته باشد و default تعریف کرده باشیم، همان مقدار برمیگردد.
+ اگر default تعریف نشده باشد و ویژگی وجود نداشته باشد → خطای AttributeError رخ میدهد.
@kaliboys | کالی بویز
گاهی اوقات لازم داریم به یک ویژگی (Attribute) یا متد (Method) از یک شیء دسترسی پیدا کنیم، بدون اینکه اسم آن را مستقیم در کد بنویسیم. اینجا تابع getattr به کمک ما میآید.
ساختار کلی:
getattr(object, name[, default])
object ➝ شیء موردنظر
name ➝ نام ویژگی یا متد (به صورت رشته)
default ➝ (اختیاری) مقداری که اگر ویژگی پیدا نشد، برگردانده میشود
مثال ساده:
class Person:
name = "Ali"
age = 25
p = Person()
print(getattr(p, "name")) # Ali
print(getattr(p, "age")) # 25
print(getattr(p, "city", "Tehran")) # چون city وجود ندارد => Tehran
+ اگر ویژگی یا متد وجود داشته باشد، مقدارش برمیگردد.
+ اگر وجود نداشته باشد و default تعریف کرده باشیم، همان مقدار برمیگردد.
+ اگر default تعریف نشده باشد و ویژگی وجود نداشته باشد → خطای AttributeError رخ میدهد.
@kaliboys | کالی بویز
❤3👍2
✔️ ایندکس شدن سایتهای مدرن در گوگل
قدیما وبسایتها استاتیک بودن. یعنی سرور همون HTML نهایی رو به مرورگر میداد و مرورگر فقط نمایش میداد. پس گوگل راحت همه محتوای صفحه رو میدید و ایندکس میکرد.
اما الان بیشتر وبسایتها به شکل برنامه فرانتاند (SPA) ساخته میشن (مثل React، Vue، Angular). این مدل، یه اسکلت HTML خالی میده به مرورگر و دادهها رو از طریق API میگیره و بعد با جاوااسکریپت صفحه رو میسازه.
خیلیا میترسن که نکنه چون محتوای اصلی با API میاد و HTML اولیه خالیه، گوگل اون محتوا رو نبینه و ایندکس نشه.
گوگل الان جاوااسکریپت رو رندر میکنه و میتونه محتوای API رو ببینه (ولی نه همیشه کامل و سریع).
برای مطمئن شدن، گوگل ابزارهایی داره:
Rich Results Test:
search.google.com/test/rich-results
اینجا میتونی ببینی گوگل بعد از رندر کردن صفحه، دقیقاً چه HTMLی دیده.
Google Search Console → URL Inspection:
این ابزار رسمیتره و HTML رندر شده نهایی رو نشون میده.
@Teachify | برنامه نویسی
قدیما وبسایتها استاتیک بودن. یعنی سرور همون HTML نهایی رو به مرورگر میداد و مرورگر فقط نمایش میداد. پس گوگل راحت همه محتوای صفحه رو میدید و ایندکس میکرد.
اما الان بیشتر وبسایتها به شکل برنامه فرانتاند (SPA) ساخته میشن (مثل React، Vue، Angular). این مدل، یه اسکلت HTML خالی میده به مرورگر و دادهها رو از طریق API میگیره و بعد با جاوااسکریپت صفحه رو میسازه.
خیلیا میترسن که نکنه چون محتوای اصلی با API میاد و HTML اولیه خالیه، گوگل اون محتوا رو نبینه و ایندکس نشه.
گوگل الان جاوااسکریپت رو رندر میکنه و میتونه محتوای API رو ببینه (ولی نه همیشه کامل و سریع).
برای مطمئن شدن، گوگل ابزارهایی داره:
Rich Results Test:
search.google.com/test/rich-results
اینجا میتونی ببینی گوگل بعد از رندر کردن صفحه، دقیقاً چه HTMLی دیده.
Google Search Console → URL Inspection:
این ابزار رسمیتره و HTML رندر شده نهایی رو نشون میده.
@Teachify | برنامه نویسی
❤5👍3
✔️ در دنیای HTTP یک مفهوم مهم داریم به نام Idempotent
یعنی اگر یک درخواست چند بار تکرار شود، نتیجهاش فرقی با اجرای یکباره نکند.
بیایید متدهای پرکاربرد را مرور کنیم:
متد GET: همیشه idempotent (فقط دیتا را میخواند).
متد PUT: هست (هر بار اجرا شود، منبع را به یک حالت خاص میرساند).
متد DELETE: هست (اولین بار حذف میکند، دفعات بعدی اثری ندارد).
متد POST: نیست (هر بار اجرا شود، دادهی جدید میسازد).
متد PATCH: تضمین نشده، چون بسته به طراحی API میتواند هم idempotent باشد، هم نباشد:
مثال غیر idempotent:
دوبار اجرا شود → موجودی دو بار افزایش مییابد.
مثال idempotent:
هر چند بار هم اجرا شود، نتیجه یکی است.
@Teachify | برنامه نویسی
یعنی اگر یک درخواست چند بار تکرار شود، نتیجهاش فرقی با اجرای یکباره نکند.
بیایید متدهای پرکاربرد را مرور کنیم:
متد GET: همیشه idempotent (فقط دیتا را میخواند).
متد PUT: هست (هر بار اجرا شود، منبع را به یک حالت خاص میرساند).
متد DELETE: هست (اولین بار حذف میکند، دفعات بعدی اثری ندارد).
متد POST: نیست (هر بار اجرا شود، دادهی جدید میسازد).
متد PATCH: تضمین نشده، چون بسته به طراحی API میتواند هم idempotent باشد، هم نباشد:
مثال غیر idempotent:
PATCH /user/123 { "balance": "+100" }
دوبار اجرا شود → موجودی دو بار افزایش مییابد.
مثال idempotent:
PATCH /user/123 { "status": "active" }
هر چند بار هم اجرا شود، نتیجه یکی است.
@Teachify | برنامه نویسی
👍4❤1🔥1👏1