بهتازگی با پکیج timeitPro آشنا شدم و واقعا از سادگی و دقتی که در اندازهگیری عملکرد توابع داره لذت بردم. فقط با یه دکوراتور ساده میتونی بفهمی هر تابع چقدر زمان، CPU و حافظه مصرف میکنه و نتایجش هم بهصورت JSON ذخیره میشن تا بعداً بتونی تحلیلشون کنی. حتی یه داشبورد تحت وب داره که نتایج رو به شکل نمودار نشون میده و مقایسه اجراها رو خیلی راحت میکنه. برای من که همیشه دنبال ابزار سبک و قابل اعتماد برای پروفایلینگ بودم، timeitPro دقیقاً همون چیزیه که لازم داشتم. پیشنهاد میکنم حتماً یه بار امتحانش کنید.
https://github.com/farahbakhsh3/timeitPro
@DevTwitter | <Dr. Amin Farahbakhsh/>
https://github.com/farahbakhsh3/timeitPro
@DevTwitter | <Dr. Amin Farahbakhsh/>
👍17❤4👎4🔥1
آیا PHP یک زبان Blocking است؟
توی چند تا از مصاحبههای اخیرم این سؤال ازم پرسیده شد که: “PHP blocking هست یا نه؟”
گفتم بد نیست یه بار این موضوع رو دقیقتر بررسی کنیم.
زبان PHP ذاتاً thread-blocking هست.
یعنی وقتی یه عملیات I/O انجام میدین (مثلاً خوندن فایل، ارتباط با سوکت، یا درخواست شبکه)،
کل پردازش متوقف میمونه تا نتیجه اون عملیات برگرده.
به زبان ساده: اگه یه درخواست جدید به همون سرور برسه،
تا زمانی که پردازش درخواست قبلی تموم نشده،
درخواست جدید باید منتظر بمونه.
(FastCGI Process Manager) PHP-FPM
وظیفهاش اینه که برای هر درخواست، یه child process جدید بسازه
و اون رو به یکی از worker processها بده تا اجرا کنه.
اما نکته مهم اینه که اون پردازشِ داخل worker همچنان blocking هست.
حالا اگه همهی workerها درگیر باشن و تعدادشون به حداکثر تنظیمشده برسه،
درخواست جدید باید منتظر بمونه تا یکی از workerها آزاد بشه.
(در نتیجه هنوز هم ما با blocking مواجهیم، فقط به شکل مدیریتشدهتر.)
خب حالا سوالی که پیش ماید که آیا میتونیم PHP رو non-blocking کنیم؟
بله، تا حدی میشه!
با این شرط که درخواستهای I/O (که به کرنل وابسته هستن یا مثلا درخواست مربوط به دیتابیس)
توی thread جداگانه اجرا بشن.
اما این کار نیاز داره که خود برنامهنویس thread management رو هندل کنه،
و برای این کار باید Zend extension مربوط به threads فعال باشه.
نکته مهم: PHP-FPM خودش اجازهی استفاده از threadها رو به صورت مستقیم نمیده.
@DevTwitter | <Hossein Salehi/>
توی چند تا از مصاحبههای اخیرم این سؤال ازم پرسیده شد که: “PHP blocking هست یا نه؟”
گفتم بد نیست یه بار این موضوع رو دقیقتر بررسی کنیم.
زبان PHP ذاتاً thread-blocking هست.
یعنی وقتی یه عملیات I/O انجام میدین (مثلاً خوندن فایل، ارتباط با سوکت، یا درخواست شبکه)،
کل پردازش متوقف میمونه تا نتیجه اون عملیات برگرده.
به زبان ساده: اگه یه درخواست جدید به همون سرور برسه،
تا زمانی که پردازش درخواست قبلی تموم نشده،
درخواست جدید باید منتظر بمونه.
(FastCGI Process Manager) PHP-FPM
وظیفهاش اینه که برای هر درخواست، یه child process جدید بسازه
و اون رو به یکی از worker processها بده تا اجرا کنه.
اما نکته مهم اینه که اون پردازشِ داخل worker همچنان blocking هست.
حالا اگه همهی workerها درگیر باشن و تعدادشون به حداکثر تنظیمشده برسه،
درخواست جدید باید منتظر بمونه تا یکی از workerها آزاد بشه.
(در نتیجه هنوز هم ما با blocking مواجهیم، فقط به شکل مدیریتشدهتر.)
خب حالا سوالی که پیش ماید که آیا میتونیم PHP رو non-blocking کنیم؟
بله، تا حدی میشه!
با این شرط که درخواستهای I/O (که به کرنل وابسته هستن یا مثلا درخواست مربوط به دیتابیس)
توی thread جداگانه اجرا بشن.
اما این کار نیاز داره که خود برنامهنویس thread management رو هندل کنه،
و برای این کار باید Zend extension مربوط به threads فعال باشه.
نکته مهم: PHP-FPM خودش اجازهی استفاده از threadها رو به صورت مستقیم نمیده.
@DevTwitter | <Hossein Salehi/>
👍27👎5🔥3❤1
آقا من همیشه یه چیزی رو مخم بود
اینکه تو الگوریتم های استاندارد و بزرگ رمزنگاری متقارن (AES-CTR و ChaCha20 و...) یه مشکلی دارن و اونم اینه که هر بیت از plaintext دقیقا رو یه بیت از ciphertext اثر میذاره! شما اگر یه بیت رو تغییر بدی، فقط همون بیت تو خروجی تغییر میکنه و خلاصه رابطه بین ورودی و خروجی دقیقا یک بیت به یک بیت هست
درسته که یسری مزایا هم داره (مثلا میشه یه فایل عظیم یا یه stream رو باهاشون رمز کرد) ولی بازم اینکه اصطلاحا diffusion ندارن به نظرم برای کاربرد های حساس و روی متن های نسبتا کوتاه اصلا مناسب نیست.
بخاطر همین نشستم تحقیق کردم و الگوریتم طراحی کردم و رسیدم به MACE :)
بر اساس یه الگوریتم هش کار میکنه (که من BLAKE3 رو انتخاب کردم، ولی اجباری نیست!) و داده ها رو به چانک های ۶۴ بایتی میشکونه و اونها رو با یه فرایند ساده ولی مؤثر رمز میکنه (توضیحات دقیقش تو README پروژه هست)
خلاصهش اینکه این الگوریتم با اینکه بسیار سبک و سریعه، قابلیت های زیادی داره و البته که full diffusion بهتون ارایه میکنه: هر بیت از ورودی رو تغییر بدید کل خروجی زیر و رو میشه!
خوشحال میشم بخونیدش و تستش کنید و نظرتونو بهم بگید:
github.com/MHSarmadi/MACE
@DevTwitter | <محمد حسین سرمدی/>
اینکه تو الگوریتم های استاندارد و بزرگ رمزنگاری متقارن (AES-CTR و ChaCha20 و...) یه مشکلی دارن و اونم اینه که هر بیت از plaintext دقیقا رو یه بیت از ciphertext اثر میذاره! شما اگر یه بیت رو تغییر بدی، فقط همون بیت تو خروجی تغییر میکنه و خلاصه رابطه بین ورودی و خروجی دقیقا یک بیت به یک بیت هست
درسته که یسری مزایا هم داره (مثلا میشه یه فایل عظیم یا یه stream رو باهاشون رمز کرد) ولی بازم اینکه اصطلاحا diffusion ندارن به نظرم برای کاربرد های حساس و روی متن های نسبتا کوتاه اصلا مناسب نیست.
بخاطر همین نشستم تحقیق کردم و الگوریتم طراحی کردم و رسیدم به MACE :)
بر اساس یه الگوریتم هش کار میکنه (که من BLAKE3 رو انتخاب کردم، ولی اجباری نیست!) و داده ها رو به چانک های ۶۴ بایتی میشکونه و اونها رو با یه فرایند ساده ولی مؤثر رمز میکنه (توضیحات دقیقش تو README پروژه هست)
خلاصهش اینکه این الگوریتم با اینکه بسیار سبک و سریعه، قابلیت های زیادی داره و البته که full diffusion بهتون ارایه میکنه: هر بیت از ورودی رو تغییر بدید کل خروجی زیر و رو میشه!
خوشحال میشم بخونیدش و تستش کنید و نظرتونو بهم بگید:
github.com/MHSarmadi/MACE
@DevTwitter | <محمد حسین سرمدی/>
👍24👎9🔥7❤4
چند روز پیش امسیپی Chrome DevTools منتشر شد. یه مشکل کوچیک داشت که نمیشد پارامتر --no-sandbox رو به کروم پاس داد برا همین رو بعضی جاها مثلا کانتینرها نمیشد استفاده کرد.
الان یه آپدیت دادن و میشه پارامتر به کروم ارسال کرد و این مشکل حل شد.
https://github.com/ChromeDevTools/chrome-devtools-mcp
الان با یه همچین کانفیگی اوکی شده
@DevTwitter | <Serajoddin Aliabadi/>
الان یه آپدیت دادن و میشه پارامتر به کروم ارسال کرد و این مشکل حل شد.
https://github.com/ChromeDevTools/chrome-devtools-mcp
الان با یه همچین کانفیگی اوکی شده
@DevTwitter | <Serajoddin Aliabadi/>
1👎8❤6👍2🔥1
اکستنشن Notebook Sidebar یکی از کاربردی ترین افزونه های کروم برای برنامه نویس ها و کاربران مختلف هست. با این افزونه می تونید یادداشت هاتون رو مستقیماً داخل سایدبار مرورگر کروم بنویسید و کار هاتون رو برنامه ریزی کنید.در آپدیت جدید اکستنشن Notebook Sidebar قابلیت های کاربردی جدیدی مثل ایمپورت و اکسپورت یادداشت ها و حالت دارک مود هم اضافه شده.
لینک دانلود از کروم استور:
https://chromewebstore.google.com/detail/notebook-sidebar/fdjcoigfklgjpeplkkdbdicminpimdok
@DevTwitter | <OMid/>
لینک دانلود از کروم استور:
https://chromewebstore.google.com/detail/notebook-sidebar/fdjcoigfklgjpeplkkdbdicminpimdok
@DevTwitter | <OMid/>
👍13👎3🔥1
بلاخره React از مِتا جدا شد!
بعد بیش از ۱۰ سال، React قراره تحت یه بنیاد مستقل به نام React Foundation اداره بشه ( زیر چتر Linux Foundation )
یعنی از این به بعد تصمیم گیری ها و سرنوشت ری اکت، دیگه فقط دست Meta نیست و جامعه دولوپرها و شرکتهای دیگه هم تو جهت دهی آینده React نقش دارن!
و این یعنی شفافیت، مشارکت و تنوع بیشتر در توسعه کتابخونه دوست داشتنی ری اکت
بنظرم React داره یه فصل جدید از داستانش رو شروع میکنه…
ری اکت دیگه صرفا پروژه یه شرکت نیست، بلکه نتیجه ی همکاری یه جامعه ی جهانی از دولوپر هاست
@DevTwitter | <Ahmad Ahmad-Nejad/>
بعد بیش از ۱۰ سال، React قراره تحت یه بنیاد مستقل به نام React Foundation اداره بشه ( زیر چتر Linux Foundation )
یعنی از این به بعد تصمیم گیری ها و سرنوشت ری اکت، دیگه فقط دست Meta نیست و جامعه دولوپرها و شرکتهای دیگه هم تو جهت دهی آینده React نقش دارن!
و این یعنی شفافیت، مشارکت و تنوع بیشتر در توسعه کتابخونه دوست داشتنی ری اکت
بنظرم React داره یه فصل جدید از داستانش رو شروع میکنه…
ری اکت دیگه صرفا پروژه یه شرکت نیست، بلکه نتیجه ی همکاری یه جامعه ی جهانی از دولوپر هاست
@DevTwitter | <Ahmad Ahmad-Nejad/>
👍85🔥11❤7
این پروژه یک وباسکرپر (Web Scraper) ساده و کاربردی است که به شما کمک میکنه تغییرات سایتها رو بهصورت خودکار شناسایی و ذخیره کنید.
با استفاده از این ابزار، میتونید چندین وبسایت رو زیر نظر بگیرید و هر زمان که محتوای اون ها تغییر کرد، باخبر بشید.
https://github.com/amintatari64/web-scraper
@DevTwitter | <Mat/>
با استفاده از این ابزار، میتونید چندین وبسایت رو زیر نظر بگیرید و هر زمان که محتوای اون ها تغییر کرد، باخبر بشید.
https://github.com/amintatari64/web-scraper
@DevTwitter | <Mat/>
❤25👍4👎1
دارم سعی میکنم سوالات متداول و مهم از طراحی سیستم که در مصاحبه ها پرسیده میشه و از خودم هم پرسیده شده رو به صورت ویدئو ضبط کنم و کلیدواژهای مهم برای هر سوال رو در حد توان و وقتی که دارم کمی توضیح بدم.
توی هر سوال به موضوعات مهمش بیشتر پرداخته شده که در مصاحبه اهمیت بیشتری داره تا نشون بده از یک سری مفاهیم اون موضوع شناخت دارید.
البته که در هر سوال مطالب زیادی هست ولی سعی کردم هم موارد مهمش توضیح داده بشه و هم ساده باشه.
این پلی لیست در حدود 40 ویدئو هست که به مرور منتشر میشه.
در حال تکمیل پلی لیست های دیگه هم هستم :))
https://www.youtube.com/watch?v=3J-2KRValAA&feature=youtu.be
@DevTwitter | <Mohammad Keshavarz/>
توی هر سوال به موضوعات مهمش بیشتر پرداخته شده که در مصاحبه اهمیت بیشتری داره تا نشون بده از یک سری مفاهیم اون موضوع شناخت دارید.
البته که در هر سوال مطالب زیادی هست ولی سعی کردم هم موارد مهمش توضیح داده بشه و هم ساده باشه.
این پلی لیست در حدود 40 ویدئو هست که به مرور منتشر میشه.
در حال تکمیل پلی لیست های دیگه هم هستم :))
https://www.youtube.com/watch?v=3J-2KRValAA&feature=youtu.be
@DevTwitter | <Mohammad Keshavarz/>
❤22👎1🔥1
ویژوال استودیوی 2026 توسط مایکروسافت منتشر شد
استفاده کنید و لذت ببرید
- ویژگی های جدید
ادغام با هوش مصنوعی
افزایش سرعت و کارایی
بهبود تجربه کاربری
پشتیبانی از سی شارپ 14 و دات نت 10
بهبود هات ری لود توی asp.net و blazor
بهبود سرعت بیلد و اجرای پروژه ها
انجام اپدیت ها به صورت ماهانه
@DevTwitter | <Säber V/>
استفاده کنید و لذت ببرید
- ویژگی های جدید
ادغام با هوش مصنوعی
افزایش سرعت و کارایی
بهبود تجربه کاربری
پشتیبانی از سی شارپ 14 و دات نت 10
بهبود هات ری لود توی asp.net و blazor
بهبود سرعت بیلد و اجرای پروژه ها
انجام اپدیت ها به صورت ماهانه
@DevTwitter | <Säber V/>
26❤46👎17👍2
این ریپوی گیتهاب مجموعهای از Agentهای آماده در حوزههای مختلف داره که میتونید مستقیماً توی Claude Code ازشون استفاده کنید.
پوشش گستردهای هم داره — از Full Stack و SEO گرفته تا Code Review، Database و Security.
https://github.com/wshobson/agents
@DevTwitter | <Mohammad/>
پوشش گستردهای هم داره — از Full Stack و SEO گرفته تا Code Review، Database و Security.
https://github.com/wshobson/agents
@DevTwitter | <Mohammad/>
❤8
This media is not supported in your browser
VIEW IN TELEGRAM
در CSS سه واحد جدید برای Viewport معرفی شده که مشکل ارتفاع در موبایل را حل میکنند. پیشتر استفاده از 100vh باعث میشد بخشهای تمامصفحه دقیق نمایش داده نشوند، چون نوار ابزار مرورگر هنگام اسکرول ظاهر یا ناپدید میشود و ارتفاع واقعی تغییر میکند. حالا با سه واحد جدید این مشکل رفع شده است:
1. lvh (Large Viewport Height)
بیشترین ارتفاع زمانی که نوار ابزار پنهان است.
کاربرد: برای بخشهای فولاسکرین.
2. svh (Small Viewport Height)
کمترین ارتفاع زمانی که نوار ابزار دیده میشود.
کاربرد: برای اجزایی مثل هدر یا فوتر ثابت.
3. dvh (Dynamic Viewport Height)
ارتفاع پویا بین lvh و svh.
کاربرد: برای بخشهای تطبیقی.
اگر چند بخش 100dvh داشته باشید، با ظاهر شدن نوار ابزار ممکن است صفحه بپرد.
جمعبندی:
- نمایش ثابت: svh
- فولاسکرین واقعی: lvh
- رفتار تطبیقی: dvh
این واحدها جایگزین vh نیستند، بلکه ابزارهایی برای کنترل دقیقتر در موبایلاند. CSS امروز هوشمندتر و دقیقتر شده و کنترل بیشتری بر طراحی رابطها میدهد.
@DevTwitter | <Hesam Valizadeh/>
1. lvh (Large Viewport Height)
بیشترین ارتفاع زمانی که نوار ابزار پنهان است.
کاربرد: برای بخشهای فولاسکرین.
height: 100lvh;
2. svh (Small Viewport Height)
کمترین ارتفاع زمانی که نوار ابزار دیده میشود.
کاربرد: برای اجزایی مثل هدر یا فوتر ثابت.
height: 100svh;
3. dvh (Dynamic Viewport Height)
ارتفاع پویا بین lvh و svh.
کاربرد: برای بخشهای تطبیقی.
height: 100dvh;
اگر چند بخش 100dvh داشته باشید، با ظاهر شدن نوار ابزار ممکن است صفحه بپرد.
جمعبندی:
- نمایش ثابت: svh
- فولاسکرین واقعی: lvh
- رفتار تطبیقی: dvh
این واحدها جایگزین vh نیستند، بلکه ابزارهایی برای کنترل دقیقتر در موبایلاند. CSS امروز هوشمندتر و دقیقتر شده و کنترل بیشتری بر طراحی رابطها میدهد.
@DevTwitter | <Hesam Valizadeh/>
👍26❤8
This media is not supported in your browser
VIEW IN TELEGRAM
وقتی ابزار «قطرهچکان» (Eyedropper) سایتها از مرز مرورگر رد میشه!
چند روز پیش داشتم از یک سایت آنلاین Shadow Generator استفاده میکردم که متوجه یک نکته عجیب شدم: ابزار قطرهچکان رنگ اون سایت، علاوه بر فضای داخل مرورگر، به کل دسکتاپ و محیط سیستم عامل من هم دسترسی داشت!
اولش شک کردم... مگه میشه؟ چطور یک وبسایت میتونه بدون نصب افزونه، اطلاعات پیکسل رو از خارج از پنجره مرورگر بخونه؟ این که کاملاً خلاف اصول امنیتی مرورگره!
بعد از کمی تحقیق، متوجه شدم که این قابلیت بهخاطر یک پیشرفت جدید در دنیای وب به نام EyeDropper API امکانپذیر شده.
ماجرا از این قراره:
که EyeDropper API یک رابط برنامهنویسی جدید برای مرورگرهای مبتنی بر کرومیوم (مثل کروم و اج) است.
این API به سایتها اجازه میده که ابزار بومی (Native) انتخاب رنگ مرورگر رو فعال کنن.
این قابلیت، مرز بین اپلیکیشنهای تحت وب و نرمافزارهای دسکتاپ رو باریکتر کرده و برای ابزارهای طراحی وب (مثل انتخابکنندههای رنگ یا ویرایشگرهای عکس) واقعاً یک تحول محسوب میشه.
لینک سایت:
https://folge.me/tools/tailwind-shadow-generator
@DevTwitter | <Ali shabani/>
چند روز پیش داشتم از یک سایت آنلاین Shadow Generator استفاده میکردم که متوجه یک نکته عجیب شدم: ابزار قطرهچکان رنگ اون سایت، علاوه بر فضای داخل مرورگر، به کل دسکتاپ و محیط سیستم عامل من هم دسترسی داشت!
اولش شک کردم... مگه میشه؟ چطور یک وبسایت میتونه بدون نصب افزونه، اطلاعات پیکسل رو از خارج از پنجره مرورگر بخونه؟ این که کاملاً خلاف اصول امنیتی مرورگره!
بعد از کمی تحقیق، متوجه شدم که این قابلیت بهخاطر یک پیشرفت جدید در دنیای وب به نام EyeDropper API امکانپذیر شده.
ماجرا از این قراره:
که EyeDropper API یک رابط برنامهنویسی جدید برای مرورگرهای مبتنی بر کرومیوم (مثل کروم و اج) است.
این API به سایتها اجازه میده که ابزار بومی (Native) انتخاب رنگ مرورگر رو فعال کنن.
این قابلیت، مرز بین اپلیکیشنهای تحت وب و نرمافزارهای دسکتاپ رو باریکتر کرده و برای ابزارهای طراحی وب (مثل انتخابکنندههای رنگ یا ویرایشگرهای عکس) واقعاً یک تحول محسوب میشه.
لینک سایت:
https://folge.me/tools/tailwind-shadow-generator
@DevTwitter | <Ali shabani/>
❤37👍10👎2🔥1
متغیرهای سیستمی در 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/>
👍45👎26❤8
وقتی دارین زبان برنامه نویسی جدید یاد میگیرین، برای اینکه بفهمید یادگرفتینش باید بتونید توش همه ساختمان داده های معروف (مثلا لیست، درخت، پشته و ...) رو بتونید پیاده کنید
http://github.com/emirpasic/gods
@DevTwitter | <Nimo/>
http://github.com/emirpasic/gods
@DevTwitter | <Nimo/>
👎32👍19❤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/>
👍30❤10
تا حالا دقت کردی هر وقت یه سیستم هوش مصنوعی یا اپلیکیشن میخواد یه اسم پیشفرض بزنه، معمولاً مینویسه John Doe؟
به نظرت چرا همیشه همین اسمه؟
جالبه بدونی این اسم تصادفی نیست!
برمیگرده به قرن ۱۴ میلادی، وقتی توی دادگاههای انگلیس برای پروندههای فرضی از اسم John Doe برای شاکی و Richard Roe برای متهم استفاده میکردن.
چون میخواستن اسمهایی داشته باشن که واقعی نباشن ولی بشه راحت باهاشون مثال زد.
کمکم این اسم تبدیل شد به یه نماد از آدم ناشناس — کسی که هنوز هویتش مشخص نیست.
از بیمارستانها و دادگاهها گرفته تا فرمهای دیجیتال و هوش مصنوعیها، هنوزم John Doe زندهست!
پس دفعه بعدی که دیدی یه فرم نوشته:
بدون پشتش یه تاریخ ۶۰۰ ساله خوابیده
@DevTwitter | <Pejman Ghafouri/>
به نظرت چرا همیشه همین اسمه؟
جالبه بدونی این اسم تصادفی نیست!
برمیگرده به قرن ۱۴ میلادی، وقتی توی دادگاههای انگلیس برای پروندههای فرضی از اسم John Doe برای شاکی و Richard Roe برای متهم استفاده میکردن.
چون میخواستن اسمهایی داشته باشن که واقعی نباشن ولی بشه راحت باهاشون مثال زد.
کمکم این اسم تبدیل شد به یه نماد از آدم ناشناس — کسی که هنوز هویتش مشخص نیست.
از بیمارستانها و دادگاهها گرفته تا فرمهای دیجیتال و هوش مصنوعیها، هنوزم John Doe زندهست!
پس دفعه بعدی که دیدی یه فرم نوشته:
بدون پشتش یه تاریخ ۶۰۰ ساله خوابیده
@DevTwitter | <Pejman Ghafouri/>
2❤49👍18👎1🔥1