Please open Telegram to view this post
VIEW IN TELEGRAM
هوشمصنوعی🔥برنامهنویسی | کدینگیار
#کوئیز #پایتون پیشنیاز: متد split رشتهها و تابع len ⏳ پاسخ کوییز ۲۴ ساعت دیگه توی همین کانال میاد. @codingyar
#پاسخ_کوییز #پایتون
🔔 پاسخ کوییز بالا (همین کوییزی که بهش ریپلای زدم) رو در زیر ببینید ⬇️
✅ جواب درست: «4 blue»
متد split با جداکنندهٔ کاما، رشته رو هر جا کاما ببینه میبُره. توی red,green,,blue سه تا کاما داریم، پس چهار تکه به دست میاد: red، green، یک رشتهٔ خالی (بین دو کامای پشتسرهم) و blue.
یعنی parts برابر ['red', 'green', '', 'blue'] میشه؛ طولش 4 هست و آخرین عضوش blue.
اشتباههای رایج: گزینهٔ «3 blue» یعنی فکر کنیم رشتهٔ خالی بین دو کاما حذف میشه. گزینهٔ «5 blue» هم از شمردن اشتباه میاد؛ تعداد تکهها همیشه یکی بیشتر از تعداد جداکنندههاست.
نکته: اگه split رو بدون ورودی صدا بزنید، بر اساس فاصلهها میبُره و تکههای خالی رو حذف میکنه؛ ولی با یک جداکنندهٔ مشخص مثل کاما، تکههای خالی سر جاشون میمونن.
آموزش هوش مصنوعی و برنامه نویسی 👇
@codingyar
وبسایت آموزشی:
www.codingyar.com
🔔 پاسخ کوییز بالا (همین کوییزی که بهش ریپلای زدم) رو در زیر ببینید ⬇️
آموزش هوش مصنوعی و برنامه نویسی 👇
@codingyar
وبسایت آموزشی:
www.codingyar.com
#خبر #هوش_مصنوعی #مدل_متنباز
🚀 مدل Hy4 تنسنت رسماً منتشر شد
📰 خبر کاربردی
تنسنت نسخهٔ کامل Hy4 رو عرضه کرد؛ مدلی که قبلاً بهصورت پیشنمایش (Hy4 preview) منتشر شده بود. تازگیهاش اینه: برای اولین بار درک تصویر داره و میتونه با خط فرمان و رابط گرافیکی کار کنه (computer use). کانتکستش حدود یک میلیون توکنه و از tool calling و خروجی ساختاریافته پشتیبانی میکنه.
تنسنت میگه Hy4 جزو مدلهای متنباز برتره. توی نمودار خودش از DeepSeek و GLM جلوئه، ولی توی بیشتر بنچمارکها هنوز پشت Claude Opus 5.5 و GPT 6.1 Sol قرار داره. وزنهای مدل هنوز منتشر نشده؛ تنسنت میگه «در چند روز آینده» همراه سیستمکارت میاد (نسخهٔ preview از قبل متنبازه).
🛠 برای استفاده از API، مدل رو با این شناسه توی OpenRouter پیدا میکنید:
💰 قیمت رسمی حدود ۰٫۹۰ دلار برای هر میلیون توکنِ ورودی و ۲٫۷۰ دلار برای خروجیه. OpenRouter فعلاً با ۵۰٪ تخفیف عرضهاش کرده (حدود ۰٫۴۲ و ۱٫۲۵ دلار) و مدت این تخفیف مشخص نیست. WorkBuddy و CodeBuddy هم تا ۲۴ آبان رایگان هستن.
اعلام رسمی تنسنت
آموزش هوش مصنوعی و برنامه نویسی 👇
@codingyar
وبسایت آموزشی:
www.codingyar.com
🚀 مدل Hy4 تنسنت رسماً منتشر شد
📰 خبر کاربردی
تنسنت نسخهٔ کامل Hy4 رو عرضه کرد؛ مدلی که قبلاً بهصورت پیشنمایش (Hy4 preview) منتشر شده بود. تازگیهاش اینه: برای اولین بار درک تصویر داره و میتونه با خط فرمان و رابط گرافیکی کار کنه (computer use). کانتکستش حدود یک میلیون توکنه و از tool calling و خروجی ساختاریافته پشتیبانی میکنه.
تنسنت میگه Hy4 جزو مدلهای متنباز برتره. توی نمودار خودش از DeepSeek و GLM جلوئه، ولی توی بیشتر بنچمارکها هنوز پشت Claude Opus 5.5 و GPT 6.1 Sol قرار داره. وزنهای مدل هنوز منتشر نشده؛ تنسنت میگه «در چند روز آینده» همراه سیستمکارت میاد (نسخهٔ preview از قبل متنبازه).
🛠 برای استفاده از API، مدل رو با این شناسه توی OpenRouter پیدا میکنید:
tencent/hy4
💰 قیمت رسمی حدود ۰٫۹۰ دلار برای هر میلیون توکنِ ورودی و ۲٫۷۰ دلار برای خروجیه. OpenRouter فعلاً با ۵۰٪ تخفیف عرضهاش کرده (حدود ۰٫۴۲ و ۱٫۲۵ دلار) و مدت این تخفیف مشخص نیست. WorkBuddy و CodeBuddy هم تا ۲۴ آبان رایگان هستن.
اعلام رسمی تنسنت
آموزش هوش مصنوعی و برنامه نویسی 👇
@codingyar
وبسایت آموزشی:
www.codingyar.com
❤2
#آموزش #لینوکس
⚡️ میدونستین با find میشه فایلها رو بر اساس اسم، حجم یا تاریخ تغییر پیدا کرد؟
دستور find از پوشهای که بهش میدید شروع میکنه و همهٔ زیرپوشهها رو هم میگرده. مثلاً همهٔ فایلهای لاگ پروژه:
خروجی:
نقطه یعنی «از همین پوشه». الگو رو حتماً توی کوتیشن بذارید تا شل خودش ستاره رو باز نکنه. ترتیب خروجی ممکنه روی سیستم شما فرق کنه.
✔️ پیدا کردن فایلهای حجیم
گزینهٔ
خروجی:
بهجای M میتونید k (کیلوبایت) یا G (گیگابایت) هم بنویسید. برای دیدن حجم هر فایل، du رو به آخر دستور اضافه کنید:
خروجی:
💎فایلهای قدیمی با -mtime
گزینهٔ
خروجی:
اینجا old.log ده روز پیش تغییر کرده و بقیهٔ فایلها همین الان ساخته شدن.
⚠️ قبل از -delete حتماً لیست رو ببینید
اول دستور رو بدون
خروجی:
فقط old.log پاک شد. طبق مستندات find، اگه -delete رو اول دستور بنویسید، find سعی میکنه همهچیزِ زیر پوشهٔ شروع رو پاک کنه؛ پس جاش همیشه آخر دستوره.
▫️ برای جستوجو بدون حساسیت به حروف بزرگ و کوچک، بهجای -name از -iname استفاده کنید:
خروجی:
▫️ برای امتحان، این پوشهٔ نمونه رو بسازید و دستورهای بالا رو همونجا اجرا کنید:
آموزش هوش مصنوعی و برنامه نویسی 👇
@codingyar
وبسایت آموزشی:
www.codingyar.com
دستور find از پوشهای که بهش میدید شروع میکنه و همهٔ زیرپوشهها رو هم میگرده. مثلاً همهٔ فایلهای لاگ پروژه:
find . -name "*.log"
خروجی:
./logs/old.log
./logs/big.log
./logs/app.log
نقطه یعنی «از همین پوشه». الگو رو حتماً توی کوتیشن بذارید تا شل خودش ستاره رو باز نکنه. ترتیب خروجی ممکنه روی سیستم شما فرق کنه.
گزینهٔ
-type f یعنی فقط فایل (نه پوشه) و -size +1M یعنی بزرگتر از ۱ مگابایت:
find . -type f -size +1M
خروجی:
./logs/big.log
بهجای M میتونید k (کیلوبایت) یا G (گیگابایت) هم بنویسید. برای دیدن حجم هر فایل، du رو به آخر دستور اضافه کنید:
find . -type f -size +1M -exec du -h {} +
خروجی:
2.0M ./logs/big.log
💎فایلهای قدیمی با -mtime
گزینهٔ
-mtime +7 یعنی فایلهایی که بیشتر از ۷ روزه تغییر نکردن (بهخاطر گرد شدن روزها، عملاً ۸ روز و بیشتر) و -mtime -1 یعنی فایلهایی که توی ۲۴ ساعت گذشته تغییر کردن:
find . -name "*.log" -mtime +7
خروجی:
./logs/old.log
اینجا old.log ده روز پیش تغییر کرده و بقیهٔ فایلها همین الان ساخته شدن.
اول دستور رو بدون
-delete اجرا کنید و وقتی لیست درست بود، -delete رو به آخرش اضافه کنید:
find . -name "*.log" -mtime +7 -delete
find . -name "*.log"
خروجی:
./logs/big.log
./logs/app.log
فقط old.log پاک شد. طبق مستندات find، اگه -delete رو اول دستور بنویسید، find سعی میکنه همهچیزِ زیر پوشهٔ شروع رو پاک کنه؛ پس جاش همیشه آخر دستوره.
▫️ برای جستوجو بدون حساسیت به حروف بزرگ و کوچک، بهجای -name از -iname استفاده کنید:
find src -iname "*.py"
خروجی:
src/Utils.PY
src/main.py
▫️ برای امتحان، این پوشهٔ نمونه رو بسازید و دستورهای بالا رو همونجا اجرا کنید:
mkdir -p demo/logs demo/src
cd demo
echo "error" > logs/app.log
echo "ok" > logs/old.log
touch -d "10 days ago" logs/old.log
head -c 2M /dev/zero > logs/big.log
echo "print(1)" > src/main.py
echo "print(2)" > src/Utils.PY
آموزش هوش مصنوعی و برنامه نویسی 👇
@codingyar
وبسایت آموزشی:
www.codingyar.com
Please open Telegram to view this post
VIEW IN TELEGRAM
❤3
Please open Telegram to view this post
VIEW IN TELEGRAM
هوشمصنوعی🔥برنامهنویسی | کدینگیار
#کوئیز #پایتون پیشنیاز: تعریف تابع با پارامتر ستارهدار مثل *args و تابع sum ⏳ پاسخ کوییز ۲۴ ساعت دیگه توی همین کانال میاد. @codingyar
#پاسخ_کوییز #پایتون
🔔 پاسخ کوییز بالا (همین کوییزی که بهش ریپلای زدم) رو در زیر ببینید ⬇️
✅ جواب درست: «6 0»
وقتی قبل از اسم پارامتر ستاره بذاریم، تابع میتونه هر تعداد ورودی بگیره و همهشون توی یک تاپل جمع میشن. توی total(1, 2, 3) مقدار nums برابر (1, 2, 3) هست و جمعش 6 میشه.
توی total() هیچ ورودیای نداریم، پس nums یک تاپل خالی هست. این خطا نیست و sum برای یک تاپل خالی عدد 0 رو برمیگردونه.
اشتباههای رایج: گزینهٔ «TypeError» یعنی فکر کنیم تابع حتماً ورودی لازم داره؛ با ستاره، صفر ورودی هم مجازه. گزینهٔ «6 None» یعنی فکر کنیم وقتی چیزی برای جمع نیست، None برمیگرده. گزینهٔ «(1, 2, 3) 0» هم sum رو نادیده میگیره؛ تاپل فقط داخل تابع ساخته میشه و چیزی که برمیگرده جمع اعداده.
نکته: اسم args فقط یک قرارداده؛ چیزی که مهمه همون ستارهٔ قبل از اسم پارامتره.
آموزش هوش مصنوعی و برنامه نویسی 👇
@codingyar
وبسایت آموزشی:
www.codingyar.com
🔔 پاسخ کوییز بالا (همین کوییزی که بهش ریپلای زدم) رو در زیر ببینید ⬇️
آموزش هوش مصنوعی و برنامه نویسی 👇
@codingyar
وبسایت آموزشی:
www.codingyar.com
❤1
#خبر #هوش_مصنوعی #ChatGPT
🎞 ChatGPT حالا GIF متحرک میسازه؛ Images 2.6 منتشر شد
✨ قابلیت جدید
اوپنایآی نسخهٔ Images 2.6 رو برای ChatGPT، Codex و API عرضه کرد. توی ChatGPT و Codex برای همهٔ اشتراکها روی وب، دسکتاپ و موبایل در دسترسه.
🔹 خروجی GIF: از یک پرامپت یا یک عکس، GIF متحرک میگیرید و میتونید سرعتش رو تنظیم یا فریمها رو جداگانه ویرایش کنید.
🔹 عکس مرجع: عکس خودتون، حیوان خونگی یا شخصیتهاتون رو ذخیره کنید تا برای ساختهای بعدی لازم نباشه دوباره آپلودشون کنید.
🔹 سرعت: تولید تصویر حدود ۵۰٪ سریعتر شده.
👨💻 برای توسعهدهندهها دو مدل تازه توی API اومده:
• GPT-Image-2.6 Flare: با کیفیت پایین تصویر رو توی حدود ۶ ثانیه میسازه.
• GPT-Image-2.6 Sunburst: کیفیت بالاتر و ثبات بیشتر بین ویرایشهای پشتسرهم (با کیفیت medium یا high).
توی API حالا علامتگذاری روی تصویر (image markup) برای نشون دادن محل دقیق تغییر، خروجی SVG و پارامتر complexity هم هست. برای بیشتر ویرایشها پیشنهاد اوپنایآی complexity پایینه؛ برای صحنههای شلوغ سراغ medium یا high برید. توی Codex هم ویرایش تصویر مستقیم داخل نمایش انجام میشه.
اعلام رسمی OpenAI
آموزش هوش مصنوعی و برنامه نویسی 👇
@codingyar
وبسایت آموزشی:
www.codingyar.com
🎞 ChatGPT حالا GIF متحرک میسازه؛ Images 2.6 منتشر شد
✨ قابلیت جدید
اوپنایآی نسخهٔ Images 2.6 رو برای ChatGPT، Codex و API عرضه کرد. توی ChatGPT و Codex برای همهٔ اشتراکها روی وب، دسکتاپ و موبایل در دسترسه.
🔹 خروجی GIF: از یک پرامپت یا یک عکس، GIF متحرک میگیرید و میتونید سرعتش رو تنظیم یا فریمها رو جداگانه ویرایش کنید.
🔹 عکس مرجع: عکس خودتون، حیوان خونگی یا شخصیتهاتون رو ذخیره کنید تا برای ساختهای بعدی لازم نباشه دوباره آپلودشون کنید.
🔹 سرعت: تولید تصویر حدود ۵۰٪ سریعتر شده.
👨💻 برای توسعهدهندهها دو مدل تازه توی API اومده:
• GPT-Image-2.6 Flare: با کیفیت پایین تصویر رو توی حدود ۶ ثانیه میسازه.
• GPT-Image-2.6 Sunburst: کیفیت بالاتر و ثبات بیشتر بین ویرایشهای پشتسرهم (با کیفیت medium یا high).
توی API حالا علامتگذاری روی تصویر (image markup) برای نشون دادن محل دقیق تغییر، خروجی SVG و پارامتر complexity هم هست. برای بیشتر ویرایشها پیشنهاد اوپنایآی complexity پایینه؛ برای صحنههای شلوغ سراغ medium یا high برید. توی Codex هم ویرایش تصویر مستقیم داخل نمایش انجام میشه.
اعلام رسمی OpenAI
آموزش هوش مصنوعی و برنامه نویسی 👇
@codingyar
وبسایت آموزشی:
www.codingyar.com
❤2
#آموزش #جنگو
⚡️ میدونستین چند شرط داخل filter همیشه با AND ترکیب میشن و برای OR باید از Q استفاده کنید؟
فرض کنید مدل Product با فیلدهای name، price و category چهار محصول داره: Book (120، books)، Pen (15، office)، Bag (300، bags) و Lamp (80، home). محصولهایی رو میخوایم که یا ارزونتر از 50 باشن، یا توی دستهٔ books:
خروجی:
هر Q یک شرط رو نگه میداره و علامت | دو شرط رو با OR ترکیب میکنه؛ Pen بهخاطر قیمتش اومد و Book بهخاطر دستهاش.
✔️ حالت پیشفرض: AND
وقتی چند شرط رو با کاما داخل filter مینویسید، همهشون باید با هم برقرار باشن:
خروجی:
همین رو با علامت & بین دو Q هم میشه نوشت؛ ولی وقتی فقط AND لازم دارید، همون کاما خواناتره.
❌ برعکس کردن شرط با ~Q
علامت ~ شرط رو برعکس (NOT) میکنه؛ مثلاً همهٔ محصولها بهجز دستهٔ books:
خروجی:
⚠️ ترتیب Q و شرطهای معمولی مهمه
میتونید Q و شرطهای معمولی (مثل category=...) رو با هم بیارید، ولی طبق مستندات جنگو Q باید اول بیاد؛ وگرنه پایتون همون اول خطای سینتکس میده:
خروجی:
شکل درستش اینطوریه (قیمت کمتر از 50 یا بیشتر از 200، و همزمان دستهٔ office):
خروجی:
▫️ یک Q خالی هیچ شرطی نداره؛ برای همین میشه از اون شروع کرد و توی حلقه شرط اضافه کرد (مثلاً برای فرم جستوجو):
خروجی:
▫️ برای دیدن SQL ساختهشده،
▫️ همهٔ این مثالها یک QuerySet برمیگردونن، پس میشه بعدش order_by یا هر فیلتر دیگهای هم اضافه کرد.
آموزش هوش مصنوعی و برنامه نویسی 👇
@codingyar
وبسایت آموزشی:
www.codingyar.com
فرض کنید مدل Product با فیلدهای name، price و category چهار محصول داره: Book (120، books)، Pen (15، office)، Bag (300، bags) و Lamp (80، home). محصولهایی رو میخوایم که یا ارزونتر از 50 باشن، یا توی دستهٔ books:
from django.db.models import Q
result = Product.objects.filter(
Q(price__lt=50) | Q(category="books")
).order_by("name")
print([p.name for p in result])
خروجی:
['Book', 'Pen']
هر Q یک شرط رو نگه میداره و علامت | دو شرط رو با OR ترکیب میکنه؛ Pen بهخاطر قیمتش اومد و Book بهخاطر دستهاش.
وقتی چند شرط رو با کاما داخل filter مینویسید، همهشون باید با هم برقرار باشن:
result = Product.objects.filter(
price__lt=200, category="books"
)
print([p.name for p in result])
خروجی:
['Book']
همین رو با علامت & بین دو Q هم میشه نوشت؛ ولی وقتی فقط AND لازم دارید، همون کاما خواناتره.
علامت ~ شرط رو برعکس (NOT) میکنه؛ مثلاً همهٔ محصولها بهجز دستهٔ books:
from django.db.models import Q
result = Product.objects.filter(
~Q(category="books")
).order_by("name")
print([p.name for p in result])
خروجی:
['Bag', 'Lamp', 'Pen']
میتونید Q و شرطهای معمولی (مثل category=...) رو با هم بیارید، ولی طبق مستندات جنگو Q باید اول بیاد؛ وگرنه پایتون همون اول خطای سینتکس میده:
from django.db.models import Q
result = Product.objects.filter(
category="books", Q(price__lt=50)
)
خروجی:
SyntaxError: positional argument follows keyword argument
شکل درستش اینطوریه (قیمت کمتر از 50 یا بیشتر از 200، و همزمان دستهٔ office):
from django.db.models import Q
result = Product.objects.filter(
Q(price__lt=50) | Q(price__gt=200), category="office"
)
print([p.name for p in result])
خروجی:
['Pen']
▫️ یک Q خالی هیچ شرطی نداره؛ برای همین میشه از اون شروع کرد و توی حلقه شرط اضافه کرد (مثلاً برای فرم جستوجو):
from django.db.models import Q
query = Q()
for word in ["Book", "Lamp"]:
query |= Q(name=word)
result = Product.objects.filter(query).order_by("name")
print([p.name for p in result])
خروجی:
['Book', 'Lamp']
▫️ برای دیدن SQL ساختهشده،
print(result.query) بزنید؛ برای مثال اول، جنگو یک WHERE با OR بین دو شرط میسازه.
▫️ همهٔ این مثالها یک QuerySet برمیگردونن، پس میشه بعدش order_by یا هر فیلتر دیگهای هم اضافه کرد.
آموزش هوش مصنوعی و برنامه نویسی 👇
@codingyar
وبسایت آموزشی:
www.codingyar.com
Please open Telegram to view this post
VIEW IN TELEGRAM
❤3
هوشمصنوعی🔥برنامهنویسی | کدینگیار
#کوئیز #پایتون پیشنیاز: تعریف کلاس با __init__ و متد __str__ ⏳ پاسخ کوییز ۲۴ ساعت دیگه توی همین کانال میاد. @codingyar
#پاسخ_کوییز #پایتون
🔔 پاسخ کوییز بالا (همین کوییزی که بهش ریپلای زدم) رو در زیر ببینید ⬇️
✅ جواب درست: «(2, 3)»
تابع print هر شیء رو اول با str به رشته تبدیل میکنه و str هم سراغ متد str کلاس میره. کلاس Point این متد رو تعریف کرده و با f-string رشتهٔ (2, 3) رو برمیگردونه؛ پس همین چاپ میشه.
اشتباههای رایج: گزینهٔ «<__main__.Point object>» شبیه خروجی پیشفرض شیئیه که str نداره؛ ولی اینجا str تعریف شده. گزینهٔ «Point(2, 3)» شبیه کدیه که شیء رو باهاش ساختیم، نه چیزی که str برمیگردونه. گزینهٔ «2 3» هم یعنی فکر کنیم print ویژگیها رو جدا جدا چاپ میکنه.
نکته: اگه str رو حذف کنید، print چیزی شبیه <__main__.Point object at 0x...> با یک آدرس حافظه نشون میده؛ برای همین تعریف str برای دیباگ و لاگ خیلی به کار میاد.
آموزش هوش مصنوعی و برنامه نویسی 👇
@codingyar
وبسایت آموزشی:
www.codingyar.com
🔔 پاسخ کوییز بالا (همین کوییزی که بهش ریپلای زدم) رو در زیر ببینید ⬇️
آموزش هوش مصنوعی و برنامه نویسی 👇
@codingyar
وبسایت آموزشی:
www.codingyar.com
❤2
#خبر #هوش_مصنوعی #OpenAI
🚀 مدل GPT-6 Cyber اوپنایآی منتشر شد
📰 خبر کاربردی
اوپنایآی مدل تخصصی GPT-6 Cyber رو برای پژوهش امنیت سایبری معرفی کرد؛ مدلی که آسیبپذیری قابلسوءاستفاده رو پیدا و تأیید میکنه و داخل محدودهٔ تعیینشده توسط پژوهشگر میمونه.
🔹 روی ExploitGym حدود ۵۱٪ پیشرفت نسبی نسبت به GPT-5.6 Cyber (۴۸٫۵٪ در برابر ۳۲٫۱٪).
🔹 همترازی: بدون پرامپت استقرار در ۹۹٫۹۳٪ و با پرامپت در ۱۰۰٪ موارد از سرویسهای خارج از محدوده دوری کرده.
🔹 در عمل: ۸۱ آسیبپذیری ناشناخته با شدت بالا در فایرفاکس؛ ۹۴۸ اکسپلویت عملی برای هستهٔ لینوکس؛ موزیلا بسیاری از موارد فایرفاکس را وصله کرده.
دسترسی فعلاً برای مشتریان منتخب Daybreak Red از طریق API و Codex است و بهتدریج گسترش مییابد. سطح آمادگی سایبری مدل Critical اعلام شده.
معرفی رسمی OpenAI
آموزش هوش مصنوعی و برنامه نویسی 👇
@codingyar
وبسایت آموزشی:
www.codingyar.com
🚀 مدل GPT-6 Cyber اوپنایآی منتشر شد
📰 خبر کاربردی
اوپنایآی مدل تخصصی GPT-6 Cyber رو برای پژوهش امنیت سایبری معرفی کرد؛ مدلی که آسیبپذیری قابلسوءاستفاده رو پیدا و تأیید میکنه و داخل محدودهٔ تعیینشده توسط پژوهشگر میمونه.
🔹 روی ExploitGym حدود ۵۱٪ پیشرفت نسبی نسبت به GPT-5.6 Cyber (۴۸٫۵٪ در برابر ۳۲٫۱٪).
🔹 همترازی: بدون پرامپت استقرار در ۹۹٫۹۳٪ و با پرامپت در ۱۰۰٪ موارد از سرویسهای خارج از محدوده دوری کرده.
🔹 در عمل: ۸۱ آسیبپذیری ناشناخته با شدت بالا در فایرفاکس؛ ۹۴۸ اکسپلویت عملی برای هستهٔ لینوکس؛ موزیلا بسیاری از موارد فایرفاکس را وصله کرده.
دسترسی فعلاً برای مشتریان منتخب Daybreak Red از طریق API و Codex است و بهتدریج گسترش مییابد. سطح آمادگی سایبری مدل Critical اعلام شده.
معرفی رسمی OpenAI
آموزش هوش مصنوعی و برنامه نویسی 👇
@codingyar
وبسایت آموزشی:
www.codingyar.com
❤2🔥1
#آموزش #SQL
⚡️ میدونستین با ON CONFLICT میشه توی یک دستور گفت «اگه ردیف بود آپدیتش کن، نبود اضافهاش کن»؟
به این کار upsert میگن. فرض کنید جدول stock با ستونهای product (کلید اصلی) و qty داریم و الان pen با موجودی 10 و book با موجودی 3 توشه. حالا پنج تا pen دیگه رسیده:
خروجی (توی SQLite):
چون pen از قبل بود، INSERT به خطا نخورد و بهجاش موجودی 10 با 5 جمع شد. عبارت
✔️ اگه ردیف نباشه، معمولی اضافه میشه
همین دستور برای محصول جدید (bag) یک ردیف تازه میسازه:
خروجی:
⚠️ بدون ON CONFLICT چی میشه؟
اگه یک INSERT معمولی (بدون ON CONFLICT) برای pen اجرا کنید، چون product کلید اصلیه، خطای UNIQUE constraint failed: stock.product میگیرید و هیچ تغییری انجام نمیشه.
یک نکتهٔ مهم: ON CONFLICT فقط روی ستونی کار میکنه که PRIMARY KEY یا UNIQUE باشه؛ وگرنه SQLite خطای ON CONFLICT clause does not match any PRIMARY KEY or UNIQUE constraint میده.
💎 جایگزین کردن یا نادیده گرفتن
اگه بهجای جمع، مقدار جدید باید جایگزین بشه، فقط
خروجی:
و اگه میخواید ردیف تکراری بیسروصدا نادیده گرفته بشه، از DO NOTHING استفاده کنید:
خروجی:
موجودی book همون 3 موند و 99 نادیده گرفته شد.
▫️ طبق مستندات SQLite، این سینتکس از PostgreSQL گرفته شده و همین دستورها اونجا هم کار میکنن. توی MySQL معادلش ON DUPLICATE KEY UPDATE هست.
▫️ توی PostgreSQL برای اشاره به مقدار فعلی ردیف، باید اسم جدول رو بنویسید (stock.qty، نه فقط qty)؛ برای همین توی مثالها از همین شکل استفاده کردیم.
▫️ برای امتحان، sqlite3 رو با نمایش جدولی باز کنید:
بعد جدول نمونه رو بسازید و هر کوئری رو روی جدول تازه اجرا کنید:
آموزش هوش مصنوعی و برنامه نویسی 👇
@codingyar
وبسایت آموزشی:
www.codingyar.com
به این کار upsert میگن. فرض کنید جدول stock با ستونهای product (کلید اصلی) و qty داریم و الان pen با موجودی 10 و book با موجودی 3 توشه. حالا پنج تا pen دیگه رسیده:
INSERT INTO stock (product, qty) VALUES ('pen', 5)
ON CONFLICT (product)
DO UPDATE SET qty = stock.qty + excluded.qty;
SELECT * FROM stock ORDER BY product;
خروجی (توی SQLite):
product qty
------- ---
book 3
pen 15
چون pen از قبل بود، INSERT به خطا نخورد و بهجاش موجودی 10 با 5 جمع شد. عبارت
excluded.qty یعنی مقداری که میخواستیم اضافه کنیم (اینجا 5) و stock.qty مقدار فعلی ردیفه.
همین دستور برای محصول جدید (bag) یک ردیف تازه میسازه:
INSERT INTO stock (product, qty) VALUES ('bag', 7)
ON CONFLICT (product)
DO UPDATE SET qty = stock.qty + excluded.qty;
SELECT * FROM stock ORDER BY product;
خروجی:
product qty
------- ---
bag 7
book 3
pen 10
اگه یک INSERT معمولی (بدون ON CONFLICT) برای pen اجرا کنید، چون product کلید اصلیه، خطای UNIQUE constraint failed: stock.product میگیرید و هیچ تغییری انجام نمیشه.
یک نکتهٔ مهم: ON CONFLICT فقط روی ستونی کار میکنه که PRIMARY KEY یا UNIQUE باشه؛ وگرنه SQLite خطای ON CONFLICT clause does not match any PRIMARY KEY or UNIQUE constraint میده.
💎 جایگزین کردن یا نادیده گرفتن
اگه بهجای جمع، مقدار جدید باید جایگزین بشه، فقط
qty = excluded.qty بنویسید:
INSERT INTO stock (product, qty) VALUES ('pen', 5)
ON CONFLICT (product)
DO UPDATE SET qty = excluded.qty;
SELECT * FROM stock ORDER BY product;
خروجی:
product qty
------- ---
book 3
pen 5
و اگه میخواید ردیف تکراری بیسروصدا نادیده گرفته بشه، از DO NOTHING استفاده کنید:
INSERT INTO stock (product, qty) VALUES ('book', 99)
ON CONFLICT (product) DO NOTHING;
SELECT * FROM stock ORDER BY product;
خروجی:
product qty
------- ---
book 3
pen 10
موجودی book همون 3 موند و 99 نادیده گرفته شد.
▫️ طبق مستندات SQLite، این سینتکس از PostgreSQL گرفته شده و همین دستورها اونجا هم کار میکنن. توی MySQL معادلش ON DUPLICATE KEY UPDATE هست.
▫️ توی PostgreSQL برای اشاره به مقدار فعلی ردیف، باید اسم جدول رو بنویسید (stock.qty، نه فقط qty)؛ برای همین توی مثالها از همین شکل استفاده کردیم.
▫️ برای امتحان، sqlite3 رو با نمایش جدولی باز کنید:
sqlite3 -header -column test.db
بعد جدول نمونه رو بسازید و هر کوئری رو روی جدول تازه اجرا کنید:
CREATE TABLE stock (product TEXT PRIMARY KEY, qty INTEGER);
INSERT INTO stock VALUES ('pen', 10), ('book', 3);
آموزش هوش مصنوعی و برنامه نویسی 👇
@codingyar
وبسایت آموزشی:
www.codingyar.com
Please open Telegram to view this post
VIEW IN TELEGRAM
👍3
Please open Telegram to view this post
VIEW IN TELEGRAM
👏3