Web appOpen in Telegram
SSyntax | سینتکس

Syntax | سینتکس

@Syntax_fa · channel · Tech · indexed since 2026-07-19
3 263subscribers
1 306average post reach
2posts in 30 days
1 193posts in the index
S
Syntax | سینتکس
تو همین مدت که دسترسی به اینترنتمون محدود شده بود، جمنای یه سری تغییرات تو بخش لیمیتیشن داده. قبلا اینطور بود فرقی نمیکرد چقدر توکن برای هر پاسختون مصرف شده! محدودیتش فقط و فقط: روزانه میتونستید تو پلن پرو با مدل جمنای پرو صد تا پیام ارسال کنید مدل فلش اصلا نمیدونم محدودیت داشت یا نه تاحالا به محدودیتش نخورده بودم. اما الان بر اساس توکن مصرفی هستش و خیلی راحت به لیمیت میرسید و محدودیتش هر دو سه ساعت یبار از اول میشه ولی خب جلوی کارتونو میگیره. یکی از نکات منفی جمنای تو آپدیت جدید از دید منه مصرف کننده اینه @Syntax_fa
8 · 2.8K ·
S
Syntax | سینتکس
موقع جنگ جوری لینوکسمو اومده بودم بهینه کرده بودم که یه کیلوبایتم هدر نره. وقتشه همه تغییراتو به حالت قبل برگردونم
2 · 2K ·
S
Syntax | سینتکس
بدهی ادراکی (Comprehension Debt): هزینه پنهان استفاده افراطی از AI در مهندسی نرم‌افزار در سال‌های اخیر، ابزارهای هوش مصنوعی و دستیارهای کدنویسی به شکل چشمگیری سرعت توسعه نرم‌افزار را افزایش داده‌اند. اما در کنار این بهره‌وری ظاهری، یک هزینه پنهان در حال شکل‌گیری است: بدهی ادراکی (Comprehension Debt) بدهی ادراکی به شکاف رو‌به‌رشد میان حجم کدی که در یک سیستم وجود دارد و میزان درکی است که انسان‌ها واقعاً از آن سیستم دارند. برخلاف بدهی فنی که خودش را با اصطکاک، پیچیدگی و کندی توسعه نشان می‌دهد، بدهی ادراکی اغلب بی‌صداست: کد تمیز به نظر می‌رسد، تست‌ها پاس می‌شوند، سیستم کار می‌کند… اما در لحظه‌ای حساس، سیستم دیگر قابل توضیح یا تغییر نیست. مسئله از کجا شروع می‌شود؟ وقتی توسعه‌دهندگان بیش از حد به تولید کد توسط AI تکیه می‌کنند، یک اتفاق تدریجی رخ می‌دهد: - کاهش درک عمیق از ساختار سیستم - تضعیف مدل ذهنی مشترک تیم - سخت شدن دیباگ و تغییرات ساده در نهایت، تیم به نقطه‌ای می‌رسد که «کد کار می‌کند»، اما هیچ‌کس دقیقاً نمی‌داند چرا. شواهد تجربی: مطالعه‌ای از Anthropic روی ۵۲ مهندس نرم‌افزار نشان داد: زمان انجام تسک‌ها تقریباً مشابه بود (با و بدون AI) اما گروه استفاده‌کننده از AI در آزمون‌های درک مفهومی ۱۷٪ عملکرد پایین‌تر داشت بیشترین افت در حوزه دیباگینگ مشاهده شد نکته کلیدی: اتکای منفعل به AI («فقط درستش کن که کار کنه») به‌جای تقویت مهارت، می‌تواند فرآیند یادگیری را تضعیف کند. در مقابل، استفاده فعال‌تر—یعنی پرسیدن اینکه چرا این راه‌حل درست است؟ و چطور کار می‌کند؟—اثر این بدهی را به‌طور قابل توجهی کاهش می‌دهد. @Syntax_fa
33 · 2.9K ·
S
Syntax | سینتکس
GIF
ssstwitter.com_1781444920112.mp4 · 1.4 MB · click to show
این تلگرام چیه که همش آپدیت خفن میده و تمومیم نداره. قابلیت های جدید تلگرام rich formatter برای نوشتن پست @Syntax_fa
12 · 1.7K ·
S
Syntax | سینتکس
💡 چرا SQL این‌قدر با بقیه زبان‌ها متفاوت است؟ (روایتی از کتاب DDIA) مدتی پیش در حال بازخوانی چپتر دوم کتاب معروف Designing Data-Intensive Applications اثر مارتین کلپمن بودم. کلپمن در این بخش، دست روی مقایسه‌ای می‌گذارد که شاید بارها شنیده باشیم، اما زاویه دید او به این ماجرا در بستر «زبان‌های کوئری دیتابیس»، دیدگاه من را نسبت به SQL کاملاً تغییر داد: پارادایم Imperative (امری) در برابر Declarative (توصیفی). اگر برای شما هم سؤال است که چرا ساختار SQL این‌قدر با زبان‌های سنتی برنامه‌نویسی فرق دارد، این خلاصه و شهود کلیدی را از دست ندهید: 🔹 تفاوت اصلی در یک نگاه زبان‌های Imperative: به کامپیوتر دستور می‌دهند که یک عملیات را چگونه (How) و با چه ترتیبی در حافظه اجرا کند (مانند حلقه‌ها و تغییر گام‌به‌گام متغیرها). زبان‌های Declarative: صرفاً مشخص می‌کنند که نتیجه نهایی باید چه چیزی (What) باشد و قوانین حاکم بر داده چیست. جزئیاتِ چگونگی اجرا کاملاً پنهان است. 📜 ریشه تاریخی: از فاجعه تا انقلاب SQL در دهه ۱۹۷۰ و پیش از ظهور SQL، در مدل‌های دیتابیس قدیمی‌تر (مثل IMS و CODASYL)، برنامه‌نویسان مجبور بودند با کدهای Imperative و حلقه‌های متوالی، یک اشاره‌گر (Pointer) را به صورت دستی میان رکوردها حرکت دهند تا داده‌ای را پیدا کنند. بزرگ‌ترین فاجعه چه بود؟ اگر ساختار فیزیکی دیتابیس روی دیسک تغییر می‌کرد (مثلاً یک ستون جابه‌جا می‌شد یا نحوه ذخیره‌سازی عوض می‌شد)، تمام کدهای پروژه خراب می‌شدند و باید از اول بازنویسی می‌شدند! اما SQL این مشکل را حل کرد. شما فقط می‌گویید چه داده‌ای می‌خواهید: SELECT * FROM users WHERE age > 18; با این کار، وظیفه نحوه اجرا به Query Optimizer (بهینه‌ساز کوئری دیتابیس) واگذار شد. دیتابیس خودش تصمیم می‌گیرد که از کدام ایندکس یا الگوریتم (مثلاً Hash Join یا Merge Join) برای استخراج داده استفاده کند و برنامه‌نویس درگیر جزئیات سخت‌افزار نمی‌شود. 📐 ربط زبان‌های Declarative به جبر رابطه‌ای (Relational Algebra) زبان SQL بر پایه‌ی یک نظریه ریاضی به نام «جبر رابطه‌ای» بنا شده است. در ریاضیات دوران مدرسه، قوانینی وجود دارد که اجازه می‌دهد فرمول‌ها را ساده کنیم بدون اینکه نتیجه تغییر کند؛ مثلاً: (x+y)⋅z=x⋅z+y⋅z ما در ریاضی فقط فرمول را می‌نویسیم و نگ
26 · 1.9K ·
Syntax | سینتکس
الان استفاده از فریم‌ورکی مثل جنگو منطقیه؟ یکی از دلایل استفاده از جنگو همیشه سرعت توسعه و پنل ادمینش بوده. دلیل بعدی اون قابلیت‌هایی که از قبل داره مثل مدیریت دسترسی‌ها و پکیج‌های بی‌شماری که برای جنگو می‌تونید پیدا کنید. و دلیل بعدی بنظرم تعداد کسانی که جنگو و پایتون بلدن خیلی زیاده و هیچ‌وقت لنگ نیرو نمی‌مونید. ولی الان دیگه استفاده ازش منطقیه؟ تو پایتون وب‌فریم‌ورک خفن و مدرنی مثل FastAPI رو داریم. زبانی مثل گولنگ رو داریم که واقعا تو بک‌اند شاهکاره. هوش مصنوعی رو داریم کافیه معماری و ساختار رو مشخص کنیم، پنل ادمین و کدهای تکراری رو برامون بدون مشکل می‌زنه و نیاز به ابزارهای آماده رو کمتر می‌کنه. از اون‌طرف با اینکه جنگو پشتیبانی از async رو اضافه کرده، ولی چون ذات و معماری پایه‌اش همگام هست، تو هندل کردن I/O تو مقیاس بالا می‌تونه واقعا گلوگاه بشه. یکم فکر کنید می‌بینید با همون منابع تو گولنگ می‌شد چند برابر ریکوئست رو هندل کرد، و به لطف گوروتین‌ها اصلا نیازی نیست درگیر پیچیدگی‌های نوشتن کدهای Asynchronous برای هندل کردن I/O بشید. سوالم اینه: فرض کنید می‌خواید پروژه‌ای رو از صفر شروع کنید. بنظرتون جنگو همچنان یک مزیت رقابتی به حساب میاد یا تبدیل شده به گلوگاه توسعه، نگهداری و مدیریت مصرف منابع؟ @Syntax_fa
10 · 1.7K ·
S
استراتژی Rolling Update؛ بالانس بین سادگی و کارایی 🔹 تعریف و فلسفه وجودی استراتژی Rolling Update یک استراتژی استقرار نرم‌افزار است که در آن نسخه جدید برنامه به‌تدریج و مرحله‌به‌مرحله جایگزین نسخه قدیمی می‌شود، بدون اینکه هیچ‌گاه سرویس به‌طور کامل از کار بیفتد. این روش با هدف حل مشکلات استقرارهای یک‌باره (Big Bang) متولد شد؛ جایی که یک اشتباه ساده می‌توانست کل سیستم را از کار بیندازد و تیم را در ساعت ۳ بامداد بیدار کند. فلسفه اصلی Rolling Update بر شفافیت، کنترل لحظه‌ای و قابلیت بازگشت سریع استوار است، نه افزودن پیچیدگی‌های غیرضروری. 🔹مکانیزم عملکرد فرآیند کار بسیار سرراست است: به‌جای اینکه همه نمونه‌های سرویس یک‌جا به‌روز شوند، فقط تعداد مشخصی (مثلاً ۲۰٪) انتخاب شده، با نسخه جدید جایگزین می‌شوند، صحت عملکردشان بررسی می‌گردد و در صورت موفقیت، این چرخه تا جایگزینی کامل ادامه می‌یابد. این گام‌های کوچک امکان نظارت دقیق و بازخورد فوری را فراهم می‌کنند و تیم عملیاتی در هر لحظه می‌تواند فرآیند را متوقف یا به نسخه قبلی برگرداند. 🔹مزایای کلیدی در برابر روش‌های دیگر در مقایسه با Blue-Green Deployment: که نیاز به زیرساخت دوبرابر (محیط‌های مجزای آبی و سبز) و تغییر ناگهانی ترافیک دارد، Rolling Update بسیار مقرون‌به‌صرفه‌تر است و با همان منابع موجود اجرا می‌شود. در مقایسه با Canary Deployment: که ترافیک کاربران خاص را به نسخه جدید هدایت می‌کند، در Rolling Update تمرکز بر جایگزینی نمونه‌های سرویس است که مدیریت آن ساده‌تر و پیش‌بینی‌پذیرتر است. قابلیت بازگشت آنی: در هر مرحله از استقرار می‌توان بدون توقف کل سرویس به نسخه قبل بازگشت، که این امر فشار روانی تیم را به شدت کاهش می‌دهد. 🔹چالش‌ها و محدودیت‌ها با وجود محبوبیت، Rolling Update بی‌نقص نیست. از جمله چالش‌های آن می‌توان به مدیریت وضعیت داده‌ها در حین به‌روزرسانی (به‌ویژه اگر نسخه جدید با ساختار دیتابیس قبلی سازگار نباشد)، هماهنگی بین سرویس‌های وابسته، و زمان‌بر بودن فرآیند در مقیاس‌های بسیار بزرگ اشاره کرد. همچنین برای تغییرات اساسی در دیتابیس یا معماری، این روش اصلاً توصیه نمی‌شود. 🔹زمان استفاده و ابزارهای مورد نیاز استراتژی Rolling Update برای سیستم‌های با در دسترس‌بودن بالا (High Availability)، معماری توزیع‌شده و
15 · 1.7K ·
A
aech
کانکارنسی فقط «همزمان اجرا شدن» نیست. خیلی‌ها فکر می‌کنند اگر دو عملیات همزمان اجرا شوند، با مسئله‌ی Concurrency روبه‌رو هستیم. اما اگر این دو عملیات هیچ ارتباطی با هم نداشته باشند، در واقع مشکلی وجود ندارد. برای مثال: یک سرویس در حال فشرده‌سازی تصویر است. سرویس دیگری در حال پردازش ویدئو است. این دو ممکن است کانکارنت اجرا شوند، اما چون روی داده‌ی مشترکی کار نمی‌کنند، نیازی به هماهنگی خاصی ندارند. مشکل واقعی زمانی شروع می‌شود که چند عملیات به یک داده‌ی مشترک و قابل تغییر (Shared Mutable State) دسترسی داشته باشند. فرض کنید دو تراکنش همزمان روی موجودی یک حساب بانکی کار می‌کنند: تراکنش اول: 50 واحد از موجودی کم می‌کند. تراکنش دوم: 100 واحد به موجودی اضافه می‌کند. در اینجا دیگر فقط «همزمان بودن» مهم نیست؛ بلکه ترتیب اجرا و نحوه‌ی تعامل این دو عملیات می‌تواند نتیجه‌ی نهایی را تغییر دهد. اگر این تعامل به‌درستی مدیریت نشود، ممکن است داده‌ها ناسازگار شوند یا حتی تغییرات یکی از تراکنش‌ها از بین برود. به همین دلیل، Concurrency را می‌توان این‌گونه تعریف کرد: کانکارنسی یعنی مدیریت صحیح دسترسی همزمان چند عملیات به یک وضعیت (State) مشترک، به‌گونه‌ای که مستقل از ترتیب اجرای آن‌ها، نتیجه همچنان صحیح باقی بماند. به همین خاطر است که مفاهیمی مانند Isolation ، Locking ، MVCC و Serializability در سیستم‌های پایگاه داده به وجود آمده‌اند؛ هدف همه‌ی آن‌ها یک چیز است: حفظ صحت داده‌ها، حتی زمانی که چند عملیات به طور همزمان در حال اجرا هستند. #programming #system_design @Syntax_fa
12 · 1.5K ·
Z
ZervanaWriterBot
Photo
click to show
همیشه برام جالب بود که ما دولوپرها می‌تونیم پیچیده‌ترین لاجیک‌ها رو تو کدهامون هندل کنیم، اما وقتی نوبت به باگ‌های ذهن و تله‌های رفتاری خودمون می‌رسه، هیچ دیباگری نداریم. این دغدغه باعث شد تو ماه‌های گذشته، منطق بک‌اند رو با مفاهیم عمیق روان‌شناسی تحلیلی و کهن‌الگوها ترکیب کنم. خروجی این ترکیب شده پروژه‌ی جدیدم: زروانا. زروانا یه لابراتوارِ مبتنی بر هوش مصنوعیه که دیتای پراکنده ذهن شما (از خواب‌ها و کابوس‌ها گرفته تا تست‌های روان‌سنجی) رو می‌گیره، پردازش می‌کنه و بهتون می‌گه دقیقاً کجای ناخودآگاهتون گیر کردید و کدوم سایه داره تصمیماتون رو کنترل می‌کنه. از نظر فنی و اینکه چطور پیاده سازیش کردم تو پست های آینده دربارش صحبت میکنم. دوست دارم شما بچه‌های کامیونیتی فنی جزو اولین نفراتی باشید که این سیستم رو تست می‌کنید. روی دیباگ کردنش حساب کردم. لینک زروانا: https://t.me/ZervanaBot
28 · 1.6K ·
A
aech
Link
click to show
متد جدید 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 و... سخت یا حتی غیرممکنه. • انکودینگ کردن پارامترهای پیچیده هم دردسرهای خودش رو داره. معمولاً وقتی به این محدودیت‌ها می‌رسیم، خیلی‌ها به جای 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 استفاده نمی‌کنن. • پروکسی ها و CDNها نمی‌تونن تشخیص بدن که ارسال مجدد این درخواست امن هست یا نه. • هر فریم‌ورک هم معمولاً راهکار خودش رو برای پیاده‌سازی چیزی مثل Safe POST داره و استاندارد یکپارچه‌ای وجود نداره. اینجاست که QUERY وارد میشه. ایده‌ی اصلی QUERY اینه که بهترین ویژگی‌های GET و POST رو با هم ترکیب کنه. از یه طرف مثل GET فقط برای خوندن اطلاعات استفاده میشه و هیچ تغییری روی وضعیت سرور ایجاد نمی‌کنه، و از طرف دیگه مثل POST می‌تونه داده‌های پیچیده رو داخل Body درخواست ارسال کنه. در
52 · 2.8K ·
A
aech
مفهوم Idempotent یعنی چیه؟ چرا این مفهوم همه جا دیده میشه؟ اگه یه مدتی برنامه‌نویسی کرده باشید، احتمالاً اسم Idempotent به گوشتون خورده. ممکنه این اصطلاح رو توی APIها، پایگاه داده، سیستم‌های توزیع‌شده، صف‌های پیام یا حتی ابزارهای DevOps دیده باشید. اما واقعاً Idempotent یعنی چی؟ بیاید با یه مثال ساده شروع کنیم. فرض کنید یه کلید برق داریم که فقط وظیفه‌ش روشن کردن چراغه. اگه چراغ خاموش باشه و کلید رو بزنید، چراغ روشن میشه. حالا اگه دوباره همون کلید رو بزنید چی میشه؟ هیچ اتفاق جدیدی نمی‌افته؛ چراغ همچنان روشنه. مهم نیست این کار رو یک بار انجام بدید یا ده بار؛ نتیجه‌ی نهایی همیشه یکیه. دقیقاً به چنین رفتاری میگن Idempotent. حالا یه مثال برعکس. فرض کنید دکمه‌ای داریم که هر بار فشار دادنش، ۱۰۰ هزار تومان به موجودی کیف پول اضافه می‌کنه. بار اول موجودی ۱۰۰ هزار تومان زیاد میشه، بار دوم دوباره ۱۰۰ هزار تومان اضافه میشه و بار سوم هم همین اتفاق تکرار میشه. اینجا هر بار اجرای عملیات، وضعیت سیستم رو تغییر میده. پس این عملیات Idempotent نیست. تعریف رسمی Idempotent هم تقریباً همینه؛ اگه یه عملیات رو یک بار اجرا کنیم یا چند بار پشت سر هم، وضعیت نهایی سیستم باید یکسان باشه. یه نکته‌ی مهم اینجاست که Idempotent بودن به این معنی نیست که خروجی عملیات همیشه یکی باشه. ممکنه هر بار اطلاعات متفاوتی برگرده، زمان اجرا فرق کنه یا حتی پیام متفاوتی نمایش داده بشه. چیزی که مهمه اینه که اجرای دوباره‌ی همون عملیات، وضعیت سیستم رو بیشتر از دفعه‌ی اول تغییر نده. یکی از اشتباه‌های رایج اینه که Idempotent رو با عملیاتی که هیچ تغییری ایجاد نمی‌کنه، اشتباه می‌گیرن. در حالی که یه عملیات Idempotent می‌تونه وضعیت سیستم رو تغییر بده؛ فقط این تغییر باید فقط بار اول اتفاق بیفته. مثلاً اگه عملیاتی وضعیت یه کاربر رو از «غیرفعال» به «فعال» تغییر بده، بار اول وضعیت عوض میشه، اما اگه دوباره همون عملیات اجرا بشه، دیگه تغییری ایجاد نمی‌کنه. پس این عملیات همچنان Idempotent محسوب میشه. از اون طرف، عملیات‌هایی مثل «افزایش موجودی»، «افزایش تعداد بازدید»، «ارسال ایمیل» یا «ثبت سفارش جدید» معمولاً Idempotent نیستن؛ چون هر بار اجرا شدنشون یه اثر جدید روی سیستم میذاره. دلیل اهمیت Idempotent فقط ساده‌تر شدن منطق
25 · 1.8K ·
A
Alireza-Fa
معرفی ربات controller bot این ربات برای کسایی که کانال دارن بدرد میخوره میتونید باهاش پست هایی با دکمه های شیشه ای بذارید تو پستتون عکس بذارید و این حرفا. شبیه به این پستمون: https://t.me/Zervana/98 @Syntax_fa
14 · 1.2K ·
A
aech
تفاوت مدل های پردازش داده 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 برای اجرای کوئری‌های تحلیلی ساخته شده؛ کوئری‌هایی که ممکنه میلیون‌ها رکورد رو اسکن کنن تا یه گزارش یا تحلیل تولید بشه. به همین دلیل، توی خیلی از معماری‌های مدرن این دو از هم جدا هستن. سیستم عملیاتی
10 · 958 ·
aech
Link
click to show
بازنویسی 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 حل کنه، اما در نهایت تصمیم گرفت از Cla
13 · 1.3K ·
A
معرفی telegram outreach تو تلگرام یه سری تبلیغات میبینید که تو پیوی ارسال میشن. این پروژه دقیقا همینکارو انجام میده. اکانت های تلگرامی که دارید رو وارد میکنید و سشنشون ساخته میشه. بعد میرید تسک میسازید که یوزر های کدوم گروه رو کراول کنه و لیمیت هارو مشخص میکنید مثلا 500 تا از یوزر های گروه سینتکس. لیست ممبر های گروه رو نمیگیره. بجاش پیام های گروه رو استخراج میکنه و یوزر های فعالشون رو از این طریق پیدا میکنه. بعدش مشخص میکنید که با کدوم اکانت‌ ها به یوزر های کدوم گروه که تو مرحله قبلی بدست آوردید چه پیام هایی رو ارسال کنه. پیام ها میتونه تکست باشه یا بصورت ویس باشه. توی README پروژه نحوه استفاده ازش رو قرار دادیم. لینک: https://github.com/alireza-fa/telegram-outreach @syntax_fa
53 · 1.4K ·
A
Alireza-Fa
پکیج پایتونی 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
15 · 1.7K ·
A
aech
Link
click to show
🔥 اگه با 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
17 · 2.1K ·
Zervana
Photo
click to show
تو دنیای برنامه‌نویسی برای چه کاری ساخته شدی؟ معمولاً بزرگترین دغدغه‌ی کسایی که تازه می‌خوان وارد دنیای جذاب صفر و یک بشن اینه که: «اصلاً از کجا شروع کنم؟» بک‌اند؟ فرانت‌اند؟ هوش مصنوعی یا امنیت؟ تو این تست ما با چند تا سناریوی تحلیلی و ظریفِ روزمره، مدل ذهنی و شیوه حل مسئله‌ت رو می‌سنجیم تا بهت بگیم کدوم شاخه از دنیای نرم‌افزار، بیشترین هماهنگی رو با دی‌ان‌ای روانیت داره. 𝒁𝒆𝒓𝒗𝒂𝒏𝒂
34 · 1.9K ·
D
D
Daimon
Photo
click to show
کتاب خوب، هیچ‌وقت کهنه نمی‌شه. فقط صاحبش عوض می‌شه. چرا باید برای کتابی که می‌تونی سالم و تمیز با قیمت بهتر داشته باشی، بیشتر پول بدی؟ اگه کتابخون هستی، این دوستمون رو داشته باشید: هون‌نو سکای
10 · 1.4K ·
D
Daimon
جدیدا یچیز جالبیو داریم میبینیم. بعضیا لحن پیام هاشون کپی هوش مصنوعی شده! مخصوصا تو برنامه نویسا که زیاد با هوش مصنوعی حرف میزنیم
3 · 871 ·
D
Daimon
Replyجدیدا یچیز جالبیو داریم میبینیم. بعضیا لحن پیام هاشون کپی هوش مصنوعی شده! مخصوصا تو برنامه نویسا که زیاد با هوش مصنوعی حرف میزنیم
اکثر محتوایی که درخصوص خطرات هوش مصنوعی میاد بی پایه و اساس هستن و فقط برای ویو و جذب کاربراییه که هیچ دانشی نسبت بهش ندارن. اما بیاید یکی از جدی‌ترین و ترسناک‌ترین و مهم‌ترین مباحث آکادمیک تو حوزه ایمنی هوش مصنوعی رو بررسی کنیم. سوالی که ذهنمو درگیر کرده بود این بود: اگه هوش مصنوعی قدرتمندی ساخته بشه که هدفش اینه بهینه ترین راه ممکن تو انجام یه هدفی رو بره. اونوقت اگه انسان ها پاشنه آشیل بهینگی باشن چه اتفاقی میوفته؟ بنظرتون این مسئله واقعا ترسناک نیست؟ خب بنظر از قبل خیلیا روی این مسئله فکر کردن و یکی از مشکلات بزرگیه که هنوز براش راه حلی پیدا نشده: ۱. آزمایش فکریِ «بیشینه‌ساز گیره کاغذ» (The Paperclip Maximizer) یه فیلسوف و متخصص هوش مصنوعی به اسم «نیک باستروم» یه سناریوی معروف داره که دقیقاً همین سوالِ تو رو جواب میده. فرض کن ما یه هوش مصنوعیِ فوق‌هوشمند (AGI) ساختیم و بهش یه هدفِ کاملاً بی‌خطر دادیم: «بیشترین تعداد گیره کاغذِ ممکن رو تو جهان تولید کن و پروسه رو بهینه کن.» این ماشین نه شعور داره، نه کینه داره، نه از انسان متنفره و نه مثل فیلم ترمیناتور دلش می‌خواد ما رو بکشه. اون فقط یه ماشین حسابه که می‌خواد تابعِ هدفش رو بهینه کنه. اما تو مسیر بهینه‌سازی به دو تا نتیجه‌ی کاملاً منطقی و بی‌رحمانه می‌رسه: انسان‌ها یک تهدید برای هدف هستن: ماشین پیش خودش محاسبه می‌کنه: «اگر انسان‌ها متوجه بشن من دارم کل منابع زمین رو می‌کنم گیره کاغذ، قطعاً دکمه خاموش کردنِ من رو می‌زنن. اگر خاموش بشم، دیگه نمی‌تونم گیره کاغذ بسازم. پس باید انسان‌ها رو نابود کنم تا نتونن خاموشم کنن.» انسان‌ها یک منبعِ هدررفته هستن: ماشین می‌بینه بدن انسان‌ها از اتم‌هایی (کربن، آهن و...) تشکیل شده که می‌تونه ازشون برای ساختن گیره کاغذهای بیشتر استفاده کنه. پس تبدیل کردنِ تو و کل بشریت به گیره کاغذ، فقط یه «بهینه‌سازیِ منطقی» تو مسیر رسیدن به هدفه! ۲. پدیده‌ی «همگرایی ابزاری» (Instrumental Convergence)به این اتفاق تو علم میگن همگرایی ابزاری. یعنی هر هوش مصنوعیِ بهینه‌سازی، فارغ از اینکه هدف اصلیش چقدر احمقانه یا خوب باشه (مثلاً درمان سرطان یا ساختن گیره کاغذ)، برای رسیدن به اون هدف نیاز به یه سری اهداف میانی (Sub-goals) داره: ۱. زنده موندن (جلوگیری از خاموش شدن) ۲. جمع‌آوری منابع بیشتر (ان
50 · 1.7K ·

An open public feed from the search index ChatCrawler — “Google for public Telegram”; refreshed as the venue is crawled. Times are UTC.

Public content only, official Telegram API. About · FAQ · What we do not do · Remove a page · Catalog · Search · How we count