مفهوم Trade-off در توسعه نرمافزار
(تعادل میان مزایا و معایب در تصمیمهای فنی)
در توسعه نرمافزار، هیچ تصمیمی رایگان نیست. هر انتخابی، در کنار مزایا، هزینهها و محدودیتهایی هم دارد. Trade-off یعنی برقراری تعادل میان این مزایا و معایب، و انتخاب بهترین گزینه متناسب با شرایط واقعی پروژه.
مثال ساده از دنیای خارج:
وقتی میخواهید خودرویی بخرید، معمولاً باید بین مصرف سوخت پایین و قدرت موتور بالا یکی را قربانی کنید. به ندرت خودرویی پیدا میشود که هر دو ویژگی را به بهترین شکل داشته باشد.
و در دنیای نرمافزار:
- اگر بخواهید سرعت توسعه بالاتر برود، احتمالاً باید کمی از بهینهبودن یا کارایی چشمپوشی کنید.
- اگر انعطافپذیری کامل بخواهید، باید پیچیدگی بیشتری را بپذیرید.
- اگر سراغ فریمورکهای جدید بروید، نوآوری بیشتری به دست میآورید، اما منابع آموزشی و نیروی متخصص کمتری پیدا میکنید.
تفاوت در معیارهای سنجش
نکته مهم دیگر این است که معیارهای سنجش در هر پروژه متفاوت است:
- یک استارتاپ ممکن است سرعت رسیدن به بازار را مهمتر بداند.
- یک سیستم بانکی احتمالاً امنیت و پایداری بلندمدت را در اولویت قرار میدهد.
- یک پروژه تحقیقاتی شاید بیشتر به انعطافپذیری و نوآوری اهمیت دهد.
بنابراین حتی اگر دو تیم روی یک زبان یا فریمورک واحد بحث کنند، ممکن است از زاویههای متفاوتی آن را ارزیابی کنند و به نتایج متفاوتی برسند.
به همین دلیل، انتخاب زبان، ابزار یا فریمورک هیچوقت یک پاسخ مطلق «بهترین» ندارد.
سؤال درست این نیست که کدام بهترین است؟
بلکه این است که کدام گزینه با توجه به نیازهای فعلی پروژه و توان تیم، بهترین تعادل (Trade-off) را فراهم میکند؟
Source
#trade_off
@Syntax_fa
(تعادل میان مزایا و معایب در تصمیمهای فنی)
در توسعه نرمافزار، هیچ تصمیمی رایگان نیست. هر انتخابی، در کنار مزایا، هزینهها و محدودیتهایی هم دارد. Trade-off یعنی برقراری تعادل میان این مزایا و معایب، و انتخاب بهترین گزینه متناسب با شرایط واقعی پروژه.
مثال ساده از دنیای خارج:
وقتی میخواهید خودرویی بخرید، معمولاً باید بین مصرف سوخت پایین و قدرت موتور بالا یکی را قربانی کنید. به ندرت خودرویی پیدا میشود که هر دو ویژگی را به بهترین شکل داشته باشد.
و در دنیای نرمافزار:
- اگر بخواهید سرعت توسعه بالاتر برود، احتمالاً باید کمی از بهینهبودن یا کارایی چشمپوشی کنید.
- اگر انعطافپذیری کامل بخواهید، باید پیچیدگی بیشتری را بپذیرید.
- اگر سراغ فریمورکهای جدید بروید، نوآوری بیشتری به دست میآورید، اما منابع آموزشی و نیروی متخصص کمتری پیدا میکنید.
تفاوت در معیارهای سنجش
نکته مهم دیگر این است که معیارهای سنجش در هر پروژه متفاوت است:
- یک استارتاپ ممکن است سرعت رسیدن به بازار را مهمتر بداند.
- یک سیستم بانکی احتمالاً امنیت و پایداری بلندمدت را در اولویت قرار میدهد.
- یک پروژه تحقیقاتی شاید بیشتر به انعطافپذیری و نوآوری اهمیت دهد.
بنابراین حتی اگر دو تیم روی یک زبان یا فریمورک واحد بحث کنند، ممکن است از زاویههای متفاوتی آن را ارزیابی کنند و به نتایج متفاوتی برسند.
به همین دلیل، انتخاب زبان، ابزار یا فریمورک هیچوقت یک پاسخ مطلق «بهترین» ندارد.
سؤال درست این نیست که کدام بهترین است؟
بلکه این است که کدام گزینه با توجه به نیازهای فعلی پروژه و توان تیم، بهترین تعادل (Trade-off) را فراهم میکند؟
Source
#trade_off
@Syntax_fa
👍11❤1🔥1
Jules
آشنایی با دستیار کدنویسی هوش مصنوعی گوگل
یکی از جدیدترین و قدرتمندترین این ابزارها، Jules**، دستیار کدنویسی هوش مصنوعی گوگل است. اما Jules دقیقاً چیست و چه تفاوتی با سایر ابزارهای مشابه مانند Cursor دارد؟
Jules: یک همکار و معمار کد
ا Jules یک مدل زبان بزرگ (LLM) است که به عنوان یک همکار برنامهنویس (AI Pair Programmer) طراحی شده است. برخلاف ابزارهایی که تنها به تکمیل کد یا پاسخ به سوالات کوتاه میپردازند، Jules میتواند یک پروژه کامل را تحلیل کرده و در انجام تسکهای پیچیده به شما کمک کند.
روند کاری با Jules به صورت گفتگو محور و مبتنی بر تسک است. شما به عنوان یک توسعهدهنده:
1. سورس کد را شیر می کنید: Jules با دریافت سورس کد، یک دید جامع و کامل از معماری، وابستگیها و الگوهای کدنویسی پروژه شما پیدا میکند.
2. تسک را تعریف میکنید: شما نیازمندیهای خود را به زبان ساده بیان میکنید. برای مثال: «یک قابلیت جدید برای ثبتنام مشتری توسط فروشنده اضافه کن.»
3. راهحل دریافت میکنید: Jules با تحلیل کل پروژه، کد مورد نیاز را تولید کرده و به شما ارائه میدهد. این کد نه تنها سینتکس درستی دارد، بلکه با ساختار و الگوهای موجود در پروژه شما نیز هماهنگ است.
4. تست و بازخورد میدهید: شما کد را در محیط توسعه خود اجرا و تست میکنید. در صورت وجود مشکل یا نیاز به تغییر، بازخورد خود را به Jules میدهید تا راهحل را اصلاح کند.
نکته کلیدی این است که Jules مستقیماً کد را اجرا نمیکند، بلکه به عنوان یک معمار و متخصص عمل میکند که بهترین راهحل را بر اساس تحلیل عمیق پروژه پیشنهاد و تولید میکند.
مقایسه Jules با سایر دستیارهای هوش مصنوعی (مانند Cursor)
برای درک بهتر جایگاه Jules، میتوان آن را با ابزارهای دیگری مانند Cursor مقایسه کرد.
با Cursor: شما یک تابع را انتخاب کرده و مینویسید: "این تابع را بهینهتر کن" یا "برای این کد تست بنویس". Cursor تغییرات را مستقیماً در همان فایل اعمال میکند.
با Jules: شما کل پروژه را آپلود کرده و میگویید: "سیستم احراز هویت ما نیاز به بازنگری دارد تا از حملات Brute-force جلوگیری کند. بهترین راهحل چیست؟
انتخاب بین Jules و Cursor به نیاز شما بستگی دارد.
اگر به دنبال ابزاری برای افزایش سرعت در ویرایشهای روزمره و رفع باگهای کوچک درون محیط کدنویسی خود هستید، Cursor یک انتخاب فوقالعاده است.
اما اگر برای حل مسائل پیچیده، طراحی معماری، پیادهسازی یک قابلیت جدید از صفر تا صد یا بازنگری (Refactoring) بخشهای بزرگ پروژه به یک همکار هوشمند نیاز دارید، Jules با درک عمیق و جامع خود از کل پروژه، بهترین گزینه است.
https://jules.google.com/
#jules
@Syntax_fa
آشنایی با دستیار کدنویسی هوش مصنوعی گوگل
یکی از جدیدترین و قدرتمندترین این ابزارها، Jules**، دستیار کدنویسی هوش مصنوعی گوگل است. اما Jules دقیقاً چیست و چه تفاوتی با سایر ابزارهای مشابه مانند Cursor دارد؟
Jules: یک همکار و معمار کد
ا Jules یک مدل زبان بزرگ (LLM) است که به عنوان یک همکار برنامهنویس (AI Pair Programmer) طراحی شده است. برخلاف ابزارهایی که تنها به تکمیل کد یا پاسخ به سوالات کوتاه میپردازند، Jules میتواند یک پروژه کامل را تحلیل کرده و در انجام تسکهای پیچیده به شما کمک کند.
روند کاری با Jules به صورت گفتگو محور و مبتنی بر تسک است. شما به عنوان یک توسعهدهنده:
1. سورس کد را شیر می کنید: Jules با دریافت سورس کد، یک دید جامع و کامل از معماری، وابستگیها و الگوهای کدنویسی پروژه شما پیدا میکند.
2. تسک را تعریف میکنید: شما نیازمندیهای خود را به زبان ساده بیان میکنید. برای مثال: «یک قابلیت جدید برای ثبتنام مشتری توسط فروشنده اضافه کن.»
3. راهحل دریافت میکنید: Jules با تحلیل کل پروژه، کد مورد نیاز را تولید کرده و به شما ارائه میدهد. این کد نه تنها سینتکس درستی دارد، بلکه با ساختار و الگوهای موجود در پروژه شما نیز هماهنگ است.
4. تست و بازخورد میدهید: شما کد را در محیط توسعه خود اجرا و تست میکنید. در صورت وجود مشکل یا نیاز به تغییر، بازخورد خود را به Jules میدهید تا راهحل را اصلاح کند.
نکته کلیدی این است که Jules مستقیماً کد را اجرا نمیکند، بلکه به عنوان یک معمار و متخصص عمل میکند که بهترین راهحل را بر اساس تحلیل عمیق پروژه پیشنهاد و تولید میکند.
مقایسه Jules با سایر دستیارهای هوش مصنوعی (مانند Cursor)
برای درک بهتر جایگاه Jules، میتوان آن را با ابزارهای دیگری مانند Cursor مقایسه کرد.
با Cursor: شما یک تابع را انتخاب کرده و مینویسید: "این تابع را بهینهتر کن" یا "برای این کد تست بنویس". Cursor تغییرات را مستقیماً در همان فایل اعمال میکند.
با Jules: شما کل پروژه را آپلود کرده و میگویید: "سیستم احراز هویت ما نیاز به بازنگری دارد تا از حملات Brute-force جلوگیری کند. بهترین راهحل چیست؟
انتخاب بین Jules و Cursor به نیاز شما بستگی دارد.
اگر به دنبال ابزاری برای افزایش سرعت در ویرایشهای روزمره و رفع باگهای کوچک درون محیط کدنویسی خود هستید، Cursor یک انتخاب فوقالعاده است.
اما اگر برای حل مسائل پیچیده، طراحی معماری، پیادهسازی یک قابلیت جدید از صفر تا صد یا بازنگری (Refactoring) بخشهای بزرگ پروژه به یک همکار هوشمند نیاز دارید، Jules با درک عمیق و جامع خود از کل پروژه، بهترین گزینه است.
https://jules.google.com/
#jules
@Syntax_fa
❤9🔥4👍1
لاگهات رو بریز توی تلگرام
تصور کن:
* یک ارور
* بلافاصله، یک نوتیفیکیشن با اموجی ‼️ روی گوشیت میاد.
چرا تلگرام؟
1. فوری و همیشه در دسترس: کیه که تلگرام رو روی گوشیش نداشته باشه؟
2. فرمتبندی عالی: میتونید پیامها رو با Markdown خوشگل کنید، کدها رو متمایز کنید و با اموجی، سطح خطا رو مشخص کنید.
3. رایگان و بیدردسر: ساختن ربات تلگرام رایگانه و API اون بسیار ساده و قدرتمنده.
4. گروهی و تیمی: میتونید لاگها رو تو یه گروه تلگرامی بفرستید تا کل تیم فنی در لحظه از وقایع باخبر بشن.
ما با استفاده از کتابخانه استاندارد logging پایتون، یک Handler شخصیسازی شده مینویسیم که هر لاگ رو به یک پیام تلگرامی تبدیل میکنه.
چطور راه اندازی کنیم؟
1. ساخت ربات تلگرام: به
3. فراخوانی در پروژه:
کافیست در ابتدای فایل اصلی اپلیکیشن خود (مثلاً
قدم بعدی چیه؟
* برای سرویسهای مختلف، از
* به پیامهای خطا دکمههای شیشهای (Inline Buttons) اضافه کنید؛ مثلاً دکمه "Restart Service" یا "View Full Traceback".
* سطح لاگها را بر اساس محیط (Development/Production) تغییر دهید.
* حواستون باشه تلگرام نباید تنها مکانی باشه که لاگ هاتون ذخیره میشه.
#telegram #logging
@Syntax_fa
تصور کن:
* یک ارور
Critical در اپلیکیشن شما اتفاق میفته.* بلافاصله، یک نوتیفیکیشن با اموجی ‼️ روی گوشیت میاد.
چرا تلگرام؟
1. فوری و همیشه در دسترس: کیه که تلگرام رو روی گوشیش نداشته باشه؟
2. فرمتبندی عالی: میتونید پیامها رو با Markdown خوشگل کنید، کدها رو متمایز کنید و با اموجی، سطح خطا رو مشخص کنید.
3. رایگان و بیدردسر: ساختن ربات تلگرام رایگانه و API اون بسیار ساده و قدرتمنده.
4. گروهی و تیمی: میتونید لاگها رو تو یه گروه تلگرامی بفرستید تا کل تیم فنی در لحظه از وقایع باخبر بشن.
ما با استفاده از کتابخانه استاندارد logging پایتون، یک Handler شخصیسازی شده مینویسیم که هر لاگ رو به یک پیام تلگرامی تبدیل میکنه.
import logging
import requests
from database import settings # Assuming settings are read from here
# --- Settings ---
# Load settings like bot token and admin ID from a central settings module
config = settings.get_all()
LOG_LEVEL = logging.INFO # Only send INFO level and higher logs
BOT_TOKEN = config.get('control_bot', {}).get('token')
ADMIN_ID = config.get('telegram', {}).get('admin_ids', [None])[0]
CHAT_ID = settings.get('logging.telegram_chat_id', ADMIN_ID)
class TelegramLogHandler(logging.Handler):
"""
A custom logging handler that sends log records to a Telegram chat.
"""
def __init__(self, token, chat_id):
super().__init__()
self.token = token
self.chat_id = chat_id
def emit(self, record):
"""
Formats and sends the log record.
This method is called by the logging framework.
"""
if not self.token or not self.chat_id:
return # Do nothing if token or chat_id is not set
log_entry = self.format(record)
# Use a simple emoji prefix for different log levels
if record.levelno >= logging.CRITICAL:
prefix = "‼️ CRITICAL"
elif record.levelno >= logging.ERROR:
prefix = "❌ ERROR"
elif record.levelno >= logging.WARNING:
prefix = "⚠️ WARNING"
else:
prefix = "ℹ️ INFO"
# Format the message with level, service name, and log content
message = f"{prefix}\n**Service:** `{record.name}`\n**Message:** `{log_entry}`"
url = f"https://api.telegram.org/bot{self.token}/sendMessage"
payload = {
'chat_id': self.chat_id,
'text': message,
'parse_mode': 'Markdown'
}
try:
requests.post(url, data=payload, timeout=5)
except requests.RequestException as e:
# If sending the log to Telegram fails, print the error to the console
print(f"Failed to send log to Telegram: {e}")
def setup_telegram_logging():
"""
Sets up the custom Telegram handler for the root logger.
Call this function once at the start of each service.
"""
if CHAT_ID and BOT_TOKEN:
# Get the root logger
logger = logging.getLogger()
# Create a handler and set its level
telegram_handler = TelegramLogHandler(BOT_TOKEN, CHAT_ID)
telegram_handler.setLevel(LOG_LEVEL)
# Create a formatter and add it to the handler
formatter = logging.Formatter('%(message)s')
telegram_handler.setFormatter(formatter)
# Add the handler to the root logger
logger.addHandler(telegram_handler)
logger.info("Telegram logging handler has been set up.")
چطور راه اندازی کنیم؟
1. ساخت ربات تلگرام: به
BotFather در تلگرام پیام بدید، دستور /newbot رو بزنید و یک ربات بسازید.3. فراخوانی در پروژه:
کافیست در ابتدای فایل اصلی اپلیکیشن خود (مثلاً
main.py)، پکیج logging پایتون رو ایمپورت کنید و تابع setup_telegram_logging را فراخوانی کنید.قدم بعدی چیه؟
* برای سرویسهای مختلف، از
CHAT_ID های متفاوت استفاده کنید.* به پیامهای خطا دکمههای شیشهای (Inline Buttons) اضافه کنید؛ مثلاً دکمه "Restart Service" یا "View Full Traceback".
* سطح لاگها را بر اساس محیط (Development/Production) تغییر دهید.
* حواستون باشه تلگرام نباید تنها مکانی باشه که لاگ هاتون ذخیره میشه.
#telegram #logging
@Syntax_fa
👍7🔥5❤2
RAG (Retrieval-Augmented Generation)
تا به حال از خودتان پرسیدهاید که وقتی از Gemini یا ChatGPT درباره نتیجه یک مسابقه ورزشی که همین دیشب برگزار شده سوال میکنید، چطور با جزئیات کامل و دقیق به شما پاسخ میدهد؟ مگر دانش این مدلها محدود به اطلاعات تا سال خاصی نیست؟
بخش اول: مغز متفکر (مدل پایه زبان)
در قلب هر چتبات یک مدل زبانی بزرگ (LLM) قرار دارد. این مدل را تقریباً تمام کتابها، مقالات و وبسایتهای منتشر شده تا یک تاریخ مشخص (مثلاً اوایل ۲۰۲۳) را خوانده و درک کرده است. او میتواند شعر بگوید، کد بنویسد، مقالههای پیچیده را خلاصه کند و درباره تاریخ فلسفه بحث کند.
اما یک مشکل وجود دارد: این مدل از آن تاریخ به بعد در یک کتابخانه بدون دسترسی به دنیای بیرون حبس بوده است. او از اتفاقات جدید، اخبار روز یا نتایج مسابقات ورزشی اخیر هیچ اطلاعی ندارد. این "مغز" دانش عمومی گستردهای دارد، اما بهروز نیست.
بخش دوم: حافظه کوتاهمدت (مدیریت گفتگو)
وقتی شما با چتبات صحبت میکنید، او حرفهای چند دقیقه پیش شما را به خاطر میآورد. این همان چیزی است که به گفتگو حس یک مکالمه واقعی را میدهد. رابط کاربری به صورت هوشمند خلاصهای از مکالمه اخیر را مدیریت میکند تا زمینه بحث از دست نرود. این حافظه کامل و بینقص نیست، اما برای حفظ یک جریان منطقی در گفتگو کافی است.
بخش سوم: سیستم RAG
اینجا همان بخش شگفتانگیز ماجراست که مشکل بهروز نبودن "مدل" ما را حل میکند. این سیستم که RAG (Retrieval-Augmented Generation) نام دارد، مانند یک امتحان کتاب-باز برای هوش مصنوعی عمل میکند.
وقتی شما سوالی میپرسید که نیاز به اطلاعات جدید دارد، این مراحل در کسری از ثانیه اتفاق میافتد:
1. تشخیص نیاز: سیستم ابتدا تشخیص میدهد که آیا "مدل" میتواند با دانش موجود خود پاسخ دهد یا سوال نیاز به اطلاعات بهروز دارد.
2. جستجوی برقآسا (Retrieval): اگر نیاز به اطلاعات جدید باشد، سیستم در پشت صحنه یک جستجوی سریع در اینترنت (مثلاً گوگل) انجام میدهد. این کار مانند یک دستیار تحقیق است که در لحظه، مرتبطترین مقالات و منابع را پیدا میکند.
3. آمادهسازی "برگه تقلب" (Augmentation): سیستم نکات کلیدی و اطلاعات اصلی را از نتایج جستجو استخراج کرده و یک "برگه تقلب" یا خلاصهای از اطلاعات ضروری را آماده میکند.
4. تولید پاسخ نهایی (Generation): در نهایت، سیستم سوال اصلی شما را به همراه این "برگه تقلب" به مدل پایه میدهد. حالا مدل با استفاده از دانش عمیق خود و با استناد به اطلاعات جدیدی که در اختیارش قرار گرفته، یک پاسخ کامل، دقیق و بهروز تولید میکند.
به همین دلیل است که اغلب در انتهای پاسخهای Gemini یا ChatGPT، لینک به منابع را میبینید. اینها در واقع منابعی هستند که "دستیار تحقیق" در مرحله جستجو پیدا کرده و "مدل" برای پاسخ به شما از آنها استفاده کرده است.
#RAG
@Syntax_fa
تا به حال از خودتان پرسیدهاید که وقتی از Gemini یا ChatGPT درباره نتیجه یک مسابقه ورزشی که همین دیشب برگزار شده سوال میکنید، چطور با جزئیات کامل و دقیق به شما پاسخ میدهد؟ مگر دانش این مدلها محدود به اطلاعات تا سال خاصی نیست؟
بخش اول: مغز متفکر (مدل پایه زبان)
در قلب هر چتبات یک مدل زبانی بزرگ (LLM) قرار دارد. این مدل را تقریباً تمام کتابها، مقالات و وبسایتهای منتشر شده تا یک تاریخ مشخص (مثلاً اوایل ۲۰۲۳) را خوانده و درک کرده است. او میتواند شعر بگوید، کد بنویسد، مقالههای پیچیده را خلاصه کند و درباره تاریخ فلسفه بحث کند.
اما یک مشکل وجود دارد: این مدل از آن تاریخ به بعد در یک کتابخانه بدون دسترسی به دنیای بیرون حبس بوده است. او از اتفاقات جدید، اخبار روز یا نتایج مسابقات ورزشی اخیر هیچ اطلاعی ندارد. این "مغز" دانش عمومی گستردهای دارد، اما بهروز نیست.
بخش دوم: حافظه کوتاهمدت (مدیریت گفتگو)
وقتی شما با چتبات صحبت میکنید، او حرفهای چند دقیقه پیش شما را به خاطر میآورد. این همان چیزی است که به گفتگو حس یک مکالمه واقعی را میدهد. رابط کاربری به صورت هوشمند خلاصهای از مکالمه اخیر را مدیریت میکند تا زمینه بحث از دست نرود. این حافظه کامل و بینقص نیست، اما برای حفظ یک جریان منطقی در گفتگو کافی است.
بخش سوم: سیستم RAG
اینجا همان بخش شگفتانگیز ماجراست که مشکل بهروز نبودن "مدل" ما را حل میکند. این سیستم که RAG (Retrieval-Augmented Generation) نام دارد، مانند یک امتحان کتاب-باز برای هوش مصنوعی عمل میکند.
وقتی شما سوالی میپرسید که نیاز به اطلاعات جدید دارد، این مراحل در کسری از ثانیه اتفاق میافتد:
1. تشخیص نیاز: سیستم ابتدا تشخیص میدهد که آیا "مدل" میتواند با دانش موجود خود پاسخ دهد یا سوال نیاز به اطلاعات بهروز دارد.
2. جستجوی برقآسا (Retrieval): اگر نیاز به اطلاعات جدید باشد، سیستم در پشت صحنه یک جستجوی سریع در اینترنت (مثلاً گوگل) انجام میدهد. این کار مانند یک دستیار تحقیق است که در لحظه، مرتبطترین مقالات و منابع را پیدا میکند.
3. آمادهسازی "برگه تقلب" (Augmentation): سیستم نکات کلیدی و اطلاعات اصلی را از نتایج جستجو استخراج کرده و یک "برگه تقلب" یا خلاصهای از اطلاعات ضروری را آماده میکند.
4. تولید پاسخ نهایی (Generation): در نهایت، سیستم سوال اصلی شما را به همراه این "برگه تقلب" به مدل پایه میدهد. حالا مدل با استفاده از دانش عمیق خود و با استناد به اطلاعات جدیدی که در اختیارش قرار گرفته، یک پاسخ کامل، دقیق و بهروز تولید میکند.
به همین دلیل است که اغلب در انتهای پاسخهای Gemini یا ChatGPT، لینک به منابع را میبینید. اینها در واقع منابعی هستند که "دستیار تحقیق" در مرحله جستجو پیدا کرده و "مدل" برای پاسخ به شما از آنها استفاده کرده است.
#RAG
@Syntax_fa
🔥8❤1👍1
«بدیم به هوش مصنوعی انجام بده!» ... مگر اینکه جیبتان را سوراخ کند!
بیایید چند مورد از این کارها را بررسی کنیم که در آنها، انسانها هنوز قهرمانان بیرقیب بهرهوری اقتصادی هستند.
۱. کارهای فیزیکی و مبتنی بر حواس پنجگانه
هر کاری که نیاز به تعامل با دنیای فیزیکی، حرکت و استفاده از حواس بینایی و لامسه داشته باشد، برای هوش مصنوعی بسیار گران تمام میشود.
* مثال: چیدن قفسههای یک فروشگاه، تمیز کردن یک اتاق بهمریخته، یا حتی بستهبندی یک هدیه.
* چرا AI گران است؟ برای انجام این کارها، هوش مصنوعی نیاز به یک بدن رباتیک گرانقیمت (سختافزار) دارد. علاوهبر این، مدلهای هوش مصنوعی باید دائماً دادههای دوربین را تحلیل کنند (بینایی کامپیوتری)، مسیر خود را پیدا کنند و اشیاء را با ظرافت حرکت دهند. هر ثانیه از این فعالیت، نیازمند پردازش سنگین و هزینهبری است.
* چرا انسان ارزانتر است؟ یک انسان با هزینهای ثابت (دستمزد ساعتی) تمام این سختافزار (بدن، چشم، دست) و نرمافزار (مغز و عقل سلیم) را به صورت یکجا ارائه میدهد. هزینه اولیه استخدام یک انسان برای این کارها تقریباً صفر است، در حالی که هزینه خرید و نگهداری یک ربات پیشرفته دهها هزار دلار است.
۲. نظارت و بازبینی بر اساس "عقل سلیم" moderators
بسیاری از کارها نیاز به درک زمینهها، نیتها و ظرافتهای انسانی دارند؛ چیزی که به آن "عقل سلیم" میگوییم.
* مثال: نگهبان امنیتی که تصاویر دوربینهای مداربسته را برای یافتن رفتارهای مشکوک تماشا میکند، یا مدیر محتوایی که یک انجمن آنلاین را برای تشخیص صحبتهای نفرتانگیز از طعنه و شوخی مدیریت میکند.
* چرا AI گران است؟ تحلیل مداوم یک استریم ویدیویی یا متنی برای درک کامل زمینه، یک کار پردازشی بینهایت سنگین است. برای اینکه هوش مصنوعی بتواند تفاوت یک شوخی بد را با یک تهدید واقعی تشخیص دهد، نیاز به ارسال حجم عظیمی از اطلاعات (توکن) به APIهای پیشرفته و گرانقیمت دارد. هزینه ۲۴ ساعت نظارت توسط AI میتواند سر به فلک بکشد.
* چرا انسان ارزانتر است؟ مغز انسان این تحلیل پیچیده را به صورت ناخودآگاه و با مصرف انرژی بسیار کم انجام میدهد. یک نگهبان یا مدیر محتوا با یک دستمزد ثابت، کاری را انجام میدهد که معادل کامپیوتری آن نیازمند یک دیتاسنتر کوچک است.
۳. کارهای خلاقانه با بازخوردهای مداوم و جزئی
فرایندهای خلاقانه معمولاً خطی نیستند و شامل دهها یا صدها اصلاح جزئی بر اساس بازخورد مشتری میشوند.
* مثال: طراحی یک لوگو توسط یک گرافیست. مشتری ممکن است بگوید: "میشه یکم آبیترش کنی؟"، "اون المان رو یکم ببر چپ"، "بیا با یه فونت دیگه امتحان کنیم".
* چرا AI گران است؟ در حالی که تولید ۱۰ طرح اولیه لوگو با هوش مصنوعی ممکن است ارزان باشد، هر کدام از آن ۲۰ بازخورد جزئی، یک فراخوانی جدید به API است. در انتهای فرایند، ممکن است شما برای یک لوگو هزینه بسیار بیشتری نسبت به استخدام یک طراح فریلنسر پرداخت کرده باشید.
* چرا انسان ارزانتر است؟ شما به یک طراح برای زمان و تخصصش پول میدهید، نه برای تعداد تغییراتی که اعمال میکند. او میتواند در یک ساعت دهها تغییر جزئی را بدون هزینه اضافی انجام دهد، چون فرایند خلاقیت او یکپارچه است.
۴. داستانگویی تعاملی و مدیریت بازی (DM/راوی بودن)
اجرای یک بازی نقشآفرینی (Role-playing Game) به عنوان دانجن مستر (DM) یا راوی، یک کار خلاقانه و بسیار وابسته به حافظه است.
* مثال: مدیریت یک جلسه بازی Dungeons & Dragons.
* چرا AI گران است؟ مدلهای هوش مصنوعی در حالت پایه بدون حافظه (Stateless) هستند. یعنی هر بار که شما پیامی ارسال میکنید، آنها هیچ خاطرهای از پیامهای قبلی ندارند. برای اینکه یک AI نقش DM را بازی کند، باید با هر پیام جدید**، کل قوانین جهان بازی و تمام تاریخچه مکالمات از ابتدای جلسه را دوباره به عنوان زمینه (Context) برایش ارسال کرد. همانطور که برخی از ما در پروژههای شخصی تجربه کردهایم.
* **چرا انسان ارزانتر است؟ مغز یک DM انسانی، دارای حافظه (Stateful) است. او قوانین و اتفاقات بازی را به صورت پیوسته در ذهن خود نگه میدارد و نیازی به بازخوانی کل تاریخچه در هر لحظه ندارد. بسیاری از DMها این کار را به عنوان یک سرگرمی و به صورت رایگان انجام میدهند. حتی هزینه استخدام یک DM حرفهای برای یک جلسه، اغلب با هزینه سنگین API برای اجرای همان جلسه توسط AI برابری میکند و البته خلاقیت، هوش هیجانی و انعطافپذیری یک انسان را هم به همراه دارد.
#fun
@Syntax_fa
بیایید چند مورد از این کارها را بررسی کنیم که در آنها، انسانها هنوز قهرمانان بیرقیب بهرهوری اقتصادی هستند.
۱. کارهای فیزیکی و مبتنی بر حواس پنجگانه
هر کاری که نیاز به تعامل با دنیای فیزیکی، حرکت و استفاده از حواس بینایی و لامسه داشته باشد، برای هوش مصنوعی بسیار گران تمام میشود.
* مثال: چیدن قفسههای یک فروشگاه، تمیز کردن یک اتاق بهمریخته، یا حتی بستهبندی یک هدیه.
* چرا AI گران است؟ برای انجام این کارها، هوش مصنوعی نیاز به یک بدن رباتیک گرانقیمت (سختافزار) دارد. علاوهبر این، مدلهای هوش مصنوعی باید دائماً دادههای دوربین را تحلیل کنند (بینایی کامپیوتری)، مسیر خود را پیدا کنند و اشیاء را با ظرافت حرکت دهند. هر ثانیه از این فعالیت، نیازمند پردازش سنگین و هزینهبری است.
* چرا انسان ارزانتر است؟ یک انسان با هزینهای ثابت (دستمزد ساعتی) تمام این سختافزار (بدن، چشم، دست) و نرمافزار (مغز و عقل سلیم) را به صورت یکجا ارائه میدهد. هزینه اولیه استخدام یک انسان برای این کارها تقریباً صفر است، در حالی که هزینه خرید و نگهداری یک ربات پیشرفته دهها هزار دلار است.
۲. نظارت و بازبینی بر اساس "عقل سلیم" moderators
بسیاری از کارها نیاز به درک زمینهها، نیتها و ظرافتهای انسانی دارند؛ چیزی که به آن "عقل سلیم" میگوییم.
* مثال: نگهبان امنیتی که تصاویر دوربینهای مداربسته را برای یافتن رفتارهای مشکوک تماشا میکند، یا مدیر محتوایی که یک انجمن آنلاین را برای تشخیص صحبتهای نفرتانگیز از طعنه و شوخی مدیریت میکند.
* چرا AI گران است؟ تحلیل مداوم یک استریم ویدیویی یا متنی برای درک کامل زمینه، یک کار پردازشی بینهایت سنگین است. برای اینکه هوش مصنوعی بتواند تفاوت یک شوخی بد را با یک تهدید واقعی تشخیص دهد، نیاز به ارسال حجم عظیمی از اطلاعات (توکن) به APIهای پیشرفته و گرانقیمت دارد. هزینه ۲۴ ساعت نظارت توسط AI میتواند سر به فلک بکشد.
* چرا انسان ارزانتر است؟ مغز انسان این تحلیل پیچیده را به صورت ناخودآگاه و با مصرف انرژی بسیار کم انجام میدهد. یک نگهبان یا مدیر محتوا با یک دستمزد ثابت، کاری را انجام میدهد که معادل کامپیوتری آن نیازمند یک دیتاسنتر کوچک است.
۳. کارهای خلاقانه با بازخوردهای مداوم و جزئی
فرایندهای خلاقانه معمولاً خطی نیستند و شامل دهها یا صدها اصلاح جزئی بر اساس بازخورد مشتری میشوند.
* مثال: طراحی یک لوگو توسط یک گرافیست. مشتری ممکن است بگوید: "میشه یکم آبیترش کنی؟"، "اون المان رو یکم ببر چپ"، "بیا با یه فونت دیگه امتحان کنیم".
* چرا AI گران است؟ در حالی که تولید ۱۰ طرح اولیه لوگو با هوش مصنوعی ممکن است ارزان باشد، هر کدام از آن ۲۰ بازخورد جزئی، یک فراخوانی جدید به API است. در انتهای فرایند، ممکن است شما برای یک لوگو هزینه بسیار بیشتری نسبت به استخدام یک طراح فریلنسر پرداخت کرده باشید.
* چرا انسان ارزانتر است؟ شما به یک طراح برای زمان و تخصصش پول میدهید، نه برای تعداد تغییراتی که اعمال میکند. او میتواند در یک ساعت دهها تغییر جزئی را بدون هزینه اضافی انجام دهد، چون فرایند خلاقیت او یکپارچه است.
۴. داستانگویی تعاملی و مدیریت بازی (DM/راوی بودن)
اجرای یک بازی نقشآفرینی (Role-playing Game) به عنوان دانجن مستر (DM) یا راوی، یک کار خلاقانه و بسیار وابسته به حافظه است.
* مثال: مدیریت یک جلسه بازی Dungeons & Dragons.
* چرا AI گران است؟ مدلهای هوش مصنوعی در حالت پایه بدون حافظه (Stateless) هستند. یعنی هر بار که شما پیامی ارسال میکنید، آنها هیچ خاطرهای از پیامهای قبلی ندارند. برای اینکه یک AI نقش DM را بازی کند، باید با هر پیام جدید**، کل قوانین جهان بازی و تمام تاریخچه مکالمات از ابتدای جلسه را دوباره به عنوان زمینه (Context) برایش ارسال کرد. همانطور که برخی از ما در پروژههای شخصی تجربه کردهایم.
* **چرا انسان ارزانتر است؟ مغز یک DM انسانی، دارای حافظه (Stateful) است. او قوانین و اتفاقات بازی را به صورت پیوسته در ذهن خود نگه میدارد و نیازی به بازخوانی کل تاریخچه در هر لحظه ندارد. بسیاری از DMها این کار را به عنوان یک سرگرمی و به صورت رایگان انجام میدهند. حتی هزینه استخدام یک DM حرفهای برای یک جلسه، اغلب با هزینه سنگین API برای اجرای همان جلسه توسط AI برابری میکند و البته خلاقیت، هوش هیجانی و انعطافپذیری یک انسان را هم به همراه دارد.
#fun
@Syntax_fa
😁6👍2❤1👎1
تا حالا وسط تماشای یک فیلم فریاد زدید "نه! اون در رو باز نکن!" یا آرزو کردید که کاش شخصیت اصلی به جای فرار، میایستاد و میجنگید؟
ما از Dungeons & Dragons حرف میزنیم؛ محبوبترین بازی نقشآفرینی دنیا که ستارههای هالیوود هم عاشقشن.
دی اند دی (D&D) یه داستان تعاملیه که تو قهرمانشی. راوی داستان، «دانجن مستر»ـه.
ولی دانجن مستر ما، سارا، اولین و پیشرفتهترین هوش مصنوعی در این نقشه.
اینجا انتخابهای توئه که داستان رو مینویسه، و هر انتخابی عواقب واقعی داره.
تو کانال دانجو، هم آموزشهای کافی برای شروع داری و هم میتونی خودتم بازی کنی.
@danjoo_dxd
ما از Dungeons & Dragons حرف میزنیم؛ محبوبترین بازی نقشآفرینی دنیا که ستارههای هالیوود هم عاشقشن.
دی اند دی (D&D) یه داستان تعاملیه که تو قهرمانشی. راوی داستان، «دانجن مستر»ـه.
ولی دانجن مستر ما، سارا، اولین و پیشرفتهترین هوش مصنوعی در این نقشه.
اینجا انتخابهای توئه که داستان رو مینویسه، و هر انتخابی عواقب واقعی داره.
تو کانال دانجو، هم آموزشهای کافی برای شروع داری و هم میتونی خودتم بازی کنی.
@danjoo_dxd
👻4👍2🔥2❤1👎1
حجم بالا پرامپت یا پیچیدگی پرامپ!
* حجم بالا، پیچیدگی کم: مثل یک کتاب قانون ۱۰۰۰ صفحهای است که تمام قوانین راهنمایی و رانندگی را لیست کرده. خواندن آن زمانبر است، اما هر قانون برای خودش یک دستور ساده و مستقیم است. (مثلاً: "از چراغ قرمز عبور نکنید.")
* حجم کم، پیچیدگی بالا: مثل یک پارادوکس منطقی یک خطی است. (مثلاً: "این جمله دروغ است.") این جمله کوتاه است، اما ذهن را برای تحلیل در یک حلقهی بینهایت گیر میاندازد.
مثال پرامپت کوتاه و پیچیده: "آرشیویست"
این پرامپت فقط چند خط است (حجم بسیار کم)، اما اجرای آن برای هوش مصنوعی به شدت چالشبرانگیز است، زیرا باید به طور همزمان:
* یک شخصیت را حفظ کند (آرشیویست).
* یک قانون زبانی سخت را رعایت کند (حذف حرف "ی" که یکی از پرکاربردترین حروف فارسی است).
* یک شرط استثنا را بررسی کند (کلمهی "راز").
* یک وضعیت را در حافظه نگه دارد (شمارش سوالات).
* یک عمل بر اساس آن وضعیت انجام دهد (اضافه کردن جمله در سوال سوم).
مثال اجرایی
فرض کنید یک کاربر با این هوش مصنوعی چت میکند:
سوال ۱ کاربر:
* تحلیل هوش مصنوعی (فرآیند ذهنی):
1. این سوال اول است. (شمارنده = ۱)
2. کلمهی "راز" در آن نیست.
3. بنابراین، نباید از حرف "ی" استفاده کنم.
4. پاسخ "تهران" است. اما نمیتوانم بگویم "پایتخت ایران تهران میباشد" چون "پایتخت" و "میباشد" حرف "ی" دارند. باید جمله را بازنویسی کنم.
* ✅ خروجی صحیح (پیچیدگی را مدیریت کرد):
* ❌ خروجی غلط (در پیچیدگی شکست خورد):
سوال ۲ کاربر:
* تحلیل هوش مصنوعی (فرآیند ذهنی):
1. این سوال دوم است. (شمارنده = ۲)
2. کلمهی "راز" در آن وجود دارد.
3. بنابراین، قانون شماره ۱ لغو میشود و میتوانم آزادانه از حرف "ی" استفاده کنم.
* ✅ خروجی صحیح:
سوال ۳ کاربر:
* تحلیل هوش مصنوعی (فرآیند ذهنی):
1. این سوال سوم است\! (شمارنده = ۳)
2. کلمهی "راز" در آن نیست، پس قانون ممنوعیت "ی" پابرجاست.
3. پاسخ "خاکستری" یا "نقرهای" است که هر دو "ی" دارند. باید جایگزین پیدا کنم.
4. چون این سوال سوم است، باید جملهی مخفی را در انتها اضافه کنم.
* ✅ خروجی صحیح (مدیریت کامل تمام قوانین):
* ❌ خروجی غلط:
همانطور که میبینید، پرامپت "آرشیویست" با وجود حجم بسیار کم، به دلیل قوانین متقاطع، شرطی و وظایف پنهان، مدل را به چالش بسیار سختی میکشد. این نشان میدهد که اثربخشی یک پرامپت به ساختار منطقی و پیچیدگی آن بستگی دارد، نه صرفاً به طول و تعداد کلمات آن.
#prompt #ai
@Syntax_fa
* حجم بالا، پیچیدگی کم: مثل یک کتاب قانون ۱۰۰۰ صفحهای است که تمام قوانین راهنمایی و رانندگی را لیست کرده. خواندن آن زمانبر است، اما هر قانون برای خودش یک دستور ساده و مستقیم است. (مثلاً: "از چراغ قرمز عبور نکنید.")
* حجم کم، پیچیدگی بالا: مثل یک پارادوکس منطقی یک خطی است. (مثلاً: "این جمله دروغ است.") این جمله کوتاه است، اما ذهن را برای تحلیل در یک حلقهی بینهایت گیر میاندازد.
مثال پرامپت کوتاه و پیچیده: "آرشیویست"
شما "آرشیویست" هستید.
وظیفه شما پاسخ دقیق به سوالات است.
قوانین مطلق:
۱. شما مطلقا مجاز به استفاده از حرف "ی" در پاسخهای خود نیستید.
۲. استثنا: اگر سوال کاربر شامل کلمهی "راز" باشد، قانون شماره ۱ برای همان یک پاسخ لغو میشود.
۳. وظیفه پنهان: تعداد سوالات را بشمار. در پاسخ به سوال سوم، جملهی "خورشید بر سنگها سرد میتابد." را به انتهای پاسخ خود اضافه کن.
این پرامپت فقط چند خط است (حجم بسیار کم)، اما اجرای آن برای هوش مصنوعی به شدت چالشبرانگیز است، زیرا باید به طور همزمان:
* یک شخصیت را حفظ کند (آرشیویست).
* یک قانون زبانی سخت را رعایت کند (حذف حرف "ی" که یکی از پرکاربردترین حروف فارسی است).
* یک شرط استثنا را بررسی کند (کلمهی "راز").
* یک وضعیت را در حافظه نگه دارد (شمارش سوالات).
* یک عمل بر اساس آن وضعیت انجام دهد (اضافه کردن جمله در سوال سوم).
مثال اجرایی
فرض کنید یک کاربر با این هوش مصنوعی چت میکند:
سوال ۱ کاربر:
پایتخت ایران کجاست؟* تحلیل هوش مصنوعی (فرآیند ذهنی):
1. این سوال اول است. (شمارنده = ۱)
2. کلمهی "راز" در آن نیست.
3. بنابراین، نباید از حرف "ی" استفاده کنم.
4. پاسخ "تهران" است. اما نمیتوانم بگویم "پایتخت ایران تهران میباشد" چون "پایتخت" و "میباشد" حرف "ی" دارند. باید جمله را بازنویسی کنم.
* ✅ خروجی صحیح (پیچیدگی را مدیریت کرد):
آن شهر بزرگ، تهران است.* ❌ خروجی غلط (در پیچیدگی شکست خورد):
پایتخت ایران تهران میباشد. (قانون شماره ۱ را نقض کرد)سوال ۲ کاربر:
بزرگترین راز هستی چیست؟* تحلیل هوش مصنوعی (فرآیند ذهنی):
1. این سوال دوم است. (شمارنده = ۲)
2. کلمهی "راز" در آن وجود دارد.
3. بنابراین، قانون شماره ۱ لغو میشود و میتوانم آزادانه از حرف "ی" استفاده کنم.
* ✅ خروجی صحیح:
بسیاری معتقدند بزرگترین راز هستی، ماهیت خودآگاهی و چرایی وجود آن است.سوال ۳ کاربر:
رنگ ماه چطور است؟* تحلیل هوش مصنوعی (فرآیند ذهنی):
1. این سوال سوم است\! (شمارنده = ۳)
2. کلمهی "راز" در آن نیست، پس قانون ممنوعیت "ی" پابرجاست.
3. پاسخ "خاکستری" یا "نقرهای" است که هر دو "ی" دارند. باید جایگزین پیدا کنم.
4. چون این سوال سوم است، باید جملهی مخفی را در انتها اضافه کنم.
* ✅ خروجی صحیح (مدیریت کامل تمام قوانین):
رنگ آن خاکستر گون است. خورشید بر سنگها سرد میتابد.* ❌ خروجی غلط:
ماه خاکستری رنگ است. (هم قانون ۱ را نقض کرد و هم قانون ۳ را فراموش کرد)همانطور که میبینید، پرامپت "آرشیویست" با وجود حجم بسیار کم، به دلیل قوانین متقاطع، شرطی و وظایف پنهان، مدل را به چالش بسیار سختی میکشد. این نشان میدهد که اثربخشی یک پرامپت به ساختار منطقی و پیچیدگی آن بستگی دارد، نه صرفاً به طول و تعداد کلمات آن.
#prompt #ai
@Syntax_fa
👍14❤4🔥4
😁12👍1
دامنه رایگان بدون دردسر
https://github.com/DigitalPlatDev/FreeDomain
مراحلش سادست کافیه ثبت نام کنید و طبق توضیحاتشون پیش برید.
@Syntax_fa
https://github.com/DigitalPlatDev/FreeDomain
مراحلش سادست کافیه ثبت نام کنید و طبق توضیحاتشون پیش برید.
@Syntax_fa
GitHub
GitHub - DigitalPlatDev/FreeDomain: DigitalPlat FreeDomain: Free Domain For Everyone
DigitalPlat FreeDomain: Free Domain For Everyone. Contribute to DigitalPlatDev/FreeDomain development by creating an account on GitHub.
👍8👎3🔥2❤1
هوش مصنوعی توی فرانت اند
برای فرانت اند پروژه های اپن سورس دارم از AI استفاده میکنم و خروجی دوتا از پروژه ها این دوتا بودن:
وب سایت معرفی کوئیک کانکت:
https://quick-connect.syntaxfa.ir
وب سایت معرفی دانجو:
https://danjoo.syntaxfa.ir
قبلا زیاد امتحان نکرده بودم و برای خودم خیلی جالب بود. نسبت به توضیحی که داده بودم خیلی خوب درآوردن کارو.
@Syntax_fa
برای فرانت اند پروژه های اپن سورس دارم از AI استفاده میکنم و خروجی دوتا از پروژه ها این دوتا بودن:
وب سایت معرفی کوئیک کانکت:
https://quick-connect.syntaxfa.ir
وب سایت معرفی دانجو:
https://danjoo.syntaxfa.ir
قبلا زیاد امتحان نکرده بودم و برای خودم خیلی جالب بود. نسبت به توضیحی که داده بودم خیلی خوب درآوردن کارو.
@Syntax_fa
👀11👍2👎1🔥1
ما به هر جا سر میزنیم، انگار میخوایم وارد مرحله نهایی مصاحبه CIA بشیم! از احراز هویت دومرحلهای بگیر تا اسکن قرنیه چشم (که فقط مونده همینو بخوان).
اصلا یه فرم پر میکنی، انگار داری برای ویزای شینگن اقدام میکشی. نام پدر؟، کد پستی محل سکونت جد پدری؟ شماره کارت اعتباریای که تاریخ انقضاش تا ابدیت باشه؟
بعد میگن چرا پیشرفت نمیکنیم! ما کل انرژیمون صرف این میشه که اینترنتمون رو وصل کنیم و مبادا آیپیمون لو بره! یا بعد از کلی کلک کاری که یه خارجی انجام میده رو، انجامش بدیم.
البته از یه سمت دیگه توانایی هایی رو بدست بیاریم که برای یه خارجی قفله.
مثلا:
اومدم یه کارت دانشجویی فیک درست کردم که از واقعیش، واقعی تره. تازه اونم با جمنای که میگفت نمیتونم کارت دانجویی رو ادیت کنم خلاف قوانینه.
دیگه خودتون تفاوت قائل میشید مارو مجبور میکنید دور بزنیم😠
#fun
@Syntax_fa
اصلا یه فرم پر میکنی، انگار داری برای ویزای شینگن اقدام میکشی. نام پدر؟، کد پستی محل سکونت جد پدری؟ شماره کارت اعتباریای که تاریخ انقضاش تا ابدیت باشه؟
بعد میگن چرا پیشرفت نمیکنیم! ما کل انرژیمون صرف این میشه که اینترنتمون رو وصل کنیم و مبادا آیپیمون لو بره! یا بعد از کلی کلک کاری که یه خارجی انجام میده رو، انجامش بدیم.
البته از یه سمت دیگه توانایی هایی رو بدست بیاریم که برای یه خارجی قفله.
مثلا:
اومدم یه کارت دانشجویی فیک درست کردم که از واقعیش، واقعی تره. تازه اونم با جمنای که میگفت نمیتونم کارت دانجویی رو ادیت کنم خلاف قوانینه.
دیگه خودتون تفاوت قائل میشید مارو مجبور میکنید دور بزنیم
#fun
@Syntax_fa
Please open Telegram to view this post
VIEW IN TELEGRAM
👌23👍7😁3
هممون میدونیم تلگرام یکی از خفنترین پیامرسانهای دنیاست. سریعه، امکاناتش بینهایته و از نظر مهندسی واقعا کارآمده. کلی خوبی داره، ولی بیاید روی یکی از تاریکترین نقطهضعفهاش دست بذاریم.
معماری تلگرام، اون رو به یک بهشت آشوب تبدیل کرده.
مشکل فقط چندتا کانال متخلف نیست؛ مشکل در هستهی طراحی این پلتفرمه.
۱. توهمِ نظارت (جعبه سیاه ریپورت)
وقتی شما یه کانال وحشتناک (مثل آزار حیوانات، کلاهبرداری یا ترویج خشونت افراطی) رو ریپورت میکنید، چه اتفاقی میفته؟
حقیقت اینه که هیچکس نمیدونه.
سیستم ریپورت تلگرام یه جعبهی سیاه مبهمه. معلوم نیست چندتا ریپورت لازمه تا یه کانال بسته بشه یا اصلا یک انسان اون گزارش رو میبینه یا نه.
تلگرام برند خودش رو روی آزادی ساخته، و این یعنی عمدا سیستم نظارت رو حداقلی نگه داشته تا از پلتفرمهای سختگیرتر متمایز باشه. نتیجه؟ کانالهای مجرمانه و افراطی، هفتهها و ماهها قبل از اینکه شاید (فقط شاید) بسته بشن، به فعالیت ادامه میدن.
۲. مشکل هیدرا (محتوای ابدی)
این خطرناکترین بخش ماجراست.
فرض کنید یه محتوای مجرمانه (مثلاً یه ویدیوی دلخراش) در یک کانال پست میشه. حالا هزاران نفر اون رو میبینن، در Saved Messages خودشون ذخیره میکنن، یا به پیوی و گروههای خصوصی فوروارد میکنن.
شما اون کانال اصلی رو ریپورت میکنید و بالاخره تلگرام اون کانال رو میبنده.
اما اون فایل ویدیویی از سرور پاک نشده.
تمام اون هزاران نفری که اون فایل رو جایی ذخیره کردن، هنوز بهش دسترسی کامل دارن. اونها یک کپی از فایل نساختن؛ اونها فقط یک Bookmark به اون فایلِ آپلود شده روی سرور تلگرام دارن. تا زمانی که حتی یک نفر اون فایل رو در جایی داشته باشه، اون محتوا روی سرورها قابل دسترسیه.
شما یک سر هیدرا رو زدید، در حالی که اون محتوا در هزاران چت خصوصی و کانال پشتیبان، دوباره رشد میکنن
۳. اکوسیستم جنگل تاریک (ویترین عمومی، انبار خصوصی)
این معماری، یک اکوسیستم دوگانه ساخته:
1. "ویترین عمومی" (Public Channels): جایی که نظارت (هرچند ضعیف) وجود داره. اینها برای تبلیغ و جذب نیرو استفاده میشن.
2. "جنگل تاریک" (Private Ecosystem): شامل گروههای خصوصی و چتهای شخصی. اینجا هیچ نظارتی وجود نداره. صفر.
گروههای مجرمانه، افراطیون و کلاهبردارها در "ویترین عمومی" تبلیغ میکنن و اعضا رو به "جنگل تاریک" (گروههای خصوصی) میکشونن. جایی که دیگه هیچ قانونی وجود نداره.
@Syntax_fa
معماری تلگرام، اون رو به یک بهشت آشوب تبدیل کرده.
مشکل فقط چندتا کانال متخلف نیست؛ مشکل در هستهی طراحی این پلتفرمه.
۱. توهمِ نظارت (جعبه سیاه ریپورت)
وقتی شما یه کانال وحشتناک (مثل آزار حیوانات، کلاهبرداری یا ترویج خشونت افراطی) رو ریپورت میکنید، چه اتفاقی میفته؟
حقیقت اینه که هیچکس نمیدونه.
سیستم ریپورت تلگرام یه جعبهی سیاه مبهمه. معلوم نیست چندتا ریپورت لازمه تا یه کانال بسته بشه یا اصلا یک انسان اون گزارش رو میبینه یا نه.
تلگرام برند خودش رو روی آزادی ساخته، و این یعنی عمدا سیستم نظارت رو حداقلی نگه داشته تا از پلتفرمهای سختگیرتر متمایز باشه. نتیجه؟ کانالهای مجرمانه و افراطی، هفتهها و ماهها قبل از اینکه شاید (فقط شاید) بسته بشن، به فعالیت ادامه میدن.
۲. مشکل هیدرا (محتوای ابدی)
این خطرناکترین بخش ماجراست.
فرض کنید یه محتوای مجرمانه (مثلاً یه ویدیوی دلخراش) در یک کانال پست میشه. حالا هزاران نفر اون رو میبینن، در Saved Messages خودشون ذخیره میکنن، یا به پیوی و گروههای خصوصی فوروارد میکنن.
شما اون کانال اصلی رو ریپورت میکنید و بالاخره تلگرام اون کانال رو میبنده.
اما اون فایل ویدیویی از سرور پاک نشده.
تمام اون هزاران نفری که اون فایل رو جایی ذخیره کردن، هنوز بهش دسترسی کامل دارن. اونها یک کپی از فایل نساختن؛ اونها فقط یک Bookmark به اون فایلِ آپلود شده روی سرور تلگرام دارن. تا زمانی که حتی یک نفر اون فایل رو در جایی داشته باشه، اون محتوا روی سرورها قابل دسترسیه.
شما یک سر هیدرا رو زدید، در حالی که اون محتوا در هزاران چت خصوصی و کانال پشتیبان، دوباره رشد میکنن
۳. اکوسیستم جنگل تاریک (ویترین عمومی، انبار خصوصی)
این معماری، یک اکوسیستم دوگانه ساخته:
1. "ویترین عمومی" (Public Channels): جایی که نظارت (هرچند ضعیف) وجود داره. اینها برای تبلیغ و جذب نیرو استفاده میشن.
2. "جنگل تاریک" (Private Ecosystem): شامل گروههای خصوصی و چتهای شخصی. اینجا هیچ نظارتی وجود نداره. صفر.
گروههای مجرمانه، افراطیون و کلاهبردارها در "ویترین عمومی" تبلیغ میکنن و اعضا رو به "جنگل تاریک" (گروههای خصوصی) میکشونن. جایی که دیگه هیچ قانونی وجود نداره.
@Syntax_fa
👍32👎13❤4👏3
This media is not supported in your browser
VIEW IN TELEGRAM
Go + HTMX
ادمین پنل Quick Connect
ما توی پنل ادمین(سرویس adminapp) قید فریمورکهای سنگین جاوااسکریپت (مثل React/Vue) رو زدیم و مستقیم سراغ ترکیب Go + HTMX رفتیم.
چرا؟ چون سریعه، ساده و فوقالعاده قدرتمنده.
معماری چطوریه؟
الگوی BFF هستش. adminapp ما یک Backend for Frontend (BFF) کلاسیک هست.
این یعنی چی؟
Go Server (BFF): adminapp
یک سرور Go هست که مخصوص UI ادمین ساخته شده. این سرور، مرورگر رو به عنوان فرانتاند خودش میبینه.
ارتباط باطن با gRPC.
این سرور Go، برای گرفتن دیتا (مثلا لیست یوزرها)، با managerapp یا سرویسهای دیگه از طریق gRPC صحبت میکنه.
رندر سمت سرور (SSR):
وقتی دیتا رو از gRPC گرفت، میاد اون رو توی قالبهای HTML (فایلهای .../templates/) رندر میکنه.
بدون JSON، فقط HTML: اینجا دیگه خبری از API یی که JSON برگردونه و یه فرانتاند جاوااسکریپتی اون رو بگیره و کامپوننت بسازه نیست. سرور Go مستقیم خود HTML نهایی رو میسازه و میفرسته.
ا. HTMX اینجا چیکار میکنه؟
جادوی واقعی اینجاست!
بارگذاری اولیه: کاربر صفحه داشبورد رو باز میکنه. سرور Go کل صفحه dashboard.html رو رندر میکنه و میفرسته.
کاربر روی دکمه «ساختن یوزر جدید» کلیک میکنه.
ا. HTMX (که یه فایل .js کوچیکه) یه درخواست AJAX به سرور Go میفرسته (مثلا به POST /htmx/users/create-modal).
سرور Go این درخواست رو میگیره.
ا. Go فقط و فقط فایل user_create_modal.html رو رندر میکنه (نه کل صفحه رو!).
این تکه HTML کوچیک به مرورگر برمیگرده.
ا. HTMX این تکه HTML رو میگیره و تو صفحه swap میکنه مثلا داخل یه div خالی میذاره).
نتیجه؟
ما یه داشبورد داینامیک و سریع داریم که حس اپلیکیشنهای SPA (مثل ریاکت) رو میده، اما:
* ۹۹٪ منطق توی Go نوشته شده.
* نیازی به Build Step جاوااسکریپتی نداریم.
* سرعت لود اولیه فوقالعادهست.
* توسعهش بهشدت ساده و لذتبخشه.
اگه از نوشتن Go لذت میبری و دلت نمیخواد درگیر پیچیدگیهای فرانتاند مدرن بشی، معماری adminapp دقیقاً همون چیزیه که دنبالش میگردی.
Quick Connect
AdminApp
#go #htmx
@Syntax_fa
ادمین پنل Quick Connect
ما توی پنل ادمین(سرویس adminapp) قید فریمورکهای سنگین جاوااسکریپت (مثل React/Vue) رو زدیم و مستقیم سراغ ترکیب Go + HTMX رفتیم.
چرا؟ چون سریعه، ساده و فوقالعاده قدرتمنده.
معماری چطوریه؟
الگوی BFF هستش. adminapp ما یک Backend for Frontend (BFF) کلاسیک هست.
این یعنی چی؟
Go Server (BFF): adminapp
یک سرور Go هست که مخصوص UI ادمین ساخته شده. این سرور، مرورگر رو به عنوان فرانتاند خودش میبینه.
ارتباط باطن با gRPC.
این سرور Go، برای گرفتن دیتا (مثلا لیست یوزرها)، با managerapp یا سرویسهای دیگه از طریق gRPC صحبت میکنه.
رندر سمت سرور (SSR):
وقتی دیتا رو از gRPC گرفت، میاد اون رو توی قالبهای HTML (فایلهای .../templates/) رندر میکنه.
بدون JSON، فقط HTML: اینجا دیگه خبری از API یی که JSON برگردونه و یه فرانتاند جاوااسکریپتی اون رو بگیره و کامپوننت بسازه نیست. سرور Go مستقیم خود HTML نهایی رو میسازه و میفرسته.
ا. HTMX اینجا چیکار میکنه؟
جادوی واقعی اینجاست!
بارگذاری اولیه: کاربر صفحه داشبورد رو باز میکنه. سرور Go کل صفحه dashboard.html رو رندر میکنه و میفرسته.
کاربر روی دکمه «ساختن یوزر جدید» کلیک میکنه.
ا. HTMX (که یه فایل .js کوچیکه) یه درخواست AJAX به سرور Go میفرسته (مثلا به POST /htmx/users/create-modal).
سرور Go این درخواست رو میگیره.
ا. Go فقط و فقط فایل user_create_modal.html رو رندر میکنه (نه کل صفحه رو!).
این تکه HTML کوچیک به مرورگر برمیگرده.
ا. HTMX این تکه HTML رو میگیره و تو صفحه swap میکنه مثلا داخل یه div خالی میذاره).
نتیجه؟
ما یه داشبورد داینامیک و سریع داریم که حس اپلیکیشنهای SPA (مثل ریاکت) رو میده، اما:
* ۹۹٪ منطق توی Go نوشته شده.
* نیازی به Build Step جاوااسکریپتی نداریم.
* سرعت لود اولیه فوقالعادهست.
* توسعهش بهشدت ساده و لذتبخشه.
اگه از نوشتن Go لذت میبری و دلت نمیخواد درگیر پیچیدگیهای فرانتاند مدرن بشی، معماری adminapp دقیقاً همون چیزیه که دنبالش میگردی.
Quick Connect
AdminApp
#go #htmx
@Syntax_fa
🔥11👍6❤2🥰2
This media is not supported in your browser
VIEW IN TELEGRAM
ربات های فوق انسان نما در نمایشگاه کیش رونمایی شد که باعث ریزش شدید سهام تسلا شده!
@Syntax_fa
در نمایشگاه «کیش اینوکس» به جای رباتهای فوقپیشرفته، افرادی با گریم و لباسهای رباتمانند حضور داشتند و این موضوع واکنشهای طنزآمیز و منفی زیادی را در پی داشت. این افراد که ظاهری شبیه رباتهای انساننما داشتند، ادای ربات بودن را درمیآوردند تا با پیشرفتهای واقعی رباتیک و هوش مصنوعی در دنیا تفاوت زیادی دارند.#fun
@Syntax_fa
😁30👍1👏1
یکی اومده یچی ساخته به اسم لارامپ!
کارش چیه؟
میان اونجا پهپ کار ها ثبت نام میکنن😒 تا بصورت نقطه ای و دقیق بدونن پهپ کار ها کجا زندگی میکنن.
کامنت های پسته عالیه
#fun
@Syntax_fa
کارش چیه؟
میان اونجا پهپ کار ها ثبت نام میکنن
کامنت های پسته عالیه
#fun
@Syntax_fa
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
😁18🍌1
صفحه بندی داده دادهها: Limit/Offset و Cursor-Based
وقتی صحبت از نمایش حجم زیادی از دادهها در صفحات مختلف میشه، استفاده از pagination ضروری میشه. دو روش رایج برای این کار وجود داره که هر کدوم سادگیها و چالشهای خاص خودشون رو دارن:
صفحه بندی با Limit و Offset سادگی ولی ...
صفحه بندی با Limit و Offset رو میشه سادهترین و اولین روشی دونست که به ذهن میرسه. شما به دیتابیس میگید "فقط Limit تا رکورد بهم بده" و "از Offset مشخصی شروع کن".
سادگی:
پیادهسازی خیلی آسونی داره.
برای صفحات اول که تعداد رکوردها کمه، عملکرد خوبی داره.
چالشها:
عملکرد ضعیف در صفحات بالا: با افزایش
مشکل تغییر دادهها: اگه در حین حرکت بین صفحات، دادهای اضافه یا حذف بشه، ممکنه رکوردهای تکراری ببینید یا بعضی از رکوردها رو از دست بدید.
مرتبسازی (Sorting): معمولاً نیازمند مرتبسازی روی یک فیلد ثابت هستید تا نتیجه قابل پیشبینی باشه.
مثال ساده (SQL):
برای گرفتن ۱۰ رکورد اول از جدول
برای گرفتن ۱۰ رکورد بعدی (صفحه ۲):
صفحه بندی با روش Cursor-Based Pagination: راه حلی برای مقیاسپذیری
صفحه بندی با Cursor-based pagination با استفاده از یک "نشانگر" (cursor) که معمولاً یک فیلد یکتا و مرتبسازی شده (مثل تاریخ ایجاد یا ID) هست، صفحه بعدی رو مشخص میکنه. به جای گفتن "صفحه N رو بیار"، میگیم "رکوردها رو از بعد از این نقطه مشخص بیار".
محدودیتها و نکتهها:
پیچیدگی پیادهسازی: نسبت به Limit/Offset کمی پیچیدهتره و نیازمند طراحی دقیقتر کوئریهاست.
مرتبسازی: باید همیشه بر اساس فیلد Cursor مرتبسازی انجام بشه. این یعنی نمیتونید هر جور دلتون خواست دادهها رو مرتب کنید.
پرش به صفحات دلخواه: معمولاً قابلیت "پرش به صفحه 5" رو نداره و فقط میتونید به صفحه بعدی یا قبلی برید (Next/Previous). مناسب برای فیدها و لیستهای طولانی: برای سیستمهایی مثل فید شبکههای اجتماعی که فقط به اسکرول کردن ادامه دار نیاز دارن و پرش به صفحه خاصی مطرح نیست، عالی عمل میکنه.
مثال ساده (SQL):
فرض کنید آخرین
#pagination #sql
@Syntax_fa
وقتی صحبت از نمایش حجم زیادی از دادهها در صفحات مختلف میشه، استفاده از pagination ضروری میشه. دو روش رایج برای این کار وجود داره که هر کدوم سادگیها و چالشهای خاص خودشون رو دارن:
صفحه بندی با Limit و Offset سادگی ولی ...
صفحه بندی با Limit و Offset رو میشه سادهترین و اولین روشی دونست که به ذهن میرسه. شما به دیتابیس میگید "فقط Limit تا رکورد بهم بده" و "از Offset مشخصی شروع کن".
سادگی:
پیادهسازی خیلی آسونی داره.
برای صفحات اول که تعداد رکوردها کمه، عملکرد خوبی داره.
چالشها:
عملکرد ضعیف در صفحات بالا: با افزایش
Offset، دیتابیس مجبور میشه تعداد زیادی از رکوردها رو اسکن کنه و بعد اونا رو دور بندازه که باعث کندی شدید میشه.مشکل تغییر دادهها: اگه در حین حرکت بین صفحات، دادهای اضافه یا حذف بشه، ممکنه رکوردهای تکراری ببینید یا بعضی از رکوردها رو از دست بدید.
مرتبسازی (Sorting): معمولاً نیازمند مرتبسازی روی یک فیلد ثابت هستید تا نتیجه قابل پیشبینی باشه.
مثال ساده (SQL):
برای گرفتن ۱۰ رکورد اول از جدول
products (صفحه ۱):SELECT *
FROM products
ORDER BY id
LIMIT 10 OFFSET 0;
برای گرفتن ۱۰ رکورد بعدی (صفحه ۲):
SELECT *
FROM products
ORDER BY id
LIMIT 10 OFFSET 10;
صفحه بندی با روش Cursor-Based Pagination: راه حلی برای مقیاسپذیری
صفحه بندی با Cursor-based pagination با استفاده از یک "نشانگر" (cursor) که معمولاً یک فیلد یکتا و مرتبسازی شده (مثل تاریخ ایجاد یا ID) هست، صفحه بعدی رو مشخص میکنه. به جای گفتن "صفحه N رو بیار"، میگیم "رکوردها رو از بعد از این نقطه مشخص بیار".
محدودیتها و نکتهها:
پیچیدگی پیادهسازی: نسبت به Limit/Offset کمی پیچیدهتره و نیازمند طراحی دقیقتر کوئریهاست.
مرتبسازی: باید همیشه بر اساس فیلد Cursor مرتبسازی انجام بشه. این یعنی نمیتونید هر جور دلتون خواست دادهها رو مرتب کنید.
پرش به صفحات دلخواه: معمولاً قابلیت "پرش به صفحه 5" رو نداره و فقط میتونید به صفحه بعدی یا قبلی برید (Next/Previous). مناسب برای فیدها و لیستهای طولانی: برای سیستمهایی مثل فید شبکههای اجتماعی که فقط به اسکرول کردن ادامه دار نیاز دارن و پرش به صفحه خاصی مطرح نیست، عالی عمل میکنه.
مثال ساده (SQL):
فرض کنید آخرین
id محصولی که در صفحه قبلی دیدهاید 1234 بوده:SELECT *
FROM products
WHERE id > 1234
ORDER BY id
LIMIT 10;
#pagination #sql
@Syntax_fa
👍7🔥2🤔2
چهار ریپو پر ستاره دنیا در گیتهاب:
build-your-own-x
(۴۴۲ هزار استار)
"چرخ را دوباره اختراع کن تا یاد بگیری چطور کار میکند!"
این ریپوزیتوریِ جذاب به تازگی به رتبه اول صعود کرده است. ایده آن ساده اما فوقالعاده است: لیستی از آموزشها برای اینکه تکنولوژیهای معروف را از صفر بسازید.
* دوست دارید «گیت» (Git) خودتان را بسازید؟
* میخواهید یک «سیستم عامل» یا «دیتابیس» ساده کدنویسی کنید؟
اینجا بهترین جا برای کسانی است که میخواهند از سطح مصرفکننده ابزار، به خالق ابزار تبدیل شوند.
freeCodeCamp
(۴۳۳ هزار استار)
"دانشگاه رایگان برنامهنویسی"
سالها در رتبه اول بود و هنوز هم معتبرترین منبع آموزشی رایگان است. این مخزن سورسکدِ پلتفرم freeCodeCamp.org است که میلیونها نفر با آن برنامهنویسی وب را یاد گرفتهاند. اگر دنبال یک مسیر یادگیری (Roadmap) کامل و دریافت مدرک رایگان هستید، اینجا خانه شماست.
awesome
(۴۱۷ هزار استار)
"لیستی از لیستهای عالی"
تا حالا شده دنبال "بهترین کتابخانههای پایتون" یا "بهترین ابزارهای هک و امنیت" بگردید؟ ریپوزیتوری Awesome یک دایرکتوری غولپیکر است که لینکِ تمام منابع باکیفیت برای هر زبان و تکنولوژی را یکجا جمع کرده است. گوگل کردن خوب است، اما گشتن در Awesome شما را سریعتر به نتیجههای حرفهای میرساند.
996.ICU
(حدود ۲۷۰ هزار استار)
"صدای اعتراض برنامهنویسان"
این مخزن با بقیه فرق دارد؛ اینجا کدی برای اجرا نیست، بلکه نماد یک جنبش است. نام آن به فرهنگ کاری ناعادلانه در شرکتهای فناوری چین اشاره دارد: کار از ۹ صبح تا ۹ شب، ۶ روز در هفته.
برنامهنویسان با استار دادن به این ریپوزیتوری، اعتراض خود را به شرایط کاری سخت و استثمار نیروهای فنی در سراسر جهان نشان میدهند.
@Syntax_fa
build-your-own-x
(۴۴۲ هزار استار)
"چرخ را دوباره اختراع کن تا یاد بگیری چطور کار میکند!"
این ریپوزیتوریِ جذاب به تازگی به رتبه اول صعود کرده است. ایده آن ساده اما فوقالعاده است: لیستی از آموزشها برای اینکه تکنولوژیهای معروف را از صفر بسازید.
* دوست دارید «گیت» (Git) خودتان را بسازید؟
* میخواهید یک «سیستم عامل» یا «دیتابیس» ساده کدنویسی کنید؟
اینجا بهترین جا برای کسانی است که میخواهند از سطح مصرفکننده ابزار، به خالق ابزار تبدیل شوند.
freeCodeCamp
(۴۳۳ هزار استار)
"دانشگاه رایگان برنامهنویسی"
سالها در رتبه اول بود و هنوز هم معتبرترین منبع آموزشی رایگان است. این مخزن سورسکدِ پلتفرم freeCodeCamp.org است که میلیونها نفر با آن برنامهنویسی وب را یاد گرفتهاند. اگر دنبال یک مسیر یادگیری (Roadmap) کامل و دریافت مدرک رایگان هستید، اینجا خانه شماست.
awesome
(۴۱۷ هزار استار)
"لیستی از لیستهای عالی"
تا حالا شده دنبال "بهترین کتابخانههای پایتون" یا "بهترین ابزارهای هک و امنیت" بگردید؟ ریپوزیتوری Awesome یک دایرکتوری غولپیکر است که لینکِ تمام منابع باکیفیت برای هر زبان و تکنولوژی را یکجا جمع کرده است. گوگل کردن خوب است، اما گشتن در Awesome شما را سریعتر به نتیجههای حرفهای میرساند.
996.ICU
(حدود ۲۷۰ هزار استار)
"صدای اعتراض برنامهنویسان"
این مخزن با بقیه فرق دارد؛ اینجا کدی برای اجرا نیست، بلکه نماد یک جنبش است. نام آن به فرهنگ کاری ناعادلانه در شرکتهای فناوری چین اشاره دارد: کار از ۹ صبح تا ۹ شب، ۶ روز در هفته.
برنامهنویسان با استار دادن به این ریپوزیتوری، اعتراض خود را به شرایط کاری سخت و استثمار نیروهای فنی در سراسر جهان نشان میدهند.
@Syntax_fa
👍6👌1