DevTwitter | توییت برنامه نویسی – Telegram
DevTwitter | توییت برنامه نویسی
23.6K subscribers
4.36K photos
357 videos
6 files
4.1K links
توییت های برنامه نویسی و طراحی وب :)

@dvtwi

Hashtags:
devtwitter.t.me/5

DevBooks Channel:
https://news.1rj.ru/str/+AYbOl75CLNYxY2U0

Github:
https://github.com/DevTwitter

X:
https://x.com/devtwittir
Download Telegram
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/>
👍21👎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/>
👍7111👎2
هوک جدید Next.js که میتونه چند لول UX اپ شمارو بهتر کنه.
اسمش useLinkStatus هست و میاد و وضعیت لودینگ کامپوننت Link والدش رو مشخص میکنه و اگر درحال لودینگ بود pending رو true بر میگردونه.
به این صورت دغدغه بزرگ لودینگ پیج ها حل میشه و متونیم به راحتی در UI به کاربر نمایشش بدیم.
لینک رفرنس:
https://nextjs.org/docs/app/api-reference/functions/use-link-status

@DevTwitter | <Farzad Vahdati/>
👍51👎2🔥1
در سیستم‌های توزیع‌شده همیشه یه نگرانی اساسی وجود داره:
اگر یکی از سرویس‌ها بی‌صدا از کار بیفته، بقیه چطور متوجه می‌شن؟
اینجاست که 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🔥1
کامپایلرهای درجا (JIT Compilers) در JVM چگونه پرفورمنس برنامه‌ها را بهبود می‌دهند؟
می‌دونیم که برنامه‌های نوشته شده با جاوا، ابتدا به بایت‌کد (bytecode) کامپایل میشن و JVM بایت‌کدها رو به‌صورت مفسری اجرا می‌کنه. این فرآیند نسبت به این که کدهای جاوا مستقیم به زبان ماشین کامپایل و اجرا بشن کندتره اما وجود همین مکانیزمه که جاوا رو کراس‌پلتفرم می‌کنه.
برای حل این مساله، دو کامپایلر درجا به نام‌های C1 و C2 در JVM وجود دارن. وظیفه این کامپایلرها به‌طور خلاصه اینه که قسمت‌هایی از برنامه که بیشتر از میزان مشخصی اجرا میشن (اصطلاحا نقاط داغ) رو به زبان ماشین کامپایل می‌کنن تا اون قسمت‌ها دیگه به‌صورت مفسری اجرا نشن. کدهای ماشینی که این کامپایلرها تولید می‌کنن در محلی از حافظه به نام Code Cache ذخیره میشه.
واحد کامپایل برای کامپایلرهای درجا، متده. تعداد دفعاتی که یه متد اجرا میشه توسط JVM ذخیره میشه و وقتی این تعداد از میزان مشخصی بالاتر بره، کامپایلرهای درجا وارد عمل میشن.
نحوه عملکرد این دو کامپایلر به‌طور خلاصه به این صورته:
۱- متد به‌صورت پیش‌فرض، مفسری اجرا میشه.
۲- وقتی تعداد دفعات اجرای متد از مقدار خاصی بیشتر بشه، کامپایلر C1 اون متد رو به زبان ماشین کامپایل می‌کنه. همچنین C1 دستورهایی رو در متد کامپایل شده قرار میده تا اطلاعاتی رو درباره جزئیات عملکرد متد در طول اجرای برنامه جمع‌آوری کنن (پروفایلینگ). این اطلاعات بعدا توسط C2 استفاده میشن.
۳- اگر متد همچنان زیاد اجرا بشه یعنی واقعا متد پرکاربرد و اصطلاحا داغیه. اینجا C2 وارد عمل میشه و متد رو دوباره به کد ماشین کامپایل می‌کنه. اما این بار C2 از اطلاعاتی که از اجرای متد در طول برنامه جمع‌آوری شده (با استفاده از دستورایی که C1 به متد اضافه کرده بود) استفاده می‌کنه و با این اطلاعات میتونه بهینه‌ترین و سریع‌ترین کد ماشین ممکن رو تولید کنه.
پس ممکنه متدی که کم اجرا میشه هیچوقت به کد ماشین کامپایل نشه. یا متدی با C1 کامپایل بشه اما به اندازه‌ای زیاد اجرا نشه که C2 کامپایلش کنه. این که دقیقا بعد از چندبار اجرای یه متد این دوتا کامپایلر وارد عمل بشن قابل تنظیمه اما مقادیر پیش‌فرضی که دارن احتمالا برای اکثر برنامه‌ها مناسبه و نیازی به تغییرشون نیست.

@DevTwitter | <Mostafa Nasiri/>
20🔥6👍3👎1
گیت‌هاب نسخه سه بعدی و قابل چاپ رابرداک رو برای چاپ توی پرینتر سه بعدی به صورت متن باز و رایگان گذاشته:
https://github.com/martinwoodward/octoprints

@DevTwitter | <Mohsen Shabanian/>
👍235🔥1
Qwen dropped smaller (competitive) VLM - competitive to GPT-5 Mini

> 30B A3B MoE
> Reasoning and non-reasoning
> 256K context (can go up to 1M)
> Multilingual (32 languages)

https://huggingface.co/Qwen/Qwen3-VL-30B-A3B-Instruct

@DevTwitter | <Vaibhav (VB) Srivastav/>
👍7🔥3
مبحث جذاب و پر کاربرد Accessor در لاراول

فرض کنید، قصد دارید یکسری از دیتا هارو قبل از اینکه به دست کاربر برسه، شامل تغییراتی بشه به عنوان مثال میخوایید عکس هارو لینک دار کنید، به راحتی میتونید اینکارو با accessor ها در مدل مربوطه انجام بدین

به شدت شبیه cast ها هستن ولی یک تفاوت جزئی اما مهم دارن، اونم اینه که از cast ها معمولا برای تغییر دیتا تایپ مورد نظر استفاده میشه

حالا چه مزیت هایی برای شما داره؟؟! اینکه دیگه نیاز نیست در بیزینیس لاجیک خودتون دیتا رو map و یا حتی transform کنید که باعث میشه کد بیس اصلی مرتب و تمیز تر باشه

نکته : accessor ها تا حدودی سنگین هستن، پس عملیات های پیچیده رو به هیچ عنوان در این متد ها قرار ندین


@DevTwitter | <Mojtaba Zaferani/>
👍12👎53🔥1
به تازگی یه پروژه ای رو دیدم به اسم node-hooker که سازندش اومده از هوک های wordpress الهام گرفته و یه چیزی شبیه به اونارو برای ران تایم node نوشته
استفاده ازش میتونه وابستگی بخش های مختلف رو کمتر کنه و این امکان رو بده که باهاش یه معماری پلاگین محور بتونیم پیاده کنیم
اگه علاقه مند بودین یه سری به این پروژه بزنین.

https://mamedul.github.io/node-hooker/

@DevTwitter | <Ali Nazari/>
👍15👎53🔥1
کتابخونهٔ «hazm» آپدیت نمی‌شه و با نسخه‌های جدید پایتون و کتابخانه‌هایی مثل pandas و langchain سازگار نیست.
اما کتابخونهٔ جدیدتری توسعه داده شده به نام «شِکَر». کتابخانه‌ای مدرن، به‌روز و هماهنگ با آخرین نسخه‌های پایتون برای پردازش متن فارسی.

https://github.com/amirivojdan/shekar

@DevTwitter | <Ali Moameri/>
53👎1🔥1
Angular 20 Project Structure — Clean, Scalable & Future-Ready

With Angular 20, structuring your project well is as important as writing clean code. A well-organized folder structure makes your app scalable, testable, and maintainable. Here’s a recommended layout for modern Angular apps:

Highlights in Angular 20
- app.config.ts instead of app.module.ts (module-less bootstrap)
- Standalone components as the default approach
- Signals & fine-grained reactivity support
- Better lazy-loading structure for features

Pro tip: Keep core for singletons and shared for reusables. Every feature should live in features/ for clean boundaries.

@DevTwitter | <Rania Chaeib/>
👍9🔥5👎1
داشتم با N8N کار میکردم که دیدم یه سری چیزا نداره. با کامیونیتی نود هاش آشنا شدم. دیدم بازم یه چیزی کمه. گفتم بزنیم چرا که نه!
این شد که احتمالا جامع ترین پکیج ایسنتا رو زدم.

https://github.com/Msameim181/n8n-nodes-instagram-integrations

https://npmjs.com/package/n8n-nodes-instagram-integrations

@DevTwitter | <Mohammad Mahdi Samei/>
👎32👍136🔥1
مدت ها از notion استفاده کردم ولی حدود یک سال که کوچ کردم به obsidian
از خیلی جهت ها از notion بهتره امکاناتش خیلی بیشتر ، سریع تره و دردسر های تحریم نداره و افلاین هم کار میکنه
چون متن بازه پلاگین های خیلی زیادی داره و حتی خودتون هم میتونید براش بنویسید
https://github.com/obsidianmd

@DevTwitter | <white wolf/>
👍4510🔥5👎3
تقریبا ۹ ماه پیش یه پکیج فلاتر ساختم به اسم ParsValidator برای استفاده توی پروژه هام.
یه کتابخونه سبک و مفیده که یسری ابزار های باحال رو به پروژه هاتون اضافه میکنه و سورستون رو تمیز تر نگه میداره :)
علاوه بر کلی قابلیت های دیگه، امکاناتی مثل اعتبارسنجی کدملی و کدپستی، گرفتن محل صدور با کدملی و همچین ولیدیشن روی کارت بانکی و گرفتن آیکون بانک ها، اعتبارسنجی اپراتور های موبایل و ایکون هاشون رو هم داره. دیگه چی میخوایید؟
تازه کلی امکانات جدید هم تو راهه
حتما یه سر بزنید و اگه ازش خوشتون اومد:
بهش ستاره بدید و اگه دوست داشتید کانتریبیوت کنید
لینک‌ها:

GitHub:
https://github.com/MohammadTaghipour/pars_validator

Pub:
https://pub.dev/packages/pars_validator

@DevTwitter | <Mohammad Taghipour/>
32👍4🔥1
ابزار Dock مثل یک نوار ابزار شیک برای دسکتاپه؛
چیزی شبیه به اون چیزی که توی macOS پایین صفحه می‌بینید.

ابزار Cairo-Dock یکی از قدیمی‌ترین و پرامکانات‌ترین Dockها توی لینوکسه و نسخه 3.6 تازه منتشر شده
https://github.com/Cairo-Dock/cairo-dock-core

@DevTwitter | <MehrdadLinux/>
👎26👍3🔥1
تا حالا به این فکر کردید که فرق بین کولیشن utf8mb4_0900_ai_ci و utf8mb4_bin دقیقا چیه؟ یا همینطور بقیه کولیشن ها؟

کولیشن utf8mb4_0900_ai_ci: کولیشن پیش‌فرض MySQL 8 برای utf8mb4.
معنی اسم:
0900 → بر اساس Unicode 9.0.0
ai → accent insensitive (تفاوت حروف با/بدون لهجه رو نادیده می‌گیره)
ci → case insensitive (تفاوت حروف بزرگ و کوچک رو نادیده می‌گیره)
یعنی:
'a' = 'A'
'é' = 'e'
پس برای سرچ و مقایسه، راحت‌تره چون نرمال‌سازی بیشتری می‌کنه.

کولیشن utf8mb4_bin: کولیشن باینری برای utf8mb4.
اینجا همه‌چیز دقیقا بایت به بایت مقایسه میشه.
یعنی case-sensitive و accent-sensitive:
'a' != 'A'
'é' != 'e'
معمولا برای جاهایی که شناسه‌ها (ID، Token، UUID، Hash، آدرس والت و ...) ذخیره می‌شن استفاده میشه، چون اونجا نباید نرمال‌سازی بشه.

خلاصه:
کولیشن utf8mb4_0900_ai_ci: مناسب برای داده‌های متنی کاربر (نام، توضیحات، محتوا) → جستجو راحت‌تر.

کولیشن utf8mb4_bin: مناسب برای داده‌های حساس به حروف/بایت (شناسه، کلید، رمز، UUID، مقایسه دقیق).

یک قانون عملی:
متن قابل خواندن توسط کاربر → utf8mb4_0900_ai_ci
داده‌ی تکنیکال/یونیک → utf8mb4_bin

@DevTwitter | <Abbas Goudarzi/>
👍284🔥3
#کدبوک

دانشگاه MIT یه کتاب رایگان داده بیرون درباره‌ی مبانی (Deep Learning) که پر از نکته‌ست

توش همه چی هست: از ریاضیات DL گرفته تا روش‌های آموزش مدل، شبکه‌های CNN، شبکه‌های گرافی (GNN) و حتی ترنسفورمرها!
هم تئوری داره، هم کد، هم اسلاید — یعنی هر چی لازمه یه مهندس هوش مصنوعی واقعی شی.

لینک دانلود اینجاست:
https://udlbook.github.io/udlbook/

* همچنین فایل PDF این کتاب رو میتونید از کانال DevBooks که لینکش توی بیو هست دانلود کنید.

@DevTwitter | <Mohsen Rad/>
23🔥3👍2👎1
بلکه به درد بخوره

@DevTwitter
36👎8👍5🔥1
اگه فرانت‌دولوپرین باید وبسایتتونو روی نسخه‌های قبلی کروم تست کنین!

تا حالا پیش اومده که یه باگ فقط روی نسخه قدیمی‌تر کروم رخ بده و شما ساعت‌ها وقتتونو صرف کنین تا یه نسخه قدیمی کروم پیدا کنید؟
بعد از سال‌ها استفاده از nvm برای Node و gvm برای Go، یه سوال به ذهنم رسید: چرا ابزاری برای مدیریت نسخه‌های مختلف کروم وجود نداره؟
برای همین chvm رو ساختم!

چیه این chvm؟
یه CLI tool سبک و سریع که به شما امکان میده:
- نسخه‌های مختلف Chromium رو نصب و مدیریت کنید
- با یه دستور ساده بین نسخه‌ها جابه‌جا بشید
- برای هر نسخه یه پروفایل جداگانه داشته باشید
- می‌تونید CORS رو برای توسعه غیرفعال کنید

نکات مهم:
- فعلا نسخه‌های 92 تا آخرین ورژن Chromium رو پشتیبانی می‌کنه
- همه چی تو ~/.chvm ذخیره میشه
- فعلا فقط روی macOS با ARM (Apple Silicon) کار می‌کنه، ولی ساپورت پلتفرم‌های دیگه تو راهه!

پروژه open-source هست و هنوز unstable! اگه دوست داشتین روش کارکنین یا فیدبکی برای بهبودش داشتین خیلی خوشحال میشم کانتریبیوت کنید.

توضیحات نصب و استفاده تو ریپوی گیتهاب:
https://github.com/amirkabiri/chvm

@DevTwitter | <Amir Kabiri/>
🔥477👍3👎3
This media is not supported in your browser
VIEW IN TELEGRAM
گوگل دوباره داره برای دوره ۵ روزه AI Agents ثبت نام میکنه که از ۱۰ نوامبر شروع میشه. دوره قبلیش لینکش تو همین وب سایت هست که میتونید برید و همه مطالبش را استفاده کنید. ولی دوره جدید موضوعاتش خیلی خیلی جالبند. حتما ثبت نام کنید.
Link: https://rsvp.withgoogle.com/events/google-ai-agents-intensive_2025

@DevTwitter | <Mehdi Allahyari/>
15👎5👍3