Dev Perfects
40 subscribers
9.23K photos
1.26K videos
468 files
13K links
بخوام خیلی خلاصه بگم
این کانال میاد مطالب کانالای خفن تو حوزه تکنولوژی و برنامه نویسی رو جمع میکنه

پست پین رو بخونید
https://t.iss.one/dev_perfects/455


ارتباط:
https://t.iss.one/HidenChat_Bot?start=936082426
Download Telegram
Forwarded from Syntax | سینتکس (Sovren)
لاگ‌هات رو بریز توی تلگرام

تصور کن:

* یک ارور 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
Forwarded from Syntax | سینتکس (Sovren)
RAG (Retrieval-Augmented Generation)

تا به حال از خودتان پرسیده‌اید که وقتی از Gemini یا ChatGPT درباره نتیجه یک مسابقه ورزشی که همین دیشب برگزار شده سوال می‌کنید، چطور با جزئیات کامل و دقیق به شما پاسخ می‌دهد؟ مگر دانش این مدل‌ها محدود به اطلاعات تا سال خاصی نیست؟

بخش اول: مغز متفکر (مدل پایه زبان)

در قلب هر چت‌بات یک مدل زبانی بزرگ (LLM) قرار دارد. این مدل را تقریباً تمام کتاب‌ها، مقالات و وب‌سایت‌های منتشر شده تا یک تاریخ مشخص (مثلاً اوایل ۲۰۲۳) را خوانده و درک کرده است. او می‌تواند شعر بگوید، کد بنویسد، مقاله‌های پیچیده را خلاصه کند و درباره تاریخ فلسفه بحث کند.

اما یک مشکل وجود دارد: این مدل از آن تاریخ به بعد در یک کتابخانه بدون دسترسی به دنیای بیرون حبس بوده است. او از اتفاقات جدید، اخبار روز یا نتایج مسابقات ورزشی اخیر هیچ اطلاعی ندارد. این "مغز" دانش عمومی گسترده‌ای دارد، اما به‌روز نیست.

بخش دوم: حافظه کوتاه‌مدت (مدیریت گفتگو)

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

بخش سوم: سیستم RAG

اینجا همان بخش شگفت‌انگیز ماجراست که مشکل به‌روز نبودن "مدل" ما را حل می‌کند. این سیستم که RAG (Retrieval-Augmented Generation) نام دارد، مانند یک امتحان کتاب-باز برای هوش مصنوعی عمل می‌کند.

وقتی شما سوالی می‌پرسید که نیاز به اطلاعات جدید دارد، این مراحل در کسری از ثانیه اتفاق می‌افتد:

1. تشخیص نیاز: سیستم ابتدا تشخیص می‌دهد که آیا "مدل" می‌تواند با دانش موجود خود پاسخ دهد یا سوال نیاز به اطلاعات به‌روز دارد.
2. جستجوی برق‌آسا (Retrieval): اگر نیاز به اطلاعات جدید باشد، سیستم در پشت صحنه یک جستجوی سریع در اینترنت (مثلاً گوگل) انجام می‌دهد. این کار مانند یک دستیار تحقیق است که در لحظه، مرتبط‌ترین مقالات و منابع را پیدا می‌کند.
3. آماده‌سازی "برگه تقلب" (Augmentation): سیستم نکات کلیدی و اطلاعات اصلی را از نتایج جستجو استخراج کرده و یک "برگه تقلب" یا خلاصه‌ای از اطلاعات ضروری را آماده می‌کند.
4. تولید پاسخ نهایی (Generation): در نهایت، سیستم سوال اصلی شما را به همراه این "برگه تقلب" به مدل پایه می‌دهد. حالا مدل با استفاده از دانش عمیق خود و با استناد به اطلاعات جدیدی که در اختیارش قرار گرفته، یک پاسخ کامل، دقیق و به‌روز تولید می‌کند.

به همین دلیل است که اغلب در انتهای پاسخ‌های Gemini یا ChatGPT، لینک به منابع را می‌بینید. این‌ها در واقع منابعی هستند که "دستیار تحقیق" در مرحله جستجو پیدا کرده و "مدل" برای پاسخ به شما از آن‌ها استفاده کرده است.

#RAG

@Syntax_fa
Forwarded from Frontend with Erfun👨🏻‍💻 (Erfun Ghodoosi)
رفقا کارآموزی به صورت دورکاری هست

و روی خود پروژه فوتبالی کار میکنید و پروژه الکی در کار نیست

پروژه‌ی‌‌ لارج اسکیل، مونو ریپو و مایکروسرویس و صد البته پر طرفدار ترین وبسایت اخبار فوتبال توی ایران

توی اوایل کار بیمه پرداخت نمیشه، ولی حقوق پابرجاس. همین کارآموزی با حقوق روهم کم میشه توی ایران پیدا کرد.

با یک فرهنگ سازمانی درجه یک طرف هستید. جایی که همه هوای هم رو دارن و کسی زیر آبی نمیزنه. و اعتماد حرف اول و آخر رو میزنه!

با متودولوژی اسکرام کار میکنیم و همه چیز طبق اصوله.
همینطور ایده ها جدید و خلاقیت و پیشرفت، همیشه بابتش قدر دانی خوبی انجام میشه.
Forwarded from Frontend with Erfun👨🏻‍💻 (Erfun Ghodoosi)
فقط لازمه که علاقه به یادگیری و پیشرفت داشته باشید و تجربه‌ی خاصی غیر از یکی دوتا پروژه که مهارتتون‌رو‌ باهاش نشون بدید لازم نیست.
استک فرانت اندتونم تکمیل باشه تا حدودی
Js, Ts, Nextjs, React, Tailwindcss
Forwarded from یه شعر (Poem Bot)
حافظ | رباعیات | رباعی شمارهٔ ۱۸

ایام شباب ست شراب اولاتر
با سبزخطان باده ناب اولاتر
عالم همه سر به سر رباطی ست خراب
در جای خراب هم خراب اولاتر

#حافظ | گنجور
📍@iipoem
Forwarded from Gopher Academy
🔵 عنوان مقاله
go-getter 1.8: Download Things from Various Sources with a URL

🟢 خلاصه مقاله:
go-getter 1.8 ابزاری است که با یک رشته شبیه URL، فایل‌ها را از منابع گوناگون دانلود می‌کند. فراتر از یک کلاینت ساده HTTP عمل می‌کند: می‌تواند URLهای GitHub را به‌صورت مخزن git دریافت کند، با مسیرهای محلی، S3، مخازن Mercurial و Bitbucket نیز کار می‌کند و همچنان از HTTP پشتیبانی می‌کند. مزیت اصلی آن یک رابط یکنواخت برای همه این پشتوانه‌هاست که اسکریپت‌ها و جریان‌های خودکار (CI/CD و ساخت) را ساده‌تر و قابل‌اعتمادتر می‌سازد.

🟣لینک مقاله:
https://golangweekly.com/link/174081/web


👑 @gopher_academy
Forwarded from Python Hints
4: It is appalling. Please, please don't do this.

source: Architecture Patterns with Python page 14
موقع طراحی ساختار هامون نیاز داشتیم از چارت mermaid استفاده کنیم، نرم‌افزار های موجود جدای از حق اشتراک و ... پاسخگو نیازمون نبودن، یه mermaid editor سبک آماده کردیم که میشه با اتصال به اکانت open router از ai هم استفاده کرد، شما هم شریک ما :)
https://github.com/mad-bax-dev/Mermaid-Editor

@DevTwitter | <Mr Zak Dev/>
Forwarded from Gopher Academy
🔵 عنوان مقاله
Kratos 2.9: A Go Framework for Cloud-Based Microservices

🟢 خلاصه مقاله:
** کراتوس ۲.۹ یک فریم‌ورک مبتنی بر زبان Go برای ساخت و اجرای میکروسرویس‌های ابری است که بر «حاکمیت میکروسرویس‌ها» تمرکز دارد. این چارچوب ارتباطات بین سرویس‌ها را حول HTTP و gRPC سامان می‌دهد تا قراردادهای شفاف و الگوهای یکپارچه ایجاد شود. هدف اصلی آن استانداردسازی پیکربندی، تعریف و مصرف APIها و شیوه‌های مشاهده‌پذیری و مدیریت در محیط‌های ابری است تا تیم‌ها بتوانند سامانه‌های مقیاس‌پذیر و قابل‌اتکا را با تجربه توسعه یکدست‌تر بسازند.

🟣لینک مقاله:
https://golangweekly.com/link/174083/web


👑 @gopher_academy
Forwarded from LinNews (Benyamin)
‏ AMD توسعه درایور AMDVLK را، به دلیل نیازهای درایور Mesa، رها کرد.
#AMD #AMDVLK #DRIVER

در ماه می، AMD اعلام کرد که پشتیبانی رسمی از RADV را به‌عنوان بخشی از نرم‌افزار Radeon خود برای لینوکس آغاز خواهد کرد. AMD از آن زمان هیچ بروزرسانی برای AMDVLK منتشر نکرده است.

خلاصه اظهارات گیت‌هاب AMDVLK:
"در اقدامی برای ساده‌سازی توسعه و تقویت تعهد خود به جامعه متن‌باز، شرکت AMD استراتژی درایور Vulkan لینوکس خود را یکپارچه می‌کند و تصمیم گرفته است که پروژه متن‌باز AMDVLK را متوقف کند. اکنون تمام تمرکز و منابع AMD به پشتیبانی رسمی از درایور متن‌باز RADV برای کارت‌های گرافیکی Radeon اختصاص خواهد یافت. در نتیجه این تصمیم، تنها یک درایور با عملکرد بالا خواهیم داشت."


منبع خبر
به ما بپیوندید :
@LinNews | @LinAcademy
اگر به یه template چت روم با تم دارک که با Next js زده شده باشه، نیاز داشتین می تونید یه نگاهی به این بندازید :
https://github.com/naseridev/prism

@DevTwitter | <Nima Naseri/>
🎉 پلاگین Postication – ارسال نوتیفیکیشن وردپرس به تلگرام

با Postication، هر بار که یک پست جدید در سایت وردپرسی شما منتشر می‌شود،
یک پیام خودکار به کانال تلگرام شما ارسال می‌شود!

ویژگی‌ها:
- ارسال نوتیفیکیشن هنگام ایجاد پست جدید
-ارسال نوتیفیکیشن هنگام به‌روزرسانی پست
- حذف پیام‌های تلگرام هنگام حذف پست از سایت
- نمایش عنوان، توضیح کوتاه، لینک ادامه مطلب و هشتگ‌ها
- پشتیبانی از تصویر شاخص پست
- امکان فعال/غیرفعال کردن ارسال نوتیفیکیشن‌ها


🧬 نصب و استفاده:
1. پلاگین را نصب و فعال کنید.
2. در تنظیمات، توکن ربات تلگرام و آیدی کانال خود را وارد کنید.
3. از این به بعد نوتیفیکیشن‌های خودکار برای پست‌ها در کانال تلگرام شما ارسال می‌شوند.



🌟 اگر پلاگین Postication مفید بود، لطفاً جهت حمایت استار فراموش نشه .

🔗 Click Here To Download Source Code.


📣 @MehdiHamid1223
Double Trouble
John Williams
نسخه اورجینال
Forwarded from mosTafa Arshadi
آدم ‌ها وقتی یه بار موفق میشن، بعدش فقط میخوان موفقیتشونو از دست ندن.
ولی مشکل اینجاست که همین فکر باعث میشه آخرش ببازن.
برای اینکه همیشه برنده بمونی، باید همیشه دنبال بردن باشی، نه فقط نباختن.
گاهی وقتا هم لازمه چیزی رو که دفعه قبل به دست اوردی رو قربانی کنی تا دفعه‌‌ی بعد دوباره بتونی موفق بشی.

@hamidreza01
Forwarded from a pessimistic researcher (Kc)
بالاخره رسیدیم به بهترین فصل سال. فصل فیلما و آهنگای spooky و زرد و نارنجی. این فصل بهترین زمان برای تجدید میثاق با فیلم و رمان و آهنگای تم اکتبر و این حال و هوا هاست. یکی از بهترین آهنگایی که من هر وقت گوش میدم پرتم میکنه توی پاییز همین آهنگ Double Trouble آقای جان ویلیامز عه
شما هم اگر آهنگ و فیلم و کتابی هست که همچین حسی بهش دارید برام بفرستید.

Double, double toil and trouble
Fire burn, and cauldron bubble
Double, double toil and trouble
Something wicked this way comes
Eye of newt, and toe of frog
Wool of bat, and tongue of dog
Adder's fork, and blind-worm's sting
Lizard's leg, and owlet's wing
Double, double toil and trouble
Fire burn, and cauldron bubble
Double, double toil and trouble
Something wicked this way comes
In the cauldron boil and bake
Fillet of a fenny snake
Scale of dragon, tooth of wolf
Witches' mummy, maw and gulf
Double, double toil and trouble
Fire burn, and cauldron bubble
Double, double toil and trouble
Fire burn, and cauldron bubble
Double, double toil and trouble
Fire burn, and cauldron bubble
Something wicked this way comes
Forwarded from Linuxor ?
فکر کن یه تازه کار بیاد اینو توی JS ببینه :)



حالا چرا به ترتیب مرتب نشده؟ جاوااسکریپت پیش‌فرض رشته‌ای (lexicographical) سورت می‌کنه،
وقتی جاوااسکریپت ساخته شد (دهه 90 میلادی)، هدف این بود که ساده‌ترین و سریع‌ترین روش مرتب‌سازی برای انواع داده‌ها (عدد، رشته، …) فراهم بشه. توی اون زمان، بیشتر داده‌هایی که توی وب استفاده می‌شدن، رشته بودن (مثلاً لیست اسامی، متن‌ها، آدرس‌ها و ...). این تابع هم از اون زمان مونده و بخاطر سازگاری عوضش نکردن ولی به پارامترش تابع مقایسه اضافه کردن که می‌شه عددم باهاش سورت کرد‌.



@Linuxor
Forwarded from Gopher Academy
🔵 عنوان مقاله
including the Raspberry Pi Pico 2 and even the Nintendo 64.

🟢 خلاصه مقاله:
**این مطلب از Golang Weekly نشان می‌دهد که اکوسیستم Go فراتر از سرور و کلاد رفته و روی سخت‌افزارهای نامعمول هم اجرا می‌شود؛ از میکروکنترلر ارزان‌قیمت Raspberry Pi Pico 2 تا حتی کنسول قدیمی Nintendo 64. نویسنده با تکیه بر ابزارهایی مثل TinyGo و ابزارهای جامعه، روند کراس‌کامپایل، محدودیت‌ها (حافظه کم، زیرمجموعه‌ای از کتابخانه استاندارد)، و کار با GPIO و پیرامون‌ها را توضیح می‌دهد و در عین حال به نمونه‌های آموزشی/آزمایشی روی N64 اشاره می‌کند. جمع‌بندی مقاله این است که با ابزار مناسب و انتظار واقع‌بینانه، می‌توان Go را به دنیای امبدد و پلتفرم‌های خاص آورد؛ هم برای نمونه‌سازی سریع و یادگیری مفید است و هم نشان‌دهنده گسترش‌پذیری و نوآوری جامعه Go.

🟣لینک مقاله:
https://golangweekly.com/link/173081/web


👑 @gopher_academy
Forwarded from 🎄 یک برنامه نویس تنبل (Lazy 🌱)
🔶 شرکت Name قیمت ثبت دامنه .com به ۱۸ دلار افزایش داده است و البته با تخفیف ۱۲.۹۹ دلار عرضه می کند.

@TheRaymondDev
This media is not supported in your browser
VIEW IN TELEGRAM
روشی که من باهاش از coding agent ها بخصوص Claude Code استفاده میکنم که باهاش اپلیکیشن های مختلف بسازم را به صورت ساده توی این فایل نشون میدم. این صرفا روش من هست و لزوما بهترین روش، ممکن هست که نباشه. ولی سرعت کار من را چند ده برابر بیشتر کرده.
این لینک فایل:
https://gist.github.com/mallahyari/0c3089cfac5f961db0ac77fd44e1393c

@DevTwitter | <Mehdi Allahyari/>
Forwarded from linuxtnt(linux tips and tricks) (hosein seilany https://seilany.ir/)
درباره اوبونتو بیشتر از همیشه بدانید! راهنمای کامل + نکات طلایی

ترجمه صفحه راهنمای اوبونتو با جزئیات بیشتر:

در پست زیر، البته با جزییات کامل تر, راهنمای و مرور سریع بر توزیع لینوکس اوبونتو خواهید دید.
ترجمه و تهیه: حسین سیلانی

https://learninghive.ir/ubuntu/