متغیرهای سیستمی در SQL Server
در SQL Server، متغیرهایی که با @@ شروع میشوند به عنوان متغیرهای سیستمی شناخته میشوند و اطلاعات مهمی درباره وضعیت سرور، کوئریها، تراکنشها و تنظیمات جاری ارائه میدهند.
این متغیرها توسط SQL Server مدیریت میشوند و کاربر فقط میتواند مقادیر آنها را بخواند، نه تغییر دهد.
نکته پرفرمنس: استفاده مکرر از متغیرهای سیستمی روی کوئریهای سنگین تاثیری مستقیم روی سرعت ندارد، اما بررسیهای مکرر یا استفاده نادرست در کوئریهای پیچیده میتواند منجر به کدهای نامفهوم یا غیر بهینه شود.
@DevTwitter | <Amirreza Moradi/>
در SQL Server، متغیرهایی که با @@ شروع میشوند به عنوان متغیرهای سیستمی شناخته میشوند و اطلاعات مهمی درباره وضعیت سرور، کوئریها، تراکنشها و تنظیمات جاری ارائه میدهند.
این متغیرها توسط SQL Server مدیریت میشوند و کاربر فقط میتواند مقادیر آنها را بخواند، نه تغییر دهد.
نکته پرفرمنس: استفاده مکرر از متغیرهای سیستمی روی کوئریهای سنگین تاثیری مستقیم روی سرعت ندارد، اما بررسیهای مکرر یا استفاده نادرست در کوئریهای پیچیده میتواند منجر به کدهای نامفهوم یا غیر بهینه شود.
@DevTwitter | <Amirreza Moradi/>
❤12🔥4
#کدبوک
یکی از جامعترین منابع برای یادگیری عمیق Rust و توسعه سیستمهای سریع و ایمن:
- توضیح کامل مفاهیم پایه تا پیشرفته مثل ownership و borrowing
- آموزش ساخت نرمافزارهای سطح پایین با ایمنی حافظه بالا
- تمرکز بر عملکرد، همزمانی و طراحی کد تمیز
- مناسب برای برنامهنویسهایی که میخوان Rust رو در پروژههای واقعی سیستممحور بهکار ببرن
* فایل PDF این کتاب رو میتونید از کانال DevBooks که لینکش توی بیو هست دانلود کنید.
@DevTwitter
یکی از جامعترین منابع برای یادگیری عمیق Rust و توسعه سیستمهای سریع و ایمن:
- توضیح کامل مفاهیم پایه تا پیشرفته مثل ownership و borrowing
- آموزش ساخت نرمافزارهای سطح پایین با ایمنی حافظه بالا
- تمرکز بر عملکرد، همزمانی و طراحی کد تمیز
- مناسب برای برنامهنویسهایی که میخوان Rust رو در پروژههای واقعی سیستممحور بهکار ببرن
* فایل PDF این کتاب رو میتونید از کانال DevBooks که لینکش توی بیو هست دانلود کنید.
@DevTwitter
❤14👍3👎1
اگه Claude Code براتون در دسترس نیست، با پروژههای زیر میتونید مدلهای دیگه مثل Gemini (API Tier) رو بهش بیارید و استفاده کنید.
https://github.com/BeehiveInnovations/zen-mcp-server
@DevTwitter | <Mohammad/>
https://github.com/BeehiveInnovations/zen-mcp-server
@DevTwitter | <Mohammad/>
❤13👍2👎1
امروز یه چیز خیلی خفن تو Django 6 کشف کردم:
Async ORM
تا قبل از این، وقتی جنگو داشت query اجرا میکرد، کل thread قفل میشد و باید صبر میکردی.
ولی حالا با ORM جدید میتونی queryهات رو به صورت async اجرا کنی!
یعنی همزمان چند تا درخواست رو هندل کنی، بدون اینکه performance بیاد پایین
دیگه لازم نیست بگی "اگه performance برام مهمه برم سمت FastAPI"
جنگو با این قابلیت داره خیلی مدرنتر میشه و به دنیای async خوشاومده
من تستش کردم و واقعا حسش فرق داره!
کدی تمیزتر، سرعت بهتر، و حس اینکه "جنگو هنوز زندهست و داره تکامل پیدا میکنه"
@DevTwitter | <Nikan Mafakheri/>
Async ORM
تا قبل از این، وقتی جنگو داشت query اجرا میکرد، کل thread قفل میشد و باید صبر میکردی.
ولی حالا با ORM جدید میتونی queryهات رو به صورت async اجرا کنی!
یعنی همزمان چند تا درخواست رو هندل کنی، بدون اینکه performance بیاد پایین
دیگه لازم نیست بگی "اگه performance برام مهمه برم سمت FastAPI"
جنگو با این قابلیت داره خیلی مدرنتر میشه و به دنیای async خوشاومده
من تستش کردم و واقعا حسش فرق داره!
کدی تمیزتر، سرعت بهتر، و حس اینکه "جنگو هنوز زندهست و داره تکامل پیدا میکنه"
@DevTwitter | <Nikan Mafakheri/>
👍48👎27❤8
وقتی دارین زبان برنامه نویسی جدید یاد میگیرین، برای اینکه بفهمید یادگرفتینش باید بتونید توش همه ساختمان داده های معروف (مثلا لیست، درخت، پشته و ...) رو بتونید پیاده کنید
http://github.com/emirpasic/gods
@DevTwitter | <Nimo/>
http://github.com/emirpasic/gods
@DevTwitter | <Nimo/>
👎34👍20❤5
تا حالا فکر کردین استراتژی redis برای پاک کردن کلیدهای cache که ttl اونها اکسپایر شده چیه؟
در واقع redis دو تا استراتژی داره که از ترکیب این دو برای مدیریت این موضوع استفاده میکنه.
1️- استراتژی اول که بهش میگن lazy expiration ساده ترینشه اینه که وقتی درخواستی برای گرفتن یه کلید اومد اول چک میکنه اون کلید اکسپایر شده یا نه اگه آره اون رو همونجا پاک میکنه و نال برمیگردونه.
2- خب اگه یه کلید برای مدتها صدا زده نشه چی؟ اینجاست که میرسیم به استراتژی دوم یعنی active expiration و به این شکله که میاد مثلا هر 100 میلی ثانیه توی لوپ یه batch که شامل مثلا 20 کلید تصادفی هست رو بررسی میکنه و اونایی که اکسپایر شدن رو پاک میکنه. اگه توی اون لوپ بیشتر از 25 درصد کلیدها پاک بشن اون رو زباله تشخیص میده و حدس میزنه کلیدهای بیشتری هم اکسپایر شدن پس یه batch دیگه اجرا میکنه و در نهایت لوپ تموم میشه تا دوباره لوپ بعدی.
برای همین برخلاف تصور، کلیدهای cache بالافاصله با اتمام ttl حذف نمیشن و ممکنه برای مدتی توی حافظه سرور باقی بمونن مخصوصا اگه حجم کلیدها بالا باشه.
پ.ن: چک کردن تعداد کلیدها در هر لوپ و تعداد اجرای لوپ در ثانیه توی کانفیگ redis قابل تنظیمه، ولی نکته ای که هست هر چی تعداد رو بالاتر ببرین کلیدها سریعتر حذف میشن اما cpu بیشتری درگیر میشه.
@DevTwitter | <Farshad Tofighi/>
در واقع redis دو تا استراتژی داره که از ترکیب این دو برای مدیریت این موضوع استفاده میکنه.
1️- استراتژی اول که بهش میگن lazy expiration ساده ترینشه اینه که وقتی درخواستی برای گرفتن یه کلید اومد اول چک میکنه اون کلید اکسپایر شده یا نه اگه آره اون رو همونجا پاک میکنه و نال برمیگردونه.
2- خب اگه یه کلید برای مدتها صدا زده نشه چی؟ اینجاست که میرسیم به استراتژی دوم یعنی active expiration و به این شکله که میاد مثلا هر 100 میلی ثانیه توی لوپ یه batch که شامل مثلا 20 کلید تصادفی هست رو بررسی میکنه و اونایی که اکسپایر شدن رو پاک میکنه. اگه توی اون لوپ بیشتر از 25 درصد کلیدها پاک بشن اون رو زباله تشخیص میده و حدس میزنه کلیدهای بیشتری هم اکسپایر شدن پس یه batch دیگه اجرا میکنه و در نهایت لوپ تموم میشه تا دوباره لوپ بعدی.
برای همین برخلاف تصور، کلیدهای cache بالافاصله با اتمام ttl حذف نمیشن و ممکنه برای مدتی توی حافظه سرور باقی بمونن مخصوصا اگه حجم کلیدها بالا باشه.
پ.ن: چک کردن تعداد کلیدها در هر لوپ و تعداد اجرای لوپ در ثانیه توی کانفیگ redis قابل تنظیمه، ولی نکته ای که هست هر چی تعداد رو بالاتر ببرین کلیدها سریعتر حذف میشن اما cpu بیشتری درگیر میشه.
@DevTwitter | <Farshad Tofighi/>
👍31❤12
تا حالا دقت کردی هر وقت یه سیستم هوش مصنوعی یا اپلیکیشن میخواد یه اسم پیشفرض بزنه، معمولاً مینویسه John Doe؟
به نظرت چرا همیشه همین اسمه؟
جالبه بدونی این اسم تصادفی نیست!
برمیگرده به قرن ۱۴ میلادی، وقتی توی دادگاههای انگلیس برای پروندههای فرضی از اسم John Doe برای شاکی و Richard Roe برای متهم استفاده میکردن.
چون میخواستن اسمهایی داشته باشن که واقعی نباشن ولی بشه راحت باهاشون مثال زد.
کمکم این اسم تبدیل شد به یه نماد از آدم ناشناس — کسی که هنوز هویتش مشخص نیست.
از بیمارستانها و دادگاهها گرفته تا فرمهای دیجیتال و هوش مصنوعیها، هنوزم John Doe زندهست!
پس دفعه بعدی که دیدی یه فرم نوشته:
بدون پشتش یه تاریخ ۶۰۰ ساله خوابیده
@DevTwitter | <Pejman Ghafouri/>
به نظرت چرا همیشه همین اسمه؟
جالبه بدونی این اسم تصادفی نیست!
برمیگرده به قرن ۱۴ میلادی، وقتی توی دادگاههای انگلیس برای پروندههای فرضی از اسم John Doe برای شاکی و Richard Roe برای متهم استفاده میکردن.
چون میخواستن اسمهایی داشته باشن که واقعی نباشن ولی بشه راحت باهاشون مثال زد.
کمکم این اسم تبدیل شد به یه نماد از آدم ناشناس — کسی که هنوز هویتش مشخص نیست.
از بیمارستانها و دادگاهها گرفته تا فرمهای دیجیتال و هوش مصنوعیها، هنوزم John Doe زندهست!
پس دفعه بعدی که دیدی یه فرم نوشته:
بدون پشتش یه تاریخ ۶۰۰ ساله خوابیده
@DevTwitter | <Pejman Ghafouri/>
2❤53👍19👎1🔥1
تحقیق جدید Anthropic نشون میده مدلهای LLM بدون توجه به اندازهشون، فقط با ۲۵۰ سند مخرب آسیبپذیرن
این یعنی تصور "مدل بزرگتر = امنیت بیشتر" اشتباهه!
https://www.anthropic.com/research/small-samples-poison
@DevTwitter | <Mohammad/>
این یعنی تصور "مدل بزرگتر = امنیت بیشتر" اشتباهه!
https://www.anthropic.com/research/small-samples-poison
@DevTwitter | <Mohammad/>
👍23
از Magic Numbers اجتناب کنید !!
وقتی در متد IsFreeShipping عدد 5000 به صورت مستقیم استفاده شده مشخص نیست این عدد چه مفهومی دارد. ممکن است نشاندهندهی «حداقل مبلغ برای ارسال رایگان» باشد یا صرفاً یک عدد است که یکی برای تست نوشته است . چنین افتضاحی باعث میشود کد مبهم و غیر قابل درک شود.
راه کار درست این است که مقدار 5000 به صورت یک ثابت معنادار مثل FreeShippingThreshold تعریف شود.
در این حالت هدف عدد بهوضوح مشخص است، کد خواناتر میشود و در صورت تغییر سیاست فروشگاه (مثلاً افزایش این مقدار / میزان به 6000)، تنها کافی است مقدار ثابت تغییر داده شود و نیاز به تغییر در بخشهای متعدد کد نخواهد بود.
@DevTwitter | <Ali Kolahdoozan/>
وقتی در متد IsFreeShipping عدد 5000 به صورت مستقیم استفاده شده مشخص نیست این عدد چه مفهومی دارد. ممکن است نشاندهندهی «حداقل مبلغ برای ارسال رایگان» باشد یا صرفاً یک عدد است که یکی برای تست نوشته است . چنین افتضاحی باعث میشود کد مبهم و غیر قابل درک شود.
راه کار درست این است که مقدار 5000 به صورت یک ثابت معنادار مثل FreeShippingThreshold تعریف شود.
در این حالت هدف عدد بهوضوح مشخص است، کد خواناتر میشود و در صورت تغییر سیاست فروشگاه (مثلاً افزایش این مقدار / میزان به 6000)، تنها کافی است مقدار ثابت تغییر داده شود و نیاز به تغییر در بخشهای متعدد کد نخواهد بود.
@DevTwitter | <Ali Kolahdoozan/>
👍73👎4❤2
کلاس درس پرامپت نویسی!
این ریپو یه مجموعه کامل از سیستم پرامپتهای کمپانیهای بزرگ رو گذاشته
و چیزای خیلی معروفی مثل Cursor، Perplexity، Claude Code و VSCode Agent توش پیدا میشه
https://github.com/x1xhlol/system-prompts-and-models-of-ai-tools
@DevTwitter | <Erfan.tsx/>
این ریپو یه مجموعه کامل از سیستم پرامپتهای کمپانیهای بزرگ رو گذاشته
و چیزای خیلی معروفی مثل Cursor، Perplexity، Claude Code و VSCode Agent توش پیدا میشه
https://github.com/x1xhlol/system-prompts-and-models-of-ai-tools
@DevTwitter | <Erfan.tsx/>
👍14👎2❤1
شرکت اوبر یکی شرکت های بزرگه که از زبان گو استفاده میکنه، اینجا میتونید کد استایلی که با زبان گو میزنن رو ببینید نسخه ترجمه شده به فارسی هم داره ولی یکم دیر تر از نسخه اصلیش آپدیت میشه
https://github.com/uber-go/guide
@DevTwitter | <Nimo/>
https://github.com/uber-go/guide
@DevTwitter | <Nimo/>
❤29👎3
👎45🔥14👍6❤2
This media is not supported in your browser
VIEW IN TELEGRAM
کمپانی OpenAI توی dev day که چند روز پیش برگزار کرد چند تا ابزار عالی برای دولوپرها معرفی کرد. به نظرم بهترینش chatKit بود. که میتونید باهاش agentic chat بسازید. مثلا یک چت بات همراه با UI بذارید تو وب سایتتنون.نه تنها این، بلکه میتونید کامپوننت های مختلف درست کنید و بجای اینکه فقط جواب ها متن خالی باشه المان های دیگه مثل Card, Button و .. هم توی چت نشون بدید. من تو ویدیوی پایین یکی از مثال هایی که گذاشتند را اجرا کردم. سریع چت بات بالا امد و میشه باهاش صحبت کرد. چیزی که خیلی از بیزینس ها بهش نیاز دارند.
لینکها را میذارم چک کنید. و سعی کنید باهاشون اپ درست کنید.
Link: https://platform.openai.com/docs/guides/chatkit
Github: https://github.com/openai/openai-chatkit-advanced-samples
@DevTwitter | <Mehdi Allahyari/>
لینکها را میذارم چک کنید. و سعی کنید باهاشون اپ درست کنید.
Link: https://platform.openai.com/docs/guides/chatkit
Github: https://github.com/openai/openai-chatkit-advanced-samples
@DevTwitter | <Mehdi Allahyari/>
❤12👍5👎1
قبلا WebSocket رو nest.js کار کرده بودم
از روی کنجکاوی خواستم WebSocket این سری روی express.jsرو پیادهسازی کنم، حاصلش شد یه مینی پروژه با Express.js, TypeScript و MongoDB
یه تجربه جالب برای درک بهتر ارتباط real-time
https://github.com/OmidRezazadeh/chat-app-express.js
@DevTwitter | <0miD/>
از روی کنجکاوی خواستم WebSocket این سری روی express.jsرو پیادهسازی کنم، حاصلش شد یه مینی پروژه با Express.js, TypeScript و MongoDB
یه تجربه جالب برای درک بهتر ارتباط real-time
https://github.com/OmidRezazadeh/chat-app-express.js
@DevTwitter | <0miD/>
❤21👎9👍5
از بین پرسنل LTT که از تیم جدا/اخراج شدن، Jake از همهشون بهتره. زمانی که اونجا بود هم آدم تاثیرگذاری بود.
کانال جدید یوتوبش از دو هفته پیش کلاً ۴ تا ویدئو داره و خب لوح 100K رو هم در همین دو هفته گرفته (الان بیشتر از 185K مشترک)
https://www.youtube.com/@jakkuh_t
@DevTwitter | <Hamed/>
کانال جدید یوتوبش از دو هفته پیش کلاً ۴ تا ویدئو داره و خب لوح 100K رو هم در همین دو هفته گرفته (الان بیشتر از 185K مشترک)
https://www.youtube.com/@jakkuh_t
@DevTwitter | <Hamed/>
👍22
چقدر از گیتهاب جیست استفاده میکنی؟
یکی از سرویس های خیلی به درد بخور و باحال گیتهاب همین جیسته که خیلی های هم هنوز نمیشناسنش!
جیست یه ابزار برای نمایش و اشتراک گذاری قطعه کد ,یادداشت و سایر اطلاعات کوچیک هستش.فرض کنید یه اسکریپت کوچیک نوشتید که یه کاری انجام میده (برای مثال: تغییر پسوند همه فایل های داخل یه دایرکتوری) قطعا افرادی هستند که مثل شما برای اینکار به این اسکریپت نیاز دارند; در این حالت خیلی منطقی نیست که برای این اسکریپت کوچیک (که نهایتا 20 لاینه) یه ریپوزیتوری درست کنید.
اینجاست که جیست به کمکتون میاد و بهتون این اجازه رو میده که قطعه کد هاتون رو به عنوان یه Gist ذخیره کنید.
جیست هم مثل ریپوزیتوری قابل Star شدن , کامنت گذاشتن(issue) , دانلود و کلون شدن و همچنین مالتی فایل بودن هستن
@DevTwitter | <Farzad Ebrahimi/>
یکی از سرویس های خیلی به درد بخور و باحال گیتهاب همین جیسته که خیلی های هم هنوز نمیشناسنش!
جیست یه ابزار برای نمایش و اشتراک گذاری قطعه کد ,یادداشت و سایر اطلاعات کوچیک هستش.فرض کنید یه اسکریپت کوچیک نوشتید که یه کاری انجام میده (برای مثال: تغییر پسوند همه فایل های داخل یه دایرکتوری) قطعا افرادی هستند که مثل شما برای اینکار به این اسکریپت نیاز دارند; در این حالت خیلی منطقی نیست که برای این اسکریپت کوچیک (که نهایتا 20 لاینه) یه ریپوزیتوری درست کنید.
اینجاست که جیست به کمکتون میاد و بهتون این اجازه رو میده که قطعه کد هاتون رو به عنوان یه Gist ذخیره کنید.
جیست هم مثل ریپوزیتوری قابل Star شدن , کامنت گذاشتن(issue) , دانلود و کلون شدن و همچنین مالتی فایل بودن هستن
@DevTwitter | <Farzad Ebrahimi/>
👍48❤12👎2
#حاجی_پشمام
میدونستید میتونید 0 های آیپی رو ننویسید و کار کنه؟؟؟
خیلی باحال بود این
10.20.0.2 -> 10.20.2
10.0.0.68 -> 10.68
توی پست بعدی میگم چطوری کار میکنه
@DevTwitter
میدونستید میتونید 0 های آیپی رو ننویسید و کار کنه؟؟؟
خیلی باحال بود این
10.20.0.2 -> 10.20.2
10.0.0.68 -> 10.68
توی پست بعدی میگم چطوری کار میکنه
@DevTwitter
🔥64👍17👎6❤3
میدونستید میتونید 0 های آیپی رو ننویسید و کار کنه؟؟؟
خب حالا سیستم از کجا میفهمه چطوری؟
بر اساس این که شما چند بخش رو نوشتید کار میکنه:
a.b.c.d -> یه آیپی معمولی
a.b.c -> a.b.0.c
a.b -> a.0.0.b
a -> 0.0.0.a
پس وقتی بنویسید 10.22.2 میشه 10.22.0.2
یا اگر بنویسید 127.1 میشه 127.0.0.1
یعنی سیستم قسمتهای جا افتاده رو از چپ با صفر پر میکنه.
@DevTwitter
خب حالا سیستم از کجا میفهمه چطوری؟
بر اساس این که شما چند بخش رو نوشتید کار میکنه:
a.b.c.d -> یه آیپی معمولی
a.b.c -> a.b.0.c
a.b -> a.0.0.b
a -> 0.0.0.a
پس وقتی بنویسید 10.22.2 میشه 10.22.0.2
یا اگر بنویسید 127.1 میشه 127.0.0.1
یعنی سیستم قسمتهای جا افتاده رو از چپ با صفر پر میکنه.
@DevTwitter
🔥77👍9👎6❤5
https://github.com/parvvareshInfrastructure/gitlab-setup
نصب گیت لب برای سرور (ip or domain) رو هم هندل میکنه
@DevTwitter | <Alireza Parvaresh/>
نصب گیت لب برای سرور (ip or domain) رو هم هندل میکنه
@DevTwitter | <Alireza Parvaresh/>
👍12👎2