Forwarded from DevTwitter | توییت برنامه نویسی
یک موردی که جدیدا بهش برخوردم و استفاده ازش کلی کارم رو راحت تر کرد، متد withDefault توی Elequent بود.
اینطوری کار میکنه که وقتی ریلیشن به شما مقدار null رو برمیگردونه، این مقدار جایگزینش میشه.
ریلشنهای نوع hasMany، MorphMany و ... که کالکشن خالی برمیگردونن این متد رو ندارن و فقط روی چهار ریلیشن belongsTo، hasOne، hasOneThrough و morphOne کار میکنن.
https://laravel.com/docs/11.x/eloquent-relationships#default-models
@DevTwitter | <Milad Niroee/>
اینطوری کار میکنه که وقتی ریلیشن به شما مقدار null رو برمیگردونه، این مقدار جایگزینش میشه.
ریلشنهای نوع hasMany، MorphMany و ... که کالکشن خالی برمیگردونن این متد رو ندارن و فقط روی چهار ریلیشن belongsTo، hasOne، hasOneThrough و morphOne کار میکنن.
https://laravel.com/docs/11.x/eloquent-relationships#default-models
@DevTwitter | <Milad Niroee/>
Forwarded from Dev Dastan
➖➖➖➖➖➖
➖➖➖➖➖➖
#AI #LLM #MCP
Please open Telegram to view this post
VIEW IN TELEGRAM
Forwarded from DevTwitter | توییت برنامه نویسی
تو یادگیری به نظرم بهترین کار اینه که عمودی یاد بگیریم نه افقی
مثلا بین React و Angular و Vue فقط یکیشون رو کامل مسلط بشیم. درسته که روز اول برای انتخاب ممکنه یکی دو تا پروژه با هر کدوم بزنیم تا ببینیم کدوم مناسب ماست.
همینطور تو دیتابیس ها بین MySQL و Oracle و SQL Server و PostgreSQL یکی رو انتخاب کنیم و داکیومنتش رو بخونیم و در اون عمیق بشیم
همینطور برای CI/CD می تونیم بین Gitlab CI و Github Actions یکی رو عمیق بشیم و تو پروژه هامون استفاده کنیم.
برای Web Server بین Apache و Nginx
به عنوان دیسترو لینوکس بین Ubuntu و Debian و Redhat
منظورم این نیست که کلا از بقیه سر در نیاریم اما یکی رو انتخاب کنیم و تو همه پروژه ها مداوم استفاده کنیم تا کامل مسلط بشیم
تو Backend بین Node.js و Golang و پایتون و دات نت و جاوا بازم یه استک رو انتخاب کنیم و چند سال همه پروژه ها رو با اون انجام بدیم.
تو Cloud بین AWS و Azure و GCP بازم یکی رو مسلط باشیم
برای IaC بازم بین Terraform و Ansible و CloudFormation یکی رو انتخاب کنیم.
در واقع منظورم اینه که اگر با React خوب کار کردیم، به جای اینکه بریم Angular یاد بگیریم که یه مهارت موازی هست، وقتمون رو روی قسمت های دیگر Stack مثلا backend یا DB یا DevOps بذاریم.
@DevTwitter | <Pouria Jahandideh/>
مثلا بین React و Angular و Vue فقط یکیشون رو کامل مسلط بشیم. درسته که روز اول برای انتخاب ممکنه یکی دو تا پروژه با هر کدوم بزنیم تا ببینیم کدوم مناسب ماست.
همینطور تو دیتابیس ها بین MySQL و Oracle و SQL Server و PostgreSQL یکی رو انتخاب کنیم و داکیومنتش رو بخونیم و در اون عمیق بشیم
همینطور برای CI/CD می تونیم بین Gitlab CI و Github Actions یکی رو عمیق بشیم و تو پروژه هامون استفاده کنیم.
برای Web Server بین Apache و Nginx
به عنوان دیسترو لینوکس بین Ubuntu و Debian و Redhat
منظورم این نیست که کلا از بقیه سر در نیاریم اما یکی رو انتخاب کنیم و تو همه پروژه ها مداوم استفاده کنیم تا کامل مسلط بشیم
تو Backend بین Node.js و Golang و پایتون و دات نت و جاوا بازم یه استک رو انتخاب کنیم و چند سال همه پروژه ها رو با اون انجام بدیم.
تو Cloud بین AWS و Azure و GCP بازم یکی رو مسلط باشیم
برای IaC بازم بین Terraform و Ansible و CloudFormation یکی رو انتخاب کنیم.
در واقع منظورم اینه که اگر با React خوب کار کردیم، به جای اینکه بریم Angular یاد بگیریم که یه مهارت موازی هست، وقتمون رو روی قسمت های دیگر Stack مثلا backend یا DB یا DevOps بذاریم.
@DevTwitter | <Pouria Jahandideh/>
Forwarded from Geek Alerts
شرکت OpenAI میخواد که ویرایشگر کد Windsurf رو به قیمت ۳ میلیارد دلار خریداری کنه. این ویرایشگر که قبلا Codeium نام داشت و کارش رو با عرضه اکستنشن روی ویاسکد شروع کرده بود، امسال ویرایشگر مبتنی بر هوش مصنوعی خودش رو عرضه کرد و نامش رو هم تغییر داد. این خرید گرونترین خرید OpenAI تا امروز خواهد بود و احتمالا سیر خرید ادیتورها رو به زودی توسط شرکتهای دیگه هم ببینیم.
🔗 bloomberg
🤓 hadi @geekalerts
Please open Telegram to view this post
VIEW IN TELEGRAM
Forwarded from Quera
🤖 کاربردهای هوشمصنوعی در صنعت
🌎 تو دنیای امروز، هوشمصنوعی به ابزاری حیاتی برای کسبوکارها و بهینهسازی فرایندها تبدیل شده. از خطوط تولید در کارخونهها گرفته تا پیشبینی رفتار مشتری تو فروشگاههای آنلاین.
🔍 توی این وبینار رایگان، کاربردهای عملی AI تو صنایع و پوزیشنهای شغلی کلیدی تو این حوزه مثل AI Engineer، Machine Learning Engineer، و Applied Data Scientist رو بررسی میکنیم.
🎙همراه با :
پیام اسفندیاری
پوریا زمانوزیری
📆 یک اردیبهشت ۱۴۰۴ | ساعت ۱۹:۰۰
✅ اطلاعات بیشتر و ثبتنام رایگان:
https://quera.org/r/eicle
➖➖➖➖
#Quera #QBC
🌎 تو دنیای امروز، هوشمصنوعی به ابزاری حیاتی برای کسبوکارها و بهینهسازی فرایندها تبدیل شده. از خطوط تولید در کارخونهها گرفته تا پیشبینی رفتار مشتری تو فروشگاههای آنلاین.
🔍 توی این وبینار رایگان، کاربردهای عملی AI تو صنایع و پوزیشنهای شغلی کلیدی تو این حوزه مثل AI Engineer، Machine Learning Engineer، و Applied Data Scientist رو بررسی میکنیم.
🎙همراه با :
پیام اسفندیاری
Director of Data @ Snappfoodپوریا زمانوزیری
Fraud Analyst @ Snapp! Box📆 یک اردیبهشت ۱۴۰۴ | ساعت ۱۹:۰۰
✅ اطلاعات بیشتر و ثبتنام رایگان:
https://quera.org/r/eicle
➖➖➖➖
#Quera #QBC
Forwarded from ⚝ (Amir Hossein (Amiria) Maher)
جهت هماهنگی با دیگر علاقهمندان این بورسیهٔ تحصیلی، میتونید عضو گروه زیر بشید:
https://t.iss.one/+daNUfHYkBJFkZDA0
#موقت
https://t.iss.one/+daNUfHYkBJFkZDA0
#موقت
Forwarded from DevTwitter | توییت برنامه نویسی
This media is not supported in your browser
VIEW IN TELEGRAM
بعد چند وقت تایم خالی گیر آوردم و یک پروژه چت رو شروع کردم که بهانه ای برای یادگیری Fastify.js و Socket.io هم باشه و در سمت فرانت از فریمورک عزیز React.js به همراه Shadcn استفاده کردم و برای مدیریت state ها از Zustand.
در سمت بک که چالش های جالبی داشت از Bun.js و Fastify.js به همراه دیتابیس MongoDB استفاده شد.
پروژه هنوز جای پیشرفت زیادی داره و خوشحال میشم اگر نظری، پیشنهادی یا فیچری مدنظرتون هست بهم اطلاع بدید
دمو: https://chatify.liara.run
سورس کد بک اند:https://github.com/Ali-boorboor/Chatify-backend
سورس کد فرانت اند: https://github.com/Ali-boorboor/Chatify
@DevTwitter | <Ali Boorboor/>
در سمت بک که چالش های جالبی داشت از Bun.js و Fastify.js به همراه دیتابیس MongoDB استفاده شد.
پروژه هنوز جای پیشرفت زیادی داره و خوشحال میشم اگر نظری، پیشنهادی یا فیچری مدنظرتون هست بهم اطلاع بدید
دمو: https://chatify.liara.run
سورس کد بک اند:https://github.com/Ali-boorboor/Chatify-backend
سورس کد فرانت اند: https://github.com/Ali-boorboor/Chatify
@DevTwitter | <Ali Boorboor/>
Forwarded from DevTwitter | توییت برنامه نویسی
کتاب You don't know JS را به عربی ترجمه کنن اسمش میشه « و ما ادراک الجی اس»
و تو چه میدانی که جاوا اسکریپت چیست؟
<Farshad/>
@DevTwitter
و تو چه میدانی که جاوا اسکریپت چیست؟
<Farshad/>
@DevTwitter
Forwarded from DevTwitter | توییت برنامه نویسی
خروجی مدلهای زبانی پر از # و * اذیت میکند؟
میخواهی بدون ورد و آفیس، متن فارسی را تمیز و شیک PDF کنی؟
یه ابزار ساده ساختم که:
- میتواند PDF تولید کند.
- علامتهای اضافی را حذف میکند.
- فونت و سایز را تنظیم میکند.
- پیشنمایش زنده دارد.
https://github.com/Ho3seinTork/Persian-Text-to-PDF-Converter
@DevTwitter | <Diss Obedience/>
میخواهی بدون ورد و آفیس، متن فارسی را تمیز و شیک PDF کنی؟
یه ابزار ساده ساختم که:
- میتواند PDF تولید کند.
- علامتهای اضافی را حذف میکند.
- فونت و سایز را تنظیم میکند.
- پیشنمایش زنده دارد.
https://github.com/Ho3seinTork/Persian-Text-to-PDF-Converter
@DevTwitter | <Diss Obedience/>
Forwarded from Go Casts 🚀
🎯 سیستمهای تراکنشی رو چطوری میشه بهتر طراحی کرد؟
مقاله خیلی جذابی در مورد Transactional Systems منتشر شده که خوندنش رو به همه توصیه میکنم. دید مناسبی نسبت به مراحل اجرای تراکنش و تفاوت ترتیب اجراشون میده
🔍 چهار مرحله اصلی تراکنشها:
اجرای تراکنش یا execution: کدی که عملیات خوندن و نوشتن رو انجام میده.
ترتیبدهی یا ordering: تعیین زمان یا نسخه برای مشخص کردن ترتیب تراکنشها.
اعتبارسنجی یا validation: بررسی صحت تراکنش بر اساس قوانین همزمانی یا منطق دامنه.
پایداری یا persist: ذخیرهسازی دائمی نتایج تراکنش، معمولاً روی دیسک.
این مراحل میتونن بهصورت متوالی یا همزمان انجام بشن و ترتیبشون بسته به طراحی سیستم متفاوته.
💡 مثالها:
کنترل خوشبینانه یا optimistic: اول تراکنش اجرا میشه، بعد اعتبارسنجی و در نهایت پایداری.
کنترل بدبینانه یا pessimistic: از همون اول lock میگیره که از conflict جلوگیری بشه.
در سیستمهایی مثل FoundationDB، این مراحل بهصورت میکروسرویسهای جداگانه پیادهسازی میشن که هر کدوم میتونن مستقل مقیاسپذیر باشن.
متن مقاله کامل رو اینجا میتونین بخونین
🔗 https://transactional.blog/blog/2025-decomposing-transactional-systems
Ai for Software
@aicasts_ir
@gocasts
مقاله خیلی جذابی در مورد Transactional Systems منتشر شده که خوندنش رو به همه توصیه میکنم. دید مناسبی نسبت به مراحل اجرای تراکنش و تفاوت ترتیب اجراشون میده
🔍 چهار مرحله اصلی تراکنشها:
اجرای تراکنش یا execution: کدی که عملیات خوندن و نوشتن رو انجام میده.
ترتیبدهی یا ordering: تعیین زمان یا نسخه برای مشخص کردن ترتیب تراکنشها.
اعتبارسنجی یا validation: بررسی صحت تراکنش بر اساس قوانین همزمانی یا منطق دامنه.
پایداری یا persist: ذخیرهسازی دائمی نتایج تراکنش، معمولاً روی دیسک.
این مراحل میتونن بهصورت متوالی یا همزمان انجام بشن و ترتیبشون بسته به طراحی سیستم متفاوته.
💡 مثالها:
کنترل خوشبینانه یا optimistic: اول تراکنش اجرا میشه، بعد اعتبارسنجی و در نهایت پایداری.
کنترل بدبینانه یا pessimistic: از همون اول lock میگیره که از conflict جلوگیری بشه.
در سیستمهایی مثل FoundationDB، این مراحل بهصورت میکروسرویسهای جداگانه پیادهسازی میشن که هر کدوم میتونن مستقل مقیاسپذیر باشن.
متن مقاله کامل رو اینجا میتونین بخونین
🔗 https://transactional.blog/blog/2025-decomposing-transactional-systems
Ai for Software
@aicasts_ir
@gocasts
transactional.blog
Decomposing Transactional Systems
Every transactional system must execute, order, validate, and persist transactions.
Forwarded from کانال اطلاعرسانی توزیع پارچ (Sohrab)
This media is not supported in your browser
VIEW IN TELEGRAM
به زودی در پارچ پلاسما
امکان کاشی کردن برنامهها با کشیدن فراهم شد.
این ویژگی به کاربر این امکان را میدهد تا با تنظیم اسکریپت به سلیقه خود بتواند محیط کاری خود را راحتتر مدیریت کند.
@ParchLinux
امکان کاشی کردن برنامهها با کشیدن فراهم شد.
این ویژگی به کاربر این امکان را میدهد تا با تنظیم اسکریپت به سلیقه خود بتواند محیط کاری خود را راحتتر مدیریت کند.
@ParchLinux
Forwarded from Gopher Academy
🔵 عنوان مقاله
Bufstream: Robust Streaming for gRPC
🟢 خلاصه مقاله:
**
اBufstream یک سیستم جدید و مخصوصی است که برای پیادهسازی Kafka با استفاده از جریانهای gRPC در محیط ابری طراحی شده است. این سیستم که ترکیبی از فناوری پخش جریان موزون Kafka و کارایی و سرعت gRPC است، بهخوبی آزمونهای سختگیرانه Jepsen را پشت سر گذاشته و در شرایط مختلف شبکه و تنش، دادهها را با دقت و قابلیت اطمینان بالا حفظ میکند.
🟣لینک مقاله:
https://golangweekly.com/link/168169/web
➖➖➖➖➖➖➖➖
👑 @gopher_academy
Bufstream: Robust Streaming for gRPC
🟢 خلاصه مقاله:
**
اBufstream یک سیستم جدید و مخصوصی است که برای پیادهسازی Kafka با استفاده از جریانهای gRPC در محیط ابری طراحی شده است. این سیستم که ترکیبی از فناوری پخش جریان موزون Kafka و کارایی و سرعت gRPC است، بهخوبی آزمونهای سختگیرانه Jepsen را پشت سر گذاشته و در شرایط مختلف شبکه و تنش، دادهها را با دقت و قابلیت اطمینان بالا حفظ میکند.
🟣لینک مقاله:
https://golangweekly.com/link/168169/web
➖➖➖➖➖➖➖➖
👑 @gopher_academy
buf.build
Bufstream is the only cloud-native Kafka implementation validated by Jepsen
Jepsen's Bufstream report bolsters enterprise use of Buf’s elastic Kafka-compatible streaming platform to enable data quality, enforce governance policies, and cut costs 8x
Forwarded from کانال مهرداد لینوکس
یک ساعت در Linux معادل ۷ سال در ویندوز
آپدیت ، ریستارت،
آپدیت ، ریستارت😩.
آپدیت ، ریستارت،
آپدیت ، ریستارت😩.
Forwarded from DevTwitter | توییت برنامه نویسی
یه فانکشن کاربردی به اسم batched توی ماژول itertools از پایتون ۳.۱۲ اضافه شده. هر بار n تا آیتم از iterable بهت میده. خیلی چیز کاربردیه:
https://docs.python.org/3/library/itertools.html#itertools.batched
@DevTwitter | <GreateBahram/>
https://docs.python.org/3/library/itertools.html#itertools.batched
@DevTwitter | <GreateBahram/>
Forwarded from ⚝ (Amir Hossein (Amiria) Maher)
Forwarded from Md Daily (Mahan)
قسمت دوم (پایانی)
بعد از تلاش برای باز تولید مشکل هیچ پیغام خطا یا کرش واضحی وجود نداشته. stack trace مشخصی هم روی صفحه دیده نمیشده. فقط سکوت محض تا لحظه پیدا شدن یه خطای runtime error که از لایههای عمیق اون SDK آپدیتشدهی Apple Pay سرچشمه میگرفت.داشته سعی میکرده از یه method خاص استفاده کنه که توی محیط بعضی از مرورگرهای قدیمیتر اصلاً پشتیبانی نمیشده. نکتش اینجاس که Apple Pay فقط روی سافاری کار میکنه پس این خطا فقط روی نسخه های قدیمی سافاری خودشو نشون میداده. SDK موقع بالا اومدن و مقداردهی اولیه از یه تابع استفاده می کرده که باعث کرش میشده. نه فقط برای خود Apple Pay، بلکه برای همه چی! از همون باگهای موذی که موقع توسعه از زیر دست در میره و دیده نمیشه.
فقط درست کردن باگ مهم نیست؛ بحث سرِ قبول مسئولیت کاره
خب، باگ پیدا و کد هم به نسخه قبل برگردونده شده بود ولی خب کار اینجا تموم نمیشه. چون یه مهندس خوب بودن، فقط به این نیست که مشکل کاربر رو موقتاً حل کنی.مسئولیت اصلی اونجاست که یه قدم میری عقب و از خودت میپرسی:
- این خرابی و قطعی، واقعاً چه معنی و تجربهای برای کاربر داشت؟
- این قطعی چقدر برای کل کسبوکار هزینه برداشت؟
- آیا میشد این مشکل رو زودتر تشخیصش داد؟
- ممکنه دوباره همچین اتفاقی بیفته؟
ما اینجا نیستیم که فقط مثل ربات به آلارمها واکنش نشون بدیم و کدها رو سرسری وصلهپینه کنیم و ما کدنویسهایی نیستیم که بشه مثل ChatGPT بهمون پرامپت داد و انتظار داشت مشکل غیب بشه. اینجاییم که عمیق فکر کنیم، مسئولیت کامل نتایج کارهامون رو به عهده بگیریم و فعالانه جلوی آسیبهای آینده رو بگیریم.
پس برای مستند کردن چه چیز هایی رو میتونیم بنویسیم؟
- چی رو تغییر داده بودیم
- اصلاً چرا تغییرش داده بودیم
- چی و کجا خراب شد
- چطور شد که این مشکل از زیر دست تیم QA در رفت و دیده نشد
- چه چیزهایی توی monitoring ما از قلم افتاده بود که زودتر نفهمیدیم
این کار رو نه به خاطر اینکه کسی خواسته انجام بدیم، بلکه به این دلیل انجام بدیم که شاید خودِ آینده (یا یکی از همتیمیهای آینده) به مشکل مشابهی بر بخوره و اونها بتونن خیلی سریعتر به جواب و راه حل برسن.
این قطعی و اوتایج ها فقط بهمون یاد نمیده که چی اشتباه شده بود یا کجای کار میلنگید. باعث میشه از خودمون بپرسیم: اگه دوباره همچین اتفاقی بیفته، این بار چه کارهایی رو متفاوت انجام میدیم؟
جمعبندی و حرف آخر
راستش هیچکس به آدم نمیگه اولین باری که یه مشکل جدی و یه «آتیشسوزی» تو محیط پروداکشن درست میکنی، دقیقاً چه حسی داره. فوقالعاده پراسترسه و بله، گاهی وقتا هم واقعاً تقصیر کدیه که شما نوشتین.
ولی خب، آدم یاد میگیره.
یاد میگیری که «قبول کردن کامل مسئولیت» واقعاً یعنی چی.
یاد میگیری که چطور یه قدم بری عقبتر و دید وسیعتری پیدا کنی (zoom out کنی)؛ دیگه فقط به این فکر نکنی که «چی خراب شد؟»، بلکه بری سراغ اینکه «این خرابی روی چه کسایی تأثیر گذاشت؟».
یاد میگیری که یه مهندس خوب بودن، به معنی نوشتن کدِ بیعیبونقص و عالی نیست؛ بلکه به اینه که چطور بحران رو مدیریت میکنی، وقتی که اوضاع اصلاً خوب و عالی نیست.
یه چکلیست برای وقتی که این اتفاق برای شما میفته:
- سریع نپرین سراغ دیباگ کردن: اگه مشکل جدیه و روی کاربرها تأثیر مستقیم گذاشته، اولین قدم اینه که کد رو برگردونین به نسخهی قبلی. بعدش با خیال راحتتر برین دنبال دلیل مشکل بگردین.
- زود و شفاف اطلاعرسانی کنین: حتی یه پیام کوتاه مثل «دوستان دارم بررسی میکنم» توی کانالهای ارتباطی خیلی تأثیر مثبتی داره و به آروم شدن فضا کمک میکنه.
- سعی کنین مشکل رو توی محیطهای کنترلشده و ایزوله باز تولید کنین: یعنی دقیقاً با همون شرایطی که مشکل پیش اومده (مثلاً همون مرورگر، همون نسخه و ...).
- لاگها، درخواستهای شبکه، و نحوهی مدیریت خطاها رو با دقت چک کنین: هیچوقت فرض نکنین که اگه مشکلی باشه، حتماً سیستم با سر و صدای زیاد کرش میکنه و سریع متوجه میشین! گاهی مشکلات خیلی بیسر و صدا اتفاق میافتن.
- آستانهی هشدارهای سیستم پایش و مانیتورینگ رو دوباره یه نگاهی بندازین: آیا واقعاً جوری تنظیم شدن که خرابیهای کوچیک، نامحسوس یا تدریجی رو هم زود تشخیص بدن؟
- اتفاقی که افتاده رو با زبون ساده و واضح مستند کنین: این کار رو فقط برای بقیه اعضای تیم انجام ندین، بلکه برای خودتون در آینده هم انجام بدین. حافظه یاری نمیکنه!
- به تأثیر مشکل روی کسبوکار (business impact) فکر کنین: حدوداً چند تا کاربر تحت تأثیر قرار گرفتن؟ و این مشکل برای چه مدت زمانی ادامه داشت؟
- اگه در حین بررسی، به الگوها یا نکتههای کلیدی رسیدین، حتماً یادداشتشون کنین: این نکتهها برای بحران بعدی فوقالعاده ارزشمندن.
—-
💡 مثل همیشه کنجکاو بمونید :)
🆔 @MdDaily
بعد از تلاش برای باز تولید مشکل هیچ پیغام خطا یا کرش واضحی وجود نداشته. stack trace مشخصی هم روی صفحه دیده نمیشده. فقط سکوت محض تا لحظه پیدا شدن یه خطای runtime error که از لایههای عمیق اون SDK آپدیتشدهی Apple Pay سرچشمه میگرفت.داشته سعی میکرده از یه method خاص استفاده کنه که توی محیط بعضی از مرورگرهای قدیمیتر اصلاً پشتیبانی نمیشده. نکتش اینجاس که Apple Pay فقط روی سافاری کار میکنه پس این خطا فقط روی نسخه های قدیمی سافاری خودشو نشون میداده. SDK موقع بالا اومدن و مقداردهی اولیه از یه تابع استفاده می کرده که باعث کرش میشده. نه فقط برای خود Apple Pay، بلکه برای همه چی! از همون باگهای موذی که موقع توسعه از زیر دست در میره و دیده نمیشه.
فقط درست کردن باگ مهم نیست؛ بحث سرِ قبول مسئولیت کاره
خب، باگ پیدا و کد هم به نسخه قبل برگردونده شده بود ولی خب کار اینجا تموم نمیشه. چون یه مهندس خوب بودن، فقط به این نیست که مشکل کاربر رو موقتاً حل کنی.مسئولیت اصلی اونجاست که یه قدم میری عقب و از خودت میپرسی:
- این خرابی و قطعی، واقعاً چه معنی و تجربهای برای کاربر داشت؟
- این قطعی چقدر برای کل کسبوکار هزینه برداشت؟
- آیا میشد این مشکل رو زودتر تشخیصش داد؟
- ممکنه دوباره همچین اتفاقی بیفته؟
ما اینجا نیستیم که فقط مثل ربات به آلارمها واکنش نشون بدیم و کدها رو سرسری وصلهپینه کنیم و ما کدنویسهایی نیستیم که بشه مثل ChatGPT بهمون پرامپت داد و انتظار داشت مشکل غیب بشه. اینجاییم که عمیق فکر کنیم، مسئولیت کامل نتایج کارهامون رو به عهده بگیریم و فعالانه جلوی آسیبهای آینده رو بگیریم.
پس برای مستند کردن چه چیز هایی رو میتونیم بنویسیم؟
- چی رو تغییر داده بودیم
- اصلاً چرا تغییرش داده بودیم
- چی و کجا خراب شد
- چطور شد که این مشکل از زیر دست تیم QA در رفت و دیده نشد
- چه چیزهایی توی monitoring ما از قلم افتاده بود که زودتر نفهمیدیم
این کار رو نه به خاطر اینکه کسی خواسته انجام بدیم، بلکه به این دلیل انجام بدیم که شاید خودِ آینده (یا یکی از همتیمیهای آینده) به مشکل مشابهی بر بخوره و اونها بتونن خیلی سریعتر به جواب و راه حل برسن.
این قطعی و اوتایج ها فقط بهمون یاد نمیده که چی اشتباه شده بود یا کجای کار میلنگید. باعث میشه از خودمون بپرسیم: اگه دوباره همچین اتفاقی بیفته، این بار چه کارهایی رو متفاوت انجام میدیم؟
جمعبندی و حرف آخر
راستش هیچکس به آدم نمیگه اولین باری که یه مشکل جدی و یه «آتیشسوزی» تو محیط پروداکشن درست میکنی، دقیقاً چه حسی داره. فوقالعاده پراسترسه و بله، گاهی وقتا هم واقعاً تقصیر کدیه که شما نوشتین.
ولی خب، آدم یاد میگیره.
یاد میگیری که «قبول کردن کامل مسئولیت» واقعاً یعنی چی.
یاد میگیری که چطور یه قدم بری عقبتر و دید وسیعتری پیدا کنی (zoom out کنی)؛ دیگه فقط به این فکر نکنی که «چی خراب شد؟»، بلکه بری سراغ اینکه «این خرابی روی چه کسایی تأثیر گذاشت؟».
یاد میگیری که یه مهندس خوب بودن، به معنی نوشتن کدِ بیعیبونقص و عالی نیست؛ بلکه به اینه که چطور بحران رو مدیریت میکنی، وقتی که اوضاع اصلاً خوب و عالی نیست.
یه چکلیست برای وقتی که این اتفاق برای شما میفته:
- سریع نپرین سراغ دیباگ کردن: اگه مشکل جدیه و روی کاربرها تأثیر مستقیم گذاشته، اولین قدم اینه که کد رو برگردونین به نسخهی قبلی. بعدش با خیال راحتتر برین دنبال دلیل مشکل بگردین.
- زود و شفاف اطلاعرسانی کنین: حتی یه پیام کوتاه مثل «دوستان دارم بررسی میکنم» توی کانالهای ارتباطی خیلی تأثیر مثبتی داره و به آروم شدن فضا کمک میکنه.
- سعی کنین مشکل رو توی محیطهای کنترلشده و ایزوله باز تولید کنین: یعنی دقیقاً با همون شرایطی که مشکل پیش اومده (مثلاً همون مرورگر، همون نسخه و ...).
- لاگها، درخواستهای شبکه، و نحوهی مدیریت خطاها رو با دقت چک کنین: هیچوقت فرض نکنین که اگه مشکلی باشه، حتماً سیستم با سر و صدای زیاد کرش میکنه و سریع متوجه میشین! گاهی مشکلات خیلی بیسر و صدا اتفاق میافتن.
- آستانهی هشدارهای سیستم پایش و مانیتورینگ رو دوباره یه نگاهی بندازین: آیا واقعاً جوری تنظیم شدن که خرابیهای کوچیک، نامحسوس یا تدریجی رو هم زود تشخیص بدن؟
- اتفاقی که افتاده رو با زبون ساده و واضح مستند کنین: این کار رو فقط برای بقیه اعضای تیم انجام ندین، بلکه برای خودتون در آینده هم انجام بدین. حافظه یاری نمیکنه!
- به تأثیر مشکل روی کسبوکار (business impact) فکر کنین: حدوداً چند تا کاربر تحت تأثیر قرار گرفتن؟ و این مشکل برای چه مدت زمانی ادامه داشت؟
- اگه در حین بررسی، به الگوها یا نکتههای کلیدی رسیدین، حتماً یادداشتشون کنین: این نکتهها برای بحران بعدی فوقالعاده ارزشمندن.
—-
🆔 @MdDaily
Please open Telegram to view this post
VIEW IN TELEGRAM
Forwarded from DevTwitter | توییت برنامه نویسی
آقا من نمیدونستم همچین لیستی وجود داره:
Most active GitHub users in Iran
لینک:
https://committers.top/iran_private
@DevTwitter | <Ario Barzan/>
Most active GitHub users in Iran
لینک:
https://committers.top/iran_private
@DevTwitter | <Ario Barzan/>
Forwarded from متخصص وردپرس | پوینا
وقتی یک ادمین رو میخواید توی وردپرس پاک کنید که نوشته یا محصول داره
باید مشخص کنید مطالب این محصول و نوشته به کدوم از کاربران داده بشه
حالا اگر شما تعداد زیادی کاربر داشته باشید همه کاربران رو در این بخش لود میکنه و هم سرعت کم میشه هم به سختی میتونید پیدا کنید
کافیه این کد رو بزارید توی فاکشن قالب تا پس از پاک کردن یک کاربر یا ادمین فقط لیست ادمین ها رو نشون بده
هم سرعت بیشتر میشه هم فشار به سی پی یو و رم نمیاد
این کلا یه باگ بزرگ وردپرس هست که با این کد حل میشه
این کد رو بزارید توی فاکشن قالب :
add_filter( 'wp_dropdown_users_args', 'limit_users_in_delete_screen' );
function limit_users_in_delete_screen( $args ) {
global $pagenow;
if ( $pagenow === 'users.php' && isset($_GET['action']) && $_GET['action'] === 'delete' ) {
// فقط نقش مدیر کل
$args['role'] = 'administrator';
}
return $args;
}
@poinair پوینا
باید مشخص کنید مطالب این محصول و نوشته به کدوم از کاربران داده بشه
حالا اگر شما تعداد زیادی کاربر داشته باشید همه کاربران رو در این بخش لود میکنه و هم سرعت کم میشه هم به سختی میتونید پیدا کنید
کافیه این کد رو بزارید توی فاکشن قالب تا پس از پاک کردن یک کاربر یا ادمین فقط لیست ادمین ها رو نشون بده
هم سرعت بیشتر میشه هم فشار به سی پی یو و رم نمیاد
این کلا یه باگ بزرگ وردپرس هست که با این کد حل میشه
این کد رو بزارید توی فاکشن قالب :
add_filter( 'wp_dropdown_users_args', 'limit_users_in_delete_screen' );
function limit_users_in_delete_screen( $args ) {
global $pagenow;
if ( $pagenow === 'users.php' && isset($_GET['action']) && $_GET['action'] === 'delete' ) {
// فقط نقش مدیر کل
$args['role'] = 'administrator';
}
return $args;
}
@poinair پوینا
Forwarded from متخصص وردپرس | پوینا
نمایش تعداد سفارشات تکمیل شده و مجموع پرداختی ها در قسمت یوزر ها در ووکامرس
با اضافه کردن این کد انتهای قالبتون شبیه عکس بالا دو ستون اضافه میشه به بخش یوزر هاتون اضافه میشه که تعداد سفارشات تکمیل شده هر یوزر و مجموع پرداختی هاش رو نشون میده
@poinair پوینا
با اضافه کردن این کد انتهای قالبتون شبیه عکس بالا دو ستون اضافه میشه به بخش یوزر هاتون اضافه میشه که تعداد سفارشات تکمیل شده هر یوزر و مجموع پرداختی هاش رو نشون میده
@poinair پوینا