نرم افزار و سایت هایی که طراحی شدن و باید مانیتور میکردیم زیاد شدن، حاصلش شد کلی status page و تب های مرورگر که باز میکردیم، خوب یه صفحه مانیتور آماده کردیم سایت ها و استاتوس پیج هامون رو iframe داشته باشیم، طبق معمول شما هم با ما شریک :)
https://github.com/mad-bax-dev/Monitor-board
@DevTwitter | <Mr Zak Dev/>
https://github.com/mad-bax-dev/Monitor-board
@DevTwitter | <Mr Zak Dev/>
🔥32❤5👍3👎3
#کدبوک
این کتاب خیلی ساده و روان توضیح میده چرا Rust اینقدر سر و صدا کرده و چرا خیلیها دارن سمتش میرن:
نشون میده چطوری با سیستم ownership و borrowing میشه حافظه رو بدون دردسر مدیریت کرد
توضیح میده چرا توی Rust باگهایی مثل null pointer یا data race کلاً از همون اول جلوی راهت سبز نمیشن
یاد میده چطوری میشه به راحتی برنامههای چندنخی و امن نوشت، بدون استرس خطاهای عجیب غریب
تأکید میکنه که همهی این امکانات رو میگیری، ولی سرعتش در حد C/C++ باقی میمونه
* فایل PDF این کتاب رو میتونید از کانال DevBooks که لینکش توی بیو هست دانلود کنید.
@DevTwitter
این کتاب خیلی ساده و روان توضیح میده چرا Rust اینقدر سر و صدا کرده و چرا خیلیها دارن سمتش میرن:
نشون میده چطوری با سیستم ownership و borrowing میشه حافظه رو بدون دردسر مدیریت کرد
توضیح میده چرا توی Rust باگهایی مثل null pointer یا data race کلاً از همون اول جلوی راهت سبز نمیشن
یاد میده چطوری میشه به راحتی برنامههای چندنخی و امن نوشت، بدون استرس خطاهای عجیب غریب
تأکید میکنه که همهی این امکانات رو میگیری، ولی سرعتش در حد C/C++ باقی میمونه
* فایل PDF این کتاب رو میتونید از کانال DevBooks که لینکش توی بیو هست دانلود کنید.
@DevTwitter
👍26👎4🔥4❤3
This media is not supported in your browser
VIEW IN TELEGRAM
بعد ازینکه تونستم هوش مصنوعی ollama رو با مدل gemma3 تو کامپیوتر خودم اجرا کنم ، به کمک claude کدی نوشتم که با api ای که خود ollama روی localhost میده ارتباط برقرار میکنه و اینجوری میتونم api هوش مصنوعی خودم رو رایگان داشته باشم ، اصنم سنگین نیست و منابع خیلی کمی رو مصرف میکنه
@DevTwitter | <گربهی برنامهنویس/>
@DevTwitter | <گربهی برنامهنویس/>
👍24👎15❤2🔥1
مایکروسافت یک فریمورک جامع چندزبانه برای ساخت، اورکستریشن و دیپلوی ایجنتهای هوش مصنوعی ارائه کرده است.
- بر پایهی Semantic Kernel و AutoGen
- پشتیبانی از .NET و Python
- از ایجنتهای ساده تا ورکفلوهای چندایجنتی با گراف اورکستریشن
https://github.com/microsoft/agent-framework?tab=readme-ov-file
@DevTwitter | <Sam92/>
- بر پایهی Semantic Kernel و AutoGen
- پشتیبانی از .NET و Python
- از ایجنتهای ساده تا ورکفلوهای چندایجنتی با گراف اورکستریشن
https://github.com/microsoft/agent-framework?tab=readme-ov-file
@DevTwitter | <Sam92/>
👍14❤2
این پروژه یک سیستم تشخیص اشیا (Object Detection) با استفاده از مدل YOLOv8 است.
میتواند چندین شیء را در تصاویر، ویدئوها و وبکم زنده شناسایی کند.
اشیا شناسایی شده با کادرهای محدودکننده (Bounding Box) و درصد اطمینان نمایش داده میشوند.
https://github.com/nimaohamdi/Object-Detection
@DevTwitter | <Nimo/>
میتواند چندین شیء را در تصاویر، ویدئوها و وبکم زنده شناسایی کند.
اشیا شناسایی شده با کادرهای محدودکننده (Bounding Box) و درصد اطمینان نمایش داده میشوند.
https://github.com/nimaohamdi/Object-Detection
@DevTwitter | <Nimo/>
❤16👎13👍1
دیروز React 19.2 منتشر شد.
یکی از مهمترین قابلیتهای جدیدش چیزی به اسم Activity ـه. چرا؟
1- دیگه لازم نیست برای مخفی کردن یه بخش، کامپوننت رو unmount کنیم.
قبلاً این کار مساوی بود با از دست رفتن state و data. حالا میتونیم مخفیش کنیم و همچنان state سر جاش بمونه.
2- قابلیت Pre-rendering هوشمند.
ریاکت میتونه صفحاتی که احتمالش هست کاربر بعداً بره رو از قبل رندر کنه، بدون اینکه فشار اضافه به صفحه فعلی بیاد. یعنی CSS، تصاویر و حتی دیتا آمادهن قبل از اینکه کاربر کلیک کنه.
3- تجربه بدون نقص برای دکمه Back.
کلیک back کاربر = همون state قبل!
ورودیها، اسکرول، فرمها… همه دقیقاً مثل لحظهایه که ترک کرده بود.
4- اضافه شدن این فیچر فقط شروع ماجراست.
تیم React قول داده modeهای بیشتری به Activity اضافه کنه.
نتیجه؟
ناوبری تو SPAها به شدت سریعتر و طبیعیتر میشه، بدون اینکه state از دست بره.
برای جزئیات بیشتر و نحوه بهروزرسانی، سری به مستندات رسمی بزنید.
https://react.dev/blog/2025/10/01/react-19-2#performance-tracks
@DevTwitter | <Mohammadreza Berneti/>
یکی از مهمترین قابلیتهای جدیدش چیزی به اسم Activity ـه. چرا؟
1- دیگه لازم نیست برای مخفی کردن یه بخش، کامپوننت رو unmount کنیم.
قبلاً این کار مساوی بود با از دست رفتن state و data. حالا میتونیم مخفیش کنیم و همچنان state سر جاش بمونه.
2- قابلیت Pre-rendering هوشمند.
ریاکت میتونه صفحاتی که احتمالش هست کاربر بعداً بره رو از قبل رندر کنه، بدون اینکه فشار اضافه به صفحه فعلی بیاد. یعنی CSS، تصاویر و حتی دیتا آمادهن قبل از اینکه کاربر کلیک کنه.
3- تجربه بدون نقص برای دکمه Back.
کلیک back کاربر = همون state قبل!
ورودیها، اسکرول، فرمها… همه دقیقاً مثل لحظهایه که ترک کرده بود.
4- اضافه شدن این فیچر فقط شروع ماجراست.
تیم React قول داده modeهای بیشتری به Activity اضافه کنه.
نتیجه؟
ناوبری تو SPAها به شدت سریعتر و طبیعیتر میشه، بدون اینکه state از دست بره.
برای جزئیات بیشتر و نحوه بهروزرسانی، سری به مستندات رسمی بزنید.
https://react.dev/blog/2025/10/01/react-19-2#performance-tracks
@DevTwitter | <Mohammadreza Berneti/>
❤33👍7🔥4👎2
ایجنت رایگان با گراک 4 !
اخیراً گروک 4 رایگان شده و منم رفتم تستش کنم. ولی توی این مسیر یه حرکت باحال زدم!
اول بگم گروک 4 چیه و چرا باحاله:
- مدل جدید xAI با پنجره زمینه ۲ میلیون توکن
- سرعت پردازش بالا
- رایگان! (الان حداقل اینطوریه)
- برای تحلیل کد و حل مسائل پیچیده عالیه
یه افزونه VS Code به اسم Roo Code پیدا کردم!
( توی کرسر و اینا هم میشه نصبش کرد دیگه )
این افزونه مثل یه agent هوشمند عمل میکنه:
- فایلهاتو ایندکس میکنه و میشناسه
- میتونی تسکهای مشخص براش تعریف کنی و انجام بده
- از OpenRouter API پشتیبانی میکنه
- میتونی از مدلهای مختلف مثل همون گروک 4 توش استفاده کنی
بهترین بخش اینجاست که Roo Code از OpenRouter API پشتیبانی میکنه و گروک 4 هم توش هست.
یعنی میتونی توی IDE خودت یه agent هوشمند و رایگان داری که فایلهاتو میشناسه و میتونی براش تسک تعریف کنی!
من تست کردم باحال بود .کار راه بندازه و رایگان بدون محدودیت .
تستش ضرر نداره.
https://openrouter.ai/
https://roocode.com/
@DevTwitter | <Ali Arghyani/>
اخیراً گروک 4 رایگان شده و منم رفتم تستش کنم. ولی توی این مسیر یه حرکت باحال زدم!
اول بگم گروک 4 چیه و چرا باحاله:
- مدل جدید xAI با پنجره زمینه ۲ میلیون توکن
- سرعت پردازش بالا
- رایگان! (الان حداقل اینطوریه)
- برای تحلیل کد و حل مسائل پیچیده عالیه
یه افزونه VS Code به اسم Roo Code پیدا کردم!
( توی کرسر و اینا هم میشه نصبش کرد دیگه )
این افزونه مثل یه agent هوشمند عمل میکنه:
- فایلهاتو ایندکس میکنه و میشناسه
- میتونی تسکهای مشخص براش تعریف کنی و انجام بده
- از OpenRouter API پشتیبانی میکنه
- میتونی از مدلهای مختلف مثل همون گروک 4 توش استفاده کنی
بهترین بخش اینجاست که Roo Code از OpenRouter API پشتیبانی میکنه و گروک 4 هم توش هست.
یعنی میتونی توی IDE خودت یه agent هوشمند و رایگان داری که فایلهاتو میشناسه و میتونی براش تسک تعریف کنی!
من تست کردم باحال بود .کار راه بندازه و رایگان بدون محدودیت .
تستش ضرر نداره.
https://openrouter.ai/
https://roocode.com/
@DevTwitter | <Ali Arghyani/>
❤28👍14👎3🔥2
مرورگر هوشمند Comet رایگان در دسترس همه قرار گرفت
شرکت Perplexity اعلام کرده مرورگر مبتنی بر هوش مصنوعی آن، یعنی Comet که پیشتر تنها با اشتراکهای گرانقیمت در دسترس بود، اکنون بهصورت کاملاً رایگان و برای همیشه در اختیار عموم کاربران قرار دارد.
مرورگر Comet در جولای عرضه شد، اما فقط برای مشترکان طرح Perplexity Max با هزینه ۲۰۰ دلار در ماه در دسترس بود. بعدتر این امکان به برخی مشترکان طرح ارزانتر Pro و همچنین دعوتشدگان لیست انتظار (که حالا میلیونها نفر را شامل میشود) هم رسید. و حالا از این پس، استفاده از Comet برای همه رایگان خواهد بود و نیازی به هیچ اشتراکی ندارد.
مرورگر Comet در جولای عرضه شد، اما فقط برای مشترکان طرح Perplexity Max با هزینه ۲۰۰ دلار در ماه در دسترس بود. بعدتر این امکان به برخی مشترکان طرح ارزانتر Pro و همچنین دعوتشدگان لیست انتظار (که حالا میلیونها نفر را شامل میشود) هم رسید. و حالا از این پس، استفاده از Comet برای همه رایگان خواهد بود و نیازی به هیچ اشتراکی ندارد.
@DevTwitter | <Digiato/>
شرکت Perplexity اعلام کرده مرورگر مبتنی بر هوش مصنوعی آن، یعنی Comet که پیشتر تنها با اشتراکهای گرانقیمت در دسترس بود، اکنون بهصورت کاملاً رایگان و برای همیشه در اختیار عموم کاربران قرار دارد.
مرورگر Comet در جولای عرضه شد، اما فقط برای مشترکان طرح Perplexity Max با هزینه ۲۰۰ دلار در ماه در دسترس بود. بعدتر این امکان به برخی مشترکان طرح ارزانتر Pro و همچنین دعوتشدگان لیست انتظار (که حالا میلیونها نفر را شامل میشود) هم رسید. و حالا از این پس، استفاده از Comet برای همه رایگان خواهد بود و نیازی به هیچ اشتراکی ندارد.
مرورگر Comet در جولای عرضه شد، اما فقط برای مشترکان طرح Perplexity Max با هزینه ۲۰۰ دلار در ماه در دسترس بود. بعدتر این امکان به برخی مشترکان طرح ارزانتر Pro و همچنین دعوتشدگان لیست انتظار (که حالا میلیونها نفر را شامل میشود) هم رسید. و حالا از این پس، استفاده از Comet برای همه رایگان خواهد بود و نیازی به هیچ اشتراکی ندارد.
@DevTwitter | <Digiato/>
👍17❤5👎2🔥1
#کدبوک
یه کتاب پر از دستورالعمل آماده برای استفاده عملی از Rust:
- ساخت برنامههای کنسول، وب، شبکه و حتی سیستمهای جاسازیشده
- یادگیری مفاهیم پیشرفته مثل همزمانی، ماکروها و کد unsafe
- کار با Rust 2018 و امکانات جدیدش
- ترکیب Rust با زبانهای دیگه و استفاده در پروژههای واقعی
* فایل PDF این کتاب رو میتونید از کانال DevBooks که لینکش توی بیو هست دانلود کنید.
@DevTwitter
یه کتاب پر از دستورالعمل آماده برای استفاده عملی از Rust:
- ساخت برنامههای کنسول، وب، شبکه و حتی سیستمهای جاسازیشده
- یادگیری مفاهیم پیشرفته مثل همزمانی، ماکروها و کد unsafe
- کار با Rust 2018 و امکانات جدیدش
- ترکیب Rust با زبانهای دیگه و استفاده در پروژههای واقعی
* فایل PDF این کتاب رو میتونید از کانال DevBooks که لینکش توی بیو هست دانلود کنید.
@DevTwitter
👍9❤4
This media is not supported in your browser
VIEW IN TELEGRAM
این ابزار را نصب کنید. برای تبدیل صدا به متن فوق الاده هست. و کاملا هم لوکال هست. ویدیوی زیر را با صدا ببینید. فارسی هم دقتش خیلی خوبه.
Link: https://handy.computer
@DevTwitter | <Mehdi Allahyari/>
Link: https://handy.computer
@DevTwitter | <Mehdi Allahyari/>
👍32🔥5❤1👎1
کنترل اجرای همزمان با Idempotency و Global Lock در Redis
یکی از چالشهای بزرگ در سیستمهای پرترافیک، اجرای همزمان (Concurrency) درخواستهاست. وقتی چند درخواست همزمان به یک سرویس حساس مثل پرداخت یا رزرو ارسال میشوند، احتمال ایجاد داده تکراری یا Race Condition بسیار بالاست.
راهکار من: ترکیب Idempotency با قابلیت Global Lock در Redis
قابلیت Global Lock تضمین میکند که در هر لحظه فقط یک درخواست واقعی اجرا شود.
قابلیت Idempotency اطمینان میدهد که اگر درخواستهای مشابه همزمان ارسال شوند، نتیجه یکسان به کاربر برگردد و هیچ عملیات تکراری اجرا نشود.
من از این ترکیب استفاده کردم در بخش پرداخت ها و نتیجه اش عالی بود
@DevTwitter | <Mojtaba Zaferani/>
یکی از چالشهای بزرگ در سیستمهای پرترافیک، اجرای همزمان (Concurrency) درخواستهاست. وقتی چند درخواست همزمان به یک سرویس حساس مثل پرداخت یا رزرو ارسال میشوند، احتمال ایجاد داده تکراری یا Race Condition بسیار بالاست.
راهکار من: ترکیب Idempotency با قابلیت Global Lock در Redis
قابلیت Global Lock تضمین میکند که در هر لحظه فقط یک درخواست واقعی اجرا شود.
قابلیت Idempotency اطمینان میدهد که اگر درخواستهای مشابه همزمان ارسال شوند، نتیجه یکسان به کاربر برگردد و هیچ عملیات تکراری اجرا نشود.
من از این ترکیب استفاده کردم در بخش پرداخت ها و نتیجه اش عالی بود
@DevTwitter | <Mojtaba Zaferani/>
❤19
ویم یکی از ادیتور های ترمنیالیه که خیلی از افراد رو مجذوب لینوکس کرده اما یادگیریش کار راحتی برای همه نیست، اگه خواستین شروع کنید به یادگیری اینجارو چک کنید بهصورت فهرستوار و دستهبندیشده
http://github.com/mhinz/vim-galore
@DevTwitter | <Nimo/>
http://github.com/mhinz/vim-galore
@DevTwitter | <Nimo/>
👎22👍15❤6
اکستنشن جاب لنز و برای گوگل کروم نوشتم تا به جای شما بره تو ویکی تجربه سرچ کنه و گوشهی صفحه کاریابی (جابینجا، جاب ویژن) بهتون نشون بده. میتونه یه دستیار خیلی خوب برای کار پیدا کردن باشه.
https://github.com/MehdiHadizadeh/job-lens-extension
@DevTwitter | <Mehdyoo/>
https://github.com/MehdiHadizadeh/job-lens-extension
@DevTwitter | <Mehdyoo/>
1🔥49❤7👍5
Best tool for creating custom wordlists! Manipulate words as you need, without touching the disk.
https://github.com/glitchedgitz/cook
@DevTwitter | <xlr8/>
https://github.com/glitchedgitz/cook
@DevTwitter | <xlr8/>
👍13❤3👎3
This media is not supported in your browser
VIEW IN TELEGRAM
کمپانی IBM امروز یک سری مدل جدید Granite 4.0 رو منتشر کرده، جدیدترین سری مدلهای LLM کوچیکش!
این مدلها توی کارای agentic (مثل فراخوانی ابزار)، تحلیل اسناد، RAG و کلی چیز دیگه واقعاً خیلی خوبند. مدل Micro (3.4B) (یک مدل با ۳.۴ میلیارد پارامتر!) حتی میتونه ۱۰۰٪ به صورت لوکال توی مرورگرتون روی WebGPU اجرا بشه، با کمک Transformers.js!
https://huggingface.co/spaces/ibm-granite/Granite-4.0-WebGPU
@DevTwitter | <Mehdi Allahyari/>
این مدلها توی کارای agentic (مثل فراخوانی ابزار)، تحلیل اسناد، RAG و کلی چیز دیگه واقعاً خیلی خوبند. مدل Micro (3.4B) (یک مدل با ۳.۴ میلیارد پارامتر!) حتی میتونه ۱۰۰٪ به صورت لوکال توی مرورگرتون روی WebGPU اجرا بشه، با کمک Transformers.js!
https://huggingface.co/spaces/ibm-granite/Granite-4.0-WebGPU
@DevTwitter | <Mehdi Allahyari/>
👍20👎1
کامپیوترها برای نگهداری و نمایش کاراکترهای یک متن از یه فضای یک بایتی (معادل هشت بیت 0 یا 1) استفاده میکردن
این میزان فضا توی کامپیوتر میتونه شامل 255 حالت مختلف بشه
کامپیوترها برای نشانههای گرامری، حروف انگلیسی و عدد از استاندارد اسکی (ASCII) استفاده میکردن
این استاندارد آمریکایی میاد برای هر کاراکتر یه معادل عددی تعریف میکنه
مثلا کاراکتر A در اسکی معادل عدد 65هست
قرار گرفتن این اعداد پشت سر هم در کامپیوتر یک متن رو میسازه
مشابه این استاندارد معادل عددی برای پشتیبانی از تمام زبانهای دنیا به وجود اومد که یونیکد (Unicode) نام داره
کاراکترهای انگلیسی و اعداد انگلیسی توی یونیکد از همون اعداد استاندارد اسکی استفاده میکنن و در ادامه پشتیبانی از کاراکترهای بقیه زبانهای دنیا بهش اضافه میشه
یونیکد در حال حاضر دارای چیزی حدود 297,000 معادل عددی برای کاراکترهای مختلف از زبانهای مختلف، اموجیها و ... هست
فضای یک بایتی برای پشتیبانی از این میزان حالتهای مختلف کافی نیس
شما برای این جا دادن این میزان از حالتهای مختلف به شکل بیت کامیپوتر به حداقل سه بایت نیاز دارین
سه بایت میتونه تا حدود 16 میلیون عدد مختلف رو برای شما نگه داری کنه
حالا شما برای نگهداری یک متن که شامل کاراکترهای
یونیکد هست نیاز دارین 3 بایت برای هر کاراکتر اختصاص بدین
کاراکترهای انگلیسی تو یونیکد تنها یک بایت هم براشون کافیه ولی اگه شما برای یه متن انگلیسی، هر کاراکتر رو سه بایت در نظر بگیرین عملا به ازای هر کاراکتر انگلیسی دو بایت فضا رو هدر دادین
مثلا تو یه متن با ده هزار کاراکتر،
یه چیزی حدود 20 کیلوبایت فضای کامپیوتر رو هدر دادین
چه وقتی میخاین ازش استفاده کنین و توی رم هست و چه وقتی که روی هارد دیسک برای استفاده در آینده ذخیره شده
اینجاست که UTF-8 میتونه کمک کنه
این استاندارد که توسط یونیکد تعریف شده به جای اینکه بیاد فضای 3 بایتی به هر کاراکتر
اختصاص بده، میاد از 7 بیت راست یک بایت برای کاراکترهای اسکی استفاده میکنه
و برای کاراکترهای بعدی علاوه بر خود کاراکتر، تعداد بایت مصرف شده برای اون کاراکتر هم داخل بایت اول ذخیره میکنه
یعنی 128 کاراکتر اول اسکی به شکل عادی ذخیره میشن بدون تغییر خاصی با فقط یک بایت فضا
ولی برای کاراکترهای بعدی میاد و داخل بایت اول مشخص میکنه چه میزان فضا برای کاراکتر استفاده شده
این میزان فضا از یک بایت تا چهاربایت میتونه متغیر باشه
حالا چه شکلی اینکارو میکنه
تو یه بایت برای 128 عدد اولیه اسکی، بیت چپ همیشه صفر هست
اما وقتی بیت چپ یک میشه یعنی با یه کاراکتر UTF8 طرف هستیم
همونطور که گفتم هر کاراکتر توی UTF-8 میتونه از یک بایت تا چهاربایت متغیر باشه
کامپیوتر چطور اینو تشخیص میده؟
بیتهای 1 اولِ بایت رو میشماره تا به عدد 0 صفر برسه
یعنی اگه بایت اول با عدد باینری 110 شروع بشه، یعنی دوبایت فضا استفاده شده
اگه 1110 باشه سه بایت و ...
تو UTF-8 فضای بیتهای بایت اول بین خود کاراکتر و تعداد بایت تقسیم میشه و متغیره
اما تو بایتهای دوم و سوم و چهارم همیشه شش تا بیت راست برای خود کاراکتر استفاده میشه و دو بیت دیگه برای هندل کردن ارور تو utf-8 استفاده میشه
امیدوارم تونسته باشم با دانش ناقص خودم شما رو در مورد این انکدینگ رایج دنیای کامپیوتر آشنا کرده باشم
توضیحات دقیقتر:
https://en.wikipedia.org/wiki/UTF-8
سایت استفاده شده برای تست بایت UTF-8:
https://utf8-playground.netlify.app/
@DevTwitter | <Amir/>
این میزان فضا توی کامپیوتر میتونه شامل 255 حالت مختلف بشه
کامپیوترها برای نشانههای گرامری، حروف انگلیسی و عدد از استاندارد اسکی (ASCII) استفاده میکردن
این استاندارد آمریکایی میاد برای هر کاراکتر یه معادل عددی تعریف میکنه
مثلا کاراکتر A در اسکی معادل عدد 65هست
قرار گرفتن این اعداد پشت سر هم در کامپیوتر یک متن رو میسازه
مشابه این استاندارد معادل عددی برای پشتیبانی از تمام زبانهای دنیا به وجود اومد که یونیکد (Unicode) نام داره
کاراکترهای انگلیسی و اعداد انگلیسی توی یونیکد از همون اعداد استاندارد اسکی استفاده میکنن و در ادامه پشتیبانی از کاراکترهای بقیه زبانهای دنیا بهش اضافه میشه
یونیکد در حال حاضر دارای چیزی حدود 297,000 معادل عددی برای کاراکترهای مختلف از زبانهای مختلف، اموجیها و ... هست
فضای یک بایتی برای پشتیبانی از این میزان حالتهای مختلف کافی نیس
شما برای این جا دادن این میزان از حالتهای مختلف به شکل بیت کامیپوتر به حداقل سه بایت نیاز دارین
سه بایت میتونه تا حدود 16 میلیون عدد مختلف رو برای شما نگه داری کنه
حالا شما برای نگهداری یک متن که شامل کاراکترهای
یونیکد هست نیاز دارین 3 بایت برای هر کاراکتر اختصاص بدین
کاراکترهای انگلیسی تو یونیکد تنها یک بایت هم براشون کافیه ولی اگه شما برای یه متن انگلیسی، هر کاراکتر رو سه بایت در نظر بگیرین عملا به ازای هر کاراکتر انگلیسی دو بایت فضا رو هدر دادین
مثلا تو یه متن با ده هزار کاراکتر،
یه چیزی حدود 20 کیلوبایت فضای کامپیوتر رو هدر دادین
چه وقتی میخاین ازش استفاده کنین و توی رم هست و چه وقتی که روی هارد دیسک برای استفاده در آینده ذخیره شده
اینجاست که UTF-8 میتونه کمک کنه
این استاندارد که توسط یونیکد تعریف شده به جای اینکه بیاد فضای 3 بایتی به هر کاراکتر
اختصاص بده، میاد از 7 بیت راست یک بایت برای کاراکترهای اسکی استفاده میکنه
و برای کاراکترهای بعدی علاوه بر خود کاراکتر، تعداد بایت مصرف شده برای اون کاراکتر هم داخل بایت اول ذخیره میکنه
یعنی 128 کاراکتر اول اسکی به شکل عادی ذخیره میشن بدون تغییر خاصی با فقط یک بایت فضا
ولی برای کاراکترهای بعدی میاد و داخل بایت اول مشخص میکنه چه میزان فضا برای کاراکتر استفاده شده
این میزان فضا از یک بایت تا چهاربایت میتونه متغیر باشه
حالا چه شکلی اینکارو میکنه
تو یه بایت برای 128 عدد اولیه اسکی، بیت چپ همیشه صفر هست
اما وقتی بیت چپ یک میشه یعنی با یه کاراکتر UTF8 طرف هستیم
همونطور که گفتم هر کاراکتر توی UTF-8 میتونه از یک بایت تا چهاربایت متغیر باشه
کامپیوتر چطور اینو تشخیص میده؟
بیتهای 1 اولِ بایت رو میشماره تا به عدد 0 صفر برسه
یعنی اگه بایت اول با عدد باینری 110 شروع بشه، یعنی دوبایت فضا استفاده شده
اگه 1110 باشه سه بایت و ...
تو UTF-8 فضای بیتهای بایت اول بین خود کاراکتر و تعداد بایت تقسیم میشه و متغیره
اما تو بایتهای دوم و سوم و چهارم همیشه شش تا بیت راست برای خود کاراکتر استفاده میشه و دو بیت دیگه برای هندل کردن ارور تو utf-8 استفاده میشه
امیدوارم تونسته باشم با دانش ناقص خودم شما رو در مورد این انکدینگ رایج دنیای کامپیوتر آشنا کرده باشم
توضیحات دقیقتر:
https://en.wikipedia.org/wiki/UTF-8
سایت استفاده شده برای تست بایت UTF-8:
https://utf8-playground.netlify.app/
@DevTwitter | <Amir/>
👍64❤10👎2
هوک جدید Next.js که میتونه چند لول UX اپ شمارو بهتر کنه.
اسمش useLinkStatus هست و میاد و وضعیت لودینگ کامپوننت Link والدش رو مشخص میکنه و اگر درحال لودینگ بود pending رو true بر میگردونه.
به این صورت دغدغه بزرگ لودینگ پیج ها حل میشه و متونیم به راحتی در UI به کاربر نمایشش بدیم.
لینک رفرنس:
https://nextjs.org/docs/app/api-reference/functions/use-link-status
@DevTwitter | <Farzad Vahdati/>
اسمش useLinkStatus هست و میاد و وضعیت لودینگ کامپوننت Link والدش رو مشخص میکنه و اگر درحال لودینگ بود pending رو true بر میگردونه.
به این صورت دغدغه بزرگ لودینگ پیج ها حل میشه و متونیم به راحتی در UI به کاربر نمایشش بدیم.
لینک رفرنس:
https://nextjs.org/docs/app/api-reference/functions/use-link-status
@DevTwitter | <Farzad Vahdati/>
👍49👎2
در سیستمهای توزیعشده همیشه یه نگرانی اساسی وجود داره:
اگر یکی از سرویسها بیصدا از کار بیفته، بقیه چطور متوجه میشن؟
اینجاست که Heartbeat Pattern وارد عمل میشه
یه سیگنال ساده و دورهای که تضمین میکنه سیستم بفهمه هر جزء هنوز زندهست یا نه.
کجا استفاده میشه؟
توی Load Balancerها برای تشخیص سرورهای سالم
توی Kubernetes (liveness و readiness probes)
توی دیتابیسهای توزیعشده مثل Cassandra یا MongoDB
من توی مقالهی جدیدم در Medium، این الگو رو توضیح دادم — از تعریف و کاربردها تا چالشها و یه نمونه پیادهسازی با Go.
متن کامل مقاله:
https://medium.com/@a.mousavi/understanding-the-heartbeat-pattern-in-distributed-systems-5d2264bbfda6
سورس کد کامل:
https://github.com/arash-mosavi/go-test-heartbeat-pattern
@DevTwitter | <Arash Mousavi/>
اگر یکی از سرویسها بیصدا از کار بیفته، بقیه چطور متوجه میشن؟
اینجاست که Heartbeat Pattern وارد عمل میشه
یه سیگنال ساده و دورهای که تضمین میکنه سیستم بفهمه هر جزء هنوز زندهست یا نه.
کجا استفاده میشه؟
توی Load Balancerها برای تشخیص سرورهای سالم
توی Kubernetes (liveness و readiness probes)
توی دیتابیسهای توزیعشده مثل Cassandra یا MongoDB
من توی مقالهی جدیدم در Medium، این الگو رو توضیح دادم — از تعریف و کاربردها تا چالشها و یه نمونه پیادهسازی با Go.
متن کامل مقاله:
https://medium.com/@a.mousavi/understanding-the-heartbeat-pattern-in-distributed-systems-5d2264bbfda6
سورس کد کامل:
https://github.com/arash-mosavi/go-test-heartbeat-pattern
@DevTwitter | <Arash Mousavi/>
👍20👎2
کامپایلرهای درجا (JIT Compilers) در JVM چگونه پرفورمنس برنامهها را بهبود میدهند؟
میدونیم که برنامههای نوشته شده با جاوا، ابتدا به بایتکد (bytecode) کامپایل میشن و JVM بایتکدها رو بهصورت مفسری اجرا میکنه. این فرآیند نسبت به این که کدهای جاوا مستقیم به زبان ماشین کامپایل و اجرا بشن کندتره اما وجود همین مکانیزمه که جاوا رو کراسپلتفرم میکنه.
برای حل این مساله، دو کامپایلر درجا به نامهای C1 و C2 در JVM وجود دارن. وظیفه این کامپایلرها بهطور خلاصه اینه که قسمتهایی از برنامه که بیشتر از میزان مشخصی اجرا میشن (اصطلاحا نقاط داغ) رو به زبان ماشین کامپایل میکنن تا اون قسمتها دیگه بهصورت مفسری اجرا نشن. کدهای ماشینی که این کامپایلرها تولید میکنن در محلی از حافظه به نام Code Cache ذخیره میشه.
واحد کامپایل برای کامپایلرهای درجا، متده. تعداد دفعاتی که یه متد اجرا میشه توسط JVM ذخیره میشه و وقتی این تعداد از میزان مشخصی بالاتر بره، کامپایلرهای درجا وارد عمل میشن.
نحوه عملکرد این دو کامپایلر بهطور خلاصه به این صورته:
۱- متد بهصورت پیشفرض، مفسری اجرا میشه.
۲- وقتی تعداد دفعات اجرای متد از مقدار خاصی بیشتر بشه، کامپایلر C1 اون متد رو به زبان ماشین کامپایل میکنه. همچنین C1 دستورهایی رو در متد کامپایل شده قرار میده تا اطلاعاتی رو درباره جزئیات عملکرد متد در طول اجرای برنامه جمعآوری کنن (پروفایلینگ). این اطلاعات بعدا توسط C2 استفاده میشن.
۳- اگر متد همچنان زیاد اجرا بشه یعنی واقعا متد پرکاربرد و اصطلاحا داغیه. اینجا C2 وارد عمل میشه و متد رو دوباره به کد ماشین کامپایل میکنه. اما این بار C2 از اطلاعاتی که از اجرای متد در طول برنامه جمعآوری شده (با استفاده از دستورایی که C1 به متد اضافه کرده بود) استفاده میکنه و با این اطلاعات میتونه بهینهترین و سریعترین کد ماشین ممکن رو تولید کنه.
پس ممکنه متدی که کم اجرا میشه هیچوقت به کد ماشین کامپایل نشه. یا متدی با C1 کامپایل بشه اما به اندازهای زیاد اجرا نشه که C2 کامپایلش کنه. این که دقیقا بعد از چندبار اجرای یه متد این دوتا کامپایلر وارد عمل بشن قابل تنظیمه اما مقادیر پیشفرضی که دارن احتمالا برای اکثر برنامهها مناسبه و نیازی به تغییرشون نیست.
@DevTwitter | <Mostafa Nasiri/>
میدونیم که برنامههای نوشته شده با جاوا، ابتدا به بایتکد (bytecode) کامپایل میشن و JVM بایتکدها رو بهصورت مفسری اجرا میکنه. این فرآیند نسبت به این که کدهای جاوا مستقیم به زبان ماشین کامپایل و اجرا بشن کندتره اما وجود همین مکانیزمه که جاوا رو کراسپلتفرم میکنه.
برای حل این مساله، دو کامپایلر درجا به نامهای C1 و C2 در JVM وجود دارن. وظیفه این کامپایلرها بهطور خلاصه اینه که قسمتهایی از برنامه که بیشتر از میزان مشخصی اجرا میشن (اصطلاحا نقاط داغ) رو به زبان ماشین کامپایل میکنن تا اون قسمتها دیگه بهصورت مفسری اجرا نشن. کدهای ماشینی که این کامپایلرها تولید میکنن در محلی از حافظه به نام Code Cache ذخیره میشه.
واحد کامپایل برای کامپایلرهای درجا، متده. تعداد دفعاتی که یه متد اجرا میشه توسط JVM ذخیره میشه و وقتی این تعداد از میزان مشخصی بالاتر بره، کامپایلرهای درجا وارد عمل میشن.
نحوه عملکرد این دو کامپایلر بهطور خلاصه به این صورته:
۱- متد بهصورت پیشفرض، مفسری اجرا میشه.
۲- وقتی تعداد دفعات اجرای متد از مقدار خاصی بیشتر بشه، کامپایلر C1 اون متد رو به زبان ماشین کامپایل میکنه. همچنین C1 دستورهایی رو در متد کامپایل شده قرار میده تا اطلاعاتی رو درباره جزئیات عملکرد متد در طول اجرای برنامه جمعآوری کنن (پروفایلینگ). این اطلاعات بعدا توسط C2 استفاده میشن.
۳- اگر متد همچنان زیاد اجرا بشه یعنی واقعا متد پرکاربرد و اصطلاحا داغیه. اینجا C2 وارد عمل میشه و متد رو دوباره به کد ماشین کامپایل میکنه. اما این بار C2 از اطلاعاتی که از اجرای متد در طول برنامه جمعآوری شده (با استفاده از دستورایی که C1 به متد اضافه کرده بود) استفاده میکنه و با این اطلاعات میتونه بهینهترین و سریعترین کد ماشین ممکن رو تولید کنه.
پس ممکنه متدی که کم اجرا میشه هیچوقت به کد ماشین کامپایل نشه. یا متدی با C1 کامپایل بشه اما به اندازهای زیاد اجرا نشه که C2 کامپایلش کنه. این که دقیقا بعد از چندبار اجرای یه متد این دوتا کامپایلر وارد عمل بشن قابل تنظیمه اما مقادیر پیشفرضی که دارن احتمالا برای اکثر برنامهها مناسبه و نیازی به تغییرشون نیست.
@DevTwitter | <Mostafa Nasiri/>
❤17🔥5👍3👎1
گیتهاب نسخه سه بعدی و قابل چاپ رابرداک رو برای چاپ توی پرینتر سه بعدی به صورت متن باز و رایگان گذاشته:
https://github.com/martinwoodward/octoprints
@DevTwitter | <Mohsen Shabanian/>
https://github.com/martinwoodward/octoprints
@DevTwitter | <Mohsen Shabanian/>
👍22❤5