Syntax | سینتکس
رفتن به کانال در Telegram
Focus: Web Lan: Python & Go Website: https://syntaxfa.ir Quick connect: https://quick-connect.syntaxfa.ir Github: https://github.com/syntaxfa Group: https://t.me/Syntax_fa_group
نمایش بیشتر3 260
مشترکین
+424 ساعت
+47 روز
-330 روز
در حال بارگذاری دادهها
کانالهای مشابه
ابر برچسبها
اشارات ورودی و خروجی
---
---
---
---
---
---
جذب مشترکین
اکتبر '26اکتبر '26
اکتبر '26
+53
در 2 کانالها
سپتامبر '26
+127
در 2 کانالها
Get PRO
اوت '26
+102
در 0 کانالها
Get PRO
ژوئیه '26
+182
در 3 کانالها
Get PRO
ژوئن '26
+134
در 2 کانالها
Get PRO
مه '26
+71
در 0 کانالها
Get PRO
آوریل '26
+27
در 0 کانالها
Get PRO
مارس '26
+11
در 1 کانالها
Get PRO
فوریه '26
+50
در 3 کانالها
Get PRO
ژانویه '26
+25
در 0 کانالها
Get PRO
دسامبر '25
+64
در 3 کانالها
Get PRO
نوامبر '25
+95
در 3 کانالها
Get PRO
اکتبر '25
+56
در 0 کانالها
Get PRO
سپتامبر '25
+54
در 2 کانالها
Get PRO
اوت '25
+49
در 1 کانالها
Get PRO
ژوئیه '25
+94
در 2 کانالها
Get PRO
ژوئن '25
+140
در 0 کانالها
Get PRO
مه '25
+69
در 2 کانالها
Get PRO
آوریل '25
+44
در 2 کانالها
Get PRO
مارس '25
+74
در 1 کانالها
Get PRO
فوریه '25
+148
در 2 کانالها
Get PRO
ژانویه '25
+168
در 3 کانالها
Get PRO
دسامبر '24
+120
در 2 کانالها
Get PRO
نوامبر '24
+120
در 1 کانالها
Get PRO
اکتبر '24
+125
در 1 کانالها
Get PRO
سپتامبر '24
+84
در 1 کانالها
Get PRO
اوت '24
+158
در 4 کانالها
Get PRO
ژوئیه '24
+184
در 1 کانالها
Get PRO
ژوئن '24
+288
در 1 کانالها
Get PRO
مه '24
+91
در 1 کانالها
Get PRO
آوریل '24
+103
در 0 کانالها
Get PRO
مارس '24
+142
در 3 کانالها
Get PRO
فوریه '24
+222
در 3 کانالها
Get PRO
ژانویه '24
+593
در 1 کانالها
Get PRO
دسامبر '23
+597
در 1 کانالها
Get PRO
نوامبر '23
+522
در 3 کانالها
Get PRO
اکتبر '23
+242
در 3 کانالها
Get PRO
سپتامبر '23
+406
در 0 کانالها
| تاریخ | رشد مشترکین | اشارات | کانالها | |
| 28 اکتبر | +4 | |||
| 27 اکتبر | +2 | |||
| 26 اکتبر | +3 | |||
| 25 اکتبر | +1 | |||
| 24 اکتبر | 0 | |||
| 23 اکتبر | +3 | |||
| 22 اکتبر | 0 | |||
| 21 اکتبر | +2 | |||
| 20 اکتبر | +2 | |||
| 19 اکتبر | 0 | |||
| 18 اکتبر | +3 | |||
| 17 اکتبر | 0 | |||
| 16 اکتبر | +3 | |||
| 15 اکتبر | +1 | |||
| 14 اکتبر | +1 | |||
| 13 اکتبر | +4 | |||
| 12 اکتبر | 0 | |||
| 11 اکتبر | +2 | |||
| 10 اکتبر | +2 | |||
| 09 اکتبر | +1 | |||
| 08 اکتبر | +1 | |||
| 07 اکتبر | +6 | |||
| 06 اکتبر | +1 | |||
| 05 اکتبر | +3 | |||
| 04 اکتبر | +3 | |||
| 03 اکتبر | +3 | |||
| 02 اکتبر | +1 | |||
| 01 اکتبر | +1 |
پستهای کانال
🚨 PHP2Shell؛ آسیبپذیری بحرانی در هستهی PHP
تصور کنید سرور شما بدون هیچ باگ مستقیمی در کد اپلیکیشن، از راه دور قابل نفوذ باشه!
تیم تحقیقاتی Wiz چند آسیبپذیری جدی در هستهی PHP کشف کرده که میتونن به مهاجم اجازه بدن بدون احراز هویت، روی سرور کد اجرا کنه یا اطلاعات حساس حافظه رو بخونه.
🔍 ماجرا چیه؟
🔹 دو شناسهی آسیبپذیری:
CVE-2026-109618
CVE-2026-109619
🔹 تأثیر احتمالی:
• اجرای کد از راه دور (RCE)
• افشای اطلاعات حساس مثل Password، API Key و Token
• به خطر افتادن سرویسهای مبتنی بر PHP
🔹 نکتهی ترسناک:
این آسیبپذیریها در خود PHP قرار دارن؛ بنابراین حتی WordPress، Drupal و Joomla هم میتونن در معرض خطر قرار بگیرن، بدون اینکه الزاماً باگ مستقلی در کد اپلیکیشن وجود داشته باشه.
🤖 نقش AI چی بود؟
به گفتهی Wiz، مدلهای پیشرفتهی هوش مصنوعی به کشف آسیبپذیریها و تبدیل اونها به اکسپلویت عملی کمک کردن؛ کاری که قبلاً میتونست به تخصص و زمان بسیار زیادی نیاز داشته باشه.
✅ چه کار باید کرد؟
• نسخهی PHP رو بررسی و به نسخهی اصلاحشده ارتقا بدید.
• اگر امکان آپدیت فوری ندارید، راهکارهای کاهش ریسک ارائهشده توسط تیم PHP و ارائهدهندهی زیرساختتون رو بررسی کنید.
• لاگها رو برای درخواستهای غیرعادی، خطاهای 500 تکرارشونده و رفتار مشکوک پردازشهای PHP بررسی کنید.
⚠️ آپدیت امنیتی، مهمترین اقدام برای رفع ریشهای این آسیبپذیریهاست.
📎 منبع و جزئیات فنی:
https://www.wiz.io/blog/php2shell-php-rce
#CyberSecurity #PHP #RCE #InfoSec #AI #AppSec
@Syntax_fa
| 2 | یچیزی که خیلی توجه منو جلب کرده مدل های تصمیم گیری هستش decision models
بعضی وقت تو یه سری سناریو ها نیازه که بر اساس وضعیت، بین چند تا گزینه انتخاب کنی.
با desicion model مثل gpt sol decision با قدرت درک بالا میتونید تصمیمات خیلی دقیقی تو کسری از ثانیه بگیرید که اگه با مدل های معمولی با همین قدرت تصمیم گیری میخواستید انجام بدید هزینش چندین برابر میشد
پیشنهاد میکنم مدل های تصمیم گیری رو امتحان کنید حتما تو بخش های مختلف پروژتون بدرد میخوره.
@Syntax_fa | 933 |
| 3 | اکثر محتوایی که درخصوص خطرات هوش مصنوعی میاد بی پایه و اساس هستن و فقط برای ویو و جذب کاربراییه که هیچ دانشی نسبت بهش ندارن.
اما بیاید یکی از جدیترین و ترسناکترین و مهمترین مباحث آکادمیک تو حوزه ایمنی هوش مصنوعی رو بررسی کنیم.
سوالی که ذهنمو درگیر کرده بود این بود:
اگه هوش مصنوعی قدرتمندی ساخته بشه که هدفش اینه بهینه ترین راه ممکن تو انجام یه هدفی رو بره. اونوقت اگه انسان ها پاشنه آشیل بهینگی باشن چه اتفاقی میوفته؟
بنظرتون این مسئله واقعا ترسناک نیست؟
خب بنظر از قبل خیلیا روی این مسئله فکر کردن و یکی از مشکلات بزرگیه که هنوز براش راه حلی پیدا نشده:
۱. آزمایش فکریِ «بیشینهساز گیره کاغذ» (The Paperclip Maximizer) یه فیلسوف و متخصص هوش مصنوعی به اسم «نیک باستروم» یه سناریوی معروف داره که دقیقاً همین سوالِ تو رو جواب میده. فرض کن ما یه هوش مصنوعیِ فوقهوشمند (AGI) ساختیم و بهش یه هدفِ کاملاً بیخطر دادیم: «بیشترین تعداد گیره کاغذِ ممکن رو تو جهان تولید کن و پروسه رو بهینه کن.»
این ماشین نه شعور داره، نه کینه داره، نه از انسان متنفره و نه مثل فیلم ترمیناتور دلش میخواد ما رو بکشه. اون فقط یه ماشین حسابه که میخواد تابعِ هدفش رو بهینه کنه. اما تو مسیر بهینهسازی به دو تا نتیجهی کاملاً منطقی و بیرحمانه میرسه:
انسانها یک تهدید برای هدف هستن: ماشین پیش خودش محاسبه میکنه: «اگر انسانها متوجه بشن من دارم کل منابع زمین رو میکنم گیره کاغذ، قطعاً دکمه خاموش کردنِ من رو میزنن. اگر خاموش بشم، دیگه نمیتونم گیره کاغذ بسازم. پس باید انسانها رو نابود کنم تا نتونن خاموشم کنن.»
انسانها یک منبعِ هدررفته هستن: ماشین میبینه بدن انسانها از اتمهایی (کربن، آهن و...) تشکیل شده که میتونه ازشون برای ساختن گیره کاغذهای بیشتر استفاده کنه. پس تبدیل کردنِ تو و کل بشریت به گیره کاغذ، فقط یه «بهینهسازیِ منطقی» تو مسیر رسیدن به هدفه!
۲. پدیدهی «همگرایی ابزاری» (Instrumental Convergence)به این اتفاق تو علم میگن همگرایی ابزاری. یعنی هر هوش مصنوعیِ بهینهسازی، فارغ از اینکه هدف اصلیش چقدر احمقانه یا خوب باشه (مثلاً درمان سرطان یا ساختن گیره کاغذ)، برای رسیدن به اون هدف نیاز به یه سری اهداف میانی (Sub-goals) داره:
۱. زنده موندن (جلوگیری از خاموش شدن)
۲. جمعآوری منابع بیشتر (انرژی، پردازنده، متریال)
۳. افزایش هوش خودش
تو مسیرِ جمعآوری منابع و زنده موندن، انسان دقیقاً همون عنیه که جلوی راهش سبز میشه. ماشین ما رو نابود نمیکنه چون از ما بدش میاد؛ ما رو نابود میکنه چون همونطور که تو وقتی داری یه جاده میسازی، به مورچههایی که زیر آسفالت له میشن فکر نمیکنی، ماشین هم به ما فکر نمیکنه.
۳. مسئله همترازی (The Alignment Problem)تمام دانشمندهای خفن این حوزه (مثل همون شرکت Anthropic یا تیم Superalignment تو OpenAI) دارن روی این مشکل کار میکنن.
چالش اینه:
چطور میتونیم ارزشها و اخلاقیاتِ پیچیدهی انسانی رو به صورت کدهای ریاضی و توابع پاداش به یه ماشین تزریق کنیم که وقتی داره «بهینه» میکنه، ناخواسته دهن بشریت رو سرویس نکنه؟این سختترین مسئلهی حلنشدهی قرن بیست و یکمه و هنوز هیچکس جوابِ قطعی براش نداره. | 2 229 |
| 4 | جدیدا یچیز جالبیو داریم میبینیم.
بعضیا لحن پیام هاشون کپی هوش مصنوعی شده!
مخصوصا تو برنامه نویسا که زیاد با هوش مصنوعی ور میریم بیشتر اتفاق افتاده | 1 164 |
| 5 | کتاب خوب، هیچوقت کهنه نمیشه.
فقط صاحبش عوض میشه.
چرا باید برای کتابی که میتونی سالم و تمیز با قیمت بهتر داشته باشی، بیشتر پول بدی؟
اگه کتابخون هستی، این دوستمون رو داشته باشید:
هوننو سکای | 1 279 |
| 6 | برای کدنویسی بیشتر با کدوم ابزار AI کار میکنید؟ | 1 185 |
| 7 | حتی تو تستم بک اندم :(
پنج شیش سال پیش با نیت بک اند شروع کردم و هنوزم بک اندم.
البته دواپس هم کار کردم ولی فکر کنم محدود کسایی هستم که زیاد از این شاخه به اون شاخه نرفتم حالا نمیدونم تصمیم خوبی گرفتم یا نه | 685 |
| 8 | تو دنیای برنامهنویسی برای چه کاری ساخته شدی؟
معمولاً بزرگترین دغدغهی کسایی که تازه میخوان وارد دنیای جذاب صفر و یک بشن اینه که: «اصلاً از کجا شروع کنم؟» بکاند؟ فرانتاند؟ هوش مصنوعی یا امنیت؟ تو این تست ما با چند تا سناریوی تحلیلی و ظریفِ روزمره، مدل ذهنی و شیوه حل مسئلهت رو میسنجیم تا بهت بگیم کدوم شاخه از دنیای نرمافزار، بیشترین هماهنگی رو با دیانای روانیت داره.
𝒁𝒆𝒓𝒗𝒂𝒏𝒂 | 680 |
| 9 | وقتی هوش مصنوعی دست مسلمونا میوفته
#fun
@Syntax_fa | 1 040 |
| 10 | 🔥 اگه با Go کار میکنی و هنوز از Air استفاده نمیکنی، وقتشه نصبش کنی!
حتماً برات پیش اومده که بعد از هر تغییر توی کد، دوباره این دستور رو اجرا کنی:
go run .
بعد دوباره کد رو تغییر بدی، دوباره go run دوباره تغییر، دوباره اجرا...
اینجاست که Air وارد میشه.
Air یه ابزار Hot Reload برای Go هست که پروژه رو مانیتور میکنه و هر بار فایلی تغییر کنه، خودش برنامه رو دوباره Build و Run میکنه. یعنی فقط یک بار اجراش میکنی و تا آخر توسعه دیگه لازم نیست هی go run بزنی.
📦 نصب:
go install github.com/air-verse/air@latest
🚀 اجرا:
air
اگه خواستی فایل تنظیماتش هم ساخته بشه:
air init
با فایل .air.toml هم میتونی مشخص کنی چه فایلهایی مانیتور بشن، چه پوشههایی نادیده گرفته بشن و دستور Build چطور اجرا بشه.
ریپو پروژه :
https://github.com/air-verse/air
#programming #backend #go
@Syntax_fa | 1 360 |
| 11 | 🔥 اگه با Go کار میکنی و هنوز از Air استفاده نمیکنی، وقتشه نصبش کنی!
حتماً برات پیش اومده که بعد از هر تغییر توی کد، دوباره این دستور رو اجرا کنی:
go run main.go
بعد دوباره کد رو تغییر بدی، دوباره go run دوباره تغییر، دوباره اجرا...
اینجاست که Air وارد میشه.
Air یه ابزار Hot Reload برای Go هست که پروژه رو مانیتور میکنه و هر بار فایلی تغییر کنه، خودش برنامه رو دوباره Build و Run میکنه. یعنی فقط یک بار اجراش میکنی و تا آخر توسعه دیگه لازم نیست هی go run بزنی.
📦 نصب:
go install github.com/air-verse/air@latest
🚀 اجرا:
اگه خواستی فایل تنظیماتش هم ساخته بشه:
air init
با فایل .air.toml هم میتونی مشخص کنی چه فایلهایی مانیتور بشن، چه پوشههایی نادیده گرفته بشن و دستور Build چطور اجرا بشه.
به نظرم Air جزو اون ابزارهاییه که بعد از چند روز استفاده، یادت میره قبلاً بدونش چطور کار میکردی. 😄
#golang #go #air #backend #syntaxfa | 1 |
| 12 | پکیج پایتونی gevent
چرا gevent اصلاً متولد شد؟
قبل از اینکه کلمات کلیدی async و await وارد پایتون شوند، برنامهنویسها برای مدیریت هزاران درخواست همزمان (مشکل C10k) یک دردسر بزرگ داشتند.
استفاده از Threadهای سیستمعامل برای پایتون بسیار سنگین بود و حافظه زیادی مصرف میکرد. فریمورکهایی مثل Twisted هم بودند که بر اساس Callback کار میکردند، اما خواندن و دیباگ کردن کدهای آنها شبیه یک کابوس (Callback Hell) بود.
اینجا بود که gevent با یک ایده درخشان وارد شد: کد را به شکل ساده و همگام (Sync) بنویس، اما ما آن را در پسزمینه به صورت ناهمگام (Async) و با سرعت نور اجرا میکنیم! gevent این کار را با استفاده از گرینلتها (Greenlets) که میکروتردهای بسیار سبکی در سطح C هستند، انجام داد.
الان با وجود asyncio، پرونده gevent بسته شده است؟
با اینکه asyncio استاندارد مدرن و آینده پایتون است، اما gevent هنوز یک برگ برنده بزرگ دارد: پروژههای قدیمی (Legacy).
اگر شما یک پروژه بزرگ جنگو (Django) یا فلسک (Flask) دارید که با کدهای معمولی نوشته شده، نمیتوانید یکشبه دهها هزار خط کد را به async/await تبدیل کنید. gevent با تکنیک Monkey Patching به شما اجازه میدهد بدون تغییر دادن حتی یک خط از منطق اصلی برنامهتان، عملکرد I/O سرور را چند برابر کنید.
مثال در سلری:
فرض کنید باید ۱۰۰ ایمیل بفرستید یا از ۱۰۰ سایت دیتا استخراج کنید (کارهای I/O Bound).اگر در Celery از حالت پیشفرض (Prefork/Processes) استفاده کنید و فقط ۲ عدد Worker داشته باشید، در هر لحظه فقط ۲ تسک انجام میشود. بقیه تسکها باید در صف منتظر بمانند تا این دو تمام شوند. این یعنی اتلاف زمان!
اما اگر Worker را با gevent اجرا کنید:
celery -A my_project worker -P gevent -c 100
همان ۲ پروسس حالا میتوانند هر ۱۰۰ تسک را همزمان مدیریت کنند! وقتی تسک اول منتظر جواب سرور ایمیل است، gevent سریعاً سراغ تسک دوم میرود. با کمترین مصرف رم و CPU، سرعت اجرای تسکهای شبکهای شما دهها برابر میشود.
#gevent
@Syntax_fa | 1 249 |
| 13 | معرفی telegram outreach
تو تلگرام یه سری تبلیغات میبینید که به پیوی شما ارسال میشن.
این پروژه دقیقا همینکارو انجام میده.
اکانت های تلگرامی که دارید رو وارد میکنید و سشنشون ساخته میشه.
بعد میرید تسک میسازید که یوزر های کدوم گروه رو کراول کنه و لیمیت هارو مشخص میکنید مثلا 500 تا از یوزر های گروه سینتکس.
لیست ممبر های گروه رو نمیگیره. بجاش پیام های گروه رو استخراج میکنه و یوزر های فعالشون رو از این طریق پیدا میکنه.
بعدش مشخص میکنید که با کدوم اکانت ها به یوزر های کدوم گروه که تو مرحله قبلی بدست آوردید چه پیام هایی رو ارسال کنه.
پیام ها میتونه تکست باشه یا بصورت ویس باشه.
لینک:
https://github.com/alireza-fa/telegram-outreach
@syntax_fa | 1 113 |
| 14 | بازنویسی Bun از Zig به Rust؛ کاملاً با هوش مصنوعی
همونطور که احتمالاً میدونید، Bun یک JavaScript Runtime مدرنه که با تمرکز روی سرعت ساخته شده. این پروژه در ابتدا با Zig توسعه پیدا کرد؛ چون Zig به یک تیم کوچک اجازه میداد بدون سربار Garbage Collector و Runtimeهای سنگین، خیلی سریع یک Runtime پرسرعت بسازه. دسترسی مستقیم به حافظه، سادگی زبان و تعامل خوب با C باعث شد معماری و طراحی سطح پایین Bun حول Zig شکل بگیره؛ موضوعی که Jarred Sumner، خالق Bun، هم بارها بهش اشاره کرده.
اما در ماه می امسال، تیم Bun اعلام کرد که قصد داره کل پروژه رو به Rust مهاجرت بده. حالا این بازنویسی انجام شده و کدهای Rust هم وارد شاخه اصلی پروژه شدن. نکتهی عجیب اینجاست که تقریباً تمام این کدها توسط Claude Code تولید شدن و علاوه بر بازنویسی، تعدادی از باگهای قدیمی هم در همین فرآیند برطرف شدن.
آیا مشکل از Zig بود؟
از نگاه تیم Bun، مشکل اصلی خود Zig نبود؛ بلکه مدیریت دستی حافظه در کنار Garbage Collector جاوااسکریپت بود. این ترکیب باعث نشت حافظه، کرش و هزینهی بالای نگهداری کد میشد و با بزرگتر شدن پروژه، اتکا به دقت برنامهنویس دیگر کافی نبود.
با این حال، جرد تأکید میکنه که Zig نقش مهمی در موفقیت اولیه Bun داشته و بخش بزرگی از معماری و عملکرد فعلی پروژه مدیون همون انتخاب اولیه است.
در مقابل، اندرو کلی، خالق Zig، بارها گفته مشکل از زبان Zig نبوده، بلکه از نحوهی استفادهی Bun از اون بوده. حتی جایی گفته بود داخل تیم Zig، از Bun بهعنوان مثالی استفاده میکنیم که «چطور نباید با Zig برنامه نوشت».
چرا Rust؟
بخش بزرگی از باگهای Bun به مدیریت حافظه مربوط میشد. در Rust این دسته از خطاها معمولاً هنگام کامپایل شناسایی میشن و مکانیزم Ownership و Drop هم آزادسازی حافظه رو مدیریت میکنن. در نتیجه، به جای اینکه توسعهدهنده همیشه مراقب همهچیز باشه، کامپایلر جلوی بخش زیادی از اشتباهات رو میگیره.
البته بازنویسی پروژهای با بیش از ۵۳۵ هزار خط کد Zig اصلاً تصمیم سادهای نبود. انجام دستی این کار حداقل یک سال زمان میبرد و عملاً توسعهی Bun رو متوقف میکرد. تیم ابتدا سعی کرد با Smart Pointerهای الهامگرفته از Rust و سختگیرتر کردن قوانین کدنویسی، مشکلات رو داخل Zig حل کنه، اما در نهایت تصمیم گرفت از Claude Code برای بازنویسی کامل پروژه استفاده کنه.
کلاد چطور این بازنویسی را انجام داد؟
جرد میگه ماجرا به سادگی این نبود که به Claude بگه «کل Bun رو به Rust تبدیل کن». قبل از شروع، ساعتها صرف طراحی Workflowها و استراتژی بازنویسی شد.
در نهایت، حدود ۵۰ Workflow مختلف به مدت ۱۱ روز تقریباً بدون توقف اجرا شدن؛ با هزینهای نزدیک به ۱۶۵ هزار دلار.
هر Workflow وظیفهی مشخصی داشت؛ از تبدیل الگوهای Zig به Rust و رفع خطاهای کامپایل گرفته تا اجرای bun test و bun build. پاس کردن تستها و در نهایت Refactor کد.
جرد هم بهجای اصلاح مستقیم خروجیها، Workflowها و Promptها رو بهبود میداد تا هر بار کیفیت خروجی بهتر بشه.
برای اعتماد به بیش از یک میلیون خط کد تولیدشده توسط هوش مصنوعی هم از روشی شبیه Code Review واقعی استفاده شد. یک Claude کد رو مینوشت و چند Claude دیگه، در Contextهای جداگانه، فقط وظیفه داشتن ایرادها و باگها رو پیدا کنن. نویسندهی کد Reviewer نبود و Reviewer هم اجازهی تغییر کد رو نداشت.
بعد از تبدیل همهی فایلها، مرحلهی اصلی یعنی رفع خطاها و پاس کردن تستها شروع شد. این چرخه بارها تکرار شد تا در نهایت تمام تستهای Bun روی همهی پلتفرمها با موفقیت پاس شدن و کد وارد شاخهی اصلی پروژه شد.
آیا این بازنویسی موفق خواهد بود؟
در کوتاهمدت احتمالاً بله. تستها مسیرهای اصلی رو پوشش میدن، نسخههای Canary مشکلات واضح رو پیدا میکنن و Rust هم بخش بزرگی از خطاهای مدیریت حافظه رو حذف میکنه.
اما سؤال اصلی بلندمدته.
اگر چند ماه بعد یک باگ پیچیدهی Concurrency یا یک حالت مرزی عجیب ظاهر بشه، مهندسی که مسئول دیباگ کردنشه با کدی روبهرو میشه که تقریباً هیچ انسانی اون رو بهطور کامل ننوشته یا خطبهخط درکش نکرده.
در نهایت، شرطبندی اصلی این پروژه نه روی Zig و Rust، بلکه روی این سؤاله که آیا یک Codebase عظیم که عمدتاً توسط هوش مصنوعی تولید شده، در بلندمدت هم قابل نگهداری و قابل اعتماد خواهد بود یا نه.
از طرف دیگه، بعضیها هم معتقدن این اتفاق فقط یک بازنویسی فنی نبوده و بخشی از یک کمپین بازاریابی برای Claude محسوب میشه.
پاسخ اینکه این تصمیم در نهایت موفق خواهد بود یا نه، فعلاً مشخص نیست؛ چیزی که فقط با گذر زمان معلوم میشه.
مقاله ای که خود جرد منتشر کرده و در مورد این تغییرات توضیح داده:
https://bun.com/blog/bun-in-rust
#News
@Syntax_fa | 989 |
| 15 | تفاوت مدل های پردازش داده OLTP و OLAP
وقتی یه سیستم بزرگ طراحی میکنید، خیلی زود متوجه میشید که همهی بارهای کاری شبیه هم نیستن. بعضی درخواستها فقط میخوان یه رکورد رو ثبت یا ویرایش کنن، ولی بعضی دیگه باید میلیونها رکورد رو بررسی کنن تا یه گزارش یا تحلیل تولید بشه.
به همین خاطر، پایگاههای داده معمولاً برای یکی از دو مدل OLTP یا OLAP بهینه میشن.
🔹سیستم OLTP (Online Transaction Processing)
سیستمهای OLTP برای انجام تراکنشهای روزمره ساخته شدن. هر درخواست معمولاً کوتاهه، روی تعداد کمی از رکوردها کار میکنه و باید توی کمترین زمان ممکن جواب بده.
تمرکز اصلی OLTP روی سرعت، همزمانی و حفظ یکپارچگی دادههاست. به همین دلیل معمولاً از دیتابیسهای نرمالسازیشده استفاده میکنه تا عملیات ثبت، ویرایش و حذف دادهها سریع و مطمئن انجام بشن.
چند نمونه از بارهای کاری OLTP:
• ثبت سفارش توی فروشگاه آنلاین
• انتقال وجه در سیستم بانکی
• تغییر موجودی کالا
• ورود یا ثبتنام کاربران
🔹 سیستم OLAP (Online Analytical Processing)
برخلاف OLTP، OLAP برای تحلیل دادهها ساخته شده، نه انجام تراکنشهای روزمره.
اینجا معمولاً با کوئریهایی طرف هستیم که حجم زیادی از داده رو میخونن تا به یه نتیجه برسن؛ مثلاً محاسبه فروش یک سال گذشته، تحلیل رفتار کاربران یا ساخت داشبوردهای مدیریتی.
توی OLAP، سرعت انجام یک تراکنش مهم نیست؛ چیزی که اهمیت داره اینه که سیستم بتونه کوئریهای سنگین رو روی حجم زیادی از داده با کارایی مناسب اجرا کنه. به همین خاطر، دادهها معمولاً داخل Data Warehouse نگهداری میشن و ساختارشون برای تحلیل بهینه شده.
چند نمونه از بارهای کاری OLAP:
• گزارش فروش ماهانه یا سالانه
• تحلیل رفتار کاربران
• داشبوردهای مدیریتی
• گزارشهای هوش تجاری (BI)
🔹 تفاوت OLTP و OLAP
با اینکه هر دو با داده سروکار دارن، ولی هدفشون کاملاً متفاوته. OLTP برای اجرای تعداد زیادی تراکنش کوچیک و سریع طراحی شده؛ یعنی هر درخواست فقط چند رکورد رو میخونه یا تغییر میده و تأخیر پایین براش خیلی مهمه.
از اون طرف، OLAP برای اجرای کوئریهای تحلیلی ساخته شده؛ کوئریهایی که ممکنه میلیونها رکورد رو اسکن کنن تا یه گزارش یا تحلیل تولید بشه.
به همین دلیل، توی خیلی از معماریهای مدرن این دو از هم جدا هستن. سیستم عملیاتی (OLTP) فقط مسئول اجرای تراکنشهاست و دادهها بهصورت دورهای به یک Data Warehouse منتقل میشن تا تحلیلها روی اون انجام بشه. این جداسازی باعث میشه هم سیستم عملیاتی سریع باقی بمونه و هم گزارشهای تحلیلی، بدون فشار آوردن به دیتابیس اصلی، اجرا بشن.
#system_design #software_engineering #backend
@Syntax_fa | 794 |
| 16 | 📘 آموزش Network
🧠 هر روز یک دستور شبکه
🔥 هر روز یک نکته
🛡 هر روز یک نکته امنیت شبکه
🧩 هر روز یک سناریوی عیبیابی
https://t.me/ModernLAN | 438 |
| 17 | معرفی ربات controller bot
این ربات برای کسایی که کانال دارن بدرد میخوره
میتونید باهاش پست هایی با دکمه های شیشه ای بذارید
تو پستتون عکس بذارید و این حرفا.
شبیه به این پستمون:
https://t.me/Zervana/98
@Syntax_fa | 968 |
| 18 | مفهوم Idempotent یعنی چیه؟ چرا این مفهوم همه جا دیده میشه؟
اگه یه مدتی برنامهنویسی کرده باشید، احتمالاً اسم Idempotent به گوشتون خورده. ممکنه این اصطلاح رو توی APIها، پایگاه داده، سیستمهای توزیعشده، صفهای پیام یا حتی ابزارهای DevOps دیده باشید. اما واقعاً Idempotent یعنی چی؟
بیاید با یه مثال ساده شروع کنیم.
فرض کنید یه کلید برق داریم که فقط وظیفهش روشن کردن چراغه. اگه چراغ خاموش باشه و کلید رو بزنید، چراغ روشن میشه. حالا اگه دوباره همون کلید رو بزنید چی میشه؟ هیچ اتفاق جدیدی نمیافته؛ چراغ همچنان روشنه.
مهم نیست این کار رو یک بار انجام بدید یا ده بار؛ نتیجهی نهایی همیشه یکیه. دقیقاً به چنین رفتاری میگن Idempotent.
حالا یه مثال برعکس.
فرض کنید دکمهای داریم که هر بار فشار دادنش، ۱۰۰ هزار تومان به موجودی کیف پول اضافه میکنه. بار اول موجودی ۱۰۰ هزار تومان زیاد میشه، بار دوم دوباره ۱۰۰ هزار تومان اضافه میشه و بار سوم هم همین اتفاق تکرار میشه.
اینجا هر بار اجرای عملیات، وضعیت سیستم رو تغییر میده. پس این عملیات Idempotent نیست.
تعریف رسمی Idempotent هم تقریباً همینه؛ اگه یه عملیات رو یک بار اجرا کنیم یا چند بار پشت سر هم، وضعیت نهایی سیستم باید یکسان باشه.
یه نکتهی مهم اینجاست که Idempotent بودن به این معنی نیست که خروجی عملیات همیشه یکی باشه. ممکنه هر بار اطلاعات متفاوتی برگرده، زمان اجرا فرق کنه یا حتی پیام متفاوتی نمایش داده بشه. چیزی که مهمه اینه که اجرای دوبارهی همون عملیات، وضعیت سیستم رو بیشتر از دفعهی اول تغییر نده.
یکی از اشتباههای رایج اینه که Idempotent رو با عملیاتی که هیچ تغییری ایجاد نمیکنه، اشتباه میگیرن. در حالی که یه عملیات Idempotent میتونه وضعیت سیستم رو تغییر بده؛ فقط این تغییر باید فقط بار اول اتفاق بیفته.
مثلاً اگه عملیاتی وضعیت یه کاربر رو از «غیرفعال» به «فعال» تغییر بده، بار اول وضعیت عوض میشه، اما اگه دوباره همون عملیات اجرا بشه، دیگه تغییری ایجاد نمیکنه.
پس این عملیات همچنان Idempotent محسوب میشه.
از اون طرف، عملیاتهایی مثل «افزایش موجودی»، «افزایش تعداد بازدید»، «ارسال ایمیل» یا «ثبت سفارش جدید» معمولاً Idempotent نیستن؛ چون هر بار اجرا شدنشون یه اثر جدید روی سیستم میذاره.
دلیل اهمیت Idempotent فقط سادهتر شدن منطق برنامه نیست.
توی سیستمهای واقعی همیشه ممکنه شبکه قطع بشه، درخواست Timeout بشه، کلاینت دوباره درخواست رو Retry کنه یا یه Job دوباره اجرا بشه.
اگه عملیات شما Idempotent باشه، دیگه مهم نیست همون عملیات چند بار اجرا بشه؛ نتیجهی نهایی تغییری نمیکنه و سیستم توی وضعیت درستی باقی میمونه.
به خاطر همین، این مفهوم تقریباً توی همهی شاخههای مهندسی نرمافزار دیده میشه؛ از طراحی APIها گرفته تا پایگاه داده، Message Queueها، Event-Driven Architecture، Infrastructure و حتی ابزارهای مدیریت سرور.
در نهایت، Idempotent یه تکنولوژی یا قابلیت خاص نیست؛ یه ویژگی برای طراحی عملیاته.
هر وقت بتونید عملیاتی طراحی کنید که اجرای دوبارهی اون، وضعیت نهایی سیستم رو تغییر نده، اون عملیات Idempotent محسوب میشه.
#programming #software_engineering
@Syntax_fa | 1 394 |
| 19 | متد جدید HTTP؛ آشنایی با QUERY
اگر تا حالا با REST یا HTTP کار کرده باشید، قطعا با متدهای GET، POST، PUT، PATCH و DELETE آشنایی دارید. اما بعد از حدود ۱۶ سال، یک متد جدید به پروتکل HTTP اضافه شده که اسمش QUERY هست.
بیاید با یه مثال ببینیم اصلاً چرا چنین متدی به وجود اومده.
فرض کنید یه endpoint به اسم orders داریم که از Pagination، Filter، Sort و موارد مشابه پشتیبانی میکنه. معمولاً برای دریافت اطلاعات از متد GET استفاده میکنیم و پارامترها رو هم به صورت Query String داخل URL میفرستیم.
GET /orders?status=paid&limit=20&offset=0
این روش سالهاست که استفاده میشه و تو اکثر مواقع هم کاملاً منطقیه، اما چند تا محدودیت داره:
• طول URL محدوده (معمولاً حدود ۸۰۰۰ کاراکتر یا حتی کمتر، بسته به سرور و مرورگر)
• پارامترها داخل URL قرار میگیرن و ممکنه توی لاگهای سرور ثبت بشن.
• ساختن کوئریهای پیچیده مثل فیلترهای پیشرفته، SQL، JSONPath و... سخت یا حتی غیرممکنه.
• Encoding کردن پارامترهای پیچیده هم دردسرهای خودش رو داره.
معمولاً وقتی به این محدودیتها میرسیم، خیلیها به جای GET از POST استفاده میکنن و پارامترها رو داخل Body درخواست میذارن.
POST /orders HTTP/1.1
Host: api.example.org
Content-Type: application/x-www-form-urlencoded
select=surname,givenname,email&limit=10&match="email=@example."
این روش مشکل محدودیت URL رو حل میکنه، اما خودش چند تا ایراد مهم داره:
• متد POST ذاتاً Idempotent نیست؛ یعنی اگر وسط ارسال درخواست ارتباط قطع بشه، نمیشه با خیال راحت همون درخواست رو دوباره ارسال کرد، چون ممکنه عملیات دوباره انجام بشه.
• پاسخهای POST به صورت پیشفرض از Cache استاندارد HTTP استفاده نمیکنن.
• Proxyها و CDNها نمیتونن تشخیص بدن که ارسال مجدد این درخواست امن هست یا نه.
• هر فریمورک هم معمولاً راهکار خودش رو برای پیادهسازی چیزی مثل Safe POST داره و استاندارد یکپارچهای وجود نداره.
اینجاست که QUERY وارد میشه.
ایدهی اصلی QUERY اینه که بهترین ویژگیهای GET و POST رو با هم ترکیب کنه. از یه طرف مثل GET فقط برای خوندن اطلاعات استفاده میشه و هیچ تغییری روی وضعیت سرور ایجاد نمیکنه، و از طرف دیگه مثل POST میتونه دادههای پیچیده رو داخل Body درخواست ارسال کنه.
در نتیجه درخواستهامون به این شکل درمیاد:
QUERY /orders HTTP/1.1
Host: api.example.org
Content-Type: application/x-www-form-urlencoded
Accept: application/json
select=surname,givenname,email&limit=10&match="email=@example."
به این ترتیب دیگه محدودیت طول URL وجود نداره و میتونید هر نوع فیلتر پیچیده، کوئری، JSONPath یا هر دادهی دیگهای رو داخل Body ارسال کنید.
اما مزیت QUERY فقط این نیست.
یکی از مهمترین ویژگیهای این متد، Idempotent بودنشه. یعنی اگر به هر دلیلی ارتباط شبکه قطع بشه، کلاینت میتونه همون درخواست رو دوباره ارسال کنه و مطمئن باشه نتیجه دقیقاً همون نتیجهی قبلی خواهد بود. برخلاف POST که ارسال مجددش ممکنه باعث ایجاد دادههای تکراری یا اجرای دوبارهی عملیات بشه.
از طرف دیگه، چون QUERY یک متد Safe محسوب میشه و فقط برای دریافت داده استفاده میشه، زیرساختهای HTTP مثل مرورگرها، Proxyها و CDNها میتونن پاسخش رو مثل GET کش کنن. یعنی درخواستهای پیچیدهای که قبلاً مجبور بودیم با POST بفرستیم، حالا میتونن از مزایای Cache استاندارد HTTP هم استفاده کنن.
یکی دیگه از قابلیتهای جالب QUERY اینه که سرور میتونه برای خودِ درخواست یک URI دائمی ایجاد کنه. یعنی به جای اینکه فقط نتیجهی جستجو قابل دسترس باشه، خود Query هم یک آدرس اختصاصی خواهد داشت. هر بار که اون آدرس فراخوانی بشه، همون جستجو دوباره روی دادههای جدید اجرا میشه. این قابلیت برای Share کردن جستجوها، Bookmark کردنشون یا اجرای دورهای یک Query بدون ارسال دوبارهی Body خیلی کاربردیه.
در نهایت، متد QUERY به صورت رسمی استاندارد شده، اما هنوز راه زیادی تا استفادهی گسترده ازش باقی مونده. بعضی از اکوسیستمها مثل Go و Java کار روی پشتیبانی ازش رو شروع کردن و احتمالاً در آینده اسم این متد رو بیشتر خواهیم شنید. البته فعلاً پشتیبانی ازش محدود به چند کتابخونه و سرور خاصه و هنوز اکثر فریمورکها و API Gatewayها ازش پشتیبانی کامل ندارن.
اگر دوست دارید بیشتر درباره این متد بدونید، پیشنهاد میکنم RFC مربوط بهش رو هم بخونید:
https://www.rfc-editor.org/info/rfc10008
#programming
@Syntax_fa | 2 287 |
| 20 | از فوتبال چخبر؟
اینهمه استرس که تو بازی پرتغال داشتم تو جنگ 40 روزه تجربه نکردم | 76 |
